2017-02-21 6 views
-2

Ich würde wirklich etwas Hilfe bei der Ausführung von Code in Python 3 geschrieben von Matlab. Mein Python-Code lädt verschiedene Bibliotheken und verwendet sie zur numerischen Integration einer Differentialgleichung (für den numpy Vektor: e_array). Der Python-Code, die ich mag würde von Matlab nennen, ist die folgende:Running Python-Code von Matlab

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) 

Idealerweise würde ich dieses Python-Code in der Lage sein möchten zu nennen (pythoncode.py) in Matlab, als ob es sich um eine Funktion Matlab waren und füttere die Parameter: time_steps, e, dtau, r und delta. Ich würde mit einer Lösung sehr glücklich sein, die wie folgt aussieht:

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

wo pythoncode.py als Matlab-Funktion behandelt wird, die die Parameter nimmt, führt sie in den Python-Code und gibt den Matlab Vektor e_array.

Ich möchte darauf hinweisen, dass es mehrere zusätzliche Python-Codes gibt, die ich gerne von Matlab aus aufrufen könnte. Ich hoffe, dass ich anhand der Antworten zu diesem speziellen Python-Code eine Vorstellung davon bekommen kann . Eine verwandte Frage betrifft die Python-Bibliotheken, die ich im Python-Code verwende: Gibt es eine Möglichkeit, den Python-Code so zu "kompilieren", dass ich ihn in Matlab aufrufen kann, ohne die verwendeten Bibliotheken (zB die numba-Bibliothek) auf dem Computer zu installieren läuft der Matlab-Code?

Vielen Dank für die Unterstützung, Asaf

+1

Haben Sie [die Dokumentation] gelesen (https://www.mathworks.com/help/matlab/matlab_external/call-python-from-matlab.html)? – Suever

+0

@Suever Ich habe definitiv versucht, aber ich konnte nicht verstehen, wie man es benutzt. –

+0

Alle Informationen zur Python-Schnittstelle sind [hier] (https://www.mathworks.com/help/matlab/call-python-libraries.html). Können Sie uns den Code zeigen, den Sie ausprobiert haben und der nicht funktioniert? – Suever

Antwort

0

Sie müssen wahrscheinlich Flucht aus Matlab Shell Python aufzurufen - Präfix den Befehl, den Sie auf der Schale mit ! laufen würde.

Matlab Shell Escape Functions schlägt vor, eine Matte-Datei zu speichern und dann in Ihrem Python-Code zu öffnen - siehe Read .mat files in Python.

In Bezug auf die Kompilierung der Python, könnten Sie einen Blick auf How to compile a Python file werfen und sehen, ob das Ihnen hilft.

+0

Danke @Dragon von Ich erhalte eine "Die von Ihnen gesuchte Seite existiert nicht." Nachricht für Ihren ersten Link. Außerdem bin ich sehr neu in der Programmierung und kenne keine Shell-Escape-Mittel, aber ich möchte darauf hinweisen, dass ich versuche, den Python-Code in Matlab auszuführen und nicht umgekehrt. Danke Agian –

+0

Die URL repariert, danke! Wenn Sie Python von Matlab ausführen möchten, muss Matlab die Kontrolle und die Daten, die die Funktion benötigt, an Python übergeben. Die erste davon wird durch die Shell-Escape [im Wesentlichen: "Stoppen Sie, was Sie tun, und führen Sie diesen anderen Befehl"], der Appproach auf die zweite ist für Matlab, um die Daten zu speichern, rufen Sie Python dann Python, um die Daten zu laden, Mach ein paar Berechnungen, speichere ein paar neue Daten und dann Matlab, um die Daten wieder zu laden. Es gibt definitiv keine reine Python-Lösung dafür. – Dragon

+0

Gibt es eine Chance, dass Sie die Codezeilen schreiben könnten, die Sie sowohl zu den Python- als auch zu den Matlab-Codes hinzufügen müssten, damit es für mein Beispiel funktioniert oder involviert/schwer? Danke für deine Hilfe so weit wie auch immer! –