es wird ein Denkfehler gewesen sein. Nach mehrmaligem Prüfen und vielem Nachdenken denke ich, dass die Berechnungen und damit die Werte korrekt sind.
Mein Idee, wieso die Werte unterschiedlich sind:
Bei Variante 2 und auch bei Variante 1 (reine Berechnung) wird die Schlangenlänge mit nicht ganzzahligen Werten berechnet (also mit den genauen Werten). Deshalb liegen beide Ergebnisse auch sehr nah beieinander.
Werte aus Variante 3 schlagen nich völlig aus der Reihe, scheine logisch korrekt, weichen jedoch etwas von 1 und 2 ab. Bei Variante 3 wird ja der Mittelwert aus der gerade aktuellen Schlangenlänge beim entsprechend simulierten Kunden bestimmt. Nun ist die aktuelle Schlangenlänge ja immer ganzzahlig. Wenn keine Schlange da ist also 0 und je nach Länge dann 1,2,3,4..........
Eine Simulation über 1.000.000 Kunden brachte auch keine Annäherung der Werte, deswegen vermute ich, dass es einfach aus dem Umstand der Ganzzahligkeit resultiert. Klingt das logisch bzw. kann man überhaupt verstehen, was ich meine ?
Man kann hier vermutlich fast alle for Schleifen vermeiden...
Code:
for i=1:length(data)
data_x(i) = data_x(i)+versch;
end % äquivalent
data_x = data_x + versch;
for i=1:length(data_Y)
dB_data_Y(i) = 20*log(abs(data_Y(i))/1e-6);
end % äquivalent
dB_data_Y = 20*log(abs(data_Y)/1e-6);
% allerdings sollte man hier immer ein kleine Konstante (eps) aufaddieren um log(0) zu vermeiden
% var ist ein Schlüsselname/ Funktion für varianz und sollte daher nicht benutzt werden for a=i:ende
var = var+data_y(a);
end % äquivalent
sum_data = sum(data_y(:)); % wenn nötig explizit den Bereich von data_y festlegen
Wenn man schon Schleifen benutzt und dort einem Vektor/Matrix Werte zuweist, sollte diese/r auch vorher schon allociert sein...das spart ebenfalls Zeit.
Code:
%z.B.
c = zeros(10,1); % Speicherplatz reservieren for i=1:length(c)
c(i) = ... end;
Ok,
allocieren kenn ich noch von der C-Programmierung.
Hab gedacht MATLAB macht das auto. ??
Ich müsste ja dann Speicher in der Größenordnung meiner Matrix sprich 63 MB allocieren. Kommt das nicht aufs selbe ??
Sicherlich kann das matlab auch von allein...aber wenn man den Platz vorher selber festlegt, geht es eben schneller, da dann nicht immer wieder neuer Speicherplatz reserviert werden muss. Hier finden sonst immer wieder Copy und paste Vorgänge statt die nun mal Zeit brauchen...vor allem bei 63 MB.
Wenn du einen Ergebnisvektor mit 63 MB brauchst, musst du den auch reservieren. Allerdings wird die Ausführungszeit wohl auch auf Grund der Masse deiner Daten so hoch sein. Evtl. musst du die Daten sonst Segmentieren...
hi,
in der documation von filetr steht leider nur ein Beispiel für den gleitenden Mittelwert und nicht für den laufenden. In bin mir auch nicht sicher ob der Algorythmus zur Berechnung des laufenden Mittelwert geeignet ist.
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.