python - 从 python 调用 Matlab 的 ODE45

标签 python matlab

我想从 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/

相关文章:

python - 如何计算一列值与另一列中的 jsons 值列表之间的差异,并因此创建 2 个新列?

arrays - 计算 Matlab 中向量中包含少于 3 个连续零的元素

matlab - 如何使神经网络训练图表具有对数纵轴?

Python VTK,如何录制视频?

python - SqlAlchemy 中的 order_by Levenshtein 距离

升级到 ubuntu 20.4 后的 Matlab opengl 软件渲染 - 低级图形问题

matlab - 如果最初保存在 UNIX 中,如何在 Windows 中加载 matlab 文件 (.mat)

python opencv TypeError:输出数组的布局与 cv::Mat 不兼容

python - 如何防止 mod_wsgi Django 应用程序重复重新加载?

python - 如何在 Windows 10 上安装 Theano for Python 3.5