[Swift]复数的表示和四则运算

★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
➤微信公众号:山青咏芝(shanqingyongzhi)
➤博客园地址:山青咏芝(https://www.cnblogs.com/strengthen/ 
➤GitHub地址:https://github.com/strengthen/LeetCode
➤原文地址:https://www.cnblogs.com/strengthen/p/9836010.html 
➤如果链接不是山青咏芝的博客园地址,则可能是爬取作者的文章。
➤原文已修改更新!强烈建议点击原文地址阅读!支持作者!支持原创!
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★

我们把形如z=a+bi(a,b均为实数)的数称为复数,其中a称为实部,b称为虚部,i称为虚数单位。

当虚部等于零时,这个复数可以视为实数;当z的虚部不等于零时,实部等于零时,常称z为纯虚数。

复数域是实数域的代数闭包,也即任何复系数多项式在复数域中总有根。

复数是由意大利米兰学者卡当在十六世纪首次引入,

经过达朗贝尔、棣莫弗、欧拉、高斯等人的工作,此概念逐渐为数学家所接受。

用结构体来描述复数,复数由实部(real)和虚部(image)构成。

加法: (a+bi)+(c+di)=(a+c)+(b+d)i

减法: (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

除法:满足(c+di)(x+yi)=(a+bi)的复数x+yi(x,y∈R)叫复数a+bi除以复数c+di的商。

          (a+bi)/(c+di)=(ac+bd)/(c2+d2) +((bc-ad)/(c2+d2))i

复数作为幂和对数的底数、指数、真数时,其运算规则可由欧拉公式e^iθ=cos θ+i sin θ(弧度制)推导而得

 1 /*复数结构*/
 2 struct Complex {
 3     //实部
 4     var real: Double    
 5     //虚部
 6     var img: Double  
 7     
 8     //将复数转换成字符串。
 9     var toString: String {
10         //判断虚部是否大于0
11         if img < 0
12         {
13             return "\(real) - \(-img)i"       
14         }
15         else if img > 0
16         {
17             return "\(real) + \(img)i"
18         }
19         else
20         {
21             return "\(real)"
22         }      
23     }
24     /*重载复数的四则运算符*/
25     //重载加法运算符:(a+bi)+(c+di)=(a+c)+(b+d)i
26     static func +(_ x: Complex,_ y: Complex) -> Complex {
27         return Complex(real: (x.real + y.real), img: (x.img + y.img))
28     }
29     //重载减法运算符: (a+bi)-(c+di)=(a-c)+(b-d)i
30     static func -(_ x: Complex,_ y: Complex) -> Complex {
31         return Complex(real: (x.real - y.real), img: (x.img - y.img))
32     }
33     //重载乘法运算符
34     //设z1=a+bi,z2=c+di(a、b、c、d∈R)是任意两个复数,那么它们的积(a+bi)(c+di)=(ac-bd)+(bc+ad)i
35     static func *(_ x: Complex,_ y: Complex) -> Complex {
36         return Complex(real: (x.real * y.real - x.img * y.img), img: (x.img * y.real + x.real * y.img))
37     }
38     //重载除法运算符
39     //满足(c+di)(x+yi)=(a+bi)的复数x+yi(x,y∈R)叫复数a+bi除以复数c+di的商。
40     //(a+bi)/(c+di)=(ac+bd)/(c2+d2) +((bc-ad)/(c2+d2))i
41     static func /(_ x: Complex,_ y: Complex) -> Complex {
42         var squares = pow(y.real,2) + pow(y.img,2)
43         return Complex(real: (x.real * y.real - x.img * y.img) / squares, img: (x.img * y.real - x.real * y.img) / squares)
44     }
45     //复数的模:将复数的实部与虚部的平方和的正的平方根的值称为该复数的模。
46     static func cbs(_ a: Complex) ->Double{
47         return sqrt(pow(a.real,2) + pow(a.img,2))
48     }
49 }

示例代码:

 1 var c1 = Complex(real: 4, img: -8)
 2 var c2 = Complex(real: 2, img: -2)
 3 
 4 var sum = c1 + c2
 5 print("\(sum.toString)")
 6 //Print 6.0 - 10.0i
 7 
 8 var subtract = c1 - c2
 9 print("\(subtract.toString)")
10 //Print 2.0 - 6.0i
11 
12 var product = c1 * c2
13 print("\(product.toString)")
14 //Print -8.0 - 24.0i
15 
16 var quotient = c1 / c2
17 print("\(quotient.toString)")
18 //Print -1.0 - 1.0i
19 
20 var mould = Complex.cbs(c1)
21 print("\(mould) ")
22 //Print 8.94427190999916

 

转载于:https://www.cnblogs.com/strengthen/p/9836010.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值