WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

65x10 matrix mit 65x1 multiplizieren

 

hammy
Forum-Anfänger

Forum-Anfänger


Beiträge: 14
Anmeldedatum: 25.10.10
Wohnort: Schweiz
Version: ---
     Beitrag Verfasst am: 25.11.2010, 14:50     Titel: 65x10 matrix mit 65x1 multiplizieren
  Antworten mit Zitat      
Hallo zusammen

habe ne Anfängerfrage an euch.

Ich habe ne 65x10 Matrix die ich mit einer 65x1 Matrix multiplizieren möchte.

Und zwar so

M(65,10)=
-1 1 0 -1 1 -1 0 1 1 1
...
...
...

R(65,1)=
0.05
0.02
-0.02
...

Dann möchte ich nicht die gewöhnliche Matrixmultliplikation sondern als ergebnis möche ich eine 65x10 Matrix, in der jede Zeile der M Matrix mit dem Wert der R Matrix multipliziert wird.

X(65,10)=
-0.05 0.05 0 -0.05 0.05 -0.05 0 0.05 0.05 0.05
...

Versteht ihr was ich meine?
Private Nachricht senden Benutzer-Profile anzeigen


Achi
Forum-Guru

Forum-Guru


Beiträge: 250
Anmeldedatum: 14.04.10
Wohnort: ---
Version: R2007a
     Beitrag Verfasst am: 25.11.2010, 14:57     Titel:
  Antworten mit Zitat      
Ich hoffe ich hab dich verstanden:

Code:

% Testdaten
M=rand(65,10);
R=rand(65,1);

for a=1:65
M.*R(a);
end


 

Falls es das ist und dich fragst, was der Punkt vor dem * bedeuted, siehe hier:
. Array operations. Element-by-element multiplicative operations
are obtained using .* , .^ , ./ , .\ or .'. For example,
C = A ./ B is the matrix with elements c(i,j) = a(i,j)/b(i,j).

ne Fehler, wolltest ja die Zeilen... gleich
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
Achi
Forum-Guru

Forum-Guru


Beiträge: 250
Anmeldedatum: 14.04.10
Wohnort: ---
Version: R2007a
     Beitrag Verfasst am: 25.11.2010, 15:12     Titel:
  Antworten mit Zitat      
Jetzt aber:

Code:
M=rand(65,10);
R=rand(65,1);

for a=1:65
Erg=M(a,:).*R(a)
end
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
Prinz William

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.11.2010, 17:35     Titel: Geht das nicht auch mit Repmat?
  Antworten mit Zitat      
Evtl. auch so?
Code:

M=rand(65,10);
R=rand(65,1);

Erg = M.*repmat(R,1,10);

 
 
Achi
Forum-Guru

Forum-Guru


Beiträge: 250
Anmeldedatum: 14.04.10
Wohnort: ---
Version: R2007a
     Beitrag Verfasst am: 25.11.2010, 17:35     Titel:
  Antworten mit Zitat      
Wars so richtig?

Nein, war nochn Fehler drin
for a=1:65
Erg(a,:)=M(a,:).*R(a);
end

An William, zieht man jetzt unsere Erg(s) voneinander ab kommt immer 0 raus, also ist es genau gleich!

Zuletzt bearbeitet von Achi am 25.11.2010, 17:43, insgesamt 2-mal bearbeitet
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
hammy
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 14
Anmeldedatum: 25.10.10
Wohnort: Schweiz
Version: ---
     Beitrag Verfasst am: 25.11.2010, 17:41     Titel:
  Antworten mit Zitat      
Hallo zusammen

Danke erstmal für die schnellen Antworten. Kanns im Moment leider noch nicht testen (bin am Arbeiten - leider nicht mit Matlab). Werde heute Abend noch testen können.

Melde mich nochmals.
Danke trotzdem fürs bereits geleistete Smile
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 25.11.2010, 19:46     Titel:
  Antworten mit Zitat      
Hallo,

Wenn man die FOR-Schleife benutzt, sollte man auf jeden Fall pre-allocieren:
Code:
M = rand(65,10);
R = rand(65,1);

Erg = zeros(65, 10);  % !!! Pre-allocate
for a=1:65
Erg(a, :) = M(a,:) .* R(a);
end

Sonst wird "Erg" in jeder Iteration neu allociert, was sehr ineffizient ist.

Andere Möglichkeiten:
Code:

% Genau das wird innerhalb REPMAT auch genutzt:
Erg = M .* R(:, ones(1, 10));
% Oder:
Erg = bsxfun(@times, M, R);
 

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
hammy
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 14
Anmeldedatum: 25.10.10
Wohnort: Schweiz
Version: ---
     Beitrag Verfasst am: 29.11.2010, 15:11     Titel:
  Antworten mit Zitat      
Hallo zusammen

Habs mit

Code:


probiert. Hat super geklappt. Danke vielmals!
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum posten
Du kannst Dateien in diesem Forum herunterladen
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2025 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.