如何将方程中的多项式项移到一边?

时间:2013-09-12 13:39:10

标签: javascript math polynomial-math

所以我在一个字符串的js中有一个等价的多项式方程式,我可以评估。 (假设eval执行是安全的)例如

2 * x + 3 * y - z = 0;

上面是一个字符串,并且在适当的范围内定义了x,y和z,我可以评估上面的字符串,它会给我结果。我想这样做,以便我可以找到其他人给出的x的值。所以我想要的输出就是。

x = (z - 3 * y) / 2;

是否可以获得上述字符串?如果不是那么是否可以在给出y和z时找到x的值?我知道这听起来像是家庭作业,但事实并非如此。

2 个答案:

答案 0 :(得分:2)

var x, y, z, r1, r2, a, b,
    eq = "2 * x + 3 * y - z = 0;";

console.clear();
eq = eq.replace(" = 0;", "");
y = 12; z = 34;
x = 1; r1 = eval(eq);
x = 2; r2 = eval(eq);
a = r2 - r1; b = r1 - a; x = -b / a;
console.log(x);

或者,如果您需要将解决方案公式作为字符串:

var eq = "2 * x + 3 * y - z = 0;", eq2,
    match, a, b, c, x, y, z;

function process(prefix) {
    prefix = prefix.replace(/[\s\*]/g, "");
    switch (prefix) {
        case "" : return +1;
        case "+": return +1;
        case "-": return -1;
        default : return +prefix;
    }
}

console.clear();
match = eq.match(/^([^x]*)x([^y]*)y([^z]*)z ?= ?0;$/);
if (match === null || match.length !== 4)
    console.log("Invalid equation");
else {
    a = process(match[1]);
    b = process(match[2]);
    c = process(match[3]);
    eq2 = "(" + (-b) + " * y + " + (-c) + " * z) / " + a; 
    console.log(eq2);
    y = 12; z = 34;
    x = eval(eq2);
    console.log(x);
}

eq2将为(-3 * y + 1 * z) / 2

答案 1 :(得分:0)

如果我已正确理解你的问题,

找到x:

的值

评估剩余的表达式,更改其符号,并将其除以x的系数(如果它不为零)。

获取字符串数组

更改每个剩余系数的符号,并将每个系数除以x的系数。

编辑:正如已经建议的那样,

say b = exp(0,y,z), a = exp(1,0,0).
x = -b/a