|
|
Ausgleichsrechnung: Curve Fitting |
|
Martin_P |
Gast
|
|
Beiträge: ---
|
|
|
|
Anmeldedatum: ---
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 30.05.2015, 16:54
Titel: Ausgleichsrechnung: Curve Fitting
|
|
|
|
|
Hallo Matlab-Profis,
ich hoffe ihr könnt mir weiter helfen.
Ich habe folgendes Problem:
Ich habe eine Kurve gemessen. Im Bild ist das die gelbe Kurve.
Außerdem habe ich eine Formel, die die blaue Kurve beschreibt. Das einzige was fehlt, ist zu jedem Messpunkt ein komplexer Wert, der bewirkt, dass die Kurven gleich aussehen. Dies möchte ich über eine Ausgleichsrechnung realisieren.
Ich habe also:
- Vektor startvektor, der helfen soll, den nächsten Wert möglichst schnell zu finden
- Vektor VE_ges, der der blauen Kurve entspricht
- Vektor x_n, der eine komplexe Zahl zu jedem Messpunkt enthält
- Vektor f, der die X-Werte enthält
- Vektor Gemessene_Werte, der alle Messwerte enthält
Als Fehlermeldung erhalte ich:
Ich glaube die Fehlermeldung ist nichtmal das Problem. Ich bin mir nicht sicher, ob ich nicht grundsätzlich einen Fehler gemacht habe.
Ich bin gespannt auf Euer Feedback.
Viele Grüße,
Martin
Beschreibung: |
Gelbe Kurve ist die gemessene - Blue Kurve ist die berechnete Kurve |
|
Download |
Dateiname: |
untitled.jpg |
Dateigröße: |
30.13 KB |
Heruntergeladen: |
439 mal |
|
|
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.495
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 30.05.2015, 17:14
Titel:
|
|
Hallo,
willst du wirklich zu jedem Messwert einen passenden Parameter finden?
Üblicherweise sucht man einen oder wenige Parameter, die für alle Messwerte möglichst gut passen.
Zur Fehlermeldung an sich: lsqcurvefit will die Funktion mit zwei Eingabeargumenten aufrufen, Parametervektor und x-Vektor. Deine Funktion nimmt nur ein Eingabeargument an.
Grüße,
Harald
|
|
|
Martin_P |
Gast
|
|
Beiträge: ---
|
|
|
|
Anmeldedatum: ---
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 31.05.2015, 00:21
Titel: Jo
|
|
Hi,
ja, ich will tatsächlich zu jedem Messwert einen passenden Parameter finden
Ich weiß das ist ungewöhnlich, aber es ist tatsächlich so.
Okay, ich probiere es morgen mal aus, das zu korrigieren.
Geht das denn überhaupt so mit der Funktion, dass ich zu jedem Mess-Wert einen passenden Parameter x_n(k) über diese Funktion finden kann?
Also auch, wenn der Parameter komplex ist?
Gruß Martin
|
|
|
Martin_P |
Gast
|
|
Beiträge: ---
|
|
|
|
Anmeldedatum: ---
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 31.05.2015, 08:54
Titel: Problem
|
|
Also ich habe es jetzt verändert und zumindest gibt es keine Fehlermeldung mehr. Aber die Resultate sind leider nicht so, wie ich sie gerne hätte. Vor allem sieht die berechnete Kurve gar nicht so aus, wie die gemessene Kurve.
Das Bild befindet sich im Anhang.
Im übrigen ist die berechnete Kurve natürlich komplex, wird aber mit abs() nur betragsmäßig angezeigt. Aber das muss auch so sein.
Ich kenne auch die ungefähren oberen und unteren Grenzen von x_n(k). Aber die sind ja komplex, deswegen kann ich glaube ich nicht die Funktion für lsqcurvefit verwenden, also "Vector of lower bounds" und "Vector of upper bounds".
Gruß,
Martin
Beschreibung: |
Gelbe Kurve ist die gemessene Kurve und blaue Kurve ist die berechnete Kurve. |
|
Download |
Dateiname: |
untitled.jpg |
Dateigröße: |
40.57 KB |
Heruntergeladen: |
484 mal |
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.495
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 31.05.2015, 17:33
Titel:
|
|
Hallo,
wenn es wirklich das ist, was du möchtest, dann ist lsqcurvefit nicht wirklich geeignet. Dann sieht das eher nach solve / fsolve aus.
Grüße,
Harald
|
|
|
Martin_P |
Gast
|
|
Beiträge: ---
|
|
|
|
Anmeldedatum: ---
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 31.05.2015, 18:25
Titel: Sicher?
|
|
Also das Problem ist, dass ich ja quasi zwei Variablen habe.
n_schlange besteht ja aus einem Real- und einem Imaginärteil. Von daher weiß ich gar nicht, ob solve eine Gleichung mit zwei Unbekannten lösen kann.
Aber ich probiere es mal aus. Danke für den Tipp.
Gruß
Martin
|
|
|
Martin_P |
Gast
|
|
Beiträge: ---
|
|
|
|
Anmeldedatum: ---
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 31.05.2015, 19:22
Titel: Funktioniert nicht
|
|
Das liefert leider keine Ergebnisse. Zunächst rechnet der PC minutenlang und dann ist der ganze Vektor x_n nur mit Nullen befüllt. Der solve-Befehl kann die Gleichung offenbar nicht lösen. Warum das nicht geht, weiß ich leider nicht.
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.495
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 31.05.2015, 19:30
Titel:
|
|
Hallo,
welche Syntax von solve versuchst du denn zu verwenden? Ich sehe auf Anhieb nicht, zu welcher dokumentieren Syntax das passen soll.
Vor allem aber: warum gibst du eine Ungleichung an, wenn du möchtest, dass etwas möglichst gleich sein soll?
Grüße,
Harald
|
|
|
Martin_P |
Gast
|
|
Beiträge: ---
|
|
|
|
Anmeldedatum: ---
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 31.05.2015, 19:50
Titel: funktioniert nicht
|
|
Ich gebe eine Ungleichung an, weil ich davon ausgehe, dass die leichter zu lösen ist. Ich denke ein exaktes Ergebnis wird es ja eh nicht geben. Eine leichte Abweichung von der gemessenen Kurve ist ja in Ordnung.
Syntax?
Also ich habe es so gemacht wie es in doc solve steht.
Matlab gibt ja auch keine Fehlermeldung aus.
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.495
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 31.05.2015, 20:17
Titel:
|
|
Hallo,
Zitat: |
Ich gebe eine Ungleichung an, weil ich davon ausgehe, dass die leichter zu lösen ist. |
Das ist ein Irrtum. solve versucht ja wenn, *alle* Lösungen zu finden.
Zitat: |
Ich denke ein exaktes Ergebnis wird es ja eh nicht geben. |
Bei solve gibt es entweder eine exakte Lösung oder gar keine.
Zitat: |
Eine leichte Abweichung von der gemessenen Kurve ist ja in Ordnung. |
Dann solltest du fsolve verwenden, nicht solve.
Zitat: |
Syntax? Also ich habe es so gemacht wie es in doc solve steht. |
Wo steht in der Doku von solve, dass es sinnvoll ist, als drittes Argument eine Zahl zu übergeben?
Zitat: |
Matlab gibt ja auch keine Fehlermeldung aus. |
Dass der Code fehlerfrei durchläuft, heißt noch lange nicht, dass er das macht, was der Nutzer beabsichtigt. Aber dass die Ergebnisse nicht sinnvoll sind, hast du ja auch schon gemerkt.
Leider ist es schwierig die Problematik nachzuvollziehen, wenn man keine Beispieldaten hat.
Grüße,
Harald
|
|
|
|
|
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
|
|
Impressum
| Nutzungsbedingungen
| Datenschutz
| FAQ
| RSS
Hosted by:
Copyright © 2007 - 2025
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.
|
|