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

Parameterschätzung

 

Morgaine21
Forum-Anfänger

Forum-Anfänger


Beiträge: 10
Anmeldedatum: 15.06.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.06.2015, 14:56     Titel: Parameterschätzung
  Antworten mit Zitat      
Hi,

ich habe leider das Problem, dass meine Parameterschätzung überhaupt nicht zu stimmen scheint.

Meine Funktion ist:
Code:
yt(i,:) = [yt(i-1,1) + gyy(i)*10 + (o(i) + LiverGlucose - ...
            LAMBDA*yt(i-1,1) - NU*yt(i-1,1)*yt(i-1,2) - ...
            MU*(yt(i-1,1)-A)*stepfun(yt(i-1,1),A))/VD; ...
            yt(i-1,2) - ieyy(i)/10 + (-ALPHA*yt(i-1,2)+ ...
            BETA*(yt(i-1,1)-B)*stepfun(yt(i-1,1),B)+ ...
            insu(i)*1000)/VD];


Dies erzeugt mir eine schöne Kurve von der ich in einem nächsten Schritt, einige Werte verändere. Für diese neuen y Werte möchte ich nun die Paramter, LAMDA; LIVER; NU; ALPHA und BETA und MU schätzen.

Code:
X = [ones(size(y,1), 1), -y(:,1), -y(:,1).*y(:,2), (y(:,1)- A).*stepfun(y(:,1),A)];
Y = VD.* (glucose - glucose1 - gyy.*10) - (oral(t));
p = regress(Y, X);
LiverGlucose = p(1);
LAMBDA = p(2);
NU = p(3);
MU = p(4);

X1 = [-y(:,2), ((y(:,1) - B).*stepfun(y(:,1),B))];
Y1 = VD .* (insulin - insulin1 + ieyy./10) - (insulin_dose(t)./1000)';
p1 = regress(Y1, X1);
ALPHA = p1(1);
BETA = p1(2);


Leider kommt absolut nicht das heraus was ich erwarte. Die Kurve trifft nicht die Punkte die ich zuver eingeben habe und auch sonst ist die Kurve wirklich wirr.

Kann mir jemand helfen, das Problem zu finden?

DANKE
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 24.06.2015, 21:06     Titel:
  Antworten mit Zitat      
Hallo,

du berücksichtigst in deinem Code die Indexverschiebung der Formel nicht.
Für X würde ich (1:end-1, ...) nehmen, für Y die folgenden Werte, als (2:end, :).

Wie passen denn 2 regress-Aufrufe dazu, dass du in 1 Gleichung etwas anpassen willst?

Ansonsten bitte darauf achten, Variablennamen entsprechend der Formel zu verwenden oder umgekehrt. Hatten wir das nicht auch schon mal?

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 10
Anmeldedatum: 15.06.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.06.2015, 12:42     Titel:
  Antworten mit Zitat      
Doch ich berücksichtige den vorherigen Wert.

Code:
glucose = y(:,1);
glucose1 = [y0(1); glucose(1:end-1)];
insulin = y(:,2);
insulin1 = [y0(2); insulin(1:end-1)];


Es sind 2 Funktionen die sich gegenseitig beeinflussen bei denen alerdings die Parameter geschätz gehören.

Ich hab inzwischen auch eine andere Method verusucht. Führt allerdings auch zu einem falschen Ergebnis:

Code:
Y(:,1) = VD.* (glucose - glucose1 - gyy.*10) - (oral(t));
Y(:,2) = VD .* (insulin - insulin1 + ieyy./10) - (insulin_dose(t)./1000)';
X = [1:1440];

[xData, zData, yData] = prepareCurveData( glucose, insulin, Y(:,1) );
ft = fittype('LiverEs - LAMBDAEs*x - NUEs*x*z - MUEs*(x-2.5)*stepfun(x(1),2.5)',...
    'dependent','y','independent',{'x','z'},'coefficients',...
    {'LiverEs','LAMBDAEs','NUEs','MUEs'});

opts = fitoptions( ft );
opts.Display = 'Off';
opts.Lower = [0 0 0 0];
opts.StartPoint = [140 41.17 2316.7 120];
opts.Upper = [200 100 3000 200];
[p, gof] = fit( [xData, zData], yData, ft, opts );
% p = regress(Y, X);
LiverGlucose = p.LiverEs;
LAMBDA = p.LAMBDAEs;
NU = p.NUEs;
MU = p.MUEs;

[xData, zData, yData] = prepareCurveData( glucose, insulin, Y(:,2) );
ft_Ins = fittype('-ALPHAEs*z + BETAEs*((x - 0.51).*stepfun(x,0.51))',...
    'dependent','y','independent',{'x','z'},'coefficients',...
    {'ALPHAEs','BETAEs'});
opts = fitoptions( ft_Ins );
opts.Display = 'Off';
opts.Lower = [0 0];
opts.StartPoint = [126.67 19.0640];
opts.Upper = [200 100];
[p, gof] = fit( [xData, zData], yData, ft_Ins, opts );
ALPHA = p.ALPHAEs;
BETA = p.BETAEs;


Langsam bin ich echt am durchdrehen.
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

Zitat:
Doch ich berücksichtige den vorherigen Wert.

... was aus dem zur Verfügung gestellten Code ja nicht zu erahnen war.

Zitat:
Es sind 2 Funktionen die sich gegenseitig beeinflussen bei denen alerdings die Parameter geschätz gehören.

Dann kann man die Parameter aber nicht getrennt schätzen.

In deinem ersten Beitrag sehe ich nur eine Formel, und in der werden andere Bezeichnungen verwendet als im Code. Das macht es extrem schwierig, dir zu helfen.

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.