Seite 1 von 1

Matrixelement

Verfasst: Samstag 9. März 2019, 14:22
von BennyProfane
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

Re: Matrixelement

Verfasst: Samstag 9. März 2019, 15:21
von Sirius3
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`.

Re: Matrixelement

Verfasst: Samstag 9. März 2019, 19:13
von BennyProfane
Super, danke! Funktioniert!

Re: Matrixelement

Verfasst: Montag 11. März 2019, 15:19
von BennyProfane
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 :)

Re: Matrixelement

Verfasst: Montag 11. März 2019, 15:38
von Sirius3
Wie hast Du das denn versucht? Code zeigen.

Re: Matrixelement

Verfasst: Montag 11. März 2019, 16:41
von BennyProfane
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)

Re: Matrixelement

Verfasst: Montag 11. März 2019, 16:43
von BennyProfane
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)

Re: Matrixelement

Verfasst: Montag 11. März 2019, 16:49
von Sirius3
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)

Re: Matrixelement

Verfasst: Montag 11. März 2019, 17:06
von BennyProfane
jo okay, habs gecheckt! Danke für deine Hilfe!