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

[Anfänger] Matrix mit Skalar multiplizieren

 

Treuben
Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 30.11.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 30.11.2008, 02:04     Titel: [Anfänger] Matrix mit Skalar multiplizieren
  Antworten mit Zitat      
Hallo!

Ich fange gerade an mich mit Matlab bzw bei mir Octave zu beschäftigen. Es geht um Multiplikation eines Skalars mit einer Matrix.
Wenn ich das ganze in die command-line eingebe funktioniert erst: Also zuerst die Matrix "A" bestimme und dann den Skalar "x".
Jetzt will ich das aber in einem function File, wobei die Multiplikation nur für A(i,j) != 0 durchgeführt werden soll.

Folgendes hab ich selber probiert:

L = [ 1 0 0; 2 2 0; 3 3 3]
x = 2

Code:

function [Lx] = dreiMatVecMul(L,x)
n = length(L)
for i=1:n
  for j=1:i
    L(i,j) = L(i,j) * x
  end
end
L
endfunction
 


So wie das aussieht multipliziert er mit keiner 0.

Wieso krieg ich jetzt aber nicht durch eingeben von "L" in der cmd meine neue Matrix "L" sondern wieder die alte?


Gruss,
Treuben
Private Nachricht senden Benutzer-Profile anzeigen


denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 30.11.2008, 02:34     Titel:
  Antworten mit Zitat      
Hallo,
weil du Rückgabewert Lx zurückgibst?

Code:

% Lx nicht vergessen zurückzugeben
function [Lx] = dreiMatVecMul(L,x)
n = length(L)
for i=1:n
  for j=1:i
    L(i,j) = L(i,j) * x
  end
end
Lx=L;
endfunction
 


Tipp: For-Schleifen sind in Matlab nicht immer notwendig.

Code:

function L = dreiMatVecMul(L,x)
L = L*x;
 
Private Nachricht senden Benutzer-Profile anzeigen
 
Treuben
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 30.11.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 30.11.2008, 05:04     Titel:
  Antworten mit Zitat      
Ach! ... Danke Wink

Ja klar, das könnte man kürzer machen.

Aber der Witz an der Sache ist, da es sich ja um eine untere Dreiecksmatrix handelt, man mit keiner 0 multiplizieren soll.

Code:

1 0 0                   1*x   0    0
2 2 0     *   x =       2*x 2*x   0
3 3 3                   3*x 3*x 3*x
 


Deswegen ja die Schleife....

Wie würde ich das ganze programmieren wenn ich eine nxn untere Dreiecksmatrix will? Funktioniert das über "zeros" ?
Private Nachricht senden Benutzer-Profile anzeigen
 
steve
Ehrenmitglied

Ehrenmitglied



Beiträge: 2.022
Anmeldedatum: 03.09.07
Wohnort: Wien
Version: R2023b
     Beitrag Verfasst am: 01.12.2008, 10:28     Titel:
  Antworten mit Zitat      
Moin,

versuch mal einfacher zu denken, du brauchst keine Schleife, denn in der Schleife multiplizierst du genauso mit 0 wie dennys 1-Zeilen-Lsg.

Was sollte denn deiner Meinung nach rauskommen, wenn mit 0 multipliziert wird?! Wink

Gruß
Alex
_________________

>> I told me to.

____________________________________
Matlab Cheat Sheet
goMatlab-Knigge - dran gehalten?!
Schon in den FAQ gesucht?
Ist vielleicht bei den Skripten oder den Tutorials was für dich dabei?
Private Nachricht senden Benutzer-Profile anzeigen
 
Treuben
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 30.11.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 01.12.2008, 11:21     Titel:
  Antworten mit Zitat      
Na 0 natürlich ;P

Aber mit

for i=1:n
for j=1:i
L(i,j) = L(i,j) * x

lauf ich doch genau so zeilenweise dass ich nicht mit der 0 multiplizieren muss! d.h. ich spare Zeit beim berechnen?

Wenn ich direkt "L = L * x" schreibe multipliziert er ja mit allem und bei einer n x n unteren Dreiecksmatrix würde das in jedem Fall länger dauern als wenn er nur die Zahlen != 0 multipliziert. Das ganze natürlich zeilenweise und nicht spaltenweise(springt zu viel).

Gruss,
Treuben
Private Nachricht senden Benutzer-Profile anzeigen
 
dib0r
Forum-Guru

Forum-Guru


Beiträge: 413
Anmeldedatum: 09.05.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 01.12.2008, 12:20     Titel:
  Antworten mit Zitat      
Hallo,

in der Theorie schon. Aber die interne Implementierung (L*x) ist viel schneller als die Implementierung, die du vorschlägst, weil sie direkt in C geschrieben ist (da muss nicht alles erst geladen werden, Speicher alloziert, in ein Java-Objekt reingeschrieben usw.). Es würde sich vielleicht lohnen, bei Matrizen großer Dimension das ganze so zu machen, wie du es vorschlägst. Aber selbst dann müsstest du dir ein Mex-File schreiben (d.h. eine C-Datei, die in Matlab angesprochen werden kann), um ca. einen Faktor 2 an Gewinn rauszuschlagen.
Da kannst du auch gleich die "sparse"-Funktionalität verwenden Smile

Um es zusammenzufassen: Dein Vorschlag ist natürlich soweit gut und logisch durchdacht, allerdings scheitert es an der konkreten Implementierung bzw. am Nutzergewinn.

MfG

PS: Außerdem bin ich nicht sicher, ob Matlab nicht intern schon Multiplikationen mit 0 abgreift bzw. optimiert.
Private Nachricht senden Benutzer-Profile anzeigen
 
Gast

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 01.12.2008, 12:26     Titel:
  Antworten mit Zitat      
Vielleicht kannst Du Dir das ein bisschen was zu sparse matrices angucken, da werden Nullen auch garnicht mehr gespeichert. Zumindest hier sollten dann Multiplikationen mit 0 explizit nicht ausgeführt werden, bei normalen Matrizen weiß ich es jetzt garnicht.
 
Treuben
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 30.11.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 01.12.2008, 19:52     Titel:
  Antworten mit Zitat      
naja gut.

ich danke für euere hilfe Wink
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 - 2024 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.