Hallo Zusammen
Ich bin zur Zeit dabei, die Fakultät an der ich studiere dabei zu unterstützen von MatLab auf Python umzusteigen. Ich selber bin kein riesen Python kenner möchte es aber unbedingt werden, weshalb ich auch die Arbeit erhalten habe. Ich habe mittlerweile zirka 10 Skripte übersetzt aber nun bin ich auf ein Problem gestossen bei folgendem Code:
nu = np.linspace(1, 10000, 1000) * 1e12
w = 2 * np.pi * nu
c = 3e8
l = c / nu
wp = 2 * np.pi * 3e8 / 0.01 * 1.19e5
gamma = 2 * np.pi * 3e8 / 0.01 * 6.45e2
eps = 1 - wp^2 / np.complex(w**2, gamma * w)
n = np.sqrt(eps)
R = (abs((1 - n) / (1 + n)))**2
Der Fehler befindet sich in der Zeile die mit eps = ... beginnt. und die korrespondierende MatLab zeile ist: eps=1-wp^2 ./(w.^2+i*gamma.*w);
Ich hoffe jemand kann mir helfen kann sonst, falls es bringt den Matlab Code auch noch implementieren. In Matlab ist die variable eps als 1x1000 complex double aufgelistet.
PyCharm gibt mir folgendes aus:
TypeError: only length-1 arrays can be converted to Python scalars
und bei näherem untersuchen meint es, es wäre ein 'int' gefragt es käme jedoch eine complexe Zahl.
freundliche Grüsse aus der Schweiz
Retus
Matlab und Komplexe Zahlen
np.complex ist nur für Skalare. Du kannst den Matlab-Code fast wörtlich übersetzen:
Die Variablennamen und die magischen Zahlenwerte sind noch stark verbesserungswürdig. Vor allem `l` sollte man unter allen umständen vermeiden. Ansonsten kann man ohne Probleme sowohl in Matlab als auch in Python mehr als 2 Zeichen verwenden. Magische Werte sollten als gut verständliche Konstanten definiert werden.
Code: Alles auswählen
nu = np.linspace(1, 10000, 1000) * 1e12
w = 2 * np.pi * nu
c = 3e8
l = c / nu
wp = 2 * np.pi * 3e8 / 0.01 * 1.19e5
gamma = 2 * np.pi * 3e8 / 0.01 * 6.45e2
eps = 1 - wp**2 / (w**2 + 1j * gamma * w)
n = eps ** 0.5
R = abs((1 - n) / (1 + n)) ** 2
Sehr komisch, ich habe es eigentlich versucht, aber da habe ich wohl sonst einen Fehler gemacht. Ich danke dir herzlich. Die Variablennamen sind nicht von mir vorgegeben, ich finde sie selber nicht ideal, aber das ist eine andere Geschichte. Was meinst du mit magischen Zahlenwerte?
Danke dir auf jeden Fall schon einmal, werde es nochmals versuchen.
Edit: hat geklappt
Danke dir auf jeden Fall schon einmal, werde es nochmals versuchen.
Edit: hat geklappt

Naja, 3e8 oder 1.19e5 oder 6.45e2 kommen ja irgendwoher, haben Bedeutung. c könnte Lichtgeschwindigkeit sein, wird aber bei wp und gamma nicht benutzt. Die anderen Zahlenwerte werden wohl auch irgendwelche Physikalischen Größen beschreiben.
Formelzeichen sind bei Formeln ganz praktisch, bei Programmen erschweren sie aber das Lesen.
Formelzeichen sind bei Formeln ganz praktisch, bei Programmen erschweren sie aber das Lesen.