#ifndef __ECOMPLEX__
#define __ECOMPLEX__
這個程式主要包括複數的以下運算翻譯社
至於公式怎麼來的不知道..
請翻翻課本吧 ...
/*===================================
// 函數名稱:complex_exp
// 功能描寫:求複數指數
// 參數申明:a(已知數)
// c(較量爭論成效), c=exp^a
// 返回值: 0(失敗), 1(成功)
=================================== */
int complex_exp(ecomplex a,
ecomplex *c);
/*===================================
// 函數名稱:complex_sin
// 功能描寫:求複數正弦
// 參數說明:a(輸入角度)
// c(計較成效), c=sin(a)
// 返回值: 0(失敗), 1(成功)
=================================== */
int complex_sin(ecomplex a翻譯社
ecomplex *c);
/*===================================
// 函數名稱:complex_nroot
// 功能描寫:求複數 n 次方根
// 參數申明:a(已知數)
// n(n次方根)
// c(計算結果)
// 返回值: 0(失敗), 1(成功)
=================================== */
int complex_nroot(ecomplex a,
int n,
ecomplex *c)
{
if(c==NULL) return 0;
double An1 = pow( sqrt(a.real* a.real + a.img* a.img)翻譯社 1.0/n);
double sita = atan(a.img / a.real);
double nsita = 0.0;
for(int i=0; i<n; i++){
c[i].real = An1 * cos( (2.0*i*PI + sita)/(double)(n));
c[i].img = An1 * sin( (2.0*i*PI + sita)/(double)(n));
}
return 1;
}
/*===================================
// 函數名稱:complex_add
// 功能描述:複數相加
// 返回值: 0(失敗)翻譯社 1(成功)
=================================== */
int complex_add(ecomplex a,
ecomplex b,
ecomplex *result)
{
if(result==NULL) return 0;
// ====================================
// Filename: ecomplex.cpp
// Author : Edison.Shih.
// mail : crowyao@hotmail.com
// Date : 2010.3.18
// ====================================
/*===================================
// 函數名稱:complex_ln
// 功能描寫:求複數對數
// 參數申明:a(已知數)
// c(計算成績)翻譯社 c=ln(a)
// 返回值: 0(失敗)翻譯社 1(成功)
=================================== */
int complex_ln(ecomplex a,
ecomplex *c);
[C語言數值闡明] 複數運算 - 推導與程式碼
請將換 ie 之外瀏覽器 (如 FireFox),用 IE 開 IE 會當。
1. 四則運算 - 簡單的加減乘除,
(1) 乘法 -> c = a * b,
c.real = a.real * b. real - a.img * b.img
c.img = a.img * b.real + a.real * b.img
(2) 除法 -> c = a/b翻譯社
c = product(a翻譯社 b) / (b.real^2 + b.img^2)
2. pow 幕次運算
c = a^n, 其中 n 為整數
令 A = sqrt(a.real^2 + a.img^2), sita = arctan(a.img/a.real),
c.real = A^n * cos(n*sita)
c.img = A^n * sin(n*sita)
3. pow(1/n) n次方根運算
c = a^(1/n) , 其中 n 為整數
令 A = sqrt(a.real^2 + a.img^2)翻譯社 sita = arctan(a.img/a.real),
c.real = A^(1/n) * cos( (2k*PI + sita)/n ),
c.img = A^(1/n) * sin( (2k*PI + sita)/n )翻譯社
k = 0, 1, 2, .....翻譯社 n-1
4. exp 指數運算
c = exp(a)
c.real = exp(a.real) * cos(a.real)
c.img = exp(a.real) * sin(a.img)
5. ln 對數運算
c = ln(a)
令 A = sqrt(a.real^2 + a.img^2), sita = arctan(a.img/a.real)翻譯社
c.real = ln(A),
c.img = sita
6. sin 正弦運算
c = sin(a)
c.real = 0.5 * sin(a.real) * ( exp(a.img) + exp(-a.img) )
c.img = 0.5 * cos(a.real) * ( exp(a.img) - exp(-a.img) )
7. cos 餘弦運算
c = cos(a)
c.real = 0.5 * cos(a.real) * ( exp(a.img) + exp(-a.img) )
c.img = 0.5 * sin(a.real) * ( exp(a.img) - exp(-a.img) )
/*===================================
// 函數名稱:complex_div
// 功能描述:複數相除翻譯社 a/b
// 返回值: 0(失敗), 1(成功)
=================================== */
int complex_div(ecomplex a,
ecomplex b,
ecomplex *result)
{
if(result==NULL) return 0;
double p = b.real*b.real + b.img*b.img;
complex_mul(a翻譯社 b, result);
result->real = result->real / p;
result->img = result->img / p;
return 1;
}
result->img = a.img + b.img;
result->real = a.real + b.real;
return 1;
}
/*===================================
// 函數名稱:complex_exp
// 功能描寫:求複數指數
// 參數申明:a(已知數)
// c(計算成效), c=exp^a
// 返回值: 0(失敗), 1(成功)
=================================== */
int complex_exp(ecomplex a,
ecomplex *c)
{
if(c==NULL) return 0;
double A = exp(a.real);
c->real = A * cos(a.img);
c->img = A * sin(a.img);
return 1;
}
/*===================================
// 函數名稱:complex_ln
// 功能描寫:求複數對數
// 參數申明:a(已知數)
// c(計算成果), c=ln(a)
// 返回值: 0(失敗), 1(成功)
=================================== */
int complex_ln(ecomplex a翻譯社
ecomplex *c)
{
if(c==NULL) return 0;
c->real = log( sqrt(a.real*a.real + a.img * a.img) );
c->img = atan(a.img / a.real);
return 1;
}
/*===================================
// 函數名稱:complex_sin
// 功能描述:求複數對數
// 參數說明:a(輸入角度)
// c(計算結果), c=sin(a)
// 返回值: 0(失敗)翻譯社 1(成功)
=================================== */
int complex_sin(ecomplex a,
ecomplex *c)
{
if(c==NULL) return 0;
c->real = sin(a.real) * (exp(a.img) + exp(-a.img)) * 0.5;
c->img = cos(a.real) * (exp(a.img) - exp(-a.img)) * 0.5;
return 1;
}
/*===================================
// 函數名稱:complex_cos
// 功能描寫:求複數對數
// 參數申明:a(輸入角度)
// c(計較成效), c=cos(a)
// 返回值: 0(失敗), 1(成功)
=================================== */
// c = cos(a)
int complex_cos(ecomplex a翻譯社
ecomplex *c)
{
if(c==NULL) return 0;
c->real = cos(a.real) * (exp(a.img) + exp(-a.img)) * 0.5;
c->img = sin(a.real) * (exp(a.img) - exp(-a.img)) * 0.5;
return 1;
}
都沒注意到這篇人氣已到 2500,筆者於另一份 blog 有發二篇較為詳細之文章,
typedef struct{
double real;
double img;
}ecomplex;
int complex_add(ecomplex a,
ecomplex b翻譯社
ecomplex *result);
/*===================================
// 函數名稱:complex_pow
// 功能描述:求複數乘冪
// 參數申明:a(底數)
// n(指數)
// c(計較了局)
// 返回值: 0(失敗), 1(成功)
=================================== */
int complex_pow(ecomplex a翻譯社
int n,
ecomplex *c);
/*===================================
// 函數名稱:complex_mul
// 功能描述:複數相乘
// 返回值: 0(失敗), 1(成功)
=================================== */
int complex_mul(ecomplex a,
ecomplex b,
ecomplex *result)
{
if(result==NULL) return 0;
result->real = a.real * b.real - a.img * b.img;
result->img = a.img * b.real + a.real * b.img;
return 1;
}
/*===================================
// 函數名稱:complex_sub
// 功能描寫:複數相加
// 返回值: 0(失敗), 1(成功)
=================================== */
int complex_sub(ecomplex a翻譯社
ecomplex b翻譯社
ecomplex *result)
{
if(result==NULL) return 0;
result->img = a.img + b.img;
result->real = a.real + b.real;
return 1;
}
////////////////////////////////////////////////////////////
// ===================================
// 指對數問題
/*===================================
// 函數名稱:complex_pow
// 功能描寫:求複數乘冪
// 參數申明:a(底數)
// n(指數)
// c(較量爭論結果)
// 返回值: 0(失敗), 1(成功)
=================================== */
int complex_pow(ecomplex a,
int n,
ecomplex *c)
{
if(c==NULL) return 0;
double An = pow(sqrt(a.real*a.real + a.img*a.img)翻譯社 n);
double nsita = (double)n * atan(a.img/a.real);
c->real = An * cos(nsita);
c->img = An * sin(nsita);
return 1;
}
int complex_sub(ecomplex a,
ecomplex b,
ecomplex *result);
// ===================================
// 四則運算
// ===================================
#ifndef PI
#define PI (double)(3.14159265358979323846264338327950288419716939937510)
#endif
// ====================================
// Filename: ecomplex.h
// Author : Edison.Shih.
// mail : crowyao@hotmail.com
// Date : 2010.3.18
// ====================================
以下程式碼參考, 有問題請答複 blog 進行評論辯論
int complex_div(ecomplex a,
ecomplex b,
ecomplex *result);
2011 / 11 / 25
有興趣之網友可參考翻譯
/*===================================
// 函數名稱:complex_cos
// 功能描寫:求複數餘弦
// 參數申明:a(輸入角度)
// c(較量爭論了局), c=cos(a)
// 返回值: 0(失敗), 1(成功)
=================================== */
// c = cos(a)
int complex_cos(ecomplex a翻譯社
ecomplex *c);
#endif
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include "ecomplex.h"
////////////////////////////////////////////////////////////
// ===================================
// 指對數問題
/*===================================
// 函數名稱:complex_nroot
// 功能描述:求複數 n 次方根
// 參數申明:a(已知數)
// n(n次方根)
// c(計算結果)
// 返回值: 0(失敗)翻譯社 1(成功)
=================================== */
int complex_nroot(ecomplex a翻譯社
int n,
ecomplex *c);
int complex_mul(ecomplex a,
ecomplex b,
ecomplex *result);
[C說話數值闡明] 複數運算 - 完全程式碼參考
本篇文章引用自此: http://edisonshih.pixnet.net/blog/post/30685839-%5bc%e8%aa%9e%e8%a8%80%e6%95%b8%e5%80%bc%e5%88%86%e6有關各國語文翻譯公證的問題歡迎諮詢天成翻譯公司02-77260931