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

for schleifen frage

 

michael123

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.01.2013, 16:38     Titel: for schleifen frage
  Antworten mit Zitat      
hallo

ich wollte mal fragen ob das auch anders geht als ich es mache! also kürzer

also ich will eine gewisse sequenz meines alg mehrmals durchlaufen lassen.

zB zuerst 10 mal dann denn durchschnitt des ergebnisses
dann 50 mal und den durchschnitt
dann 100 u. durchschnitt ermitteln
dann 1000
usw

ich habe immer die forschleife geändert.
geht das anders auch??
wenn das nämlich in einem geht könnte ich es auch gleich hier plotten und dadurch es nicht nochmal wo anders eingeben müssen.



glg michael


Sirius3
Forum-Guru

Forum-Guru


Beiträge: 441
Anmeldedatum: 12.11.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.01.2013, 17:51     Titel:
  Antworten mit Zitat      
Versteh ich nicht.
Du hast einen Ergebnisvektor und möchtest von den ersten 10, 50, 100... Werten den Durschnitt berechnen?
Code:
durchschnitt = arrayfun(@(n)mean(ergebnis(1:n)),[10,50,100,1000]);
Private Nachricht senden Benutzer-Profile anzeigen
 
michael123

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.01.2013, 18:10     Titel:
  Antworten mit Zitat      
Sirius3 hat Folgendes geschrieben:
Versteh ich nicht.
Du hast einen Ergebnisvektor und möchtest von den ersten 10, 50, 100... Werten den Durschnitt berechnen?
Code:
durchschnitt = arrayfun(@(n)mean(ergebnis(1:n)),[10,50,100,1000]);


nein aber danke für die antwort

also ich habe ein programm das ergebnisse mirermittelt
ich lasse es zuerst 10 mal laufen und bilde den durchschnitt der 10 durchläufe

dann möchte ich es nochmal neu starten lassen und lasse es aber zB 50 mal durchlaufen und bilde wieder den durchschnitt

ich möchte ermitteln wie sich der durchschnitt entwickelt wenn ich die durchläufe erhöhe!!

glg
 
Sirius3
Forum-Guru

Forum-Guru


Beiträge: 441
Anmeldedatum: 12.11.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.01.2013, 19:03     Titel:
  Antworten mit Zitat      
also:
Code:

durchschnitt = arrayfun(@(n)mean(ermittle_ergebnis(n)),[10,50,100,1000]);

function ergebnis = ermittle_ergebnis(durchlaeufe)
  ergebnis=zeros(1,durchlaeufe);
  for i = 1:durchlaeufe
      ergebnis(i)=tu_irgendwas;
  end
end
Private Nachricht senden Benutzer-Profile anzeigen
 
michael123

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.01.2013, 19:15     Titel:
  Antworten mit Zitat      
Sirius3 hat Folgendes geschrieben:
also:
Code:

durchschnitt = arrayfun(@(n)mean(ermittle_ergebnis(n)),[10,50,100,1000]);

function ergebnis = ermittle_ergebnis(durchlaeufe)
  ergebnis=zeros(1,durchlaeufe);
  for i = 1:durchlaeufe
      ergebnis(i)=tu_irgendwas;
  end
end


danke ja ich glaube das ist so wie ich es meine!!

könntest du es nur etwas genauer beschreiben! bin noch nicht so matlab begabt und tu mir schwer dabei

glg
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 14.01.2013, 00:52     Titel:
  Antworten mit Zitat      
Hallo michael123,

Effizienter wäre es wohl, die Berechnungen nicht wiederholt auszuführen:
Code:
ergebnis=zeros(1, durchlaeufe);
for i = 1:durchlaeufe
    ergebnis(i)=tu_irgendwas;
end

len = [10,50,100,1000];
mean_ergebnis = zeros(1, length(len));
for i = 1:length(len)
   mean_ergebnis = mean(ergebnis(1:len(i)));
end

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

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.01.2013, 11:24     Titel:
  Antworten mit Zitat      
Jan S hat Folgendes geschrieben:
Hallo michael123,

Effizienter wäre es wohl, die Berechnungen nicht wiederholt auszuführen:
Code:
ergebnis=zeros(1, durchlaeufe);
for i = 1:durchlaeufe
    ergebnis(i)=tu_irgendwas;
end

len = [10,50,100,1000];
mean_ergebnis = zeros(1, length(len));
for i = 1:length(len)
   mean_ergebnis = mean(ergebnis(1:len(i)));
end

Gruß, Jan


Code:
ergebnis=zeros(1, durchlaeufe);
for i = 1:durchlaeufe
    ergebnis(i)=tu_irgendwas;
end

len = [10,50,100,1000];
mean_ergebnis = zeros(1, length(len));
for i = 1:length(len)
   mean_ergebnis(i) = mean(ergebnis(1:len(i)));
end


glaube jan meinte das eher so, andernfalls würde er das ergebnis jedes einzelnen durchlaufes wieder überschreiben.
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 14.01.2013, 12:53     Titel:
  Antworten mit Zitat      
Hallo blub,

Ja genau. Danke.
Und es geht noch effizienter, denn man kann sich (also Matlab) sogar das erneute Summieren ersparen:
Code:
ergebnis=zeros(1, durchlaeufe);
for i = 1:durchlaeufe
    ergebnis(i)=tu_irgendwas;
end

len = [10,50,100,1000];
c    = cumsum(ergebnis);
mean_ergebnis = c(len) ./ len;

Aber im Ernst: Bei den Längen 10 bis 1000 ist die Laufzeit nicht erwähnenswert. Falls Du aber auch [10000:10000:200000] berechnen möchtest, hilft das schon eher.

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

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.01.2013, 12:56     Titel:
  Antworten mit Zitat      
blub hat Folgendes geschrieben:
Jan S hat Folgendes geschrieben:
Hallo michael123,

Effizienter wäre es wohl, die Berechnungen nicht wiederholt auszuführen:
Code:
ergebnis=zeros(1, durchlaeufe);
for i = 1:durchlaeufe
    ergebnis(i)=tu_irgendwas;
end

len = [10,50,100,1000];
mean_ergebnis = zeros(1, length(len));
for i = 1:length(len)
   mean_ergebnis = mean(ergebnis(1:len(i)));
end

Gruß, Jan


Code:
ergebnis=zeros(1, durchlaeufe);
for i = 1:durchlaeufe
    ergebnis(i)=tu_irgendwas;
end

len = [10,50,100,1000];
mean_ergebnis = zeros(1, length(len));
for i = 1:length(len)
   mean_ergebnis(i) = mean(ergebnis(1:len(i)));
end


glaube jan meinte das eher so, andernfalls würde er das ergebnis jedes einzelnen durchlaufes wieder überschreiben.


danke für die hilfe jedoch bin ich ziemlicher neuling

wo muss ich mein programm einfügen?
und wofür ist die erste for schleife?

glg
 
michael123

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.01.2013, 12:15     Titel:
  Antworten mit Zitat      
Jan S hat Folgendes geschrieben:
Hallo blub,

Ja genau. Danke.
Und es geht noch effizienter, denn man kann sich (also Matlab) sogar das erneute Summieren ersparen:
Code:
ergebnis=zeros(1, durchlaeufe);
for i = 1:durchlaeufe
    ergebnis(i)=tu_irgendwas;
end

len = [10,50,100,1000];
c    = cumsum(ergebnis);
mean_ergebnis = c(len) ./ len;

Aber im Ernst: Bei den Längen 10 bis 1000 ist die Laufzeit nicht erwähnenswert. Falls Du aber auch [10000:10000:200000] berechnen möchtest, hilft das schon eher.



da muss ich aber durchlaeufe angeben! weil wenn ich nicht eingebe durchlaeufe =100 zB ist durchlaufe ja nicht definiert!!
ich wollte eigentlich das es die verschiedenen anzahl an durchlaeufen selbst durchläuft!!!

glg

Gruß, Jan
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 15.01.2013, 14:40     Titel:
  Antworten mit Zitat      
Hallo michael123,

Code:
Teilschritte = [10,50,100,1000];
Durchläufe = Teilschritte(end);
ergebnis=zeros(1, Durchlaeufe);
for i = 1:Durchlaeufe
    ergebnis(i) = tu_irgendwas;
end

c    = cumsum(ergebnis);
mean_ergebnis = c(len) ./ len;

Ist das nun klarer? Wenn nicht, zeige nochmal, was Du bisher an Code hast -auch wenn er noch nicht läuft- und stelle eine konkrete Frage.

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.