|
|
Komplexes Anpassungsproblem mit lsqcurvefit |
|
Mac-Cherony |

Forum-Anfänger
|
 |
Beiträge: 24
|
 |
|
 |
Anmeldedatum: 13.02.12
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 08.03.2014, 21:35
Titel: Komplexes Anpassungsproblem mit lsqcurvefit
|
 |
Hallo allerseits,
ich habe ein Problem die folgende Funktion mittels lsqcurfefit anzupassen:
Da ich zunächst davon ausgegangen bin, dass mein Problem in der Struktur der verwendeten Funktion liegt habe ich analog zur Hilfe und den Fall, dass ich 2 Signale anpassen möchte ein function handle konstruiert:
Trotzdem lässt sich diese Funktion nicht anpassen! Allerdings stehe ich auch noch vor weiteren Herausforderungen bei der Anpassung. So soll beispielsweise eta nur Werte zwischen 0 und 1 annehmen und die entsprechenden Werte für x0 sollen nur in einem kleinen Bereich (z.B. +/-2 in diesem Beispiel) variiert werden.
Kann mir bei diesem komplexen Problem Jemand weiterhelfen?
|
|
|
|
|
Harald |

Forum-Meister
|
 |
Beiträge: 24.501
|
 |
|
 |
Anmeldedatum: 26.03.09
|
 |
|
 |
Wohnort: Nähe München
|
 |
|
 |
Version: ab 2017b
|
 |
|
|
 |
|
Verfasst am: 08.03.2014, 22:01
Titel:
|
 |
Hallo,
Zitat: |
Trotzdem lässt sich diese Funktion nicht anpassen! |
Was passiert denn, wenn du's wie von dir beschrieben versuchst?
Zitat: |
So soll beispielsweise eta nur Werte zwischen 0 und 1 annehmen und die entsprechenden Werte für x0 sollen nur in einem kleinen Bereich (z.B. +/-2 in diesem Beispiel) variiert werden. |
Das kannst du doch in lb und ub als zusätzliche Eingabeargumente angeben.
Grüße,
Harald
|
|
|
Mac-Cherony |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 24
|
 |
|
 |
Anmeldedatum: 13.02.12
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 08.03.2014, 22:19
Titel:
|
 |
Hallo Harald,
danke schonmal für deine Mühe! Ich bekomme die folgende Fehlermeldung:
Zitat: |
Attempted to access x(7); index out of bounds because numel(x)=2.
Error in
@(x,xdata)x(7)*(x(3)*(1./(1+((xdata-x(1))./x(5)).^2))+(1-x(3))*exp(-log(2)*((xdata-x(1))./x(5)).^2))+x(8)*(x(4)*(1./(1+((xdata-x(2))./x(6)).^2))+(1-x(4))*exp(-log(2)*((xdata-x(2))./x(6)).^2))
Error in lsqcurvefit (line 203)
initVals.F =
feval(funfcn_x_xdata{3},xCurrent,XDATA,varargin{:});
Error in Test (line 13)
x = lsqcurvefit(f,x0,xdata,ydata);
Caused by:
Failure in initial user-supplied objective function evaluation.
LSQCURVEFIT cannot continue. |
wenn ich allerdings auf der Konsole
eingebe, gibt er wie ich es erwarte 8 aus und auf x(7) kann ich zudem auch zugreifen.
Das mit den upper und lower boundaries hab ich in der Hilfe nicht so ganz verstanden. Muss ich das auch als Vektor eingeben und somit für jede Anpassungsvariable diese Grenzen festlegen?
|
|
|
Harald |

Forum-Meister
|
 |
Beiträge: 24.501
|
 |
|
 |
Anmeldedatum: 26.03.09
|
 |
|
 |
Wohnort: Nähe München
|
 |
|
 |
Version: ab 2017b
|
 |
|
|
 |
|
Verfasst am: 08.03.2014, 22:56
Titel:
|
 |
Hallo,
wenn du in der Funktion x0, H, eta und w optimieren möchtest, dann musst du auch Startwerte für alle 8 an lsqcurvefit übergeben, also wohl x statt x0.
Zitat: |
Muss ich das auch als Vektor eingeben und somit für jede Anpassungsvariable diese Grenzen festlegen? |
Ja. Wenn für einzelne Variablen keine Grenzen vorgegeben werden sollen, kann man für diese -inf als untere Grenze bzw. inf als obere Grenze angeben.
Grüße,
Harald
|
|
|
Mac-Cherony |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 24
|
 |
|
 |
Anmeldedatum: 13.02.12
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 09.03.2014, 01:50
Titel:
|
 |
Vielen Dank Harald! Das habe ich leider total übersehen...so funktioniert es dann auch (natürlich)...
|
|
|
|
|
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.
|
|