我想从 python 调用 Matlab 的 ode45 函数,就像在下面的 python 代码中调用 MATLAB 的 isprime() 函数一样
import matlab.engine
eng = matlab.engine.start_matlab()
tf = eng.isprime(37)
print(tf)
但我真的不知道如何用Python实现代码。 我试过了
import matlab.engine
def dydt(t,y):
dydt= 2*y
return dydt
eng = matlab.engine.start_matlab()
T,Y=eng.ode45(dydt,[0, 20],[2, 0])
它返回了:
line 73, in call out=_stdout, err=_stderr)
TypeError: unsupported Python data type: function.
我已经根据以下链接安装了适用于 Python 的 MATLAB Engine API https://www.mathworks.com/help/matlab/matlab_external/install-the-matlab-engine-for-python.html并使用以下链接中的示例成功测试了它 https://www.mathworks.com/help/matlab/matlab_external/call-matlab-functions-from-python.html .
我发现以下可能相关的线程 Imitate ode45 function from MATLAB in Python 但据我所知,他们只是使用 python 的库来求解 ODE,而不是从 python 调用 MATLAB 的 ODE45。也许我只是没有正确理解这一点。
有人可以帮助我在这个问题上取得进展吗? 谢谢!
最佳答案
复制 doc 中的示例:
import matlab.engine
eng = matlab.engine.start_matlab()
eng.eval('tspan = [0 5];',nargout = 0)
eng.eval('y0 = 0;',nargout = 0)
t,y=eng.eval('ode45(@(t,y) 2*t, tspan, y0)',nargout = 2)
现在您也可以绘制结果:
eng.plot(t,y,'-o')
关于python - 从 python 调用 Matlab 的 ODE45,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58428651/