复数运算
  • 板块灌水区
  • 楼主zhang_sans
  • 当前回复4
  • 已保存回复4
  • 发布时间2024/3/9 08:19
  • 上次更新2024/3/9 11:10:15
查看原帖
复数运算
1278314
zhang_sans楼主2024/3/9 08:19

关于如何在 cpp 中用复数,我猜大家想的一定是complex这个东西(虽然我都没听说过这是什么),但是我就是不用它来搞复数乘法,我就来一个“纯实数假扮虚数运算”。

但我们先把格式搞清楚,而一个标准的格式是这样的:R+Ii(R为实数位,I为虚数位),以及若里面有一个是 00 的话,我们就把它去掉,若都是 00,那么只剩下一个 00。(其实这是为了符合大家的口味),所以我们就可以用如下代码来搞格式:

//R表示实数位,I表示虚数位,且它们都是个双精度浮点数
//以后到这里就用“排序”表示
	if(I==0)
		cout<<R;
	else if(R==0)
		cout<<I<<"i";
    else
    {
        if(I<0)
        cout<<R<<I<<"i";
        else cout<<R<<"+"<<I<<"i";
    }

然后就是运算,这其实也不难,因为只要掌握运算法则就行了,加法和减法各见下列代码

#include<iostream>
using namespace std;
int main()
{
	double a,b,c,d;cin>>a>>b>>c>>d;
    double R=a+c,I=b+d;
  排序;
 	return 0;
  }
#include<iostream>
using namespace std;
int main()
{
	double a,b,c,d;cin>>a>>b>>c>>d;
  double R=a-c,I=b-d;
  排序;
	return 0;
}

然后是乘法,这个其实也不难,只要运用多项式求积展开的知识就行了,如下:

(a+bi)(c+di)=ac+adi+bci+bdi2=ac−bd+bci+adi=(ac−bd)+(bc+ad)i\begin{matrix} (a+bi)(c+di)\\ =ac+adi+bci+bdi^2\\ =ac-bd+bci+adi\\ =(ac-bd)+(bc+ad)i \end{matrix}

代码:

#include<iostream>
using namespace std;
int main()
{
  double a,b,c,d;cin>>a>>b>>c>>d;
  double R=a*c-b*d,I=a*d+b*c;
  排序;
	return 0;
}

最后是除法,众所周知,除以一个数等于乘上他的倒数,而我们又有复数倒数的公式,也就是: 1a+bi=aa2+b2−ba2+b2i\frac{1}{a+bi}=\frac{a}{a^2+b^2}-\frac{b}{a^2+b^2}i 所以只要改一下乘法的程序就可以了,代码如下:

#include<iostream>
using namespace std;
int main()
{
  double a,b,c,d;cin>>a>>b>>c>>d;
  c = c/(c*c+d*d);
  d = -d/(c*c+d*d)
  double R=a*c-b*d,I=a*d+b*c;
  排序;
	return 0;
}

OK,我的演讲就到这,如果有更多复数运算的需要,请把我这些代码都改一下即可。

2024/3/9 08:19
加载中...