使用fsolve(Python)求解非线性方程会导致某些初始值出现错误值

时间:2019-04-23 11:16:15

标签: python scipy nonlinear-optimization

我第一次使用fsolve来求解非线性方程。作为测试,我已经知道结果应该是什么。我正在使用下面的代码来获取x和y的值。这是前两个formulas

之类的还原摄像机校准的一部分

此代码适用于此代码,当我使用x, y = fsolve(equations, (0,0))时,但是如果将起始值更改为x, y = fsolve(equations, (1,1)),则结果不正确。结果应为0.366, 0.266。因此起始值1, 1并非完全不正确。如果我事先不知道所需的结果,我怎么知道必须使用(0,0)?由于我的启动参数可能会更改,因此我需要一个稳定的解决方案。

import numpy as np
from scipy.optimize import fsolve
import math

a = 0.356
b = 0.259

k1 = -0.17
k2 = 0.30
k3 = -0.47

def equations(p):
    x, y = p
    return ((x*(1+k1*(np.sqrt(x**2+y**2))**2+k2*(np.sqrt(x**2+y**2))**4+k3*(np.sqrt(x**2+y**2))**6))-a,(y*(1+k1*(np.sqrt(x**2+y**2))**2+k2*(np.sqrt(x**2+y**2))**4+k3*(np.sqrt(x**2+y**2))**6)-b))

x, y =  fsolve(equations, (0,0))

print("x =", x)
print("y =", y)

0 个答案:

没有答案