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

Interpolation von nicht eindeutigen Werten

 

Gast571

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 29.05.2012, 14:52     Titel: Interpolation von nicht eindeutigen Werten
  Antworten mit Zitat      
Hallo Leute,
ich habe Messwerte, die nicht eindeutig sind d.h. für einen x-Wert bestehen mehrere y-Werte. Durch die Messwerte soll eine Funktion gelegt werden, die eine S-Form hat.

Ich habe mit interp1 versucht doch hier die Fehlermeldung ausgegeben, dass die Werte nicht "distinct" seien. Kennt jemand eine Möglichkeit, eine Interpolation in S-Form zu ermöglichen?

Vielen Dank im Voraus!


MaFam
Forum-Meister

Forum-Meister


Beiträge: 799
Anmeldedatum: 02.05.12
Wohnort: ---
Version: R2009b
     Beitrag Verfasst am: 29.05.2012, 15:58     Titel:
  Antworten mit Zitat      
Hallo,

wie soll denn Interpolation bei dieser Nichteindeutigkeit funktionieren? Was du vorhast, ist sicher Approximation/Regression.

Falls du dennoch interpolieren möchtest, könntest du die Werte pro Stützstelle mitteln.

Grüße, Marc
Private Nachricht senden Benutzer-Profile anzeigen
 
Gast571

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 29.05.2012, 16:40     Titel:
  Antworten mit Zitat      
Danke erst mal für die schnelle Antwort.

Was habe ich vor?
Ich möchte durch meine Messwerte eine Kurve (keine Funktion) legen, die möglichst nahe an den Messwerten liegt.
Könnte sein, dass dies eher ein Fall für Approximation/Regression ist.

Kann mir jemand hier vielleicht eine Funktion empfehlen?
 
MaFam
Forum-Meister

Forum-Meister


Beiträge: 799
Anmeldedatum: 02.05.12
Wohnort: ---
Version: R2009b
     Beitrag Verfasst am: 29.05.2012, 16:50     Titel:
  Antworten mit Zitat      
Ohne Funktion gibt es keine Kurve. Ein Kurve ist eine Funktion. Wenn du die Punktwolke approximieren willst, musst du dich für eine Modellfunktion entscheiden.

Ohne diese Daten zu sehen, kann man da schlecht Tipps geben.
Private Nachricht senden Benutzer-Profile anzeigen
 
Gast571

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 29.05.2012, 17:23     Titel:
  Antworten mit Zitat      
Danke für die Antwort.
Die Messergebnisse liegen so, dass sie eine S-Form bilden. Sie liegen also nicht in einer Wolke. Per Hand könnte ich relativ leicht eine Kurve hindurch zeichnen. Wie könnte ich dies aber mit Matlab machen?

Nun gut, eine Funktion wäre es eindeutig nicht, da es x-Werte gibt, denen mehrere Y-Werte zugeordnet werden.
Dennoch muss es doch eine Möglichkeit geben, hier eine Kurve (keine Funktion) hindurchzulegen, die möglichst nahe an den Messwerten liegt.

Kann mir hier jemand eine Matlab-Funktion empfehlen?
 
MatLabNooB
Forum-Guru

Forum-Guru


Beiträge: 262
Anmeldedatum: 27.03.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 29.05.2012, 18:57     Titel:
  Antworten mit Zitat      
Hi,

ich würde die y-Werte für einen x-Wert mitteln und dann mit eine Sigmoidfunktion fitten, siehe http://www.gomatlab.de/daten-mit-si.....funktion-fitten-t697.html

gruß
Private Nachricht senden Benutzer-Profile anzeigen
 
Gast571

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 29.05.2012, 20:13     Titel:
  Antworten mit Zitat      
Dann habe ich aber eine Funktion also keinen Graphen für den mehr als ein y-Wert pro x-Wert existiert, oder?
 
Jette
Forum-Anfänger

Forum-Anfänger


Beiträge: 32
Anmeldedatum: 13.02.09
Wohnort: München
Version: R2010b, R2015b
     Beitrag Verfasst am: 30.05.2012, 08:36     Titel:
  Antworten mit Zitat      
Hallo,

hast Du schon mal die Blog-Einträge von Loren Shure zu dem Thema Interpolation + Fitten angesehen? Vielleicht helfen die Dir ja weiter:

http://blogs.mathworks.com/loren/category/interpolation-fitting/

Falls Du die Curve Fitting Toolbox zur Verfügung hast, kann ich zum Ausprobieren des Fittens das Curve Fitting Tool cftool sehr empfehlen. Von da ausgehend kann man sich ggf. auch recht leicht entsprechenden Code generieren.

Gruss
Jette
Private Nachricht senden Benutzer-Profile anzeigen
 
MaFam
Forum-Meister

Forum-Meister


Beiträge: 799
Anmeldedatum: 02.05.12
Wohnort: ---
Version: R2009b
     Beitrag Verfasst am: 30.05.2012, 08:47     Titel:
  Antworten mit Zitat      
Zeig' uns bitte die Punktwolke und wenn möglich, dann skizziere den Kurvenverlauf, den du dir vorstellst.

Man kann ansonsten wirklich nur raten...
Private Nachricht senden Benutzer-Profile anzeigen
 
MaFam
Forum-Meister

Forum-Meister


Beiträge: 799
Anmeldedatum: 02.05.12
Wohnort: ---
Version: R2009b
     Beitrag Verfasst am: 30.05.2012, 09:21     Titel:
  Antworten mit Zitat      
Meinst du sowas? Siehe Upload.

SKurve.png
 Beschreibung:

Download
 Dateiname:  SKurve.png
 Dateigröße:  5.97 KB
 Heruntergeladen:  824 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Gast571

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 30.05.2012, 14:33     Titel:
  Antworten mit Zitat      
MaFam hat Folgendes geschrieben:
Meinst du sowas? Siehe Upload.


Genau! Wie geht so was?
 
MaFam
Forum-Meister

Forum-Meister


Beiträge: 799
Anmeldedatum: 02.05.12
Wohnort: ---
Version: R2009b
     Beitrag Verfasst am: 30.05.2012, 16:01     Titel:
  Antworten mit Zitat      
Die Kurve habe ich mit sog. B-Splines erzeugt.

Siehe hier: http://de.wikipedia.org/wiki/B-Splines#B-Spline-Kurve

Falls du die Curve Fitting Toolbox hast, kannst du die Funktion bspline() verwenden. Falls nicht, hier fertige Skripte dazu: http://www.mathworks.com/matlabcent.....eexchange/27374-b-splines

Alternative: Man kann ein kubisches Polynom parametrieren und rotieren. Damit lässt sich ebenfalls eine Regression durchführen (insgesamt 5 Freiheitsgerade inkl. Rotationswinkel).
Private Nachricht senden Benutzer-Profile anzeigen
 
MaFam
Forum-Meister

Forum-Meister


Beiträge: 799
Anmeldedatum: 02.05.12
Wohnort: ---
Version: R2009b
     Beitrag Verfasst am: 30.05.2012, 16:34     Titel:
  Antworten mit Zitat      
Interpolation geht in diesem Fall auch. Dazu könnte man sich Splines in Parameterdarstellung bedienen. Hier ein interaktives Beispiel: http://www.tm-interaktiv.de/Splines/
Private Nachricht senden Benutzer-Profile anzeigen
 
Gast571

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 01.06.2012, 19:23     Titel:
  Antworten mit Zitat      
Erst mal vielen Dank für die ausführliche Hilfe. Mit Hilfe der fertigen Skripte habe ich mal etwas herumgespielt und folgenden Code zusammengeschneidert:
Code:

n = 3;
t1 = [ -44 -1 0 0.25 0.5 0.75 1 2 3 4 5 6 7 8 9 ];
t2 = [ -2 -1 0 0.5 0.9 1 1.1 1.2 50 60 62 63 64 65 66];
P = [  2 3 4 5 4 3 2 2 3 4 5 6 ...
    ; 1 1.5 2 3 4 5 5.5 6 7 7.5 8 9 ];
X1 = bspline_deboor(n,t1,P);
X2 = bspline_deboor(n,t2,P);
figure;
hold all;
semilogy(X1(1,:), X1(2,:), 'r');
semilogy(X2(1,:), X2(2,:), 'b');
semilogy(P(1,:), P(2,:), 'kv');
hold off;
 


Leider habe ich noch 2 Probleme:
1. Verstehe ich noch nicht ganz den Sinn des "knot-vector" t. In obigem Code habe ich für 2 unterschiedliche t den B-Spline plotten lassen. Ich sehe aber nicht, in wie weit t den Plot beeinflusst.
2. Funktioniert hier die logarithmische Skalierung der y-Achse nicht. Kann ich diese noch auf eine andere Art und Weise erreichen?

Vielen Dank schon mal...
 
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 - 2024 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.