我想解决一个非线性方程组(我有17个变量和17个方程)。我使用了scipy.optimize.fsolve,但错误信息显示" fsolve:' func'的输入和输出形状之间存在不匹配。争论' 。",有谁知道为什么?我在这里附上我的代码(它可能看起来很复杂,但实际上只是一个非线性方程组)非常感谢!!!!
import scipy
import scipy.optimize
f = lambda x: [0.5*x[4]*x[6]*(x[16]**2-x[15]**2)-x[0],\
0.5*x[4]*x[7]*(x[16]**2-x[15]**2)-x[1],\
0.5*x[4]*x[9]*(1-x[16]**2)-x[2],\
0.5*x[4]*x[8]*(x[16]**2-x[15]**2)+0.5*x[4]*x[10]*(1-x[16]**2)+x[5]-x[3],\
(2*x[6]*(x[16]**2-x[15]**2))/((x[6]**2+x[7]**2)*(x[16]**2-x[15]**2)**2+x[9]**2*(1-x[16]**2)**2)-x[4],\
1-0.5*x[4]*((x[6]+x[8])*(x[16]**2-x[15]**2)+x[10]*(1-x[16]**2))-x[5],\
(1-x[0])/(x[0]*x[2]**2)-x[6],\
-x[1]/(x[0]*x[2]**2)-x[7],\
-x[3]/(x[0]*x[2]**2)-x[8],\
-x[2]/(x[0]*((1-x[0])**2+x[1]**2))-x[9],\
((1-x[0])-x[3])/(x[0]*((1-x[0])**2+x[1]**2))-x[10],\
(1-x[0])*(2*x[6]+x[8])-x[1]*x[7]-x[3]*x[6]-x[3]*x[8]-x[11],\
x[10]*(1-x[0])-x[2]*x[9]-x[3]*x[10]-x[12],\
x[6]**2*(3*(1-x[0])**2+2*x[1]**2+2*x[2]**2+x[3]**2)+x[7]**2*(2*(1-x[0])**2+x[1]**2+x[2]**2)+x[8]**2*((1-x[0])**2+x[1]**2+x[2]**2)-x[13],\
x[9]**2*(2*(1-x[0])**2+x[1]**2+x[2]**2+x[3]**2)+x[10]**2*((1-x[0])**2+x[1]**2+x[2]**2)-x[14],\
(x[12]-0.5*x[0]*x[14])*x[15]-0.5*x[0]/x[15]*(2*x[0]**2+x[1]**2+x[2]**2+x[3]**2-2)-0.1+x[2]]
x0 = scipy.optimize.fsolve(f,[0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1,1.1,1.2,1.3,1.4,1.5,1.6,1.7],)
print x0
答案 0 :(得分:0)
您的目标函数包含16个元素,而不是您建议的17个元素。因此,简单地向f()
提供另一个元素将解决问题,例如:
f = lambda x: [..., ..., ..., sum(x)]
x0 = scipy.optimize.fsolve(f,[0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1,1.1,1.2,1.3,1.4,1.5,1.6,1.7],)
print x0
[ 5.00037636e-01 1.69907838e-12 4.99999999e-01 4.99962364e-01
9.63171784e-05 1.00000000e+00 3.99939790e+00 7.19258762e-12
-3.99939790e+00 -4.00030112e+00 7.16678138e-15 1.99954843e+00
2.00015055e+00 3.19873572e+01 1.60006023e+01 4.67385102e-01
-5.09548388e+01]