Approximationkurve aus mehrehe Messpunkte

Gast #1383167
Hallo Leute

ich beschäftige mich grad mit Matlab und habe dazu eine  Frage.
ich habe hier Daten  mit mehr als 500 Messpunkte.   Zwischen den 
einzelnen Punkten tretten Nullstellen auf.

nun möchte ich mit den von Null  verschiedene Punkte, eine Kurve 
darstellen, die sich an diesen Punkte annährt.
Hat da jemenad eine Idee wie diese zu realisieren ist.

Eine Mittelung ist auch nicht die Lösung,  da die Null-Werte auch 
betrachtet werden.

danke für Hilfe
Sebastian
Gast #1383206
Danke Tom,

aber die Zeitachse an sich soll  sich nicht ändern  .  d h   egal ob 
dich   die Nullwerte rausschmeißt tretten an den Stellen Lücken.


Fitting Toolbox  habe ich noch  nicht gehört.

sonst eine andere Möglichkeit ??

danke
Sebastian
#1383279
Jungs, mal in nen Mathebuch kucken hilft, in diesem Falle lineare 
Algebra. Der große Gauß sagt, dass das lineare Gleichungssystem A*x=y 
durch x=inv(A'A)A'y im Sinne minimaler Fehlerquadrate gelöst wird. Damit 
kann man wunderbar Polynome fitten, in diesem Fall eine Parabel in 
Meßwerte gefittet. Nulen in Matlab rauswerfen ist auch trivial.

Da braucht man keine Toolbox zu, nix.

Math rulez!
Cheers
Detlef

y=[1 0 2.5 0 0 4.5 0 3.5 2.5 0 1].';
x=(1:length(y));
x=x(:);
ind=find(y~=0);
xx=x(ind);
yy=y(ind);
M=[xx.*xx xx ones(length(xx),1)];
coff=inv(M'*M)*M'*yy;
xxx=linspace(min(x),max(x),1000).';
yfit=[xxx.*xxx xxx ones(length(xxx),1)]*coff;
plot(xxx,yfit,'b.-',x,y,'r.-')
Angehängte Dateien:
Gast #1383308
Danke detlef
es scheint eine gzute lösung zu sein.

aber bei:
>> ind=find(y~=0);

habe ich in meinem Vektor NaN anstatt 0.

das Ergebniss ist dann nicht mehr richtig.  ich habe in der Gleichung 
mit 'NaN' versucht. auch ohne erfolg.
hast jemand  da bitt ein Tricks.

in einem If-Anweisung zu konvertieren   von NaN in Nullen  klappt auch 
nicht.


danke
Gast #1383331
Nimm eine neue Variable t mit der Länge der Meßwertvariable m und 
numeriere den Inhalt:
t = zeros(1,length(m));
t = 1:length(t);

Dann suche nach den Nullstellen:
indices = ~(m == 0);

t = t(indices);
m = m(indices);

Und schon hast Du m und t-Wert von allen gültigen Werten.
Gast #1383366
Hallo Sebastian,

wahrscheinlich suchst Du die Funktion interp1, die Du beispielsweise so 
bedienen kannst:

yneu = interp1(x,y,xneu,'spline')

Gruß,
  Michael
Persönliche Seite #1383486
Wenn es nur darum geht, eine Menge Meßwerte durch eine mathematische 
Kurve mit bestimmten Genauigkeits- und Aufwandsanforderungen zu 
beschreiben, ist dieses Tool hier genau richtig. Dort bekommst du 
Vorschläge fürs Fitten bis zum Abwinken. Such dir dann einfach die für 
dich passenste Approximation aus.

http://zunzun.com/


Das ist auch nett:
http://www.softintegration.com/chhtml/lang/lib/libch/numeric/CGI_Curvefit.html


Gruß -
Abdul
Gast #1397944
Moin,

aus Sicht der Signalverarbeitung stellt Dein Problem ein Signal mit 
hohen Freuqenzen dar, die sich durch "schnelle" Änderungen darstellen.

Wenn Du nun die hohen Frequenzen herausfilterst, wird das Signal 
automatisch geglättet.

Dazu genügt es, das Signal durch ein FIR-Tiefpass prozessieren zu 
lassen. FIR-Filter sind einfach zu realisieren und sollten kein 
unüberwindbares Problem darstellen. Guck einfach, wo Du die 
Grenzfrequenz hinlegst, damit das Ergebnis optimal wird.

Wenn Du das Problem besonders elegant und optimal lösen willst, kannst 
Du auch ein CIC-Interpolator (Cascaded Integrator Comb nach Hogenauer) 
einsetzen. Die Theorie hat's in sich aber die Realisierung ist ebenfalls 
einfach.

Gruß

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 17 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.