我的函数“par_impl(y)”中有两个非线性方程组,我可以使用scipy.optimize.root独立解决 . 这里“y”是一个参数 . 但我希望从ODE求解器odeint中调用这个系统,以便为“y”的不同值求解它,并与简单的ODE相结合 . 这给了我fsolve不匹配形状错误 .
从scipy.optimize import root import matplotlib.pyplot从scipy.integrate import odeint def par_impl(y):import functionh(x):import numpy as np from scipy.optimize import root import matplotlib.pyplot
return [y(x [0] ** 2) - x [1] -23,-4 - y * x [0](x [1] ** 2)]
sol = root(functionh,[1,1])
返回sol.x
def dy_dt(y,t):dydt =(y ** 0.5)par_impl(y)[0]
返回dydt
ls = np.linspace(0,2,50)y_0 = 2 Ps = odeint(dy_dt,y_0,ls)y = Ps [:,0] plt.plot(ls,y,“”,label =“X”) plt.legend(); plt.figure()
我得到的错误是:
文件“C:\ Users \ matteo \ AppData \ Local \ Continuum \ anaconda3 \ lib \ site-packages \ scipy \ optimize \ minpack.py”,第41行,在_check_func中引发TypeError(msg)TypeError:fsolve:有一个'func'参数'functionh'的输入和输出形状之间不匹配 . 形状应为(2,),但它是(2,1) .
1 回答
问题是
y
是代码中len
=1
的列表 . 要访问其元素,您需要在函数中使用y[0]
. 下面是您的代码的工作版本(不显示整个代码)和输出图 .Output