2017-02-21 128 views
-2

我真的很感謝能用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代碼?

非常感謝幫助, 阿薩夫

+1

您是否閱讀過[文檔](https://www.mathworks.com/help/matlab/matlab_external/call-python-from-matlab.html)? – Suever

+0

@Suever我已經嘗試過,但我無法理解如何使用它。 –

+0

Python界面上的所有信息都是[here](https://www.mathworks.com/help/matlab/call-python-libraries.html)。你能告訴我們你試過的代碼不行嗎? – Suever

回答

0

你可能需要外殼逃逸出來Matlab在調用蟒蛇 - 前綴你會在外殼上與!運行命令。

Matlab Shell Escape Functions建議保存一個mat文件,然後在python代碼中打開它 - 請參閱Read .mat files in Python

在編譯python方面,你可以看看How to compile a Python file,看看是否有幫助你。

+0

感謝@Dragon,我得到一個「你正在尋找的頁面不存在。」給你第一個鏈接的消息。另外,我對編程非常陌生,不知道shell轉義的含義,但我想指出的是,我期望在Matlab中運行Python代碼,而不是相反。感謝您的幫助 –

+0

修復了網址,謝謝! 如果你想從Matlab運行Python,Matlab必須將控制和函數需要的數據傳遞給Python。第一個是通過shell轉義完成的[本質上:「停止你正在做的並且運行這個其他命令」),第二個應用程序是爲了保存數據,調用python然後python加載數據,做一些計算,保存一些新的數據,然後matlab再次加載數據。這絕對不是純粹的Python解決方案。 – Dragon

+0

有沒有可能編寫人們爲了讓它適用於我的示例而需要添加到Python和Matlab代碼中的代碼行,或者它涉及到/重要嗎?無論如何,感謝您的幫助! –