1

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

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

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

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

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

4

2 回答 2

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

于 2013-09-12T13:54:52.973 回答
0

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

要找到 x 的值:

计算剩余的表达式,改变它的符号,然后除以 x 的系数(如果它不为零)。

要获取字符串数组,

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

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

say b = exp(0,y,z), a = exp(1,0,0).
x = -b/a
于 2013-09-12T13:45:31.533 回答