★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
➤微信公众号:山青咏芝(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