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

Anwendung der Least Square Method(kleinste Quadrate Methode)

 

gruenertee
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 57
Anmeldedatum: 15.08.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.10.2013, 16:10     Titel: Anwendung der Least Square Method(kleinste Quadrate Methode)
  Antworten mit Zitat      
Hallo Matlab User,

ich möchte über die 'Summe der Abstandsquadrate-Methode' einen Parameter optimieren; ich habe aus einem Messstand daten und Daten aus einer analytischen Gleichung; mir ist jetzt nicht ganz klar, wie ich Matlab sagen kann dass er einen bestimmten Parameter aus meiner analytischen Gleichung minimieren soll.

S=Summe((Messdaten(:,1)-analytische Gleichung(t,Rb))^2

S=Summe der Abstandsquadrate

analytische Gleichung Tf=konstante*ln(t)+konstante*Rb+T0

Was mich gerade ein wenig durcheinander bringt, ist die Tatsache, dass die Messdaten reine Zahlendaten sind (als Spaltenvektor) und die analytische Gleichung Zeitabhängig ist und vom Parameter Rb abhängt und dieser Parameter Rb soll optimiert werden.

Wie würdet ihr da vorgehen? Wäre sowas möglich über fmincon oder fminsearch?

Vielen Dank für eure Hinweise
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


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

klingt eher nach lsqcurvefit. Du kannst dich ja an dem Beispiel in der Doku orientieren.

Für weitere Hilfe bitte angeben, welche Teile der analytischen Gleichung in welcher Form bekannt sind und welche geschätzt werden sollen.

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

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 57
Anmeldedatum: 15.08.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.10.2013, 16:50     Titel:
  Antworten mit Zitat      
Hallo Harald,

vielen Dank für deine schnelle antwort; im folgenden Code habe ich die analytische Gleichung dargestellt; der Rb Wert stellt einen Schätzwert dar und diesen gilt es zu optimieren;

Code:

%-------------------Konstanten------------------------------
    load Tfberechnen.mat;
    lambda_sand=2.82;       % [W/mK] --> Waermeleitfaehigkeit Sand
    alpha_sand=8.81*10^-7;  % [m^2/s] --> Temperaturleitfaehigkeit Sand  
    T0=295.24;              % [°K] --> ungest. Untergrundtemperatur 22.09°C
    q=57.7;                 % [W/m] --> Entzugsleistung
    rb=0.065;               % [m] Erdwärmesonden Radius
    Rb=0.179;               % [m*K/W] Thermischer Bohrlochwiderstand
%----------------Temperaturgleichung nach Wagner------------------------------
Tf=q./(4*pi*lambda_sand)*log(Tfberechnen(2:end,1))+q*(Rb+1/(4*pi*lambda_sand)*(log((4*alpha_sand)/rb^2)-0.5772))+T0;
 


In dem Beispiel unter lsqcurvefit wird eine Funktion erstellt; mir ist nicht ganz klar wie die Funktion in meinem Fall lauten sollte, da Tf(t,Rb) abhängig ist, wobei Rb optimiert werden sollte Smile

Code:

function F = myfun(x,xdata)
 


Tfberechnen.zip
 Beschreibung:
Spalte 1: Zeitwerte
Spalte 2: Messdaten
Spalte 3: analytische Berechnung

Download
 Dateiname:  Tfberechnen.zip
 Dateigröße:  1.14 KB
 Heruntergeladen:  303 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

dann würde ich es so sagen:

xdata --> t
ydata --> Messdaten
x --> Rb

Gegebenes Rb --> x0

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

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 57
Anmeldedatum: 15.08.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.10.2013, 09:45     Titel:
  Antworten mit Zitat      
Hallo,

danke für deine Hinweise, ich habe meinen Code überarbeitet, aber es funktioniert noch immer nicht :/ Wo könnte der Fehler liegen?

Was ich möchte ist das x(1) der Rb Parameter ist, und x(2) der Lambda_sand Parameter; diese beiden Werte sollen optimiert werden; die analytische Lösung unter dem F(x,xdata)=... soll den Messdaten aus Tfwerte(2:end,2) angeglichen werden

Code:

function F = kleinstequadrate(x,xdata)

%-------------------Konstanten------------------------------
    load Tfwerte.mat;
    %Rb=0.179;               % [m*K/W] Thermischer Bohrlochwiderstand
    %x(1)=Rb;
    %lambda_sand=2.92;       % [W/mK] --> Waermeleitfaehigkeit Sand
    %x(2)=lambda_sand;
    x0=[0.179;2.92]; %Anfangswerte
    alpha_sand=8.81*10^-7;  % [m^2/s] --> Temperaturleitfaehigkeit Sand  
    T0=295.24;              % [°K] --> ungest. Untergrundtemperatur 22.09°C
    q=57.7;                 % [W/m] --> Entzugsleistung
    rb=0.065;               % [m] Erdwärmesonden Radius
    xdata=Tfwerte(2:end,1);
    ydata=Tfwerte(2:end,2);
   
%----------------Temperaturgleichung nach Wagner------------------------------
F(x,xdata)=q./(4*pi*x(2))*log(xdata)+q*(x(1)+1/(4*pi*x(2))*(log((4*alpha_sand)/rb^2)-0.5772))+T0;
 %---- Aufruf ---------  
%[x,resnorm] = lsqcurvefit(@kleinstequadrate,x0,xdata,ydata);
 


Vielen Dank für neue Hinweise Smile

Tfwerte.zip
 Beschreibung:
überarbeite Werte Datei;
Spalte 1: Zeit Daten
Spalte 2: Messdaten

Download
 Dateiname:  Tfwerte.zip
 Dateigröße:  779 Bytes
 Heruntergeladen:  312 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.499
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 05.10.2013, 11:13     Titel:
  Antworten mit Zitat      
Hallo,

so läuft es:
Code:
load Tfwerte.mat;
x0=[0.179;2.92]; %Anfangswerte
alpha_sand=8.81*10^-7;  % [m^2/s] --> Temperaturleitfaehigkeit Sand
T0=295.24;              % [°K] --> ungest. Untergrundtemperatur 22.09°C
q=57.7;                 % [W/m] --> Entzugsleistung
rb=0.065;               % [m] Erdwärmesonden Radius
xdata=Tfwerte(2:end,1);
ydata=Tfwerte(2:end,2);

%----------------Temperaturgleichung nach Wagner------------------------------
F = @(x,xdata) q./(4*pi*x(2))*log(xdata)+q*(x(1)+1/(4*pi*x(2))*(log((4*alpha_sand)/rb^2)-0.5772))+T0;
%---- Aufruf ---------
[xbest,resnorm] = lsqcurvefit(F,x0,xdata,ydata);
 


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

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 57
Anmeldedatum: 15.08.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.10.2013, 11:30     Titel:
  Antworten mit Zitat      
Vielen Dank! super!

darf ich fragen warum das @(x,xdata) auf die rechte Seite der Gleichung gezogen wurde? Smile

Code:

F = @(x,xdata) q./(4*pi*x(2))*log(xdata)+q*(x(1)+1/(4*pi*x(2))*(log((4*alpha_sand)/rb^2)-0.5772))+T0;
 
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.499
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 05.10.2013, 11:54     Titel:
  Antworten mit Zitat      
Hallo,

Die Funktion muss als Function Handle zur Verfügung gestellt werden.
Man kann dies tun, indem man auf eine externe Funktion verweist. Bei "Einzeilern" wie hier eignet sich aber auch ein anonymous function handle gut.

Für mehr Informationen siehe z.B. hier:
http://www.mathworks.de/de/help/matlab/ref/function_handle.html
http://www.gomatlab.de/tutorial-kei.....function-handle-t545.html

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

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 57
Anmeldedatum: 15.08.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.10.2013, 10:20     Titel:
  Antworten mit Zitat      
Ein letzte Frage bezieht sich noch auf das Setzen bzw das Verändern des Abbruchskriterium; meine Funktion durchläuft bisher nur 3 Iterationen und da dachte ich mir setze doch den Wert TolFun von 10^-6 auf einen kleineren Wert; aber die Frage ist wie Smile

Code:

optionsLSQ = optimset('Display','Iter','TolFun',1e-10);
[xbest,resnorm,residual,exitflag,output] = lsqcurvefit(F,x0,xdata,ydata,optionsLSQ); %die Methode der kleinesten Abstandsquadrate wird angewendet
 


Vielen Dank
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.499
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 06.10.2013, 10:46     Titel:
  Antworten mit Zitat      
Hallo,

ein Blick in die Doku zeigt, dass die nächsten Argumente nach ydata untere und obere Schranken sind. Wenn man diese überspringen möchte, kann man das mit [].
Zitat:
x = lsqcurvefit(fun,x0,xdata,ydata,lb,ub,options) minimizes with the optimization options specified in the structure options. Use optimset to set these options. Pass empty matrices for lb and ub if no bounds exist.


Also:
Code:
[xbest,resnorm,residual,exitflag,output] = lsqcurvefit(F,x0,xdata,ydata,[], [], optionsLSQ);


Grüße,
Harald
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.