28

最近,我正在尝试使用一些涉及虚数i的方程进行计算。但是,与eor不同π,没有任何方法或本机函数会返回i。在Google 中快速搜索并没有给我任何答案。关于如何实现它的任何想法?

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

3 回答 3

23

math.js 库支持复数、矩阵等。该库与 JavaScript 的内置数学库兼容,因此非常易于使用。

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...

编辑:请注意,math.js 带有一个表达式解析器,这使得处理复杂值和数学表达式更加方便:

math.eval('(2 + 3i) * (4 + 5i)'); // -7 + 22i
于 2013-05-13T20:50:11.557 回答
13

假设您真的想要复数,而不仅仅是虚数部分:

我将模拟一个复数,就像你模拟一个二维点一样,即一对数字。

就像一个点有 x 和 y 分量一样,复数也有实部和虚部。这两个组件都可以用普通的数字类型(int、float 等)建模

但是,您需要为所有数学运算定义新功能。

复数的加法和减法与点的加法和减法相同 - 将单独的组件相互添加,不要混合它们。例如:

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

乘法的工作原理就像您在 (a+b)*(c+d) = (ac+ad+bc+bd) 时在代数中学到的一样。

除了现在你还必须记住 i*i = -1。所以:

(a+bi)*(c+di) = (ac+adi+bci+bdii) = (ac-bd) + (ad+bc)i

有关除法和求幂,请参阅http://en.wikipedia.org/wiki/Complex_number

于 2013-03-14T02:45:38.803 回答
6

我不是数学专家,但我尝试使用另一个术语进行搜索,但得到了不同的结果。

检查这些:

我希望这有帮助。

于 2013-03-14T01:06:59.317 回答