所以我在一个字符串的js中有一个等价的多项式方程式,我可以评估。 (假设eval执行是安全的)例如
2 * x + 3 * y - z = 0;
上面是一个字符串,并且在适当的范围内定义了x,y和z,我可以评估上面的字符串,它会给我结果。我想这样做,以便我可以找到其他人给出的x的值。所以我想要的输出就是。
x = (z - 3 * y) / 2;
是否可以获得上述字符串?如果不是那么是否可以在给出y和z时找到x的值?我知道这听起来像是家庭作业,但事实并非如此。
答案 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