我真的很感謝能用Matlab從Python 3編寫代碼的一些幫助。 我的Python代碼加載了各種庫,並使用它們來執行微分方程的數值積分(對於numpy向量:e_array)。 Python的代碼,我想從Matlab的調用爲以下:從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代碼?
非常感謝幫助, 阿薩夫
您是否閱讀過[文檔](https://www.mathworks.com/help/matlab/matlab_external/call-python-from-matlab.html)? – Suever
@Suever我已經嘗試過,但我無法理解如何使用它。 –
Python界面上的所有信息都是[here](https://www.mathworks.com/help/matlab/call-python-libraries.html)。你能告訴我們你試過的代碼不行嗎? – Suever