Matrixelement

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
BennyProfane
User
Beiträge: 10
Registriert: Samstag 9. März 2019, 14:07

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
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

Man macht normalerweise ein meshgrid i,j und übergibt das der Funktion, die gleich mit Matrizen rechnet

Code: Alles auswählen

i, j = np.meshgrid(range(1, 6), range(1, 6))
a = (i-3) ** 2 + j
Die Funktion für eine Matrix mit Kronecker-Delta-Inhalt heißt `eye`.
BennyProfane
User
Beiträge: 10
Registriert: Samstag 9. März 2019, 14:07

Super, danke! Funktioniert!
BennyProfane
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 :)
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

Wie hast Du das denn versucht? Code zeigen.
BennyProfane
User
Beiträge: 10
Registriert: Samstag 9. März 2019, 14:07

Hi Sirius!
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)
BennyProfane
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)
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

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:

Code: Alles auswählen

a = np.eye(6, k=1) + 2 * np.eye(6)
BennyProfane
User
Beiträge: 10
Registriert: Samstag 9. März 2019, 14:07

jo okay, habs gecheckt! Danke für deine Hilfe!
Antworten