使用excel求解器,很容易找到这个等式的解(x和y的最佳值):
(x * 14.80461)+(y * -4.9233)+(10 * 0.4803)≈0
但是,我无法弄清楚如何在Python中执行此操作。现有的scipy优化库函数如fsolve()或leastsq()似乎只能使用一个变量....(我可能只是不知道如何使用它们)......
有什么建议吗?
谢谢!
答案 0 :(得分:5)
>>> 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
达到一定的容差。