c++實現復數的加減乘除,【C++】輔助C++計算復數(代碼解釋的很清楚)
c++實現復數的加減乘除,【C++】輔助C++計算復數(代碼解釋的很清楚)
????????數運算法則有:加減法、乘除法,乘積,商,次冪,n次方根,指數,對數,正弦,余弦,模和幅角。兩個復數的和依然是復數,它的實部是原來兩個復數實部的和,它的虛部是原來兩個虛部的和。復數的加法滿足交換律和結合律。此外,復數作為冪和對數的底數、指數、真數時,其運算規則可由歐拉公式e^iθ=cos θ+i sin θ(弧度制)推導而得。
?加法法則
復數的加法按照以下規定的法則進行:設z1=a+bi,z2=c+di是任意兩個復數,
則它們的和是 (a+bi)+(c+di)=(a+c)+(b+d)i。
兩個復數的和依然是復數,它的實部是原來兩個復數實部的和,它的虛部是原來兩個虛部的和。
復數的加法滿足交換律和結合律,
c++實現復數的加減乘除。即對任意復數z1,z2,z3,有: z1+z2=z2+z1;(z1+z2)+z3=z1+(z2+z3)。
減法法則
復數的減法按照以下規定的法則進行:設z1=a+bi,z2=c+di是任意兩個復數,
則它們的差是 (a+bi)-(c+di)=(a-c)+(b-d)i。
兩個復數的差依然是復數,它的實部是原來兩個復數實部的差,它的虛部是原來兩個虛部的差。
乘法法則
規定復數的乘法按照以下的法則進行:
c++復數怎么表示。設z1=a+bi,z2=c+di(a、b、c、d∈R)是任意兩個復數,那么它們的積(a+bi)(c+di)=(ac-bd)+(bc+ad)i。
其實就是把兩個復數相乘,類似兩個多項式相乘,展開得: ac+adi+bci+bdi2,因為i2=-1,所以結果是(ac-bd)+(bc+ad)i 。兩個復數的積仍然是一個復數。
在極坐標下,復數可用模長r與幅角θ表示為(r,θ)。對于復數a+bi,r=√(a2+b2),θ=arctan(b/a)。此時,復數相乘表現為幅角相加,模長相乘。
除法法則
復數除法定義:滿足(c+di)(x+yi)=(a+bi)的復數x+yi(x,y∈R)叫復數a+bi除以復數c+di的商。
運算方法:可以把除法換算成乘法做,在分子分母同時乘上分母的共軛。所謂共軛你可以理解為加減號的變換,互為共軛的兩個復數相乘是個實常數。
除法運算規則:
復數角度計算公式。①設復數a+bi(a,b∈R),除以c+di(c,d∈R),其商為x+yi(x,y∈R),
圖1 分母實數化
即(a+bi)÷(c+di)=x+yi
∵(x+yi)(c+di)=(cx-dy)+(dx+cy)i
∴(cx-dy)+(dx+cy)i=a+bi
由復數相等定義可知 cx-dy=a dx+cy=b
復數的模怎么算?解這個方程組,得 x=(ac+bd)/(c2+d2) y=(bc-ad)/(c2+d2)
于是有:(a+bi)/(c+di)=(ac+bd)/(c2+d2) +((bc-ad)/(c2+d2))i
? ? ? ? 接下來利用C++編出最會計的計算方法。計算代碼如下:
//復數的運算類
#include<iostream>
# include<cmath>
using namespace std;
//復數的計算類
class complex
{private:double R; //復數的實部 double I; //復數的虛部public:complex(double real=0,double image=0) //構造函數 {R=real;I=image;}void print() //復數輸出{cout<<"("<<R<<","<<I<<")" ; //輸出為(R,I)return ; } double Cabs() //復數的模 {double y;y=sqrt(R*R+I*I);return 0;}double angle() //復數幅角 {double y;y=atan2(I,R);return y;}complex operator + (complex& c2) //復數加法;重載運算符+ {complex c;c.R=R+c2.R;c.I=I+c2.I;return c;}complex operator - (complex& c2) //復數減法;重載運算符-{complex c;c.R=R-c2.R;c.I=I-c2.I;return c;}complex operator * (complex& c2) //復數乘法;重載運算符 *{complex c;double p,q,s;p=R*c2.R;q=I*c2.I;s=(R+I)*(c2.R+c2.I);c.R=p-q;c.I=s-p-q;return c;}complex operator / (complex& c2) //復數除;重載運算符 /{complex c;double p,q,s,w;p=R*c2.R;q=-I*c2.I;s=(R+I)*(c2.R-c2.I);w=(c2.R)*(c2.R)+(c2.I)*(c2.I);if(w+1.0 !=1.0){c.R=(p-q)/w;c.I=(s-p-q)/w;}else {c.R=1e+300;c.I=1e+300;}return c;}complex Power(int n) //復數乘冪{complex c;double r,q;q=atan2(I,R);r=sqrt(R*R+I*I );if(r+1.0 !=1.0){r=n*log(r);r=exp(r);}c.R =r*cos(n*q);c.I =r*sin(n*q);return c;} void Root(int n,complex *p) //復數的 n 次方根{complex c;int k;double r,q,t;if(n<1) return ;q=atan2(I,R);r=sqrt(R*R+I*I);if(r+1.0 !=1.0){r=(1.0/n)*log(r);r=exp(r);}for(k=0;k<n;k++){t=(2.0*k*3.1415926987+q)/n;c.R=r*cos(t);c.I=r*sin(t);p[k]=c;}} complex Exp() //復數指數{complex c;double p;p=exp(R);c.R=p*cos(I);c.I=p*sin(I);return c;} complex Log() //復數對數{complex c;double p;p=R*R+I*I;p=log(sqrt(p));c.R =p;c.I =atan2(I,R);return c; } complex Sin() //復數正弦{complex c;double p,q;p=exp(I);q=exp(-I);c.R =sin(R)*(p+q)/2;c.I =cos(R)*(p-q)/2;return c; } complex Cos() //復數余弦{complex c;double p,q;p=exp(I);q=exp(-I);c.R =cos(R)*(p+q)/2;c.I =-sin(R)*(p-q)/2;return c; } } ;
接下來對復數進行實力計算,在計算的過程中充分利用類
//實例計算
#include<iostream>
#include<cmath>
#include"復數運算類.h"
using namespace std;
int main()
{int i;double a,b;complex c1,c2,c3,c,p[5];cin>>a>>b; //輸入c1的實部和虛部 c1=complex(a,b); cout<<"c1="; c1.print(); cout<<endl;cin>>a>>b; //輸入c2的實部和虛部 c2=complex(a,b); cout<<"c2="; c2.print(); cout<<endl;cin>>a>>b; //輸入c2的實部和虛部 c3=complex(a,b); cout<<"c3="; c3.print(); cout<<endl;c=c1+c2;cout<<"c1+c2="; c.print();cout<<endl; c=c1-c2;cout<<"c1-c2="; c.print();cout<<endl; c=c1*c2;cout<<"c1*c2="; c.print();cout<<endl;c=c1/c2;cout<<"c1/c2="; c.print();cout<<endl;c=c3.Power(-3);cout<<"c3的-5次方="; c.print();cout<<endl;cout<<"c3的8次方為:"<<endl;c3.Root(8,p);for(i=0;i<8;i++){p[i].print();cout<<endl; } c=c3.Exp();cout<<"exp(c3)=";c.print();cout<<endl;c=c3.Log();cout<<"log(c3)=";c.print();cout<<endl;c=c3.Sin();cout<<"sin(c3)=";c.print();cout<<endl;c=c3.Cos();cout<<"cos(c3)=";c.print();cout<<endl;return 0;
}
其中第一行為鍵盤輸入
計算器如何算復數帶j,則,計算結果為: