从MATLAB运行Python代码



我真的很感谢MATLAB中的Python 3编写代码的一些帮助。我的Python代码加载了各种库,并使用它们执行微分方程的数值集成(对于Numpy Vector:e_array)。我想从MATLAB调用的Python代码如下:

from numba import jit
from scipy.integrate import quad
import numpy as np
@jit(nopython = True)  
def integrand1(x,e,delta,r):
    return (-2*np.sqrt(e*r)/np.pi)*(x/np.sqrt(1-x**2))/(1+(delta+2*x*np.sqrt(e*r))**2)
@jit(nopython = True) 
def f1(e,delta,r):
    return quad(integrand1, -1, 1, args=(e,delta,r))[0]
@jit(nopython = True)  
def runge1(e,dtau,delta,r):
    k1 = f1(e,delta,r)
    k2 = f1((e+k1*dtau/2),delta,r)
    k3 = f1((e+k2*dtau/2),delta,r)
    k4 = f1((e+k3*dtau),delta,r)
    return e + (dtau/6)*(k1+2*k2+2*k3+k4)
time_steps = 60
e = 10
dtau=1
r=1
delta=-1
e_array = np.zeros(time_steps)
time = np.zeros(time_steps)
for i in range(time_steps):
    e_array[i] = e
    time[i] = i*dtau       
    e = runge1(e,dtau,delta,r)

理想情况下,我希望能够在MATLAB中调用此Python代码(Pythoncode.py),就好像它是MATLAB函数一样,并将其馈送为参数:time_steps,e,e,dtau,r和delta。我对看起来像这样的解决方案感到非常满意:

e_array = pythoncode.py(time_steps = 60, e = 10, dtau = 1, r = 1, delta = -1)

其中pythoncode.py被视为MATLAB函数,该功能采用上述参数,将其馈入Python代码并返回Matlab vector e_array。

我想指出的是,我想从Matlab致电一些其他python代码,我希望从有关此特定的Python代码的答案中了解如何做到这一点。一个相关的问题涉及我在Python代码中使用的Python库:有没有办法"编译" Python代码,以便我可以在MATLAB中称其为MATLAB,而无需在计算机上安装它使用的库(F.E NUMBA库)MATLAB代码?

非常感谢您的帮助asaf

您可能需要从matlab中逃脱以调用python-前缀使用!在外壳上运行的命令。

matlab shell逃生功能建议保存垫子文件,然后在python代码中打开它 - 请参阅python中的.mat文件。

在编译Python方面,您可以查看如何编译Python文件,看看是否对您有帮助。

最新更新