|
|
Hauptdiagonale mit jeweiliger Zeile addieren |
|
matlabgo |

Forum-Anfänger
|
 |
Beiträge: 48
|
 |
|
 |
Anmeldedatum: 16.08.18
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 16.08.2018, 18:07
Titel: Hauptdiagonale mit jeweiliger Zeile addieren
|
 |
Hallo liebe Community,
habe folgendes Problem.
Die Aufgabe lautet:
-->Schreiben Sie eine rein schleifenbasierte Funktion calcMat, die für eine M × N Matrix A in allen Zeilen jeweils
ab dem Hauptdiagonalelement einschließlich den Wert dieses Hauptdiagonalelements addiert (siehe Beispiel unten).
Die so modifizierte Matrix soll als Funktionswert zurück gegeben werden.<--
Bisher bin ich so weit gekommen:
Für die erste zeile klappt dies auch, jedoch dannach kommt die fehlermeldung,:
Index exceeds array bounds.
Kann mir jemand weiterhelfen?
|
|
|
|
|
J0nas |

Forum-Century
|
 |
Beiträge: 208
|
 |
|
 |
Anmeldedatum: 10.09.15
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ab 2016a
|
 |
|
|
 |
|
Verfasst am: 16.08.2018, 20:14
Titel:
|
 |
Hi matlabgo,
Kannst du Mal das Beispiel, von dem da die Rede ist Posten? In der Aufgabenstellung fehlt mindestens ein Wort.
Dann schau dir auf jeden Fall Mal an welche Dimensionen du beim size Befehl ausliest und welche du in der Schleife unten verwendest.
Mehr dann mit dem Beispiel.
Gruß
Jonas
_________________
1.) Ask Google & Matlab Documentation
2.) Ask gomatlab.de & Technical Support of MathWorks
3.) Go mad, your problem is unsolvable
|
|
|
matlabgo |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 48
|
 |
|
 |
Anmeldedatum: 16.08.18
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 16.08.2018, 20:34
Titel:
|
 |
Beschreibung: |
|
 Download |
Dateiname: |
Unbenannt.png |
Dateigröße: |
22.37 KB |
Heruntergeladen: |
266 mal |
|
|
|
J0nas |

Forum-Century
|
 |
Beiträge: 208
|
 |
|
 |
Anmeldedatum: 10.09.15
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ab 2016a
|
 |
|
|
 |
|
Verfasst am: 16.08.2018, 20:47
Titel:
|
 |
Hi matlabgo,
also erstmal das mit den Dimensionen berücksichtigen (siehe oben).
Und dann schau dir mal an welche Werte k,l und m annehmen wenn der Fehler auftritt, da müsstest du dann gleich sehen woran es liegt. Eine dieser Variablen nimmt einen Wert an, der größer als die Dimensionen deiner Matrix ist.
Da das offensichtlich Hausaufgaben sind werde ich dir keine finale Lösung posten.
Solltest du nicht auf die Lösung kommen, kann ich dir aber noch weiter helfen Aber wenn man selbst auf die Lösung kommt lernt man bekanntlich am meisten!
Grüße
Jonas
_________________
1.) Ask Google & Matlab Documentation
2.) Ask gomatlab.de & Technical Support of MathWorks
3.) Go mad, your problem is unsolvable
|
|
|
matlabgo |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 48
|
 |
|
 |
Anmeldedatum: 16.08.18
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 16.08.2018, 21:06
Titel:
|
 |
ich stehe grade wirklich auf dem Schlauch, was meinst du mit den Dimensionen?
meines Erachtens ist das gleich(?)..
|
|
|
J0nas |

Forum-Century
|
 |
Beiträge: 208
|
 |
|
 |
Anmeldedatum: 10.09.15
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ab 2016a
|
 |
|
|
 |
|
Verfasst am: 16.08.2018, 21:42
Titel:
|
 |
|
 |
|
Ich meine damit, dass deine Matrix B zwei Dimensionen hat nämlich B(dim1,dim2). Wenn du also B(k,l) beschreiben willst, dann ist k die erste Dimension und l die 2.Dimension. Folglich sollte deine Schleife für k auch die Länge von Dimension 1 ablaufen ->
und l eben die 2. Dimension.
Sind beide Dimensionen der Matrix gleich groß, dann funktioniert das aber logischerweise auch wenn es falsch zugeordnet wird.
Bevor du eine Funktion aus dem ganzen machst kannst du das auch einfach mal so, außerhalb einer Funktion, starten. Hat den Vorteil, dass die Variablen im Workspace abgelegt werden. Wenn du jetzt folgenden Code laufen lässt, bekommst du auch deine Fehlermeldung (die Dimensionen bei den size habe ich hier schon angepasst).
Wenn die Fehlermeldung kommt, dann schau dir im Workspace mal die Werte für k,l und m an und überlege dir welcher Wert nicht passen kann.
Entwder ist k größer als die 1. Dimension der Matrix (im Beispiel also >5).
Oder l ist größer als die 2. Dimension der Matrix (also auch >5).
Oder m ist größer als die Dimension der Diagonale (also auch >5).
Und wenn du das rausbekommen hast wirst du feststellen, dass du einen dieser Werte nach dem Durchlauf einer Schleife wieder resetten musst. Vielleicht hilft dir das weiter.
Der nächste Schritt wäre aber dann schon fast die Lösung. Und das wäre ja langweilig, oder?
Grüße
Jonas
_________________
1.) Ask Google & Matlab Documentation
2.) Ask gomatlab.de & Technical Support of MathWorks
3.) Go mad, your problem is unsolvable
|
|
|
matlabgo |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 48
|
 |
|
 |
Anmeldedatum: 16.08.18
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 16.08.2018, 22:02
Titel:
|
 |
Ahso, jetzt hab ich es verstanden.
Es geht darum dass, ich die Dimensionen vertauschen musste, damit ich erst die erste Spalte abarbeite und dannach zur zweiten rüber gehe.
und das m musste aus der for schleife raus, da es sonst zu groß wird.
Meine abschließende Frage wäre dann, aber wie ich es hin bekomme, dass er genau ab der Diagonalen anfängt zu addieren?
z.B. bei in der 2 zeile ab A(2,2)
in der 3 zeile ab A(3,3)
|
|
|
matlabgo |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 48
|
 |
|
 |
Anmeldedatum: 16.08.18
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 16.08.2018, 22:06
Titel:
|
 |
Mein Vorschlag wäre sowas in der Art, aber dann bildet er nur die Diagonale.
|
|
|
J0nas |

Forum-Century
|
 |
Beiträge: 208
|
 |
|
 |
Anmeldedatum: 10.09.15
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ab 2016a
|
 |
|
|
 |
|
Verfasst am: 17.08.2018, 06:22
Titel:
|
 |
|
 |
|
Hallo matlabgo,
Tritt der Fehler auf, ist (im Beispiel) dein k=2, l=1 und b=6. Er hat die erste Zeile komplett durchlaufen und soll jetzt die 2. Zeile bearbeiten -> k = 2, passt. Er soll in der 2. Zeile beim 2. Element anfangen, aber l = 1 -> passt nicht, muss angepasst werden. Er soll das 2. Element der Hauptdiagonale addieren, aber m = 6 -> passt auch nicht.
Noch offensichtlicher wird das ganze wenn du bei der Testmatrix mal auf der Hauptdiagonale unterschiedliche Werte angibst.
Dann stellst du fest, dass er in die erste Zeile springt, dort in der ersten Spalte den Wert zu dem ersten Element der Hauptdiagonale addiert. In der zweiten Spalte den Wert zu dem zweiten Element der Hauptdiagonale addiert, usw.
Was du willst ist aber, dass das Hauptdiagonalen-Element in der komplette Zeile gleich bleibt. Daher muss das hochzählen des Hauptdiagonalen-Elements geschehen, nachdem alle Spalten der Zeile durchlaufen wurden, wir ziehen das m = m + 1 also raus aus der "Spalten-Schleife".
Nächste Problem: Du musst für jede Zeile, die Anfangsspalte anpassen. Glücklicherweise muss ja auch der Zähler der Hauptdiagonale jede Zeile gleichermaßen angepasst werden:
1. Zeile -> 1. Hauptdiagonalenelement
1. Zeile -> Anfangsspalte = 1
2. Zeile -> 2. Hauptdiagonalenelement
2. Zeile -> Anfangsspalte = 2
...
Wir lassen also den Anfang der "Spalten-Schleife" bei jeder neuen Zeile eins größer werden indem wir die Zählervariable m der Hauptdiagonalen nutzen:
Jetzt noch das m an der richtigen Stelle hochzählen lassen (siehe oben) und dann hast du die Lösung.
Grüße
Jonas
_________________
1.) Ask Google & Matlab Documentation
2.) Ask gomatlab.de & Technical Support of MathWorks
3.) Go mad, your problem is unsolvable
|
|
|
matlabgo |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 48
|
 |
|
 |
Anmeldedatum: 16.08.18
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 17.08.2018, 10:38
Titel:
|
 |
Super, danke hat alles geklappt !!
|
|
|
|
|
Einstellungen und Berechtigungen
|
|
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
| 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.
|
|