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

Optimization Toolbox: lsqnonlin levenberg-marquardt

 

stiffi
Forum-Anfänger

Forum-Anfänger


Beiträge: 41
Anmeldedatum: 13.07.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.08.2011, 14:04     Titel: Optimization Toolbox: lsqnonlin levenberg-marquardt
  Antworten mit Zitat      
Hallo zusammen,

ich möchte die Parameter eines Differenzialgleichungssystems, welches mit einem ODE-solver gelöst wird an Versuchsdaten anpassen. Dazu möchte ich den Levenberg-Marquardt-Algorithmus verwenden. An einem einfacheren Beispiel, ohne ODEs möchte ich mein Problem verdeutlichen.

Folgender Quellcode:
Code:
function fit
clc;
clear;
global data;
data=[    
    0.6000    0.999
    0.6500    0.998
    0.7000    0.997
    0.7500    0.995
    0.8000    0.982
    0.8500    0.975
    0.9000    0.932
    0.9500    0.862
    1.0000    0.714
    1.0500    0.520
    1.1000    0.287
    1.1500    0.134
    1.2000    0.0623
    1.2500    0.0245
    1.3000    0.0100
    1.3500    0.0040
    1.4000    0.0015
    1.4500    0.0007
    1.5000    0.0003
];                                       % experimental data

x=data(:,1);
Rexp=data(:,2);                          

plot(x,Rexp,'ro');                       % plot the experimental data
hold on
b0=[1 1];                                % start values for the parameters
options=optimset('Algorithm','levenberg-marquardt');
[b,resnorm,residual,exitflag,output]=lsqnonlin(@recfun,b0,options)  % run the lsqnonlin with start value b0, returned parameter values stored in b

Rcal=1./(1+exp(1.0986/b(1)*(x-b(2))));   % calculate the fitted value with parameter b
plot(x,Rcal,'b');                        % plot the fitted value on the same graph  

function y=recfun(b)
global data;

x=data(:,1);
Rexp=data(:,2);

Rcal=1./(1+exp(1.0986/b(1)*(x-b(2))));   % the calculated value from the model
%y=sum((Rcal-Rexp).^2);
y=Rcal-Rexp;
% the sum of the square of the difference between calculated value and experimental value
 


Daraufhin erscheint folgende Fehlermeldung:
??? Error using ==> lsqnonlin at 184
LSQNONLIN only accepts inputs of data type double.

Error in ==> einfilenatureopt at 27
paropt = lsqnonlin(@minimize,par0,options);

Mit dem Trust-Region-Reflective-algorithmus funktioniert der Code (also wenn man die Options von lsq nicht auf Marquardt-Levenberg setzt).

Wenn ich die Parameter des ODE-Systems angleiche, brauche ich aber den Levenberg-Marquardt-Algorithmus.

Weiß jemand was ich falsch mache, oder hat ein Programmierbeispiel zur Hand, in dem ein ode-solver mit lsqnonlin zusammen verwendet wird?

Vielen dank

und viele Grüße!

Stiffi
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


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

laut Doku wird als Syntax vor den Optionen lb und ub erwartet. Wenn du keine unteren und oberen Schranken vorgeben willst, kann man das wohl auf [] setzen. Probier also mal:

Code:
[b,resnorm,residual,exitflag,output]=lsqnonlin(@recfun,b0,[], [], options);


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

Forum-Anfänger

Forum-Anfänger


Beiträge: 41
Anmeldedatum: 13.07.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.08.2011, 15:07     Titel:
  Antworten mit Zitat      
Danke Harald,

ich hatte vorher mit dem Trust-Region-Reflective Algorithmus herumexperimentiert, dem waren die Klammern egal.
Ich habe die Klammern jetzt eingesetzt und den Code incl. Odes und Lsqnonlin gestartet.
Die Fehlermeldung beim Aurfufen erscheint nicht mehr!

MATLAB zeigt jetzt "busy" an (seit 8 Min).

Ich hoffe es wird eine brauchbare Lösung gefunden.

Darf ich dich evtl. später nochmal belästigen, wenn der Solver fertig ist?

Viele Grüße

Stiffi
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

schon mal ein Tipp: lsqnonlin versucht mit Differenzenquotienten zu arbeiten. Die Simulationsungenauigkeiten von ODE-Lösern können das ruinieren. Deswegen die Empfehlung,
- mit ODESET die Simulationsgenauigkeit (RELTOL) des ODE-Lösers zu verbessern
und/oder
- mit OPTIMSET die Option DIFFMINCHANGE erhöhen (dann wird dieser Effekt verringert)

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

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.08.2011, 15:20     Titel:
  Antworten mit Zitat      
Also was ich gerne mache ist mir die Parameter und die Sum of Squares bei jedem Funktionsaufruf auszugeben.


So kannste zuschauen wie sich
die Werte verändern und das kann je nach Modell recht interessant sein.
 
stiffi
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 41
Anmeldedatum: 13.07.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.08.2011, 15:54     Titel:
  Antworten mit Zitat      
Hi,

danke für den Tipp mit den odeset/optimset Einstellungen. Ich werd das mal ins Auge fassen, wenn der Solver fertig ist. (er ist immer noch nicht fertig Sad )

Als ich die Parameter desselben DGL-Systems mit fminsearch zu optimieren versucht habe, gings erheblich schneller....komisch!

Das mit den Parameter anzeigen lassen muss ich auch mal ausprobieren.

Danke Euch.

Viele Grüße

Stiffi
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

kein Wunder. FMINSEARCH ist "derivative-free", versucht also nicht, Ableitungen anzunähern (und wird vor allem nicht durch unsinnige Ableitungen in die Irre geführt).

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



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.08.2011, 17:15     Titel:
  Antworten mit Zitat      
Also wenn der jetzt immer noch nicht fertig ist, dann lass dir unbedingt
die Parameter ausgeben um evtl eine Überparametrisierung des
Modells oder so festzustellen. In die Falle rennt so ziemlicher jeder in der Modellierung.
 
stiffi
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 41
Anmeldedatum: 13.07.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.08.2011, 09:50     Titel:
  Antworten mit Zitat      
Hallo,

hab jetzt noch ein bischen rumprobiert. Ich glaube, ich übergebe die Daten des ode-Solvers falsch. Ich muss Euch wohl mit meinem Code quälen. Ich hab die unwichtigen Passagen aus lsqparafit1.m rausgelöscht.

Code von lsqparafit1.m
Code:
%%%Parameterfitting mit lsqnonlin%%%
function lsqparafit1

clear global, clear all, clear clc
global c_v0 HPLC tspan MAT

% Einlesen der Daten aus einem Excel-Sheet
HPLC=xlsread('Messwerte.xls','gewaschen','A82:D96');

% Zuordnen der Messwerte
c_v0(1) = HPLC (1,4); % Cellulose
c_v0(2) = HPLC (1,3); % Cellobiose
c_v0(3) = HPLC (1,2); % Glucose
TRANSP=HPLC';
MAT=[TRANSP(4,:),TRANSP(3,:),TRANSP(2,:)];
%Konstanten aus Literatur als Startwerte für die spätere Iteration
KM=22;
kR1=20;
kR2=5;
kR3=265;
K1Ig=0.07;
K2Ig=0.03;
K3Ig=4;
K1Icb=0.02;
K2Icb=130.0;


par0 = [KM,kR1,kR2,kR3,K1Ig,K2Ig,K3Ig,K1Icb,K2Icb];

%Festlegung der Zeitschritte für das Lösen des DGL
tspan = HPLC(:,1)'; % Matrix transponieren

%Optionen für die Optimierungsroutine
options = optimset('Algorithm','levenberg-marquardt','DiffMinChange',1e-8,'Display','iter');
%Übergabe der Startparameter an die Least-Square-Routine von lsqnonlin
paropt = lsqnonlin(@minimiz,par0,[],[],options);
%letztmaliges Lösen der DGL mit optimierten Parametern
[t,c_v] = ode45(@lsqparafit2,tspan,c_v0,' ',paropt);




%%% Optimierungsroutine lsqnonlin %%%
function lsq=minimiz(par)
global c_v0 tspan MAT

%Lösung des DGL-Systems mit Startwerten
[t,c_v] = ode45(@lsqparafit2,tspan,c_v0,' ',par);
%Bewertungskriterium (soll minimiert werden)
tra=c_v';
vekt=[tra(1,:),tra(2,:),tra(3,:)];
lsq = vekt - MAT;


Code von lsqparafit2.m (darin befinden sich die Differenzialgleichungen)

Code:

function dc_v=lsqparafit2(t,c_v,par)


% gekoppelte zeitabhängige ODEs
% dCs_dt ODE Cellulose
% dCcb_dt ODE Cellobiose
% dCg_dt ODE Glucose

% Konzentrationsangaben Zielgrößen
% c_v(1) Konzentration für Cellulose (g/kg)
% c_v(2) Konzentration für Cellobiose (g/kg)
% c_v(3) Konzentration für Glucose (g/kg)

% Substratgehalt (Cellulose)
CF0=0.6;                % (g Cellulose/g TS in Lösung) Cellulosegehalt in der Trockensubstanz
SL0=100;                % (g TS/kg Lösung)             Feststoffgehalt in der Lösung
Cs0=CF0*SL0;            % (g Cellulose/kg Lösung)      Cellulosekonzentration zum Zeitpunkt t0

% Temperatureinfluss
T1=45+273.15;           % (K)                          Bezugstemperatur für Arrhenius  
T2=45+273.15;           % (K)                          Temperatur
% Arrhenius
Ea=5540;                % (cal/mol)                    Aktivierungsenergie
R=1.9872;               % (cal/(mol*K))                universelle Gaskonstante
%Berechnung der Temperaturabhängigkeit der Ratenkonstanten (dimensionslos)
Arf=exp(-(Ea/R)*(1/T2-1/T1));

% Michaelis-Menten: Konstante
KM= par(1);%KM=24.3;                % (g/kg)                       Substratsättigungskonstante (Menten)

% Ratenkonstanten
kR1= par(2);%kR1=22.3;               % (kg/(g*h)) 1/h               Reaktionskonstante für r1: Cellulose zu Cellobiose
kR2= par(3);%kR2=7.18;               % (kg/(g*h)) 1/h               Reaktionskonstante für r2: Cellulose zu Glucose
kR3= par(4);%)285.5;              % (1/h)                        Reaktionskonstante für r3: Cellobiose zu Glucose  

% Inhibierung: Glucose (stellv. für C6-Zucker: Glucose,Galaktose, Mannose)
K1Ig= par(5);%0.1;               % (g Glucose/kg)               Inhibitordissoziationskonstante für r1: Cellulose/Cellobiose
K2Ig= par(6);%0.04;              % (g Glucose/kg)               Inhibitordissoziationskonstante für r2: Cellulose zu Glucose
K3Ig= par(7);%3.9;               % (g Glucose/kg)               Inhibitordissoziationskonstante für r3: Cellobiose zu Glucose

% Inhibierung Cellobiose
K1Icb= par(8);%0.015;            % (g Cellobiose/kg)            Inhibitordissoziationskonstante für r1: Cellulose/Cellobiose
K2Icb= par(9);%132.0;            % (g Cellobiose/kg)            Inhibitordissoziationskonstante für r2: Cellulose zu Glucose
                       
% Inhibierung: Xylose
Cx=0;                   % (g Xylose/kg)                Xylosekonzentration (stellv. für C5-Zucker: Arabinose,Xylose) in der Lösung  
K1Ix=0.1;               % (g Xylose/kg)                Inhibitordissoziationskonstante für r1: Cellulose/Cellobiose
K2Ix=0.2;               % (g Xylose/kg)                Inhibitordissoziationskonstante für r2: Cellulose zu Glucose
K3Ix=201.0;             % (g Xylose/kg)                Inhibitordissoziationskonstante für r3: Cellobiose zu Glucose  

% Inhibierung: Lignin (Inhibierung durch Enzymadsorption nach Langmuir)
Cl=20;                  % (g Lignin/ kg Lösung)        Ligninkonzentration 30.4
%lambda=1;              % (dimensionslos)              Faktor der die bevorzugte Bindung von CBH und EG an Cellulose oder Lignin ausdrückt
KL1L=0.51;              % (kg Lösung/g Protein)        Langmuir-Verteilungakoeffizient: CHB und EG an Ligninmatrix
KL2L=0.75;              % (kg Lösung/g Protein)        Langmuir-Verteilungakoeffizient: ß-Glucosidase an Ligninmatrix
Ls1L=0.08607;           % (g Protein/g Lignin)         maximale Enyzmadsorption CHB und EG je g Lignin
Ls2L=0.1735;            % (g Protein/g Lignin)         maximale Enyzmadsorption ß-Glucosidase je g Lignin
                       
% Enzymdosierung Cellobiohydrolase CHB und Endoglucanase EG (Hydrolyse zu Cellobiose)
CEs1=45;                % (mg Protein/g Cellulose)     Enzymdosierung 9 36.59 / 42.1875
Ceg1=CEs1*Cs0/1000;     % (g Protein/ kg Lösung)       Proteinkonzentration in der Lösung

% Enzymdosierung ß-Glucosidase (Hydrolyse Cellobiose zu Glucose)
CEs2=1;                 % (mg Protein/g Cellulose)     Enzymdosierung 2 8.4 / 2.8125
Ceg2=CEs2*Cs0/1000;     % (g Protein/ kg Lösung)       Proteinkonzentration in der Lösung

% Substratreaktivität
RS=c_v(1)/Cs0;          % (dimensionslos)              abnehmende Substratreaktivität mit zunehmendem Abbaugrad der Cellulose    

%Adsorptionsteil

% Langmuir Isotherme: CBH und EG an Lignin und Celluloseanteil in der Trockensubstanz
%Langmuirparameter für Adsorption an Cellulose
Ls1=0.04255;            % (g Protein/g Cellulose)
KL1=0.6;                % (kg Lösung/g Protein)
Ls1t=Ls1+(1-(c_v(1)/Cs0))*(Ls1L-Ls1);
KL1t=KL1+(1-(c_v(1)/Cs0))*(KL1L-KL1);


% Berechnung der freien Konzentration von CBH und EG in der Lösung (g Protein/kg Lösung)
Cefs1=(-(1+Ls1t*KL1t*(c_v(1)+Cl)-Ceg1*KL1t)+((1+Ls1t*KL1t*(c_v(1)+Cl)-Ceg1*KL1t)^2+4*KL1t*Ceg1)^0.5)/(2*KL1t);
Caels=Ceg1-Cefs1;

% Berechnung der freien Konzentration von CBH und EG in der Lösung; Adsorption nur an Ligninanteil (g Protein/kg Lösung)
Cefl1=(-(1+Ls1L*KL1L*Cl-Ceg1*KL1L)+(((1+Ls1L*KL1L*Cl-Ceg1*KL1L)^2)+4*KL1L*Ceg1)^0.5)/(2*KL1L);
Cael3=Ceg1-Cefl1;

% Langmuir Isotherme: CBH und EG an Lignin
% Berechnung der gebundenen Konzentration von CBH und EG an Cellulose in der Lösung (g Protein/ kg Lösung)                                          
Ceb1=Caels-Cael3;

% Langmuir Isotherme: ß-Glucosidase an Ligninanteil in der Trockensubstanz
% Berechnung der freien Konzentration von ß-Glucosidase in der Lösung (g Protein/kg Lösung)
Cef2=(-(1+Ls2L*KL2L*Cl-Ceg2*KL2L)+((1+Ls2L*KL2L*Cl-Ceg2*KL2L)^2+4*KL2L*Ceg2)^0.5)/(2*KL2L);


% Gleichungen für Reaktionsgeschwindigkeiten, kompetetive Hemmung Glucose, Cellobiose und Xylose (g/(kg*h))
r1=(kR1*Arf*Ceb1*RS*c_v(1))/(1+(c_v(2)/K1Icb)+(c_v(3)/K1Ig)+(Cx/K1Ix));      
r2=(kR2*Arf*Ceb1*RS*c_v(1))/(1+(c_v(2)/K2Icb)+(c_v(3)/K2Ig)+(Cx/K2Ix));%Ceb2
r3=(kR3*Arf*Cef2*c_v(2))/(KM*(1+(c_v(3)/K3Ig)+(Cx/K3Ix))+c_v(2));            

% DOEs Reaktionsgeschwindigkeiten (g/(kg*h))
dCs_dt=-r1-r2;              % Massenbilanz Cellulose
dCcb_dt=1.056*r1-r3;        % Massenbilanz Cellbiose
dCg_dt=1.111*r2+1.053*r3;   % Massenbilanz Cellbiose



% Spaltenvektor gekoppelte ODEs
dc_v=[dCs_dt;dCcb_dt;dCg_dt];
 


Der code von lsqparafit2.m ist wahrscheinlich eher unwichtig.

Ich glaube die entscheidende Passage könnte folgende sein, weil ich mir nicht sicher bin was ich an lsqnonlin wie[/color] übergeben muss. Ich übergebe deswegen die Differenz aus 2 Spaltenvektoren. Ein Vektor mit den Messwerten (MAT) und ein Vektor mit den Werten des ode-Solvers (vekt).

Codepassage aus lsqparafit1.m
Code:
%%% Optimierungsroutine lsqnonlin %%%
function lsq=minimiz(par)
global c_v0 tspan MAT

%Lösung des DGL-Systems mit Startwerten
[t,c_v] = ode45(@lsqparafit2,tspan,c_v0,' ',par);
%Bewertungskriterium (soll minimiert werden)
tra=c_v';
vekt=[tra(1,:),tra(2,:),tra(3,:)];
lsq = vekt - MAT;


Bei dem Start des Codes erscheint diese Meldung im command window:

First-Order Norm of
Iteration Func-count Residual optimality Lambda step
0 10 1034.13 8.33e+003 0.01

Ein weitere Iterationsschritt kommt auch nach 20 min nicht.

Ich danke denjenigen, die sich die Mühe machen, das alles durchzulesen Crying or Very sad

Gruß
Stiffi
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

die Zeit, die Anwendung von vorne bis hinten durchzugehen, habe ich dann leider doch nicht.

Was du wie übergeben musst, solltest du als Anwender selber am besten wissen. Ich würde aber globale Variablen vermeiden und stattdessen anonyme Function Handles verwenden.
Beispiel: ode45 soll myode aufrufen, die Argumente t, y, param entgegennimmt -->
Code:
param = ...;
... = ode45(@(t, y) myode(t, y, param), ...


Der Wert für DiffMinChange ist viel zu niedrig. Dir muss klar sein, dass ode45 nur näherungsweise Lösungen liefert, z.B. mit Toleranz 1e-6 (was ich noch einstellen würde; Default dürfte 1e-3 sein). Ein Differenzenquotient mit Schrittweite 1e-8 ist da unsinnig. Ich würde es mal mit 1e-3 oder 1e-2 für DiffMinChange probieren.

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 41
Anmeldedatum: 13.07.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.08.2011, 15:38     Titel:
  Antworten mit Zitat      
Hi,

ich werde anonyme Funktionen statt den globalen Parameteren verwenden.

Vielleicht doch noch eine Frage zur Übergabe der Parameter an lsqnonlin, ich werde nicht ganz schlau aus der Anleitung zu lsqnonlin.

Ich übergebe eine Matrix lsq an lsqnonlin.
lsq ist die Differenzmatrix aus vect(der Ergebnismatrix aus dem odesolver) und MAT(den Messwerten). Lsqnonlin soll die Parameter optimieren, so dass diese Differenz minimal wird.

Ist mein Aufruf von lsqnonlin kompatibel mit der Syntax der Funktion,
oder muss ich einen anderen Ausdruck verwenden?

Code:
Code:
paropt = lsqnonlin(@minimiz,par0,[],[],options);
 


Vielleicht kennt sich ja jemand damit aus, danke Wink

Gruß und schönes Wochende

Stiffi
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

laut Doku sollte die Funktion einen Vektor zurückgeben. Ich weiß nicht, wie sie sich bei Matrizen verhält. Daher würde ich die Matrix von Differenzen in einen Vektor umwandeln, z.B. mit RESHAPE.
Aber warum fragst du?

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 41
Anmeldedatum: 13.07.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.08.2011, 17:43     Titel:
  Antworten mit Zitat      
Hi,

danke,
das muss ich nächste Woche gleich probieren. Jetzt hab ich leider kein Matlab mehr Sad

Ich kannte die Funtkion reshape bisher nicht.
Ich Frage, weil die Iteration nach dem ersten Schritt nicht weiterläuft. Matlab bricht zwar nicht ab, aber passiert auch nichts Neues (siehe Fehlermeldung oben).

Ich probier den Tips mal aus und geb dann Bescheid.

Gruß und schönes WE.

Stiffi
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 05.08.2011, 18:52     Titel:
  Antworten mit Zitat      
Hallo,

es liegt aller Wahrscheinlichkeit an DiffMinChange, siehe oben.
Ich würde sicherheitshalber auch die Toleranz von ode45 runtersetzen, siehe auch oben.

Um zu sehen, was MATLAB macht, könntest du dir ja auch in jeder Zielfunktions-Auswertung den verwendeten Parametersatz ins Command Window ausgeben lassen?

Ebenso ein schönes WE...

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 41
Anmeldedatum: 13.07.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.08.2011, 11:07     Titel:
  Antworten mit Zitat      
Hi,

also, folgende Tips habe ich umgesetzt (so gut es mir mit meinen beschränkten MATLAB-Kenntnissen möglich ist):
1. mit der Funktion Reshape hab ich Vektoren aus den Matritzen gemacht und dann die Differenz aus den Vektoren an lsqnonlin übergeben
2. ich habe nun mit function handles gearbeitet (sehe ich das richtig, dass ich dann die Variablen immer wieder neu definieren muss?)
3. den Wert für Diffminchange probierte ich als 1e-3 und 1e-2
4. den Wert von Reltol probierte ich als 1e-6 bis 1e-2

Es erscheint leider selbst bei Diffminchange 1e-2 und Reltol 1e-2 eine Meldung:

First-Order Norm of
Iteration Func-count Residual optimality Lambda step
0 10 1085.86 7.86e+003 0.01
1 20 142.234 4.48e+004 0.001 6.44111

No solution found.

lsqnonlin stopped because the problem appears to be locally singular.

<stopping criteria details>

Weiß an dieser Stelle noch jemand weiter?

Vielen Dank.

Gruß

Stiffi
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen

Gehe zu Seite 1, 2  Weiter

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 - 2024 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.