跳轉到內容

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))
華夏公益教科書