|
dr.matlab |
Gast
|
 |
Beiträge: ---
|
 |
|
 |
Anmeldedatum: ---
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 05.11.2015, 12:09
Titel: Matrix aufstellen
|
 |
Hey!
Ich soll ein Programm schreiben, dass eine 100x100 Matrix A aufstellt, wobei A(i,j) := i/j für alle i,j 1:100. Dabei soll ich auf eine möglichst effiziente Implementierung achten und deshalb keine for-Schleife benutzen.
Mir ist leider nicht ganz klar, was mit der Implementierung gemeint ist und was ich nun statt der for-Schleife benutzen könnte. Kann mir da jemand weiterhelfen?
Besten Dank!
|
|
|
|
|
Harald |

Forum-Meister
|
 |
Beiträge: 24.501
|
 |
|
 |
Anmeldedatum: 26.03.09
|
 |
|
 |
Wohnort: Nähe München
|
 |
|
 |
Version: ab 2017b
|
 |
|
|
 |
|
Verfasst am: 05.11.2015, 12:17
Titel:
|
 |
Hallo,
schwer zu sagen, was der Aufgabensteller im Sinn hat.
Die effizienteste Methode wäre wohl
bsxfun
mit @ldivide. Es kann aber auch gut sein, dass der Aufgabensteller auf
meshgrid
hinaus möchte.
Grüße,
Harald
|
|
|
dr.matlab |
Gast
|
 |
Beiträge: ---
|
 |
|
 |
Anmeldedatum: ---
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 05.11.2015, 12:25
Titel:
|
 |
Oh, also diese beiden Begriffe sagen mir bisher noch gar nichts
Wir stehen erst am Anfang von Matlab und haben bisher if, for und while nur kurz eingeführt.
|
|
|
Harald |

Forum-Meister
|
 |
Beiträge: 24.501
|
 |
|
 |
Anmeldedatum: 26.03.09
|
 |
|
 |
Wohnort: Nähe München
|
 |
|
 |
Version: ab 2017b
|
 |
|
|
 |
|
Verfasst am: 05.11.2015, 12:34
Titel:
|
 |
Hallo,
Zitat: |
Oh, also diese beiden Begriffe sagen mir bisher noch gar nichts |
Dann klicke mal auf die Links und schau dir die Hilfe dazu an.
Grüße,
Harald
|
|
|
Jan S |

Moderator
|
 |
Beiträge: 11.057
|
 |
|
 |
Anmeldedatum: 08.07.10
|
 |
|
 |
Wohnort: Heidelberg
|
 |
|
 |
Version: 2009a, 2016b
|
 |
|
|
 |
|
Verfasst am: 05.11.2015, 14:14
Titel: Re: Matrix aufstellen
|
 |
|
 |
|
Hallo dr.matlab,
Die Meinung, dass Matlab's FOR-Schleifen ineffizient sind, ist leicht veraltet: Seit Matlab R6.5 aus dem Jahr 2002 beschleunigt die JIT-Acceleration solche Schleifen deutlich.
Trotzdem lernt man viel, wenn man diese Aufgabe ohne Schleifen löst. Ein weiterer Tipp: Wenn man einen [1xN] Vektor mit einem [N x 1] Vektor multipliziert, erhält man das normale DOT-Produkt. Bei [N x 1] mal [1 x N] ergibt das dyadische Produkt, also eine Matrix. Nun könnte man ja 1:100 in den ersten Vektor schreiben und 1/(1:100) in den zweiten. Wenn man sich nun noch um die richtige Orientierung kümmert...
Wenn Du einen Befehl noch nicht kennst, der hier im Forum vorgeschlagen wird, ist es am besten, Du liest zunächst die Hilfe-Seiten dazu:
Die blau unterlegten Befehle kannst hier im Forum sogar direkt anklicken dafür.
Es gibt noch eine weitere sehr effiziente Lösung: Berechne die Werte ein mal mit einer FOR-Schleife und speichere sie danach als Text. Füge dies nun in eine M-Funktion ein. So bekommst Du das Ergebnis ganz ohne teure Divisionen! Du solltest aber darauf vorbereitet sein, dass Dein Dozent eine Augenbraue hochzieht und sich Gedanken darüber macht, ob Du zu schlau bist für den Kurs :-)
Gruß, Jan
|
|
|
dr.matlab |
Gast
|
 |
Beiträge: ---
|
 |
|
 |
Anmeldedatum: ---
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 05.11.2015, 16:51
Titel:
|
 |
Vielen Dank erstmal für die freundlichen Tipps, aber ich muss erstmal die einfachen Dinge schaffen
Dies war jetzt mein erster verzweifelter Versuch, der aber von der Logik her wohl wieder Richtung for-Schleife ging und (deshalb) nicht funktionierte. Ich bräuchte wohl doch noch einen weiteren Ansatz/Erklärung, in welche Richtung ich gehen soll.
|
|
|
Harald |

Forum-Meister
|
 |
Beiträge: 24.501
|
 |
|
 |
Anmeldedatum: 26.03.09
|
 |
|
 |
Wohnort: Nähe München
|
 |
|
 |
Version: ab 2017b
|
 |
|
|
 |
|
Verfasst am: 05.11.2015, 17:24
Titel:
|
 |
Hallo,
die Idee von bsxfun ist, eine Operation zwischen
a) einer Matrix und einem Vektor zeilen- oder spaltenweise
b) einem Zeilenvektor und einem Spaltenvektor auf alle Kombinationen
anzuwenden.
Du musst also i oder j transponieren. Achtung: Welches von beiden du transponierst, beeinflusst das Ergebnis!
Grüße,
Harald
|
|
|
dr.matlab |
Gast
|
 |
Beiträge: ---
|
 |
|
 |
Anmeldedatum: ---
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 06.11.2015, 00:11
Titel:
|
 |
Das sind alles wunderbare Ideen, aber wir haben bisher nicht einmal wirklich die Grundlagen gelernt, weshalb die Aufgabe sicherlich nicht darauf abzielt, einen dieser Befehle zu entdecken und zu benutzen?
Gibt es keine "gewöhnlichere" Methode? Eine While-Schleife, die weniger Aufwand betreibt als die for-Schleife? Oder ein rekursives Verfahren?
|
|
|
Harald |

Forum-Meister
|
 |
Beiträge: 24.501
|
 |
|
 |
Anmeldedatum: 26.03.09
|
 |
|
 |
Wohnort: Nähe München
|
 |
|
 |
Version: ab 2017b
|
 |
|
|
 |
|
Verfasst am: 06.11.2015, 00:56
Titel:
|
 |
Hallo,
ich weiß weder, was ihr genau gemacht habt, noch stecke ich im Kopf des Aufgabenstellers ;)
while und for haben in der Performance keine wesentlichen Unterschiede.
Auf den etwas einfacher verständlichen Befehl
meshgrid
hatte ich ja hingewiesen.
In deinem Beitrag von 15:51 fehlt wie gesagt nur noch eine Transponierung (mit ' ).
Wenn du das so abgibst, lernt vielleicht sogar der Aufgabensteller auch noch was neues :)
Grüße,
Harald
|
|
|
dr.matlab |
Gast
|
 |
Beiträge: ---
|
 |
|
 |
Anmeldedatum: ---
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 06.11.2015, 13:00
Titel:
|
 |
Ich habe nun i transponiert, sodass dieser Code zu funktionieren scheint:
Wir haben bisher die Matrixoperationen (darunter Inverse, Transponierte, elemtenweise Operationen etc.) behandelt und von daher dachte ich, dass wir die Aufgabe vielleicht mit "Hilfsvektoren/-matrizen" oder elementweise Operationen (Multiplikation?) lösen sollen.
|
|
|
Harald |

Forum-Meister
|
 |
Beiträge: 24.501
|
 |
|
 |
Anmeldedatum: 26.03.09
|
 |
|
 |
Wohnort: Nähe München
|
 |
|
 |
Version: ab 2017b
|
 |
|
|
 |
|
Verfasst am: 06.11.2015, 13:48
Titel:
|
 |
Hallo,
hast du dir denn
meshgrid
inzwischen angesehen?
Ansonsten kann es auch eine Option sein, mal den Aufgabensteller zu fragen, in welche Richtung es denn gehen soll.
Grüße,
Harald
|
|
|
|
|
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.
|
|