从Matlab运行Python代码

时间:2017-02-21 14:08:26

标签: python matlab numpy

我非常感谢在Matlab中运行用Python 3编写的代码。 我的Python代码加载各种库并使用它们来执行微分方程的数值积分(对于numpy向量: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,dtau,r和delta。我会很满意这样的解决方案:

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

其中pythoncode.py被视为Matlab函数,它接受所述参数,将它们提供给Python代码并返回Matlab向量e_array。

我想指出,我希望能够从Matlab调用几个额外的Python代码,我希望从你对这个问题的答案中了解如何做到这一点。特定的Python代码。 一个相关的问题涉及我在Python代码中使用的Python库:有没有办法来编译" Python代码,我可以在Matlab中调用它,而无需在运行Matlab代码的计算机上安装它使用的库(例如numba库)?

非常感谢您的帮助, 阿萨夫

1 个答案:

答案 0 :(得分:0)

您可能需要从Matlab中跳出shell来调用python - 在shell上运行!前缀的命令。

Matlab Shell Escape Functions建议保存一个mat文件,然后在你的python代码中打开它 - 请参阅Read .mat files in Python

在编译python方面,您可以查看How to compile a Python file,看看是否对您有帮助。