跳转到内容

Python 和 Ruby 中的数学/Ruby 中的复数

来自 Wikibooks,开放世界中的开放书籍

由于实数可以严格排序,而复数不能,因此像Ruby这样的面向对象的语言并不真正将复数视为数字。然而,Ruby有一个对象来处理这些数字,它被称为Complex

例如,要创建复数4+3i,只需写

a=Complex(4,3)
puts(a)

这需要两个数字,可以是分数或整数。在后一种情况下,复数是一个高斯整数。这个信息在晚餐时可能会有用,谁知道呢?

基本运算

[编辑 | 编辑源代码]

加法、减法、乘法和除法仍然分别用+-*/表示

a=Complex(2,3)
b=Complex(4,3)
puts(a+b)
puts(a-b)
puts(a*b)
puts(a/b)

这些示例表明,两个高斯整数的和、差和积也是高斯整数,但它们的商不一定总是高斯整数。减法示例表明,即使运算结果是实数,Ruby仍然将其视为复数。

要将复数乘方,仍然使用双星号

i=Complex(0,1)
puts(i**2)
puts(i**i)

这里 而不是真正的 -1!此外, 是一个实数!顺便说一下,指数不一定是实数。

但以 0.5 作为指数,可以计算复数的平方根。但任何复数(零除外)都有两个平方根。Ruby如何在它们之间选择?例如,7+24i的平方根是4+3i-4-3iRuby选择第一个。其他示例

puts((-1)**0.5)
puts(Complex(-1,0)**0.5)

如果 -1 被视为实数,它根本没有平方根,而如果将其视为复数,它有两个平方根,最接近i的那个将被显示(但它并不完全等于i,因为有舍入误差)

用于创建复数的两个(实数)是它的实部虚部。它们可以用realimag获得

a=Complex(4,3)
puts(a.real)
puts(a.imag)
puts(a.conj)

这个示例展示了另一个性质,即复数的共轭,与其他性质不同,它也是一个复数。

几何性质

[编辑 | 编辑源代码]

复数对几何学有用的主要性质是它的模数幅角

a=Complex(4,3)
puts(a.abs)
puts(a.arg)
puts(a.polar)

最后一个性质,极坐标,同时给出模数和幅角,这使我们能够解决来自上一章的问题。

a=12
b=5
z=Complex(a,b)
puts(z.polar)

使用require 'cmath' ,可以访问复数上的函数。

指数函数

[编辑 | 编辑源代码]
require 'cmath'
t=Complex(0,Math::PI/3)
w=CMath.exp(t)
puts(w.real==0.5)
puts(w.real-0.5)
puts(w.imag==Math.sqrt(3)/2)

这个示例展示了写 表示 的合理性。

双曲函数也适用于复数

require 'cmath'
a=Complex(4,3)
puts(CMath.cosh(a))
puts(CMath.sinh(a))
puts(CMath.tanh(a))

对数函数

[编辑 | 编辑源代码]

前面函数的逆函数也可以应用于复数

require 'cmath'
a=Complex(4,3)
puts(CMath.log(a))
puts(CMath.log10(a))
puts(CMath.acosh(a))
puts(CMath.asinh(a))
puts(CMath.atanh(a))

圆函数

[编辑 | 编辑源代码]

直接函数

[编辑 | 编辑源代码]

每个复数都有一个余弦、正弦和正切

require 'cmath'
z=Complex(4,3)
puts(CMath.cos(z))
puts(CMath.sin(z))
puts(CMath.tan(z))

反函数

[编辑 | 编辑源代码]
require 'cmath'
z=Complex(4,3)
puts(CMath.acos(z))
puts(CMath.asin(z))
puts(CMath.atan(z))

甚至可以将atan2应用于一对复数

require 'cmath'
a=Complex(4,3)
b=Complex(2,1)
puts(CMath.atan2(a,b))

这个复数版本的atan2 函数是复曲面的一个很好的例子:atan2(-1,-1) = 5π/4,而 atan2(1,1) = atan(1) = π/4

require 'cmath'
puts(CMath.atan2(-1,-1))
puts(CMath.atan2(1,1))
华夏公益教科书