跳到主要内容

复数型

说明

说明

在 Go 语言中,复数是一种内置的数据类型,使用 complex64complex128 表示。它们由两个部分组成:实部虚部,均为浮点数

复数类型

  • complex64:实部和虚部都是 float32
  • complex128:实部和虚部都是 float64

创建复数

package main

import "fmt"

func main() {

// 方法1,通过 complex 函数定义,定义一个实部为3,虚部为4的复数
c1 := complex(3, 4)

// 方法2,直接通过字面量定义,定义一个实部为3,虚部为4的复数
c2 := 3 + 4i

// 方法3,通过关键字定义
var c64 complex64 = 3.14 + 2.7i // 由两个float32组成
var c128 complex128 = 3.14 + 2.7i // 由两个float64组成

fmt.Printf("复数类型示例:\n")
fmt.Printf("c1: %v\n", c1)
fmt.Printf("c2: %v\n", c2)
fmt.Printf("complex64: %v\n", c64)
fmt.Printf("complex128: %v\n", c128)
fmt.Printf("real部分: %f\n", real(c64))
fmt.Printf("imag部分: %f\n", imag(c64))
}

输出

复数类型示例:
c1: (3+4i)
c2: (3+4i)
complex64: (3.14+2.7i)
complex128: (3.14+2.7i)
real部分: 3.140000
imag部分: 2.700000

获取实部和虚部

package main

import "fmt"

func main() {
c1 := complex(3, 4)
//c2 := 3 + 4i
fmt.Println(real(c1)) // 输出3
fmt.Println(imag(c1)) // 输出4
}

输出

3
4

复数运算

复数乘法

复数乘法的核心是:

实部通过两个实部相乘减去两个虚部相乘 虚部通过交叉相乘再相加

实部 5x3 - 6x4 = -9

虚部 5x4 + 3x6 = 38i

复数除法

定义的复数为:

  • a=5+6ia = 5 + 6i 其中:

    • 实部:areal=5a_\text{real} = 5
    • 虚部:bimag=6b_\text{imag} = 6
  • b=3+4ib = 3 + 4i 其中:

    • 实部:creal=3c_\text{real} = 3
    • 虚部:dimag=4d_\text{imag} = 4

对于复数 a+bia + bic+dic + di,其商的公式为:

a+bic+di=(ac+bd)c2+d2+(bcad)c2+d2i\frac{a + bi}{c + di} = \frac{(ac + bd)}{c^2 + d^2} + \frac{(bc - ad)}{c^2 + d^2}i

详细计算过程

1.分母

c2+d2=32+42=9+16=25c^2 + d^2 = 3^2 + 4^2 = 9 + 16 = 25

2.分子

(a+bi)(cdi)=(ac+bd)+(bcad)i=(53+64)+(6354)i=(15+24)+(1820)i=392i(a + bi) \cdot (c - di) = (ac + bd) + (bc - ad)i = (5 \cdot 3 + 6 \cdot 4) + (6 \cdot 3 - 5 \cdot 4)i = (15 + 24) + (18 - 20)i = 39 - 2i

分解计算

  • 实部

    ac+bd=(53)+(64)=15+24=39ac + bd = (5 \cdot 3) + (6 \cdot 4) = 15 + 24 = 39
  • 虚部

    bcad=(63)(54)=1820=2bc - ad = (6 \cdot 3) - (5 \cdot 4) = 18 - 20 = -2

分子为

392i39 - 2i

392i25=3925+225i\frac{39 - 2i}{25} = \frac{39}{25} + \frac{-2}{25}i

化简

1.560.08i1.56 - 0.08i

最终结果

5+6i3+4i=1.560.08i\frac{5 + 6i}{3 + 4i} = 1.56 - 0.08i
package main

import (
"fmt"
)

func main() {
a := complex(5, 6)
b := 3 + 4i

fmt.Println("a:", a)
fmt.Println("b:", b)
fmt.Println("实部 a:", real(a))
fmt.Println("虚部 a:", imag(a))

// 复数运算
fmt.Println("加法:", a+b)
fmt.Println("减法:", a-b)
fmt.Println("乘法:", a*b)
fmt.Println("除法:", a/b)
}

输出

a: (5+6i)
b: (3+4i)
实部 a: 5
虚部 a: 6
加法: (8+10i)
减法: (2+2i)
乘法: (-9+38i)
除法: (1.56-0.08i)
Right Bottom Gif
Right Top GIF