|
|
Nichtlineare Regression inkl vorgegebener Funktion |
|
Jigs |

Forum-Anfänger
|
 |
Beiträge: 24
|
 |
|
 |
Anmeldedatum: 11.03.10
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 22.08.2010, 18:16
Titel: Nichtlineare Regression inkl vorgegebener Funktion
|
 |
|
 |
|
Hallo!
Da ihr mir immer so gut weitergeholfen habt, habe ich wieder mal eine Frage, da ich einfach nicht weiter komme. Wenn ich nach nonlinear Regression suche dann müsste es ja genau das sein, nur finde ich keine passenden "Beispiele" die mir weiterhelfen.
Vielen Dank schon mal fürs anschauen!
Also ich habe folgende Situation:
Ich habe 6 Messpunkte (X,Y-Koordinaten bekannt), welche ich in meiner GUI in einem Plot anzeigen lasse. Jetzt muss ich eine Kurve in die 6 Messpunkte hineinlegen. Das Problem: Die Regressionskurvenfunktion ist vorgegeben.
Y(X) = z1^a - z2^b *(c + d*X + e*X^2) (z1 und z2 sind Konstanten und bekannt)
a, b, c, d, e müssen so berechnet werden, dass diese durch die 6 Messpunkte gehen bzw an die 6 Messpunkte angenähert/minimiert werden.
Allgemeine empfohlene Startwerte habe ich auch vorgegeben, müssen aber nicht unbedingt verwendet werden.
Mit polyfit, ployval kann ich umgehen, nur leider nützt mir das hier nix, weil ich keine Polynomfunktion habe.
Wie löse ich am besten das Problem?
Vielen Dank für eure Mühe!
|
|
|
|
|
Harald |

Forum-Meister
|
 |
Beiträge: 24.501
|
 |
|
 |
Anmeldedatum: 26.03.09
|
 |
|
 |
Wohnort: Nähe München
|
 |
|
 |
Version: ab 2017b
|
 |
|
|
 |
|
Verfasst am: 22.08.2010, 19:04
Titel:
|
 |
Hallo,
erfordern allerdings Statistics Toolbox bzw. Optimization Toolbox.
Vorsicht: wenn die Daten fehlerbehaftet sind, kann man aus 6 Werten nicht mit vernünftiger Genauigkeit 5 Parameter schätzen.
Grüße,
Harald
|
|
|
Thomas84 |

Forum-Meister
|
 |
Beiträge: 546
|
 |
|
 |
Anmeldedatum: 10.02.10
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 23.08.2010, 07:50
Titel:
|
 |
Zitat: |
Y(X) = z1^a - z2^b *(c + d*X + e*X^2) (z1 und z2 sind Konstanten und bekannt)
|
Das ist doch ein Polynom in X. Allerdings sind a,b und c voneinander abhängig, dadurch kann man sie nicht genau bestimmen. Wenn man a,b = 0 setzt erhält man:
Y(X) = f - d*X - e*X^2
f = 1 - c
Jetzt kannst du mit polyfit f,d und e bestimmen. Die gesuchten Parameter sind dann:
a = 0
b = 0
c = 1 - f
d = d
e = e
Du kannst a und b auch irgendwie anders setzen. Dann erhälst du ein anderen Wert für c, aber dieselbe Funktion Y(X).
|
|
|
Jigs |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 24
|
 |
|
 |
Anmeldedatum: 11.03.10
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 23.08.2010, 12:28
Titel:
|
 |
sry hatte einen kleinen fehler drinen: die gleichung war so:
Y(X) = z1^a * z2^b *(c + d*X + e*X^2)
dürfte aber auch nicht viel daran ändern.
aber danke für den Hinweis. Ich bin jetzt auch bissl baff, weil du natürlich recht hast. also a und b null setzen ist ganz schlecht, weil Z1 und Z2 wichtige Informationen enthält. ich muss mal gucken wie sich das ganze verhällt.
Vielen Dank dir!
|
|
|
Harald |

Forum-Meister
|
 |
Beiträge: 24.501
|
 |
|
 |
Anmeldedatum: 26.03.09
|
 |
|
 |
Wohnort: Nähe München
|
 |
|
 |
Version: ab 2017b
|
 |
|
|
 |
|
Verfasst am: 23.08.2010, 12:38
Titel:
|
 |
Hallo,
Thomas hat da ganz recht: das ist in dieser Form schlecht formuliert, da es zu im Grunde jeden a, b Werte c, d und e gibt, die eine optimale Anpassung liefern.
Da musst du aber auch zurück zur Problemstellung gehen.
Grüße,
Harald
|
|
|
Jigs |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 24
|
 |
|
 |
Anmeldedatum: 11.03.10
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 23.08.2010, 18:20
Titel:
|
 |
ich werde das mal prüfen, ob wirklich das gleiche rauskommt. auf dem ersten blick sieht es so aus. es handelt sich hier um eine US-Norm die das so vorgeben und sich schon was dabei gedacht haben müssen (denke ich mal). Normalerweise soll das mit dem BFGS-verfahren durchgeführt werden - ist aber nur eine Empfehlung. (falls jemand ein fertiges bfgs-verfahren hat, kann er das ruhig posten )
Z1 und Z2 sind ziemliche wichtige Informationen die die QUalität der Minimierung vielleicht verbessern. Ich werde mich bei einem Mathematiker nochmal schlau machen
EDIT:
könnte auch was passendes sein. Eben "entdeckt"
|
|
|
Jigs |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 24
|
 |
|
 |
Anmeldedatum: 11.03.10
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 25.08.2010, 22:53
Titel:
|
 |
Ich hab nochmal eine Zwischenfrage.
Laut der Matlab Hilfe kann ich mit "fminunc" gar keine X und Y-Koordinaten eingeben, oder? Letztendlich wird doch nur die Funktion als solche minimiert.
xdata und ydata kann ich gar nicht angeben wie bei lsqcurvefit??
Denn dort erhalte ich ja meine "Koeffizienten" und nicht wie bei "fminunc", wo nur die Funktion selber mit der abhängigen Variable X minimiert wird?!
Oder sehe ich das falsch?
|
|
|
Thomas84 |

Forum-Meister
|
 |
Beiträge: 546
|
 |
|
 |
Anmeldedatum: 10.02.10
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 26.08.2010, 07:21
Titel:
|
 |
Hallo!
in beiden Fällen wird "nur" eine Funktion minimiert. Allerdings ist die Übergabe der Daten etwas unterschiedlich. Bei Lsqcurvefit wird automatisch die quadratische Abweichung zwischen Daten und den approxierten Werten berechnet, während man das bei fminunc per Hand machen muss (Das hat allerdings den Vorteil das man auch andere Kriterien als die Summe der quadratischen Abweichungen verwenden kann).
Falls du aber immer noch die gleiche Funktion zur Anpassung verwenden willst, wirst du Probleme bekommen da es kein eindeutiges Minimum gibt.
|
|
|
Jigs |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 24
|
 |
|
 |
Anmeldedatum: 11.03.10
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 29.08.2010, 11:22
Titel:
|
 |
entschuldigung für die verspätete Rückmeldung.
vielen Dank dir. ich werd das dann mal ausprobieren.
erstmal muss ich ich Versuche fahren, um die Daten zu haben.
Ich werde mich dann nochmal melden.
|
|
|
Jigs |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 24
|
 |
|
 |
Anmeldedatum: 11.03.10
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 02.10.2010, 11:03
Titel:
|
 |
Hallo!
da bin ich wieder
Ich habe mit lsqcurvefit die Berechnung hinbekommen.
Allerdings scheitere ich bei fminunc.
Ich habe ein myfun.m - File
dann in meinem Programm sieht der Ablauf so aus:
nur erhalte ich folgende Fehlermeldung:
Kann mir jemand bitte sagen, was ich falsch mache?
|
|
|
Harald |

Forum-Meister
|
 |
Beiträge: 24.501
|
 |
|
 |
Anmeldedatum: 26.03.09
|
 |
|
 |
Wohnort: Nähe München
|
 |
|
 |
Version: ab 2017b
|
 |
|
|
 |
|
Verfasst am: 02.10.2010, 11:37
Titel:
|
 |
Hallo,
ganz einfach: fminunc ist für diese Art von Problemstellung nicht geeignet. Bei fminunc müsstest du, wie schon von Thomas erwähnt, die Abweichungsnorm zunächst selbst errechnen.
Gegenfrage: warum willst du fminunc verwenden, wenn es lsqcurvefit geklappt hat?
Grüße,
Harald
|
|
|
Jigs |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 24
|
 |
|
 |
Anmeldedatum: 11.03.10
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 02.10.2010, 11:47
Titel:
|
 |
Zitat: |
ganz einfach: fminunc ist für diese Art von Problemstellung nicht geeignet. Bei fminunc müsstest du, wie schon von Thomas erwähnt, die Abweichungsnorm zunächst selbst errechnen.
|
ok ja stimmt - hatte ich nicht so wahrgenommen -sry.
jetzt stellt sich die frage: wie mache ich das? bzw ist das der code den Thomas84 gepostet hat?
dachte das wären zwei unterschiedliche sachen einmal lsqcurvefit oder wie man das mit fminunc berechnet.
Ich habe echt keine Ahnung wie ich die Abweichung berechne und dann fminunc übergebe.
Zitat: |
Gegenfrage: warum willst du fminunc verwenden, wenn es lsqcurvefit geklappt hat? |
weil ich nach US-NORM das bfgs verfahren nehmen müsste. und bei fminunc kann ich das bfgs verfahren auswählen.
über sinn und unsinn möchte ich eigentlich nicht diskutieren. das habe ich schon durch
|
|
|
Jigs |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 24
|
 |
|
 |
Anmeldedatum: 11.03.10
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 02.10.2010, 19:28
Titel:
|
 |
bekomm die krise!
erhalte jetzt auch folgende Meldung:
wieso denn das? bei LSQCURVEFIT habe ich die übergabe genau so gemacht und da gab es keine probleme mit "xdata"?!
|
|
|
Harald |

Forum-Meister
|
 |
Beiträge: 24.501
|
 |
|
 |
Anmeldedatum: 26.03.09
|
 |
|
 |
Wohnort: Nähe München
|
 |
|
 |
Version: ab 2017b
|
 |
|
|
 |
|
Verfasst am: 02.10.2010, 21:50
Titel:
|
 |
|
 |
|
Hallo,
fminunc und lsqcurvefit sind für vollkommen unterschiedliche Dinge geeignet und haben daher auch verschiedene Interfaces, d.h. auch verschiedene Aufrufformen. Das ist auch so dokumentiert.
Um das mit fminunc zum Laufen zu bekommen:
mit
Dabei habe ich zwangsweise einen genaueren Blick auf die Funktion geworfen, die du fitten willst.
1. Das lässt sich mit polyfit leichter und exakter erreichen:
2. Der einzige Grund, warum ich nicht polyfit verwenden würde, ist, dass eine andere Fehlernorm verwendet werden soll, siehe Kommentar von myfun als Alternative. Die Verwendung der korrekten Fehlernorm ist wesentlich entscheidender als 3. (und sollte in der Norm vorgegeben sein, sonst kann man sie getrost vergessen)!
3. Eine alleinstehende Angabe von BFGS ist blanker Unsinn - zumindest wenn das in demselben Sinne verwendet wird wie bei MATLAB. Die Verwendung von BFGS als Update für die Hesse-Matrix ist lediglich eine Einstellung in einem Algorithmus, die auch bei anderen Algorithmen vorgenommen werden kann. Das ist, als ob du ein Auto kaufst und sagst, das Auto soll elektrische Fensterheber haben, der Rest ist dir egal.
Ich würde dringend ein genaueres Studium dieser Norm vorschlagen, denn entweder ist die Norm absoluter Unsinn oder sie wurde hier nur unzureichend wiedergegeben / angewendet.
Grüße,
Harald
|
|
|
Jigs |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 24
|
 |
|
 |
Anmeldedatum: 11.03.10
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 03.10.2010, 10:48
Titel:
|
 |
cool, funktioniert jetzt vielen Dank!
Zitat: |
Dabei habe ich zwangsweise einen genaueren Blick auf die Funktion geworfen, die du fitten willst. |
Ich habe erstmal ein einfaches Polynom gewählt, um das ganze überhaupt zum Laufen zu bringen. Es wird nicht bei dem einfachen Polynom bleiben.
Zitat: |
Ich würde dringend ein genaueres Studium dieser Norm vorschlagen, denn entweder ist die Norm absoluter Unsinn oder sie wurde hier nur unzureichend wiedergegeben / angewendet. |
Ich habe sie logischerweise nur unzureichend hier erläutert, weil ich kaum glaube, dass ihr 100 Seiten Norm lesen wollt
Natürlich kenne ich sie in und auswendig und wollte nur das wesentliche hier kurz und knapp wiedergeben ansonsten würde der Rahmen gesprengt werden und du hättest nicht einmal angefangen zu lesen
Also nochmal vielen lieben Dank dir für die Hilfestellung. Hat mir sehr sehr geholfen!
|
|
|
|
|
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.
|
|