Forum: Digitale Signalverarbeitung / DSP / Machine Learning Matlab Tensorprodukt?


von Steffen P. (Gast)


Lesenswert?

Hallo,

ich steige gerade in Matlab ein und tu mich gerade an einer Stelle etwas 
schwer. Nun hoffe ich das ihr mit vielleicht weiterhelfen könnt.
Was habe ich vor? Ich habe zwei Vektoren, einen Zeilen und einen 
Spaltenvektor unterschiedlicher länge, die ich miteinander 
Multiplizieren möchte. Das soll dann in etwa so ausschauen:

x*y  1  2  3  4  5
1  1  2  3  4  5
2  2  4  6  8  10
3  3  6  9  12  15

Das ist nur die Vorhut für die eigentliche Aufgabe, nämlich eine 
Division:

x/y  1  2  3  4  5
1  1  2  3  4  5
2  0.5  1  1.5  2  2.5
3  1/3  2/3  1  4/3  5/3

Leider bekomme ich das um's Verrecken nicht hin. Mir ist grundsätzlich 
klar, dass ich die Breite des Vektors 1 auf die Länge des Vektors 2 
aufplustern muss und umgekehrt, aber wie? Ich wäre für Hilfe sehr 
dankbar.

Tada...

von Thomas (Gast)


Lesenswert?

a=[1 2 3]
b=[1 2 3 4 5]
a'*b
(a^-1)'*b

von Steffen P. (Gast)


Lesenswert?

Danke Thomas, warum bin ich nicht selbst darauf gekommen?
Das heißt also Matlab besteht darauf, dass einer der beiden ein 
Spaltenvektor und der andere ein Zeilenvektor sein muss. Warum kann man 
diesen Hinweis nicht als Fehlermeldung dem Nutzer auf die Augen bringen? 
Stattdessen wird einfach gesagt -geht nicht-, nun friss oder stirb. Ich 
seh schon, Matlab und ich werden wohl nicht die besten Freunde werden.

Tada...

von wosnet (Gast)


Lesenswert?

Das liegt aber nicht an Matlab, sondern an den Regeln der 
Matrizenmultiplikation (Spaltenzahl der linken Matrix muss mit 
Zeilenzahl der rechten übereinstimmen)...

von Walter T. (nicolas)


Lesenswert?

Steffen P. schrieb:
> Danke Thomas, warum bin ich nicht selbst darauf gekommen?
> Das heißt also Matlab besteht darauf, dass einer der beiden ein
> Spaltenvektor und der andere ein Zeilenvektor sein muss. Warum kann man
> diesen Hinweis nicht als Fehlermeldung dem Nutzer auf die Augen bringen?
> Stattdessen wird einfach gesagt -geht nicht-, nun friss oder stirb. Ich
> seh schon, Matlab und ich werden wohl nicht die besten Freunde werden.
>
> Tada...

Hallo Steffen,
also die Fehlermeldung lautet doch wahrscheinlich so:
1
??? Error using ==> mtimes
2
Inner matrix dimensions must agree
und sagt doch auch genau das aus: "Fehler in Multiplikationsroutine - 
die inneren Dimensionen müssen übereinstimmen" - denn sonst ist die 
Matrix-Multiplikation ja nicht definiert.

Viele Grüße
Nicolas

von Steffen P. (Gast)


Lesenswert?

Man mag darüber streiten, ob die Fehlermeldung weiter hilft oder nicht. 
Wenn man nicht weiß was die innere Matrix-Dimension eines Vektors ist, 
dann hilft diese Ausgabe wenig weiter. Hilfreicher wäre gewesen, machen 
sie aus einem Vektor einen Spaltenvektor und schon funktioniert es.

Thomas schrieb:
> a=[1 2 3]
> b=[1 2 3 4 5]
> a'*b
> (a^-1)'*b

Es muss übrigens (a.^-1)'*b heißen.

Tada...

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.