数运算法则有:加减法、乘除法,乘积,商,次幂,n次方根,指数,对数,正弦,余弦,模和幅角。两个复数的和依然是复数,它的实部是原来两个复数实部的和,它的虚部是原来两个虚部的和。复数的加法满足交换律和结合律。此外,复数作为幂和对数的底数、指数、真数时,其运算规则可由欧拉公式e^iθ=cos θ+i sin θ(弧度制)推导而得。
加法法则
复数的加法按照以下规定的法则进行:设z1=a+bi,z2=c+di是任意两个复数,
则它们的和是 (a+bi)+(c+di)=(a+c)+(b+d)i。
两个复数的和依然是复数,它的实部是原来两个复数实部的和,它的虚部是原来两个虚部的和。
复数的加法满足交换律和结合律,
即对任意复数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。
两个复数的差依然是复数,它的实部是原来两个复数实部的差,它的虚部是原来两个虚部的差。
乘法法则
规定复数的乘法按照以下的法则进行:
设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=√(a²+b²),θ=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;
}
其中第一行为键盘输入
则,计算结果为: