调用Matlab';来自python的ODE45
我想从python中调用Matlab的ode45函数,就像在下面的python代码中调用Matlab的isprime()函数一样调用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
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')