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

Zeilenelemente innerhalb einer Matrix multiplizieren

 

matlabgo
Forum-Anfänger

Forum-Anfänger


Beiträge: 48
Anmeldedatum: 16.08.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.08.2018, 11:11     Titel: Zeilenelemente innerhalb einer Matrix multiplizieren
  Antworten mit Zitat      
Hallo liebe Community,
bin wieder mal auf eure Unterstützung angewiesen:
die Aufgabe lautet:
Schreiben Sie eine rein schleifenbasierte Funktion map, die für alle Elemente einer als Parameter
übergebenen Matrix A einen folgendermaßen neu berechneten Spaltenvektor b als Rückgabeparameter
zurück gibt. (siehe Anhang)

Hab es versucht erstmal, ohne Funktion zu lösen.

Code:
M = [ 1 2 4; 1 2 3; 1 2 2]

c =zeros(length(M),1) %% Präallokation

m = 1;
for k=1:size(M,1)
 
   
for l=1:size(M,2)
   
 c(m) = M(l,k).*M(l,k);
end
m = m+1
disp(c)
end
 


Meine Frage ist, warum sich alles bei mir unter m abspeichert obwohl dies eine laufvariable ist und warum das bei mir nicht die Zeile durchgehend multipliziert.

Würd mich über eine Antwort freuen. Vielen Dank!

Unbenannt2.png
 Beschreibung:

Download
 Dateiname:  Unbenannt2.png
 Dateigröße:  19.45 KB
 Heruntergeladen:  255 mal
Private Nachricht senden Benutzer-Profile anzeigen


J0nas
Forum-Century

Forum-Century


Beiträge: 208
Anmeldedatum: 10.09.15
Wohnort: ---
Version: ab 2016a
     Beitrag Verfasst am: 17.08.2018, 11:27     Titel:
  Antworten mit Zitat      
Hi,

Zitat:
Meine Frage ist, warum sich alles bei mir unter m abspeichert obwohl dies eine laufvariable


Was meinst du damit? Was wird alles unter m abgespeichert? Wenn ich das bei mir laufen lasse nimmt m bei den einzelnen Schleifendurchläufen 1,2,3,4 (wie vorgebeben) an. Außerdem bekomme ich einen Vektor c (der noch nicht der Aufgabe entspricht), eine Matrix M und deine Schleifen-Variablen k und l.

Wenn du nicht weiter kommst kann ich dir übrigens empfehlen dir mal aufzuschreiben was das Programm Schritt für Schritt machen soll. Das hilft am Anfang oft weiter.

Grüße
Jonas
_________________

1.) Ask Google & Matlab Documentation
2.) Ask gomatlab.de & Technical Support of MathWorks
3.) Go mad, your problem is unsolvable
Private Nachricht senden Benutzer-Profile anzeigen
 
matlabgo
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 48
Anmeldedatum: 16.08.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.08.2018, 12:20     Titel:
  Antworten mit Zitat      
hey, vielen dank für die schnelle Antwort!

Ich versteh nicht, warum ich als Ausgabe 4 Spaltenvektoren erhalte und warum, meine Schleife die einzigen Elemente miteinander multipliziert.
Private Nachricht senden Benutzer-Profile anzeigen
 
J0nas
Forum-Century

Forum-Century


Beiträge: 208
Anmeldedatum: 10.09.15
Wohnort: ---
Version: ab 2016a
     Beitrag Verfasst am: 17.08.2018, 12:46     Titel:
  Antworten mit Zitat      
Hi,

was für 4 Spaltenvektoren bekommst du denn? Ich bekomme da lediglich einen Vektor

Code:

c = [1;4;4];
 


Wenn du dein Code durchgehst macht der folgendes:
Code:

Eine Schleife die alle Zeilen durchläuft -> passt

Code:

Eine Schleife die alle Spalten durchläuft -> passt

Also muss es am Inhalt der Schleifen liegen:
Code:
c(m) = M(l,k).*M(l,k);

1. Zeile -> m = 1, k = 1
2. Bei M(l,k) passen die Dimensionen wieder nicht. -> M(k,l) wäre deiner Schleifenzuordnung nach richtig.
3. Spalte 1 -> l = 1:
Du multiplizierst den Wert aus M(1,1) mit dem Wert aus M(1,1) -> also mit sich selbst und speicherst ihn in c(1) ab. -> der berechnete Wert passt schonmal nicht
4. Spalte 2 -> l = 2:
Du multiplizierst den Wert aus M(1,2) mit sich selbst und überschreibst den Wert aus dem Schleifendurchgang davor in c(1). Der Wert aus der vorherigen Berechnung wird nicht mehr berücksichtigt. -> der berechnete Wert passt nicht


Was du machen willst:
- Springe in die 1. Zeile
- Speicher den Wert aus der 1. Spalte M(1,1) in c(1)
- springe in die 2. Spalte und multipliziere den Wert aus c(1) mit dem Wert M(1,2), speicher das Ergebnis in c(1) (der alte Wert wird überschrieben)
- springe in die 3. Spalte und multipliziere den Wert aus c(1) mit dem Wert M(1,3), speicher das Ergebnis in c(1) (der alte Wert wird überschrieben)
- Springe in die 2. Zeile
- Speicher den Wert aus der 1. Spalte M(2,1) in c(2)
- ....
Und das jetzt in Code umsetzen. Deine Schleifen passen schon mal, jetzt muss du nur den Inhalt noch anpassen.

Grüße
Jonas
_________________

1.) Ask Google & Matlab Documentation
2.) Ask gomatlab.de & Technical Support of MathWorks
3.) Go mad, your problem is unsolvable
Private Nachricht senden Benutzer-Profile anzeigen
 
matlabgo
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 48
Anmeldedatum: 16.08.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.08.2018, 13:03     Titel:
  Antworten mit Zitat      
vielen Dank für deine Mühe, und ich hab auch verstanden wie du das meinst und dementsprechend mein Code geändert:

Code:
M = [ 1 2 4; 1 2 3; 1 2 2]

c =zeros(length(M),1) %% Präallokation

m = 1;
for k=1:size(M,1)
   
for l=1:size(M,2)
 c(m) = M(k,l)*M(k,l);  
 c(m) = c(m)* M(k,l);
end
m = m+1;
disp(c)
end
 


das letzte Problem ist für mich, wenn ich den ersten Wert mit sich selber multiplizieren und daraufbauend arbeiten möchte.
so wie ich das gemacht habe fluppt das noch nicht ganz.
muss ich die erste Spalte dann immer extern von der Schleife definieren und die Schleife damit arbeiten lassen `?
Private Nachricht senden Benutzer-Profile anzeigen
 
J0nas
Forum-Century

Forum-Century


Beiträge: 208
Anmeldedatum: 10.09.15
Wohnort: ---
Version: ab 2016a
     Beitrag Verfasst am: 17.08.2018, 13:08     Titel:
  Antworten mit Zitat      
Genau, die erste Spalte definierst du vor der "Spalten-Schleife" und durchläufst die dann nur noch von 2. Spalte bis Ende.

Folgende Zeile gehört da aber nicht mehr hin.
Code:
c(m) = M(k,l)*M(k,l);


Ansonsten sieht das schon ganz gut aus.

Grüße
Jonas
_________________

1.) Ask Google & Matlab Documentation
2.) Ask gomatlab.de & Technical Support of MathWorks
3.) Go mad, your problem is unsolvable
Private Nachricht senden Benutzer-Profile anzeigen
 
matlabgo
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 48
Anmeldedatum: 16.08.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.08.2018, 13:13     Titel:
  Antworten mit Zitat      
ok danke.
Private Nachricht senden Benutzer-Profile anzeigen
 
J0nas
Forum-Century

Forum-Century


Beiträge: 208
Anmeldedatum: 10.09.15
Wohnort: ---
Version: ab 2016a
     Beitrag Verfasst am: 17.08.2018, 13:17     Titel:
  Antworten mit Zitat      
Kleiner Tipp noch:
Du kannst das m auch durch das k ersetzen, da m in dem Beispiel ja dem Zähler k der Zeilen-Schleife entspricht:

Code:

M = [ 1 2 4; 1 2 3; 1 2 2];
c = zeros(length(M),1); % Präallokation

for k = 1:size(M,1)
    c(k) = M(k,1);
    for l = 2:size(M,2)
        c(k) = c(k) * M(k,l);
    end
    disp(c)
end
 


Grüße
Jonas
_________________

1.) Ask Google & Matlab Documentation
2.) Ask gomatlab.de & Technical Support of MathWorks
3.) Go mad, your problem is unsolvable
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.