复数的常规运算与C代码实现

很多时候,信号处理算法的基础是复数运算,尤其在涉及频谱分析时复数运算十分常见,因此本文介绍常见的复数运算及C语言代码。
下面提到的函数,基于以下数据结构:

typedef  struct xy
{
    float re;
    float im;
}comp;
  • 复数加法
    函数申明 :comp cadd(comp a,comp b);
    函数体:
comp cadd(comp a,comp b){
	comp c;
	c.re = a.re + b.re;
	c.im = a.im + b.re;
	return c;
}

  • 复数减法
    函数申明 :comp csub(comp a,comp b);'
    函数体:
comp csub(comp a,comp b){
	comp c;
	c.re = a.re - b.re;
	c.im = a.im - b.re;
	return c;
}
  • 复数乘法
    函数申明:comp cmul(comp a,comp b);
    函数体 :
comp cmul(comp a,comp b){

	comp c;
	c.re = (a.re*b.re) - (a.im*b.im);
	c.im = (a.re*b.im) + (b.re*a.im);
	return c;
}
  • 复数求模
    函数申明:float cabs1(comp a);
    函数体 :
float cabs1(comp a){
	float c;
	c =(float)sqrt(a.re*a.re + a.im*a.im);
	return c;
}
  • 复数求共轭
    函数申明:comp conjg(comp a);
    函数体 :
comp conjg(comp a){

	comp c;
	c.re = a.re;
	c.im = -a.im;
	return c;
}
  • 函数的幂
    函数申明:comp cpow(comp a,double n);
    函数说明:这里幂次不是整数幂,不能使用for循环执行复数乘法,这里介绍另外一种方法。根据欧拉公式,任意一个复数可以表示成一个实数和三角函数相乘的形式:
    Z n = ( ρ e j w ) n = ρ n e j w n = ρ n ( cos ⁡ ( w n ) + j sin ⁡ ( w n ) ) {{Z}^{n}}={{(\rho {{e}^{jw}})}^{n}}={{\rho }^{n}}{{e}^{jwn}}={{\rho }^{n}}(\cos (wn)+j\sin (wn)) Zn=(ρejw)n=ρnejwn=ρn(cos(wn)+jsin(wn))

comp cpow(comp a,double n){
	
	comp c;
	float cabs; 
	float cthe;

	cabs = cabs1(a) ^ n;  //先求(a的模的N次幂);
	cthe = atan(a.im/a.re); // 再求相角 w

	c.re = cabs*cos(cthe*n);
	c.im = cabs*sin(cthe*n);
	return c;
}
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
复数运算可以通过使用C语言的数据结构和算法来实现。 首先,可以定义一个结构体数组来表示复数。每个结构体包含两个实数成员,分别表示复数的实部和虚部。例如,可以定义一个名为complex的结构体数组,并在其中定义实部和虚部的初始值。 然后,可以实现八种基本运算。以下是对应的方法: 1. 由输入的实部和虚部生成一个复数:可以使用scanf函数获取用户输入的实部和虚部,并将其赋值给complex结构体中的相应成员。 2. 两个复数求和:可以将两个复数的实部和虚部分别相加,得到新的复数的实部和虚部。 3. 两个复数求差:可以将两个复数的实部和虚部分别相减,得到新的复数的实部和虚部。 4. 两个复数求积:可以使用公式(a+bi)(c+di) = (ac-bd) + (ad+bc)i,将两个复数的实部和虚部按照公式进行计算,得到新的复数的实部和虚部。 5. 从已知复数中分离出实部:可以直接读取复数的实部。 6. 从已知复数中分离出虚部:可以直接读取复数的虚部。 7. 求已知复数的共轭复数:共轭复数的实部保持不变,虚部取相反数。 8. 两个复数相除:可以使用公式(a+bi)/(c+di) = [(ac+bd)/(c^2+d^2)] + [(bc-ad)/(c^2+d^2)]i,将两个复数的实部和虚部按照公式进行计算,得到新的复数的实部和虚部。 通过以上的方法,可以实现复数运算。在C语言中,可以使用结构体、数组和相应的算术运算符来处理复数的数据结构和算法。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

雷达爆破手

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值