Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/384.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript中的三次方程_Javascript_Matlab_Equation Solving - Fatal编程技术网

Javascript中的三次方程

Javascript中的三次方程,javascript,matlab,equation-solving,Javascript,Matlab,Equation Solving,我正在尝试用Javascript创建一个“立方方程解析程序应用程序”,我有一段代码在Matlab中实现了这一点。它需要使用复数,我知道Javascript本身无法处理这些数字,所以我使用MathJS库。我试图将R代码转换成Javascript代码,但没有得到正确的答案。有谁能帮我把它写得恰到好处吗 I try to calculate cubic roots of: "x^3 + -4x^2 - 7x - 10 = 0". Output in Matlab: "X1 = 5,

我正在尝试用Javascript创建一个“立方方程解析程序应用程序”,我有一段代码在Matlab中实现了这一点。它需要使用复数,我知道Javascript本身无法处理这些数字,所以我使用MathJS库。我试图将R代码转换成Javascript代码,但没有得到正确的答案。有谁能帮我把它写得恰到好处吗

    I try to calculate cubic roots of: "x^3 + -4x^2 - 7x - 10 = 0". 

    Output in Matlab: "X1 = 5,5768 X2 = -0.07884 + 1.0824i X3 = -0.7884  - 1.0824i".

    Output in Javascript: "X1 = 5.5768 X2 = 1.333 - 2.5925i X3 = 1.333 - 2.5925i".
我的错在哪里? 谢谢你

MATLAB:

clear
clc
%Equations Coefficients
p=-4; q=-7 r=-10;
k = (3 * q - p^2) / 3;
m = (2 * p^3 - 9 * p * q + 27 * r) /2;
c = m^2/4 + k^3 / 27;
A = (-m/2 + sqrt(c))^1/3;
B = (-m/2 - sqrt(c))^1/3;]
z1 = A + B;
z2 = 0.5 * (-(A+B)+(A-B)*sqrt(-3));
z3 = 0.5 * (-(A+B)-(A-B)*sqrt(-3));
%Equation Roots
x1 = z1 -p/3;
x2 = z2 -p/3;
x3 = z3 -p/3;
z2 = 0.5 * (-(A+B)+(A-B)*sqrt(-3));
JAVASCRIPT:

var mensaje = "";
var mmath = mathjs();
var fields= document.getElementsByClassName('elements');

if (fields.length == 4){
    for (var i = 0; i<fields.length;i++){
        coef[i] = Number(fields[i].value);  
    }
}

if (coef[0] != 0) {
    var p = coef[1] / coef[0];
    var q = coef[2] / coef[0];
    var r = coef[3] / coef[0];
    var k = ((3 * q) - Math.pow(p,2))/3;
    var m = ((2 * Math.pow(p,3)) - (9 * p * q) + (27 * r )) / 27;
    var c1 = (Math.pow(m,2))/4;
    var c2 = (Math.pow(k,3))/27;
    var c = c1 + c2;
    var A1 = mmath.pow((-(m*0.5) + mmath.sqrt(c)),(1/3));
    var B1 = mmath.pow((-(m*0.5) - mmath.sqrt(c)),(1/3));
    var A = mmath.complex(A1);
    var B = mmath.complex(B1);
    var ApB = mmath.add(A,B);
    var AmB = mmath.add(A,-B);
    var sqrt3 = mmath.sqrt(-3);
    var z1 = ApB;
    var z2a = mmath.add(-ApB,AmB);
    var z2b = mmath.multiply(z2a,sqrt3);
    var z2 = mmath.multiply(z2b, 0.5);
    var z3a = mmath.add(-ApB,-AmB);
    var z3b = mmath.multiply(z3a,sqrt3);
    var z3 = mmath.multiply(z2b, 0.5);
    var f = -p/3;
    var x1 = mmath.add(z1,f);
    var x2 = mmath.add(z2,f);
    var x3 = mmath.add(z3,f);
    sol3[0] = "X1: " + x1 + "\n";
    sol3[1] = "X2: " + x2 + "\n";
    sol3[2] = "X3: " + x3 + "\n";

    for (var i = 0; i < 3; i++){
        mensaje+=sol3[i];
    };
    alert(""+mensaje);
};
var mensaje=“”;
var mmath=mathjs();
var fields=document.getElementsByClassName('elements');
如果(fields.length==4){

对于(var i=0;i而言,差异存在于以下部分:

MATLAB:

clear
clc
%Equations Coefficients
p=-4; q=-7 r=-10;
k = (3 * q - p^2) / 3;
m = (2 * p^3 - 9 * p * q + 27 * r) /2;
c = m^2/4 + k^3 / 27;
A = (-m/2 + sqrt(c))^1/3;
B = (-m/2 - sqrt(c))^1/3;]
z1 = A + B;
z2 = 0.5 * (-(A+B)+(A-B)*sqrt(-3));
z3 = 0.5 * (-(A+B)-(A-B)*sqrt(-3));
%Equation Roots
x1 = z1 -p/3;
x2 = z2 -p/3;
x3 = z3 -p/3;
z2 = 0.5 * (-(A+B)+(A-B)*sqrt(-3));
JavaScript:

var z2a = mmath.add(-ApB,AmB);
var z2b = mmath.multiply(z2a,sqrt3);
var z2 = mmath.multiply(z2b, 0.5);
JavaScript将
z2a
设置为等于
-2*B
(=
-A+B)+(A-B)
),将
z2b
设置为
-2*B*sqrt3
,然后将
z2
设置为
-B*sqrt3

相反,你想要

var z2a = mmath.multiply(AmB, sqrt3);
var z2b = mmath.add(-ApB, z2a);
var z2 = mmath.multiple(z2b, 0.5);
z3
的计算同样是错误的,应该

var z3a = mmath.multiply(AmB, sqrt3);
var z3b = mmath.subtract(-ApB, z3a);
var z3 = mmath.multiply(z3b, 0.5);
在做了这些更改之后,我从JavaScript获得的输出与您从MATLAB获得的输出相同,除了
X2
的实际部分以10倍的比例输出。我假设
-0.07884
应该是
-0.7884
,就像
X3
一样?

mathjs()在哪里函数?而且在最后一个for循环和最后一个if条件之后不需要这些“;”