|
|
Fitting Funktion mit 3 unabhängigen Variablen |
|
tveltzke |

Forum-Newbie
|
 |
Beiträge: 5
|
 |
|
 |
Anmeldedatum: 09.04.13
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 09.04.2013, 12:39
Titel: Fitting Funktion mit 3 unabhängigen Variablen
|
 |
Hallo Zusammen,
ich habe folgendes Problem und hoffe, es kann mir jemand helfen. Ich habe Messergebnisse
(Spalte 4 in Matrix A) die von drei unabhängigen Parametern (Spalten 1,2,3) abhängig sind.
Mein Ziel ist es nun, daraus eine stetige Funktion der Form
zu erhalten, also die Konstanten a,b,c,d,e und f so zu bestimmen, dass der Abstand zu
den Messwerten minimal ist. Quasi ein Fit mit DREI unabhängigen Variablen.
Ich habe schon diverse Versuche mit "fmincon" und "fminsearch" unternommen,
aber das funktioniert alles nicht.
Bin dankbar für jede Hilfe!!
Grüsse, Thomas
|
|
|
|
|
Harald |

Forum-Meister
|
 |
Beiträge: 24.501
|
 |
|
 |
Anmeldedatum: 26.03.09
|
 |
|
 |
Wohnort: Nähe München
|
 |
|
 |
Version: ab 2017b
|
 |
|
|
 |
|
Verfasst am: 09.04.2013, 13:49
Titel:
|
 |
|
|
tveltzke |
Themenstarter

Forum-Newbie
|
 |
Beiträge: 5
|
 |
|
 |
Anmeldedatum: 09.04.13
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 09.04.2013, 14:16
Titel:
|
 |
Hallo Harald,
danke für die schnelle Antwort und den Hinweis! Dies ist der Code, den ich verwendet hab:
Das quittiert MATLAB aber lediglich mit
"Function definitions are not permitted in this context."
Wenn ich nun von dem Code aus dem anderen Beitrag
ausgehe, bekomme ich die gleiche Fehlermeldung. Ausserdem weis ich auch nicht, was in diesem Code nun meiner Matrix mit den Messwerten entspricht.
Viele Grüße, Thomas
|
|
|
Harald |

Forum-Meister
|
 |
Beiträge: 24.501
|
 |
|
 |
Anmeldedatum: 26.03.09
|
 |
|
 |
Wohnort: Nähe München
|
 |
|
 |
Version: ab 2017b
|
 |
|
|
 |
|
Verfasst am: 09.04.2013, 15:12
Titel:
|
 |
Hallo,
auf Anhieb sehe ich mehrere Probleme mit deinem Code:
1. Funktionen müssen in einer eigenen Datei stehen (das besagt auch die Fehlermeldung)
2. fminsearch macht eine allgemeine Minimumsuche. Woher soll die Funktion wissen, was hier zu minimieren ist? Es wäre besser, lsqcurvefit zu verwenden, siehe der andere Thread.
3. fminsearch, lsqcurvefit und ähnliche haben ein festes Interface, an das man sich halten muss. Bei lsqcurvefit
Die einzelnen Parameter müssen dann aus der einen Variablen extrahiert werden. Schau dir dazu auch mal das Beispiel an aus
4. Das Modell muss für alle Beobachtungen auf einmal ausgewertet werden können, d.h. du musst elementweise Operationen statt Matrix-Operationen verwenden, hier insbesondere .^ statt ^
Grüße,
Harald
|
|
|
tveltzke |
Themenstarter

Forum-Newbie
|
 |
Beiträge: 5
|
 |
|
 |
Anmeldedatum: 09.04.13
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 09.04.2013, 16:43
Titel:
|
 |
|
 |
|
Hallo Harald,
also ich hab mich nun an dem Beispiel orientiert; ich denke die Funktion müsste so stimmen
x(1) bis x(6) sollten dann von Matlab bestmöglich angepasst werden.
Die Matrix "xwerte" beinhaltet die unabhängigen Variablen:
Im Vektor "ydata" (also die vierte Spalte von Matrix A) stehen die gemessenen Daten.
Meiner Meinung nach macht das alles Sinn, aber Ich erhalte diese Fehlermeldung:
??? Attempted to access x(3); index out of bounds because numel(x)=2.
Error in ==> myfun at 2
F = x(1)*xwerte(:,1).^x(2) + x(3)*xwerte(:,2).^x(4) + x(5)*xwerte(:,3).^x(6);
Error in ==> @(x,xwerte)myfun(x,xwerte)
Error in ==> lsqcurvefit at 209
initVals.F = feval(funfcn_x_xdata{3},xCurrent,XDATA,varargin{:});
Error in ==> test at 134
x = lsqcurvefit(@(x,xwerte) myfun(x,xwerte),[5;1],xwerte,ydata)
Caused by:
Failure in initial user-supplied objective function evaluation. LSQCURVEFIT cannot continue.
Wo ich nur Bahnhof verstehe
Vielleicht müssen an dieser Stelle ...[5;1]... in "lsqcurvefit" 4 Zahlen rein...ich weis es nicht.
Viele Grüße, Thomas
|
|
|
Harald |

Forum-Meister
|
 |
Beiträge: 24.501
|
 |
|
 |
Anmeldedatum: 26.03.09
|
 |
|
 |
Wohnort: Nähe München
|
 |
|
 |
Version: ab 2017b
|
 |
|
|
 |
|
Verfasst am: 09.04.2013, 17:27
Titel:
|
 |
Hallo,
das sieht schon mal gut aus.
Statt [5;1] musst du einen Startvektor für deine Parameter angeben. Du hast 6 Parameter, folglich musst du auch einen Startvektor mit 6 Elementen angeben.
Vorwarnung: wenn die Resultate unsinnig erscheinen, solltest du es mit besseren Startwerten versuchen.
Grüße,
Harald
|
|
|
tveltzke |
Themenstarter

Forum-Newbie
|
 |
Beiträge: 5
|
 |
|
 |
Anmeldedatum: 09.04.13
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 09.04.2013, 17:33
Titel:
|
 |
Hallo Harald,
ha, läuft.
Dann werde ich jetzt mal an den Startwerten drehen.
Besteht auch noch die Möglichkeit, sich ein "R^2" angeben zu lassen?
Dieser wert muss ja im Idealfall =1 sein. Ggf. müsste ich die Startwerte ja dann so lange variieren, bis "R^2" ausreichend groß ist (vielleicht so 0,9).
Schonmal vielen Dank!
Thomas
|
|
|
Harald |

Forum-Meister
|
 |
Beiträge: 24.501
|
 |
|
 |
Anmeldedatum: 26.03.09
|
 |
|
 |
Wohnort: Nähe München
|
 |
|
 |
Version: ab 2017b
|
 |
|
|
 |
|
Verfasst am: 09.04.2013, 22:28
Titel:
|
 |
Hallo,
lsqcurvefit sucht ein lokales Minimum. Wenn du einen R^2 von 0.7 oder so erreichst, würde ich erwarten, dass lsqcurvefit typischerweise wirklich die bestmöglichen Werte (globales Minimum) findet.
R^2 kannst du selbst über die Formel errechnen. Alternativ kannst du statt lsqcurvefit die Funktion nlinfit verwenden. Diese Funktion hat eine sehr ähnliche Syntax und liefert mehr Zusatzinfos zurück.
Grüße,
Harald
|
|
|
tveltzke |
Themenstarter

Forum-Newbie
|
 |
Beiträge: 5
|
 |
|
 |
Anmeldedatum: 09.04.13
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 10.04.2013, 09:32
Titel:
|
 |
Hallo Harald,
vielen Dank für deine Hilfe.
Grüße,
Thomas
|
|
|
|
|
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.
|
|