Verfasst am: 04.05.2017, 15:52
Titel: Optimierung eines Durschnittswert
Moin,
ich habe eine Reihe von Werten in einem Vektor gespeichert. Mit mean kann ich von allen Werten, in diesem Vektor, den Mittelwert bestimmen. Nun möchte ich aber eine Grenze für den Mittelwert vorgeben und er soll möglichst viele Werte aus meinem Vektor nehmen.
Folgendes habe ich bereits:
Code:
RPZ=[20,30,45,10,50,70,15,5,65,25];
maxRPZ=15;
kk=0;
StartRPZ=0;
meanRPZ=0;
ii=0;
jj=[];
dd=[];
while ii<length(RPZ)
if meanRPZ>maxRPZ
kk=kk-1;
StartRPZ=StartRPZ-RPZ(ii);
meanRPZ=(StartRPZ)/(kk);
dd=vertcat(dd,ii);
else
ii=ii+1;
kk=kk+1;
StartRPZ=StartRPZ+RPZ(ii);
meanRPZ=(StartRPZ)/kk;
if meanRPZ>maxRPZ
else
jj=vertcat(jj,ii);
end end end
In jj schreibt er die Zeilen rein, der Werte, die er zum berechnen benutzt hat und in dd alle nicht benutzten. Problem ist, wenn ich jetzt als maxRPZ=20 eingebe, bekomme ich auch einen Wert, das ist aber nicht der beste, da wenn er bestimmte Werte erst später benutzt zum ausrechnen des Mittelwerts, der Mittelwert nicht das Maximum überschreitet und die Anzahl der benutzten Werte wird größer.
Gibt es für so eine Optimierung, vllt sogar schon etwas vorgefertigtes von matlab, wo man nur die Werte und die Grenze eingibt?
for ii=1:length(RPZ) if RPZ(ii)<=maxRPZ
kk=kk+1;
StartRPZ=StartRPZ+RPZ(ii);
meanRPZ=StartRPZ/kk;
jj=vertcat(jj,ii);
else
dd=vertcat(dd,ii);
ff=1;
while ff<=length(dd) if maxRPZ>=(StartRPZ+RPZ(dd(ff)))/(kk+1)
kk=kk+1;
StartRPZ=StartRPZ+RPZ(dd(ff));
meanRPZ=StartRPZ/kk;
jj=vertcat(jj,dd(ff));
dd(ff,:)=[];
ff=ff+1;
else
ff=ff+1;
end
möchtest du nun
a) den Mittelwert beschränken und schauen, welche Werte du dazu verwenden kannst, oder
b) den Mittelwert aller Werte unterhalb eines Werts berechnen?
ich möchte den Mittelwert beschränken und dann schauen, welche Werte ich dazu benutzen kann. Und die Anzahl der Werte, die ich benutzen kann soll maximal sein.
Wie ich es gesehen habe, macht er das bisher auch. Sieht nur nicht so schön aus.
vielen Dank für deine Antwort und Code. Der Code macht das was ich will ja sogar noch viel besser und schneller.
Damit ist meine Frage, erstmal beantwortet.
Gruß
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
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.