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

Matrix aufstellen

 

dr.matlab

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.11.2015, 12:09     Titel: Matrix aufstellen
  Antworten mit Zitat      
Hey! Wink
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? Idea
Besten Dank!


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 05.11.2015, 12:17     Titel:
  Antworten mit Zitat      
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
Private Nachricht senden Benutzer-Profile anzeigen
 
dr.matlab

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.11.2015, 12:25     Titel:
  Antworten mit Zitat      
Oh, also diese beiden Begriffe sagen mir bisher noch gar nichts Confused
Wir stehen erst am Anfang von Matlab und haben bisher if, for und while nur kurz eingeführt.
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 05.11.2015, 12:34     Titel:
  Antworten mit Zitat      
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
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: 05.11.2015, 14:14     Titel: Re: Matrix aufstellen
  Antworten mit Zitat      
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:
Code:

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
Private Nachricht senden Benutzer-Profile anzeigen
 
dr.matlab

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.11.2015, 16:51     Titel:
  Antworten mit Zitat      
Vielen Dank erstmal für die freundlichen Tipps, aber ich muss erstmal die einfachen Dinge schaffen Laughing

Code:

A=zeros(100);
i=1:1:100;
j=1:1:100;
A = bsxfun(@rdivide, i, j)


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

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 05.11.2015, 17:24     Titel:
  Antworten mit Zitat      
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
Private Nachricht senden Benutzer-Profile anzeigen
 
dr.matlab

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.11.2015, 00:11     Titel:
  Antworten mit Zitat      
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

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 06.11.2015, 00:56     Titel:
  Antworten mit Zitat      
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
Private Nachricht senden Benutzer-Profile anzeigen
 
dr.matlab

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.11.2015, 13:00     Titel:
  Antworten mit Zitat      
Ich habe nun i transponiert, sodass dieser Code zu funktionieren scheint:

Code:

clear all;
A=zeros(100);
i=1:1:100;
j=1:1:100;
A = bsxfun(@rdivide, i', j);


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

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 06.11.2015, 13:48     Titel:
  Antworten mit Zitat      
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
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.