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

Fragen zu lsqnonlin

 

Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.11.2011, 13:33     Titel: Fragen zu lsqnonlin
  Antworten mit Zitat      
Hallo,

1. ich arbeite momentan auch mit lsqnonlin. Ich bilde eine Exp-Funktion nach. Ich habe für unterschiedliche Ströme unterschiedliche Funktionsverläufe. Bei einigen Stömen(Kurvenverlauf bis max. 3mA) ist dieNachbildung besser als bei anderen Stömen(Kurvenverlauf bis max. 1.2mA).
Sobald ich nun die Toleranzen usw. für die kleineren Ströme feiner justiere, müsste ich doch genauso gute Ergebnisse haben?
Kann ich selber eine Error-Funktion erstellen die mir einfach genauere Kurvensimulationen liefert?

2. Arbeitet lsqnonlin automatisch mit der Summe der kleinsten Fehlerquadrate oder muss ich das selbst festlegen?


Edit by Martin: Bitte keine Doppelpostings. Danke!


Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 15.11.2011, 13:48     Titel:
  Antworten mit Zitat      
die frage in 2 subforen aufzumachen is auch nich grade gut. einmal reicht. weiterhin kannst du die doc für lsqnonlin lesen. außerdem heist es ja LSQnonlin also denke ich mal das er auch die fehlerquadrate benutzt ^^
Private Nachricht senden Benutzer-Profile anzeigen
 
Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.11.2011, 13:54     Titel:
  Antworten mit Zitat      
damit arbeite ich;) im doc steht:
"Rather than compute the value f(x) (the sum of
squares), lsqnonlin requires the user-defined function
to compute the vector-valued function"
was ich eben nicht verstehe, es arbeitet mit LSQ (fehler=sum((y-z)^2)) will aber zusätzlich eine Funktion?!?
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.502
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 15.11.2011, 14:32     Titel:
  Antworten mit Zitat      
Hallo,

Wenn du deine Frage so genau stellst wie zuletzt, ist es viel leichter zu antworten. Die Doku ist hier so zu verstehen:
Du sollst nicht || f(x) || übergeben (also die Norm der Quadrate selbst berechnen), sondern einen Vektor [f_1(x), f_2(x), ..., f_n(x)].

Die Güte der Resultate einer Optimierung hängt stark von den Startwerten ab. Zudem ist es möglich, dass ein Datensatz dem idealen Modell besser entspricht als ein anderer.

Zitat:
Kann ich selber eine Error-Funktion erstellen die mir einfach genauere Kurvensimulationen liefert?

Diese Frage verstehe ich nicht.

Zitat:
Arbeitet lsqnonlin automatisch mit der Summe der kleinsten Fehlerquadrate oder muss ich das selbst festlegen?

Es macht das automatisch, siehe erste Gleichung in der Doku.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.11.2011, 14:49     Titel:
  Antworten mit Zitat      
ok, die antwort der zweiten Frage beantwortet mir die 1 Frage Wink
dh, falls ich fminsearch anwende und als funktion LSQ angebe, sollten bei den selben Toleranzen die gleichen Ergebnisse erscheinen?!?

wo ich aber noch am grübeln bin:
"Die Güte der Resultate einer Optimierung hängt stark von den Startwerten ab. Zudem ist es möglich, dass ein Datensatz dem idealen Modell besser entspricht als ein anderer. "
dh für mich, sobald ich die unendlich besten startwerte und zusätzlich die kleinst möglichen Toleranzen gewählt habe, bekomme ich eine 99,9%ige genauigkeit?
 
Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.11.2011, 14:53     Titel:
  Antworten mit Zitat      
ok, die antwort der zweiten Frage beantwortet mir die 1 Frage Wink
dh, falls ich fminsearch anwende und als funktion LSQ angebe, sollten bei den selben Toleranzen die gleichen Ergebnisse erscheinen?!?

wo ich aber noch am grübeln bin:
"Die Güte der Resultate einer Optimierung hängt stark von den Startwerten ab. Zudem ist es möglich, dass ein Datensatz dem idealen Modell besser entspricht als ein anderer. "
dh für mich, sobald ich die unendlich besten startwerte und zusätzlich die kleinst möglichen Toleranzen gewählt habe, bekomme ich eine 99,9%ige genauigkeit?
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.502
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 15.11.2011, 15:25     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
dh für mich, sobald ich die unendlich besten startwerte und zusätzlich die kleinst möglichen Toleranzen gewählt habe, bekomme ich eine 99,9%ige genauigkeit?

So genau es eben geht. Wenn du 2 oder 3 Parameter und Hunderte Messpunkte hast, ist es i.d.R. nicht zu erwarten, dass die gefittete Kurve genau durch alle Punkte läuft.
Falls systematische Abweichungen zu erkennen sind (die ersten 50 Messpunkte liegen unterhalb der gefitteten Kurve, die nächsten 50 liegen drüber), kann man über Anpassung oder Verfeinerung des Modells nachdenken.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.11.2011, 16:20     Titel:
  Antworten mit Zitat      
Ich verstehe, eine Anpassung an sich ist bei mir nicht möglich...
Zum Verständnis, bei lsqnonlin gebe ich einen Vektor vor, in meinem Fall in einer Funktion als Beispiel:

Code:

function error = fkt(x,X,Y)
% X entspricht Zeit; Y entspricht Stromwert; x ist Parameter
error= (Konst.* exp(-X/x)) - Y;
 
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.502
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 15.11.2011, 17:15     Titel:
  Antworten mit Zitat      
Hallo,

was willst du nun damit sagen?
Du solltest deine Zielfunktion an das von lsqnonlin vorgegebene Interface anpassen.
Code:

Datenübergabe ist generell möglich; da sollte man aber über anonymous function handles gehen.

Da dein Problem anscheinend mit nichtlinearer Regression zu tun hat, wäre auch ein Blick in lsqcurvefit sinnvoll. Da ist das Interface einfacher.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.11.2011, 11:32     Titel:
  Antworten mit Zitat      
Hallo Harald,

komme mit dem lsqnonlin jetzt gut aus.

Zu fminsearch:
Selbe Problem möchte ich mit fminsearch lösen. Ich habe eine Funktion mit 3 Parametern zu bestimmen, Bsp: y(t)= a*(exp(t*b)) + (1-a)*(exp(t*c))

options = optimset('TolX',1e-15,'TolFun',10e-19,'DiffMinChange',1e-16);
[x,fval]=fminsearch(@myfun,Startwerte,options);

Ich möchte hier wie bei lsqnonlin zum minimum meiner Fkt. Dafür öffne ich eine Funktion:

function f = myfun(a,b,c) % Unbekannte Parameter
f = a*(exp(t*b)) + (1-a)*(exp(t*c));

Frage: Wo und wie soll ich die LSQ-Formel einbinden? in der Funktion oder im urspünglichen Skript?
 
Titus
Forum-Meister

Forum-Meister


Beiträge: 871
Anmeldedatum: 19.07.07
Wohnort: Aachen
Version: ---
     Beitrag Verfasst am: 18.11.2011, 13:55     Titel:
  Antworten mit Zitat      
Hallo,

nicht ganz: die zu optimierende Funktion sollte einen Vektor mit den Parametern erhalten, also:
Code:

function abweich = myf(x, y)
a = x(1);
b = x(2);
c = c(3);
f = ...;
% wenn Du fmincon verwenden willst, musst Du die Abweichung selber bestimmen:
abweich = norm(f-y);
 

Aufrufen müsste man dann die Funktion mit
Code:

y = ...; % die Werte, die zu fitten sind
goal = @(x) myf(x, y); % Zielfunktion
param = fmincon(goal, ...);
 


Titus
Private Nachricht senden Benutzer-Profile anzeigen
 
Titus
Forum-Meister

Forum-Meister


Beiträge: 871
Anmeldedatum: 19.07.07
Wohnort: Aachen
Version: ---
     Beitrag Verfasst am: 18.11.2011, 13:57     Titel:
  Antworten mit Zitat      
Alternativ kann natürlich die Funktion auch nur "f" zurückgeben und man ruft bildet die Zielfunktion entsprechend anders:
Code:

goal = @(x) norm(myf(x) - y);
 

Macht aber nicht wirklich einen Unterschied Wink.

Titus
Private Nachricht senden Benutzer-Profile anzeigen
 
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 - 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.