使用 excel 求解器,很容易找到这个方程的解(x 和 y 的最优值):
(x*14.80461) + (y * -4.9233) + (10*0.4803) ≈ 0
但是,我无法弄清楚如何在 Python 中执行此操作。现有的 scipy 优化库函数,如 fsolve() 或 leastsq() 似乎只适用于一个变量......(我可能只是不知道如何使用它们)......
有什么建议么?
谢谢!
>>> def f(x):
... return x[0]*14.80461 + x[1]*(-4.9233) + x[2]*(10*0.4803)
>>> def vf(x):
... return [f(x), 0, 0]
>> xx = fsolve(vf, x0=[0,0,1])
>>>
>>> f(xx)
8.8817841970012523e-16
由于解不是唯一的,未知的不同初始值会导致不同的(有效)解。
编辑:为什么这有效。嗯,这是一个肮脏的黑客。就是这样fsolve
,它的亲戚处理方程组。我在这里所做的,我为三个变量(具有三个元素)定义了一个由三个方程组成的系统(f(x)
返回一个三元素列表)。x
现在fsolve
使用牛顿型算法收敛到一个解。
显然,系统是欠定义的:您可以指定两个变量的任意值,例如,x[1]
并x[2]
找到x[0]
满足您拥有的唯一非平凡方程。您可以通过指定几个初始猜测来明确地看到这一点,x0
并查看不同的输出,所有这些都满足f(x)=0
一定的容差。