复数

复数

困难

说明

复数的形式为 z = a + b * i,其中:

  • a 是实部(一个实数),

  • b 是虚部(也是一个实数),

  • i 是虚数单位,满足 i^2 = -1。

复数的运算

共轭

复数 z = a + b * i 的共轭为:

zc = a - b * i

绝对值

z 的绝对值(或模)定义为:

|z| = sqrt(a^2 + b^2)

绝对值的平方,等于 z 与其共轭 zc 的乘积:

|z|^2 = z * zc = a^2 + b^2

加法

两个复数 z1 = a + b * i 与 z2 = c + d * i 的和,等于分别相加它们的实部和虚部:

z1 + z2 = (a + b * i) + (c + d * i)
        = (a + c) + (b + d) * i

减法

两个复数之差,等于相减各自对应的部分:

z1 - z2 = (a + b * i) - (c + d * i)
        = (a - c) + (b - d) * i

乘法

两个复数的乘积定义为:

z1 * z2 = (a + b * i) * (c + d * i)
        = (a * c - b * d) + (b * c + a * d) * i

倒数

非零复数的倒数由下式给出:

1 / z = 1 / (a + b * i)
      = a / (a^2 + b^2) - b / (a^2 + b^2) * i

除法

一个复数除以另一个复数由下式给出:

z1 / z2 = z1 * (1 / z2)
        = (a + b * i) / (c + d * i)
        = (a * c + b * d) / (c^2 + d^2) + (b * c - a * d) / (c^2 + d^2) * i

幂运算

把 e(自然对数的底)取复数次幂,可以用欧拉公式表示:

e^(a + b * i) = e^a * e^(b * i)
              = e^a * (cos(b) + i * sin(b))

实现要求

既然不能使用内置的复数支持,请实现以下运算:

  • 两个复数的加法
  • 两个复数的减法
  • 两个复数的乘法
  • 两个复数的除法
  • 一个复数的共轭
  • 一个复数的绝对值
  • 求 e(自然对数的底)的复数次幂

复数的 Julia Base 实现可以在这里找到:https://github.com/JuliaLang/julia/blob/master/base/complex.jl。


附加题 A

你可以通过取消注释以下内容,来做涉及实数与复数之间运算的附加题: 在存根文件complex-numbers.jl或runtests.jl中取消注释# enable_realcomplex_tests = true

附加题 B

你可以通过取消注释以下内容,来做实数与复数之间的附加题: 在存根文件complex-numbers.jl或runtests.jl中取消注释# enable_syntaxsugar_tests = true 然后,仿照im实现jm,使得1 + 1jm == ComplexNumber(1, 1)。


来源

Wikipedia链接会在新窗口或新标签页中打开
通过 GitHub 编辑 链接将在新窗口或新标签页中打开
Julia Exercism

准备好开始 复数 了吗?

注册 Exercism,借助 35 个概念128 个练习 和真人导师指导,学习并掌握 Julia,全部免费。