Seite 1 von 1

Matlab und Komplexe Zahlen

Verfasst: Montag 27. Januar 2020, 18:18
von Cotylaeus
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

Re: Matlab und Komplexe Zahlen

Verfasst: Montag 27. Januar 2020, 19:09
von Sirius3
np.complex ist nur für Skalare. Du kannst den Matlab-Code fast wörtlich übersetzen:

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
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.

Re: Matlab und Komplexe Zahlen

Verfasst: Montag 27. Januar 2020, 19:57
von Cotylaeus
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 :D

Re: Matlab und Komplexe Zahlen

Verfasst: Montag 27. Januar 2020, 20:26
von Sirius3
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.

Re: Matlab und Komplexe Zahlen

Verfasst: Montag 27. Januar 2020, 20:33
von Cotylaeus
ach soo... das sind plasmafrequenzen und Dämpfungskonstanten usw. und wie du richtig gedeutet hast, ist c die Lichtgeschwindigkeit. Ist alles fein säuberlich auskommentiert.