Verfasst am: 08.06.2015, 21:05
Titel: Mehrere Y-Werte zu einem X-Wert - Problem
Hallo,
habe folgendes Problem. Ich habe eine Datenreihe mit mehreren Y-Werten zu einem X-Wert. Ich würde nun gerne über ein Skript die Y-Werte raussuchen und den Mittelwert bilden und anschließend den Mittelwert zu dem entsprechenden X-Wert speichern lassen. Folgendes hab ich mir dazu bisher überlegt:
Code:
h = 1;
i = 1;
j = 1;
y = yy(:,1); %einlesen der Y-Werte
x = 0;
z = 1;
Mit der if-else Bedingung möchte ich, dass entweder der aktuelle Y-Wert genommen wird und auf h addiert wird, oder falls ein neuer X-Wert kommt, er h durch die Anzahl der vorher aufsummierten Werte teilt (Mittelwert bildet).
Das ganze funktioniert nicht so wie es soll und ich dachte ich frage hier mal, vielleicht gibt es einen einfachereren Weg aus mehreren Y-Werten zu einem X Wert einen Y-Wert zu machen.
das siht nicht nach einem programm aus .. außerdem wird in matlab ein punkt als dezimaltrennzeichen verwendet.
wenn es nicht zu viele daten sind sollte das recht leicht mit unique und einer forschleife realisirbar sein.
Was genau meintest du mit dieser Zeile?
Also das in C ein Mittelwert abgespeichert wird, verstehe ich noch.
Auch das von A auf die erste Spalte zugegriffen wird. (Bei B auf die 2. Spalte? B besteht ja nur aus einer...)
ja da hat sich auf die schnelle der fehlerteufel eingeschlichen. hatte kein matlab da.. mit 800k werten meinst du damit 800k einzigaritge werte oder sind es dann nur 10000 eizigarite etc. das macht ja unterschied
ich würde vermuten, die Apostrophe müssen weg (accumarray frisst Spaltenvektoren, du hast bereits Spaltenvektoren und machst sie wieder zu Zeilenvektoren).
Habe nun eine andere Frage. Ich möchte gerne eine Art Ausgleichsfunktion durch die Werte legen. Die ersten Werte müssen mit einer e-Funktion, die späteren Werte mit einer Funktion 3. Grades interpoliert werden. Ich kenne nur die Funktion polyfit und polyval.
Im Anhang hab ich die Kennlinie hochgeladen in der die blaue Funktion mit dem Code als Polynom 3. Grades interpoliert wurde. Am Anfang passt das ganze allerdings überhaupt nicht.
Gibt es eine spline-ähnliche Funktion mit der sich das bewerkstelligen lässt?
Die Funktion 'spline' in Matlab hab ich schon gefunden, allerdings verstehe ich die Erklärungen in der Matlab-Hilfe nicht.
Hoffe ihr könnt weiter helfen
mach dafür am besten ein neues Thema auf und zeige, was du bereits versucht hast. Das Problem ist nicht so einfach zu lösen -- soll das stetig ineinander übergehen? Wo ist die Grenze (bis wann soll mit einer Exponentialfunktion und ab wann soll mit einem Polynom gefitted werden)?
Ein kurzer Blick auf die Daten: Für den Anfangsbereich sind doch sowieso nur 2 Datenpunkte vorhanden, stimmt das? Da ist es sowieso fragwürdig, eine Exponentialfunktion durchzulegen.
Trotzdem: versuch doch für den hinteren Teil einfach mal sowas
Code:
threshold = 1;
mask = A(:,1) > threshold;
p = polyfit(A(mask,1),A(mask,2),3);
y = polyval(p,A(mask,1)); % alternativ am vorderen Teil auch das Polynom anwenden: y = polyval(p,A(:,1));
Das hilft, um die Grenze threshold zu finden. Hier würde ich es mal mit 1 als Grenze versuchen, dann sollte der Fit für den hinteren Teil schon mal besser aussehen.
VG,
Nras.
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.