调用Matlab';来自python的ODE45

调用Matlab';来自python的ODE45,python,matlab,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

我想从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])
它返回:

第73行,在呼叫中 输出=\u标准输出,错误=\u标准输出)

TypeError:不支持的Python数据类型:函数

我已经根据以下链接安装了MatlabEngineAPI for Python 并使用以下链接中的示例成功地测试了它

我发现以下线索可能与此相关 但是从我看到的情况来看,他们只是使用python的库来解决ODE,而没有从python调用MATLAB的ODE45。也许我只是没有正确理解

有人能帮我在这个问题上取得进展吗? 谢谢

您可以使用,或者最好使用:

(官方文件中的示例。)

您可以使用,或者,可能最好使用:


(官方文件中的示例。)

复制以下文件中的示例:

现在,您也可以绘制结果:

eng.plot(t,y,'-o')

从中复制示例:

现在,您也可以绘制结果:

eng.plot(t,y,'-o')


可能是重复的?@norok2,谢谢你,我可能最终会这么做。也许为了完善我的问题:我想运行MATLAB的ode45,就像在下面的链接中运行isprime()函数一样:您是否尝试过
eng.ode45()
?在数字之间加一个逗号:
T,Y=eng.ode45(vdp1[0,20],[2,0])
,您现在在Python中……可能是@norok2的副本,谢谢你,我可能最终会这么做的。也许为了完善我的问题:我想运行MATLAB的ode45,就像在下面的链接中运行isprime()函数一样:您是否尝试过
eng.ode45()
?在数字之间加一个逗号:
T,Y=eng.ode45(vdp1[0,20],[2,0])
,您现在在Python中了……谢谢您的回答。但这些是不是很科学的图书馆?我更希望从python调用MATLAB的ode45。@FinX是正确的。如果您只是在从Python调用MATLAB代码之后,那么这个问题的文本是相当误导的。谢谢您的回答。但这些是不是很科学的图书馆?我更希望从python调用MATLAB的ode45。@FinX是正确的。如果您只是在从Python调用MATLAB代码之后,那么这个问题的文本是相当误导的。。。你能解释一下eval()函数在那里做什么吗?还有(“term?@FinX,不客气。我的错,我的答案中有一个拼写错误。@UnerableLightness,你能解释一下为什么在这种情况下需要eval()函数吗?”我问这个问题是因为我在上面的问题中发布的代码中,isprime()函数不需要eval()函数。@FinX之所以需要它,是因为:
TypeError:不支持的Python数据类型:function。
ode45()
需要一个你无法传递的函数。@FinX-norok2非常合适。实际上,我使用的是Anaconda包附带的Spyder IDE…你能解释一下eval()是什么吗函数在那里吗?还有(“term?@FinX,不客气。我的错,我的答案中有一个拼写错误。@难以忍受的轻,你能解释一下为什么在这种情况下需要eval()函数吗?我问这个问题是因为我在上面的问题中发布的代码中,isprime()函数不需要eval()函数。@FinX之所以需要它,是因为:
TypeError:不支持的Python数据类型:function。
ode45()
需要一个函数,否则无法传递。@FinX norok2是正确的。
eng.plot(t,y,'-o')