zoukankan      html  css  js  c++  java
  • [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
  • 相关阅读:
    Java进阶 -- 文章汇总
    Java并发编程 -- 文章汇总
    大话设计模式读书笔记--文章汇总
    Java并发编程--6.Exchanger线程间交换数据
    Java并发编程--7.Java内存操作总结
    Java并发编程--5.信号量和障碍器
    Java并发编程--4.Executor框架
    Java并发编程--3.Lock
    Java并发编程--2.synchronized
    Java并发编程--1.Thread和Runnable
  • 原文地址:https://www.cnblogs.com/strengthen/p/9836010.html
Copyright © 2011-2022 走看看