|
zyx |
Forum-Fortgeschrittener
|
|
Beiträge: 80
|
|
|
|
Anmeldedatum: 10.04.18
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 15.04.2018, 10:19
Titel: while-Schleife
|
|
Hallo zusammen,
Hier die Aufgabenstellung:
In der Funktion soll z solange durch einen gleich langen Vektor von gleichverteilten Zufallszahlen im offenen Interval ]1,2[ dividiert werden, bis alle Werte in z kleiner als 1 sind. Für jede Divison sollen neue Zufallszahlen erzeugt werden
Außerdem soll mit count gezählt werden, wie oft dividiert wurde und falls count den Wert count_lim erreicht, soll nach der entsprechenden Divison die while-Schleife verlassen werden.
Mein Programm:
function [z,count] = while_test(z,count_lim)
x = 1+abs(randn)./z;
count = num2str(z./x);
while any(z>1)
z = z./x;
if count==count_lim
break
end
end
end
Bitte helft mir weiter, falls ihr einen Tipp für den zweiten Teil der Aufgabe habt (oder einen anderen Fehler seht ).
Vielen Dank im Voraus für eure Hilfe!!
|
|
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.432
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 15.04.2018, 15:14
Titel:
|
|
Hallo,
und worin genau besteht nun deine Frage?
Sollte count nicht in der Schleife aktualisiert werden?
Warum verwendest du num2str?
Grüße,
Harald
|
|
|
zyx |
Themenstarter
Forum-Fortgeschrittener
|
|
Beiträge: 80
|
|
|
|
Anmeldedatum: 10.04.18
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 15.04.2018, 15:30
Titel:
|
|
Hallo Harald!
Danke für deine erneut schnelle Antwort!
Das Programm berechnet nicht das was es soll. Habe nun die count-Variable in die while-Schleife gepackt.
Gibt es einen Befehl, der die Anzahl an Operationen zählt?
Grüße
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.432
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 15.04.2018, 16:16
Titel:
|
|
Hallo,
Zitat: |
Das Programm berechnet nicht das was es soll. |
Ah ja. Und was soll nun statt was berechnet werden?
Ein Hinweis auch: die Fragestellung ist alles andere als klar. Geht es darum:
- wie oft die while-Schleife durchlaufen wurde
- welche Anzahl Elemente in der letzten Iteration dividiert wurde
- wie viele Divisionen insgesamt vorgenommen wurden
Grüße,
Harald
|
|
|
zyx |
Themenstarter
Forum-Fortgeschrittener
|
|
Beiträge: 80
|
|
|
|
Anmeldedatum: 10.04.18
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 15.04.2018, 17:24
Titel:
|
|
Hallo,
Es soll gezählt werden, wie oft insgesamt dividiert wurde und falls es den Inputwert von count_lim überschreitet muss abgebrochen werden.
Wenn ich nun z.B.:
Danke!
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.432
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 15.04.2018, 17:44
Titel:
|
|
Hallo,
Zitat: |
Es soll gezählt werden, wie oft insgesamt dividiert wurde und falls es den Inputwert von count_lim überschreitet muss abgebrochen werden. |
Dann musst du zum einen count immer erhöhen:
und zum anderen sollte die Abfrage lauten:
und schließlich frage ich mich noch, wieso du nochmal dividierst, um die Anzahl zu bestimmen. Wäre das nicht viel eher die Länge des Vektors, also numel(z)
Die Zufallszahlen liegen im übrigen nicht zwischen 1 und 2. Dazu müsstest du rand statt randn verwenden. Selbst wenn du die fehlenden Klammern einfügst.
Zitat: |
Wenn ich nun z.B.:
|
Wenn du z.B. was?
Grüße,
Harald
|
|
|
zyx |
Themenstarter
Forum-Fortgeschrittener
|
|
Beiträge: 80
|
|
|
|
Anmeldedatum: 10.04.18
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 16.04.2018, 11:46
Titel:
|
|
Hallo Harald,
also so wie ich das verstanden habe komme ich auf sowas wie:
function [z,count] = while_test(z,count_lim)
x = 1+abs(rand);
z = (z./x);
count = 1;
while any(z(count)>1)
count = count+1;
if count<=count_lim
break
end
end
end
Allerdings verstehe ich nicht was die Länge des Vektors mit der Anzahl an durchgeführten Divisionen zu tun haben soll?
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.432
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 16.04.2018, 12:02
Titel:
|
|
Hallo,
wenn du einen Vektor mit 5 Elementen hast und diesen komponentenweise durch etwas teilst, wie viele Divisionen werden dann durchgeführt? 5.
Dein Code dividiert den Vektor jetzt nur einmal, weil du die Division aus für mich unverständlichen Gründen vor die while-Schleife gezogen hast.
Grüße,
Harald
|
|
|
zyx |
Themenstarter
Forum-Fortgeschrittener
|
|
Beiträge: 80
|
|
|
|
Anmeldedatum: 10.04.18
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 16.04.2018, 12:11
Titel:
|
|
Ja, aber es soll gezählt werden, wie oft dividiert werden muss bis alle Elemente des Vektors kleiner als 1 sind.
Stimmt das war wohl ein Versehen.
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.432
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 16.04.2018, 14:19
Titel:
|
|
Hallo,
die Frage ist, ob du das Teilen eines Vektors mit 5 Elementen als 1 Division oder als 5 Divisionen auffasst. Beides ist möglich, die Entscheidung liegt bei dir.
Gibt es aktuell noch Probleme?
Grüße,
Harald
|
|
|
zyx |
Themenstarter
Forum-Fortgeschrittener
|
|
Beiträge: 80
|
|
|
|
Anmeldedatum: 10.04.18
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 16.04.2018, 15:31
Titel:
|
|
Hm... ich glaube wir reden aneinander vorbei. Aber macht nichts ich bin auf dem richtigen Weg und wenn ich es habe gebe ich dir Bescheid was gemeint war.
Danke auf jeden Fall für deine Tipps!
Grüße
|
|
|
zyx |
Themenstarter
Forum-Fortgeschrittener
|
|
Beiträge: 80
|
|
|
|
Anmeldedatum: 10.04.18
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 26.04.2018, 07:18
Titel:
|
|
Falls es noch jemanden interessiert:
wäre das gewünschte Programm. Die Zufallszahlen müssen in der while-Schleife sein, um nach jeder Division eine neue zu erhalten.
Danke fürs Mithelfen!
|
|
|
|
|
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 - 2024
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.
|
|