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

While schleife und ein paar andere Sachen...

 

Gast2412

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.01.2011, 20:27     Titel: While schleife und ein paar andere Sachen...
  Antworten mit Zitat      
Hallo ich schreibe bald eine Prüfung über matlab bin noch recht am Anfang meiner Lernphase aber habe schon einige fragen.

1.

Wie der Titel schon sagt geht es um while schleifen. ich hab hier ein kleiner programm

Code:

i=1;
Summe=0;
while i<5
    Summe=Summe+i;
    i=i+1;
    disp(i)
    disp(Summe)
end;
 


So meine frage hierzu: Mir ist klar das die Schleife durchlaufen wird solange i kleiner 5 ist und mit jedem mal wird i um 1 erhöht also nach 4 Durchläufen ist i=5 und somit die Schleife auch zu ende. Wie man sehen kann wird Summe=0 zugewiesen. Mich wundert es nur warum dann in der Schleife Summe auch jeweils um 1 erhöht wird und am Ende 10 ergibt, weil eigentlich müsste Summe ja wie gesagt 0 bleiben und 5 dazu addiert werden aber bei mir werden 10 angezeigt was wahrscheinlich heißt, dass es sich selber um 1 jeweils erhöht hat und die 5 sich dazu addiert hat.

Nun zur meiner 2. Frage: ich habe hier eine Aufgabe aus einer alten Prüfung:

Klammern Sie den Ausdruck x >= y > z entsprechend der Auswertungsregeln
(Reihenfolge) von Matlab

Diese Auswertungsregel kenne ich nicht und finde auch lieder nichts im Internet.


Meine Letzte Frage:
Auch ein Auszug aus der alten Prüfung:

Es sei V = [1.1,2.2,3.3], W = [3,2,1].
Welche der folgenden Ausdrücke sind ohne Fehlermeldung gültig?
W(floor(V(3)) V(W(1))
V(W(V(1))) W(abs(V(3)))
ok also was ich hier nicht genau verstanden habe ist die Schreibweise
w(v) zum Beispiel wie wird das gelesen w von v? und genauer gesagt was soll es bedeuten und was passiert da. ich weiß nur wenn ich w(3) schreibe wird mir die 3. Zahl im Vektor angezeigt also in diesem Fall die 1.

Naja das sind so meine Probleme im moment. Ich würde mich freuen wenn mir jemand helfen kann. Entschuldigt Tippfehler.
mfg


Scriptor
Forum-Century

Forum-Century


Beiträge: 217
Anmeldedatum: 22.02.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.01.2011, 21:01     Titel:
  Antworten mit Zitat      
Servus:

Frage 1:

Mit jedem Schleifendurchlauf erhöht sich dein i um eins. Du startest bei i = 1. und wird nicht mehr durchlaufen wenn du auf 5 inkrementiert hast. Das heißt du hast Durchläufe bei i = 1,2,3,4. Jedesmal haust du dein i auf die Summe. Dadurch entsteht SUmme_end = 1 + 2 + 3 + 4 = 10;

Frage 2:

Diese Regelung zeigt, welche Werte eines Arrays du haben willst.

du willst die Werte y eines fiktiven Vectors nennen wir ihn vec haben. Diese Werte befinden sich zwischen zwei Schwellwerte oben x und unten z.

Ich löse dass immer so:

y = vec(find(vec <= x && vec > z));

Was das mit Klammern soll weiß ich nicht so ganz.

Frage 3:

floor rundet gegen - unendlich
Indizierung geht immer Nur mit natürlichen Zahlen größer 0!!
abs bildet immer nur den Betrag einer Zahl
verschachtelte Indizierung geht immer von innen nach außen.

Ich denke das reicht erstmal als Tipps
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: 24.01.2011, 21:25     Titel: Re: While schleife und ein paar andere Sachen...
  Antworten mit Zitat      
Hallo Gast,

Zitat:
So meine frage hierzu: Mir ist klar das die Schleife durchlaufen wird solange i kleiner 5 ist und mit jedem mal wird i um 1 erhöht also nach 4 Durchläufen ist i=5 und somit die Schleife auch zu ende. Wie man sehen kann wird Summe=0 zugewiesen. Mich wundert es nur warum dann in der Schleife Summe auch jeweils um 1 erhöht wird und am Ende 10 ergibt, ...

Nein. Im ersten Durchlauf wird 1 zu Summe addiert, im zweiten 2, im dirtten 3 etc. Die Zahlen werden alle per DISP ins CommandWindow geschrieben, also bitte lies dort einfach mal nach, was genau passiert.

Zitat:
Klammern Sie den Ausdruck x >= y > z entsprechend der Auswertungsregeln (Reihenfolge) von Matlab

Ach herrje! Das ist eine tückische Frage. Ich würde jedem Matlab-Programmierer, der sich hier auf eine spezielle Reigenfolge der Auswertung verlässt, für tapfer bis fahrlässig halten.

Kann jemand hier -ohne Ausprobieren- mit Sicherheit sagen, was das Ergebnis von "4 >= 5 > 6" ist?!

Also in Matlab passiert dies:
Code:
(4 >= 5) > 6
% Das wird ausgewertet zu:
(logical(1)) > 6
% Was wiederum einen automatisched CAST zu DOUBLE auslöst:
1 > 6
% Ergebnis:
logical(0)

% Falls Matlab von rechts nach links auswerten würde:
4 >= (5 > 6)  % =>  logical(1)

Die Regel dazu läßt sich in der Tat nicht leicht finden:
1. "help precedence"
2. Von Links nach rechts auswerten.

Zitat:
also was ich hier nicht genau verstanden habe ist die Schreibweise w(v) zum Beispiel wie wird das gelesen w von v? und genauer gesagt was soll es bedeuten und was passiert da. ich weiß nur wenn ich w(3) schreibe wird mir die 3. Zahl im Vektor angezeigt also in diesem Fall die 1.

Das ist doch bereits die Antwort! w(3) ist das dritte Element von w. w([3,4]) ist ein 1x2 Vektor aus dem 3. und 4. Element von w. w(v) ist der Vektor: [w(v(1)), w(v(2)), ... w(v(end))]

Lies mal das Kapitel "Getting Started" in der Dokumentation! Sehr hilfreich für soclhe Fragen.

@Scriptor:
Code:
y = vec(find(vec <= x && vec > z));

Es is effizienter, hier das FIND einfach wegzulassen => logical indexing. Die Frage des OPs bezog sich aber auf die Precedence, also die Reihenfolge der Auswertung.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Gast2412

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.01.2011, 22:02     Titel:
  Antworten mit Zitat      
Erst einmal Danke für die schellen Antworten. Meine erste Frage hab ich jetzt verstanden und ist sehr logisch.

Frage 2 ist auch verständlich wenn man Zahlen einsetzt.

Aber bei der dritten hab ich immer noch Schwierigkeiten.

w(3) ist also das 3. Element im Vektor w. Soweit komm ich mit wenn der Vektor w z.b. so aussieht [2,3,4] wäre jetzt w(3) die 4. aber nochmal V betrachtet v(1) ist ja 1.1 und dann wäre w(v(1))= w(1.1). hm ich tus mir sehr schwer bei diesen verschachtelungen:/ habe es glaube ich nicht ganz verstanden und bei V(W(V(1))) geht bei mir garnichts mehr. ich geh von der innersten klammer bis zur äusersten aber komme nicht auf das richtige Ergebnis.

Dieses "getting started" ist auf englisch auf http://www.mathworks.de oder? englisch ist leider nicht meine stärke:(
mfg
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 24.01.2011, 23:13     Titel:
  Antworten mit Zitat      
Hallo Gast,

Zitat:
v(1) ist ja 1.1 und dann wäre w(v(1))= w(1.1).

Genau. Und da der Index ganzzahlig und größer als Null sein muss, wird w(v(1)) eine Fehlermeldung erzeugen.

Zitat:
Dieses "getting started" ist auf englisch auf http://www.mathworks.de oder? englisch ist leider nicht meine stärke:(

Die Getting-Started-Kapitel findest Du in jeder Matlab-Installation auch lokal auf Deinem Rechner: "doc" -> Matlab -> Getting Started.
Ohne Englisch-Kenntnisse ist das allerdings schwierig. Deshalb würde ich Dir folgende Prioritäten empfehlen:
1. Englisch lernen.
2. Matlab lernen.
Ich meine das schon ernst. Ich hätte keine Ahnung, wie ich Matlab ohne HELP Texte, die DOC Texte, die Kommentare in den M-Files der Toolboxen und die Englisch-sprachigen CSSM Newsgroup hätte lernen können.

Gruß, Jan
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.