2013-03-14 135 views
18

最近,我試圖計算使用一些涉及其中的虛數i的方程。但是,與eπ不同,沒有任何方法或本機功能將返回i。谷歌的quick search沒有給我任何答案。有關如何實現它的任何想法?如何用JavaScript中的虛數計算?

function imaginary(){ 
    return { 
     rational: this, 
     imaginary: "2i" //magic code that does this 
    }; 
}; 
Number.prototype.imaginary = imaginary; 
+3

看看這裏:http://janhartigan.com/articles/creating-a-javascript-complex-數量級 – 2013-03-14 01:05:33

+0

^第一個結果似乎有很好的信息... – elclanrs 2013-03-14 01:05:58

+0

什麼樣的計算?只是+ - * /,或指數等等? – mbeckish 2013-03-14 01:07:15

回答

9

假設你真的想複數,而不僅僅是虛部:

我建模複數就像你一個2D點模型,即一對數字。正如一個點有x和y分量一樣,所以一個複數具有實部和虛部的組成部分。 這兩個組件都可以使用普通數字類型(int,float等)建模

但是,您將需要爲所有數學運算定義新功能。

複數的加法和減法的作用方式與加法和減法的方式相同 - 將相互獨立的組件相加,不要混合使用。例如:

(3 + 2I)+(5 + 4I)=(8 + 6I)

乘法作品就像你在代數乘法(A + B)*(C + d)=當學習(AC +廣告+ BC + BD)。

除了現在你還必須記住我* i = -1。所以:

(A + BI)*(C + DI)=(AC + ADI + BCI + BDII)=(AC-BD)+(AD + BC)我

對於除法和指數,看http://en.wikipedia.org/wiki/Complex_number

16

math.js庫支持複數,矩陣等。該庫與JavaScript內置的Math庫兼容,因此非常易於使用。

http://mathjs.org

你只需做這樣的事情:

math.i;       // i 
math.sqrt(-4)     // 2i 
var a = math.complex('2 + 3i'); // 2 + 3i 
var b = math.complex(4, 5);  // 4 + 5i 
math.add(a, b);     // 6 + 8i 
math.multiply(a, b);   // -7 + 22i 
math.eval('e^(pi*i) + 1');  // ~0 
// etc... 

編輯:注意數學。JS配備了一個表達式解析器,這使得它更方便的與複雜的價值觀和數學表達式的工作:

math.eval('(2 + 3i) * (4 + 5i)'); // -7 + 22i 
+0

與大多數其他語言中的複雜數字庫不同,mathjs不支持將複數轉換爲極座標或從極座標轉換複數。如果你需要,也許看看https://npmjs.org/package/Complex。 – MkV 2013-12-01 09:13:31

+3

mathjs現在支持從極座標創建和轉換複數,[見文檔](https://github.com/josdejong/mathjs/blob/master/docs/datatypes/complex_numbers.md)。 – 2014-05-04 13:51:47

+0

當我嘗試'math.eval('e ^(pi * i)+ 1')'我得到1.2246467991473532e-16。不過,這是在使用'termux'應用程序的電話的節點REPL中。 – trysis 2017-09-22 01:56:54