Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/416.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.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_Equation_Solver - Fatal编程技术网

JavaScript方程求解器库

JavaScript方程求解器库,javascript,equation,solver,Javascript,Equation,Solver,是否有一个JavaScript库或函数可以解决变量方程 例如9=3+x并求解x。但它也应该解决更高级的方程,包括正弦、余弦和切线。您可以通过执行excel所称的“目标搜索”(测试x的值,直到方程的两侧近似匹配)来近似求解。您可以通过将等式按“=”符号拆分,将每次出现的x替换为一个值,eval计算两侧,并确定差值是否低于某个阈值来实现此目的。虽然相对简单,但该方法也存在缺陷(除了近似值),例如,该算法可能认为双方正在收敛,而实际上它只是一个局部最小值/最大值,并且在差值刚好低于阈值后会发散。您还需

是否有一个JavaScript库或函数可以解决变量方程


例如
9=3+x
并求解x。但它也应该解决更高级的方程,包括正弦、余弦和切线。

您可以通过执行excel所称的“目标搜索”(测试
x
的值,直到方程的两侧近似匹配)来近似求解。您可以通过将等式按“=”符号拆分,将每次出现的
x
替换为一个值,
eval
计算两侧,并确定差值是否低于某个阈值来实现此目的。虽然相对简单,但该方法也存在缺陷(除了近似值),例如,该算法可能认为双方正在收敛,而实际上它只是一个局部最小值/最大值,并且在差值刚好低于阈值后会发散。您还需要测试多个起点,以使用多个解求解方程

对于一个像人类一样(通过重新排列方程的两面并应用反函数、导数/积分等)实际求解方程的程序来说,要复杂得多,而且感觉完全是专有的;)

看下面的脚本。它使用。

快速搜索来求解方程。我对它们一无所知,但它们似乎是合法的。algebra.js有一个很好的OOP API,但似乎不能处理三角函数。

我想建议。它可以代数求解多达四次函数,也可以数值求解一系列函数。另一个要考虑的库是

//解线性方程组
变量x=nerdamer.solve('(x+1)*3=x-6','x');
log(x.toString());
//二次的
var x2=nerdamer.solve('x^2-8x+15','x');
console.log(x2.toString());
//二次代数
var x3=nerdamer.solve('x^2-ax+3*b','x');
log(x3.toString());
//多根
变量x4=nerdamer.solve('x^6+41*x^5+652*x^4+5102*x^3+20581*x^2+40361*x+30030','x');
console.log(x4.toString());
//函数-在预定义范围内,数值大约为零
var x5=nerdamer.solve('cos(x)^2+sin(x-1)'x');
log(x5.toString());
//解线性方程组
var x6=nerdamer.solveEquations(['2x+y=7','x-y+3z=11','y-z=-1']);
log(x6.toString());
//解非线性方程组
var x7=nerdamer.solveEquations(['3*x^2/y=2','z*x*y-1=35','5*z^2+7=52']);
log(x7.toString())

可以找到形式为f(x)=0的方程组的解。它是用C++移植到C++到JavaScript的。文件有点大,但是如果你需要一个真正高性能的解算器,这是你最好的选择。它在web组装中运行,因此速度很高。 以下是一个例子:


鲍威尔函数
这是使用Ceres.js解决鲍威尔函数的一个示例

从导入{Ceres}https://cdn.jsdelivr.net/gh/Pterodactylus/Ceres.js@master/Ceres-v1.5.3.js' var fn1=函数f1(x){ 返回(x[0]+10*x[1]); } 变量fn2=函数f2(x){ 返回(数学sqrt(5)*(x[2]-x[3]); } 变量fn3=功能f3(x){ 返回数学功率(x[1]-2*x[2],2); } var fn4=功能f4(x){ 返回Math.sqrt(10)*Math.pow(x[0]-x[3],2); } 让解算器=新Ceres() add_函数(fn1)//将第一个方程添加到解算器。 add_函数(fn2)//将第二个方程添加到解算器中。 add_函数(fn3)//将第三个方程添加到解算器中。 add_函数(fn4)//将第四个方程添加到解算器中。 //add_callback(c1)//将回调添加到解算器。 //add_lowerbound(0,1.6)//为x[0]变量添加一个下限 //add_upperbound(1,1.7)//为x[1]变量添加一个上限 solver.promise.then(函数(结果){ var x_guess=[1,2,3,4]//猜测解的初始值。 var s=solver.solve(x_guess)//解方程 var x=s.x//将计算出的解数组分配给变量x document.getElementById(“demo”).value=s.report//Print solver report 解析器()/ /需要在C++中释放内存 })
如果您创建一个“约束网络”,这将是可能的。很可能,但是您可以创建一个JS库来与Wolfram Alpha API交互。请注意,在JavaScript数字格式中,
0.1+0.2
不等于
0.3
。这使得求解包含十进制值的方程变得很痛苦。@ŠimeVidas-浮点…:(