Python 和 Ruby 中的數學/Ruby 中的複數

由於實數可以嚴格排序,而複數不能,因此像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-3i。Ruby選擇第一個。其他示例
puts((-1)**0.5)
puts(Complex(-1,0)**0.5)
如果 -1 被視為實數,它根本沒有平方根,而如果將其視為複數,它有兩個平方根,最接近i的那個將被顯示(但它並不完全等於i,因為有舍入誤差)
用於建立複數的兩個(實數)是它的實部和虛部。它們可以用real和imag獲得
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))