【发布时间】:2017-02-21 14:08:26
【问题描述】:
我非常感谢在 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 中调用它,而无需在运行的计算机上安装它使用的库(例如 numba 库) Matlab代码?
非常感谢您的帮助, 阿萨夫
【问题讨论】:
-
你读过the documentation吗?
-
@Suever 我确实尝试过,但我不明白如何使用它。
-
Python接口的所有信息都是here。您能否向我们展示您尝试过但不起作用的代码?
-
@Suever 我还没有走得足够远来尝试实际实施一个实际的解决方案,因为我真的不知道从哪里开始。我希望我的特定代码的解决方案会很简单,并且我可以从中学习。