Moin,
ich habe eine Frage zur Programmierung von Matrixelementen, die sicherlich ziemlich trivial ist. Allerdings bin ich neu dabei und habe praktisch noch keine Erfahrung. Falls die Frage schon 10^20 mal beantwortet wurde, würde ich mich freuen, wenn mir jemand einen Link schicken würde.
Ich möchte eine quadratische Matrix erstellen, am liebsten als np.array, bei der die Einträge Funktionen von Zeilenzahl i und Spaltenzahl j sind. Also z.B.:
Matrix = (a_ij) für alle i ,j = 1,...,5
mit a_ij = F(i,j)
F könnte z.B. das Kronecker-Delta sein:
F(i,j) = delta(i,j) = 1 für i = j , 0 sonst
(Wie man Funktionen definiert ist mir bekannt, mir geht es nur um die Matrix).
Wichtig ist, dass alle i,j der Reihe nach durch kombiniert werden, so wie es halt bei Matrizen der Fall ist.
Hat jemand Ideen?
Beste Grüße, BP
Matrixelement
Man macht normalerweise ein meshgrid i,j und übergibt das der Funktion, die gleich mit Matrizen rechnet
Die Funktion für eine Matrix mit Kronecker-Delta-Inhalt heißt `eye`.
Code: Alles auswählen
i, j = np.meshgrid(range(1, 6), range(1, 6))
a = (i-3) ** 2 + j
-
- User
- Beiträge: 10
- Registriert: Samstag 9. März 2019, 14:07
Super, danke! Funktioniert!
-
- User
- Beiträge: 10
- Registriert: Samstag 9. März 2019, 14:07
Hey, ich hab doch noch eine Frage dazu.
Für eine Funktion F(i,j) ohne Sprünge funktioniert Sirius' Vorschlag einwandfrei. Allerdings möchte ich auch Kroneckerdeltas einbeziehen, und zwar nicht einfach nur so, dass auf der Hauptdiagonalen Einsen und sonst Nullen erzeugt werden (wofür man ja die Eye - Funktion benutzen würde), sondern etwas komplizierter. Meine Funktion könnte z.B. lauten:
F(i,j) = delta(i+1,j) + 2*delta(i,j)
So oder ähnlich. Wenn ich mir aber ein Kroneckerdelta definiere und es in meine Funktion einbinde, werden bei Sirius' Lösung ALLE is und js miteinander verglichen, weswegen ausgegeben wird, das Ergebnis sei uneindeutig. Das ist komisch, weil es im Falle einer stetigen Funktion ja funktioniert, dass die Matrixelemente für jedes EINZELNE i und j berechnet werden.
Hat jemand Ideen? Freue mich über jede Antwort
Für eine Funktion F(i,j) ohne Sprünge funktioniert Sirius' Vorschlag einwandfrei. Allerdings möchte ich auch Kroneckerdeltas einbeziehen, und zwar nicht einfach nur so, dass auf der Hauptdiagonalen Einsen und sonst Nullen erzeugt werden (wofür man ja die Eye - Funktion benutzen würde), sondern etwas komplizierter. Meine Funktion könnte z.B. lauten:
F(i,j) = delta(i+1,j) + 2*delta(i,j)
So oder ähnlich. Wenn ich mir aber ein Kroneckerdelta definiere und es in meine Funktion einbinde, werden bei Sirius' Lösung ALLE is und js miteinander verglichen, weswegen ausgegeben wird, das Ergebnis sei uneindeutig. Das ist komisch, weil es im Falle einer stetigen Funktion ja funktioniert, dass die Matrixelemente für jedes EINZELNE i und j berechnet werden.
Hat jemand Ideen? Freue mich über jede Antwort
-
- User
- Beiträge: 10
- Registriert: Samstag 9. März 2019, 14:07
Hi Sirius!
Hier ist mein Code.
Hier ist mein Code.
Code: Alles auswählen
import numpy as np
def delta(m,n):
if m == n:
return 1
elif m != n:
return 0
i, j = np.meshgrid(range(1,6), range(1,6))
a = delta(i,j)
print(a)
-
- User
- Beiträge: 10
- Registriert: Samstag 9. März 2019, 14:07
bzw.
Code: Alles auswählen
import numpy as np
def delta(m,n):
if m == n:
return 1
elif m != n:
return 0
i, j = np.meshgrid(range(1,6), range(1,6))
a = delta(i,j+1)+2*delta(i,j)
print(a)
Wie schon geschrieben, muß die Funktion mit Matrizen umgehen können. Du bekommst also beim Gleichheitsvergleich eine Fehlermeldung, die genau das besagt.
Du mußt etwas Abstand von Indizes gewinnen, hin zu mehr Matrixrechnen. Lösung mit eye:
Du mußt etwas Abstand von Indizes gewinnen, hin zu mehr Matrixrechnen. Lösung mit eye:
Code: Alles auswählen
a = np.eye(6, k=1) + 2 * np.eye(6)
-
- User
- Beiträge: 10
- Registriert: Samstag 9. März 2019, 14:07
jo okay, habs gecheckt! Danke für deine Hilfe!