Discussion:
Matrizenberechnung (Leontief-Modell) mit CAS
(zu alt für eine Antwort)
Rainer
2018-03-07 16:22:03 UTC
Permalink
Raw Message
Moin,

Problemstellung:
Aus der n x n-Matrix S und der n x 1 - Matrix (Vektor) X
soll die n x n-Matrix A mit A[i,j] = S[i,j] / X[j,1] berechnet werden.

(Technologische Matrix im Leontief-Modell)

Gibt es eine Möglichkeit, A als Ergebnis einer Rechnung nur
mit Matrizenoperationen zu erhalten?

Ich suche eine effiziente Berechnungmethode für MAPLE,
die ohne Schleifen auskommt.

Danke und Gruß
Rainer
Andreas Leitgeb
2018-03-07 22:42:15 UTC
Permalink
Raw Message
Rainer <***@Rcpt.at> wrote:
da werden mal wieder Ohren gespitzt werden...
Post by Rainer
Aus der n x n-Matrix S und der n x 1 - Matrix (Vektor) X
soll die n x n-Matrix A mit A[i,j] = S[i,j] / X[j,1] berechnet werden.
(Technologische Matrix im Leontief-Modell)
Gibt es eine Möglichkeit, A als Ergebnis einer Rechnung nur
mit Matrizenoperationen zu erhalten?
Ohne Maple und Leontief zu kennen wäre da mein Ansatz so:

X zur Diagonale einer n x n Matrix machen, diese invertieren,
und mit S multiplizieren. Falls ich es damit grad falsch
herum kriegen sollte, würde ich da noch zwei transponierungen
dazustöpseln.
Rainer
2018-03-08 15:56:39 UTC
Permalink
Raw Message
On Wed, 7 Mar 2018 22:42:15 -0000 (UTC), Andreas Leitgeb
Post by Andreas Leitgeb
X zur Diagonale einer n x n Matrix machen, diese invertieren,
und mit S multiplizieren.
Falls ich es damit grad falsch
herum kriegen sollte, würde ich da noch zwei transponierungen
dazustöpseln.
Ne, passt schon!
Post by Andreas Leitgeb
X zur Diagonale einer n x n Matrix machen,
gibt es wohl keinen Befehl und programmieren will
ich ja gerade nicht.

Rainer
Andreas Leitgeb
2018-03-08 16:12:22 UTC
Permalink
Raw Message
Post by Rainer
Post by Andreas Leitgeb
X zur Diagonale einer n x n Matrix machen, diese invertieren,
und mit S multiplizieren.
X zur Diagonale einer n x n Matrix machen,
gibt es wohl keinen Befehl und programmieren will
ich ja gerade nicht.
Ich bin leider nicht damit vertraut wie die Funktionen in Maple
heissen, aber es würde mich schon sehr überraschen, wenn es keine
Konvertierung dieser Art gäbe:

x x 0 0
y --> 0 y 0
z 0 0 z

Eventuell probier: http://lmgtfy.com/?q=vector+to+diagonal+matrix+maple
Rainer
2018-03-08 16:22:21 UTC
Permalink
Raw Message
On Thu, 8 Mar 2018 16:12:22 -0000 (UTC), Andreas Leitgeb
Post by Andreas Leitgeb
Ich bin leider nicht damit vertraut wie die Funktionen in Maple
heissen, aber es würde mich schon sehr überraschen, wenn es keine
Habs im MAPLE-Forum eingestellt und bin diesbezüglich bestimmt bald
schlauer.
Andreas Leitgeb
2018-03-08 16:59:36 UTC
Permalink
Raw Message
Post by Rainer
On Thu, 8 Mar 2018 16:12:22 -0000 (UTC), Andreas Leitgeb
Post by Andreas Leitgeb
Ich bin leider nicht damit vertraut wie die Funktionen in Maple
heissen, aber es würde mich schon sehr überraschen, wenn es keine
Habs im MAPLE-Forum eingestellt und bin diesbezüglich bestimmt bald
schlauer.
Ist die Suche nach den fünf Begriffen unten echt "schwerer" als eine
Forum Anfrage? *kopfschüttel*
Post by Rainer
Post by Andreas Leitgeb
Eventuell probier: http://lmgtfy.com/?q=vector+to+diagonal+matrix+maple
Ich spoilere mal: bereits der erste Treffer enthielt den Namen
einer Funktion, die anhand der Beschreibung dort wohl exakt für
dein Problem passt.
Christian Gollwitzer
2018-03-07 22:45:33 UTC
Permalink
Raw Message
Post by Rainer
Aus der n x n-Matrix S und der n x 1 - Matrix (Vektor) X
soll die n x n-Matrix A mit A[i,j] = S[i,j] / X[j,1] berechnet werden.
(Technologische Matrix im Leontief-Modell)
Gibt es eine Möglichkeit, A als Ergebnis einer Rechnung nur
mit Matrizenoperationen zu erhalten?
Ich suche eine effiziente Berechnungmethode für MAPLE,
die ohne Schleifen auskommt.
Für MAPLE kann ich das nicht sagen, aber wenn Du eine punktweise
Division hast (also C_ij = A_ij / B_ij, in Matlab als ./ geschrieben)
dann kannst Du mit einem dyadischen Produkt den Vektor X auf eine
nxn-Matrix aufblasen. In typischen Vektorsprachen, als Beispiel
Matlab/Octave macht das sogar selber:


octave:1> A= [1 2; 3 4]
A =

1 2
3 4

octave:2> X= [ 2 3]
X =

2 3

octave:3> A ./ X
ans =

0.50000 0.66667
1.50000 1.33333


Falls dieses "Broadcasting" nicht von selber passiert, dann kann man es
mit dem dyadischen Produkt machen:

octave:6> ones(2,1)*X
ans =

2 3
2 3

octave:7> A ./ (ones(2,1)*X)
ans =

0.50000 0.66667
1.50000 1.33333


ones(2,1) liefert einen Spaltenvektor der Länge eins, der lauter 1en als
Eintrag hat. Das repliziert dann den Zeilenvektor X.

Christian
Rainer
2018-03-08 15:24:27 UTC
Permalink
Raw Message
On Wed, 7 Mar 2018 23:45:33 +0100, Christian Gollwitzer
Post by Christian Gollwitzer
Für MAPLE kann ich das nicht sagen, aber wenn Du eine punktweise
Division hast (also C_ij = A_ij / B_ij, in Matlab als ./ geschrieben)
dann kannst Du mit einem dyadischen Produkt den Vektor X auf eine
nxn-Matrix aufblasen. In typischen Vektorsprachen, als Beispiel
Die Idee ist schonmal gut, danke.

Es ist nur so, dass die *Spalten* (nicht Zeilen) der Matrix S durch
X_i geteilt werden müssen; in deinem Bsp müssen ones(...) und X also
zuvor transponiert werden.

Jetzt muss ich nur noch rauskriegen wie ich eine punktweise
Division (ohne Schleife) hinbekomme.


Gruß
Rainer
Christian Gollwitzer
2018-03-09 06:32:50 UTC
Permalink
Raw Message
Post by Rainer
On Wed, 7 Mar 2018 23:45:33 +0100, Christian Gollwitzer
Post by Christian Gollwitzer
Für MAPLE kann ich das nicht sagen, aber wenn Du eine punktweise
Division hast (also C_ij = A_ij / B_ij, in Matlab als ./ geschrieben)
dann kannst Du mit einem dyadischen Produkt den Vektor X auf eine
nxn-Matrix aufblasen. In typischen Vektorsprachen, als Beispiel
Die Idee ist schonmal gut, danke.
Es ist nur so, dass die *Spalten* (nicht Zeilen) der Matrix S durch
X_i geteilt werden müssen; in deinem Bsp müssen ones(...) und X also
zuvor transponiert werden.
Na gut, da musst Du halt das Produkt vertauschen bzw. transponieren.
Hast DU dann X nicht sowieso als Spaltenvektor? In meinem Beispiel war
der als Zeilenvektor gespeichert, das macht für Deine Anwendung dann ja
keinen Sinn.
Post by Rainer
Jetzt muss ich nur noch rauskriegen wie ich eine punktweise
Division (ohne Schleife) hinbekomme.
Das scheint kein Problem zu sein:
https://www.maplesoft.com/support/help/maple/view.aspx?path=operators%2Felementwise

Christian

Loading...