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

 

zyx
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 80
Anmeldedatum: 10.04.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.04.2018, 10:19     Titel: while-Schleife
  Antworten mit Zitat      
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 Wink).

Vielen Dank im Voraus für eure Hilfe!!
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.432
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 15.04.2018, 15:14     Titel:
  Antworten mit Zitat      
Hallo,

und worin genau besteht nun deine Frage?
Sollte count nicht in der Schleife aktualisiert werden?
Warum verwendest du num2str?

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
zyx
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 80
Anmeldedatum: 10.04.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.04.2018, 15:30     Titel:
  Antworten mit Zitat      
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
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.432
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 15.04.2018, 16:16     Titel:
  Antworten mit Zitat      
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
Private Nachricht senden Benutzer-Profile anzeigen
 
zyx
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 80
Anmeldedatum: 10.04.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.04.2018, 17:24     Titel:
  Antworten mit Zitat      
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! Smile
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.432
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 15.04.2018, 17:44     Titel:
  Antworten mit Zitat      
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:
Code:
count = count + ...

und zum anderen sollte die Abfrage lauten:
Code:
if count > count_lim

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
Private Nachricht senden Benutzer-Profile anzeigen
 
zyx
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 80
Anmeldedatum: 10.04.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.04.2018, 11:46     Titel:
  Antworten mit Zitat      
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?
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.432
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 16.04.2018, 12:02     Titel:
  Antworten mit Zitat      
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
Private Nachricht senden Benutzer-Profile anzeigen
 
zyx
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 80
Anmeldedatum: 10.04.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.04.2018, 12:11     Titel:
  Antworten mit Zitat      
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.
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.432
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 16.04.2018, 14:19     Titel:
  Antworten mit Zitat      
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
Private Nachricht senden Benutzer-Profile anzeigen
 
zyx
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 80
Anmeldedatum: 10.04.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.04.2018, 15:31     Titel:
  Antworten mit Zitat      
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
Private Nachricht senden Benutzer-Profile anzeigen
 
zyx
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 80
Anmeldedatum: 10.04.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.04.2018, 07:18     Titel:
  Antworten mit Zitat      
Falls es noch jemanden interessiert:

Code:
function [z,count] = while_test(z,count_lim)
    count=0;
    while any(z>=1)
            x=(rand(size(z))+1);
            z=(z./x);    
            count=count+1;
        if count>=count_lim
        break
        end
    end
end


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!
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 - 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.