Verfasst am: 20.08.2008, 08:45
Titel: Fehler: Exiting due to infeasibility
Hallo,
ich arbeite erst seit kurzem mit Matlab und habe somit leider sehr wenig Ahnung von der Materie.
Ich bekomme immer wieder diese Fehlermeldung und Matlab fittet nichts: Exiting due to infeasibility: 2 lower bounds exceed the corresponding upper bounds.
Ich weiß das sieht auf den ersten Blick so aus als müsste ich nur die bounds anders definieren, die stimmen aber, daran kann es also nicht liegen. Habe auch schon versucht durch ersetzen von lb und ub mit [] gar keine Grenzen zu setzen, die Meldung kommt aber trotzdem.
Wäre toll wenn mir da jemand weiterhelfen könnte.
Danke
/edit: Code-Umgebung ergänzt - Bitte zukünftig selbstständig formatieren!
Gruß Alex
kannst Du vielleicht ein "lauffähiges", also ein fehlererzeugendes Beispiel posten? So ist eine Ferndiagnose schwierig.
Oder Du schaust mal selbst in die Funktionen lsqncommon und checkbounds. Im Debug-Modus kannst Du dort überprüfen, welche Werte übergeben werden, wenn Du lb und ub = [] setzt.
k=k+1;
end
th(:,1)=q';
th(:,2)=u';
th(:,3)=v';
th(:,4)=o';
th(:,5)=p';
th=[q' u' v' o' p'];
for i=1:1:20
T=tdata(i);
y(i)=(A10.*(exp(-(E10-alpha10.*th(i,5))/(R.*(T+273.15)))).*th(i,5)*g.*(exp(-h./(R.*(T+273.15)))).*th(i,4).*th(i,2)-A8.*(exp(-E8./(R.*(T+273.15)))).*th(i,5).*th(i,3))/(A9.*exp(-E9./(R.*(T+273.15))).*th(i,3));
end end
Wie kommt man in den debugging modus ? In der Matlab Hilfe und mit google findet man nur Informationen darüber wie man den Modus beendet.
Ich habe jetzt mal unter "Debug -> Stop if Error/Warning" das Ganze so eingestellt, dass Matlab beim ersten Fehler abbricht.
Als Ergebnis habe ich folgende Meldung erhalten:
Zitat:
Caught-error breakpoint was hit in optimget>optimgetfast at line 114. The error was:
Attempt to reference field of non-structure array.
Was das bedeuten soll habe ich bisher leider auch noch nicht herausgefunden, werde aber erstmal weiter danach suchen.
Dann starte ich das Skript oder die Funktion mit F5 (oder Schaltfläche "save and run" im Editor).
Wenn man die kritische Stelle kennt, kann man auch gezielt einen "Breakpoint" setzen indem man auf den "-" neben der entsprechenden Zeilennummer klickt. Dort erscheint dann ein roter Punkt (oder grau, bevor die Datei gespeichert wird).
Der Vorteil ist dann: Es ist der Workspace der fehlererzeugenden Funktion geöffnet und man kann sich alle Variablen in ihrem dortigen Zustand anschauen. Mehr dazu in der Hilfe unter "Debugging Process and Features".
R=8.3144; %Gaskonstante [J/mol*K]
%b = 0.01666; %Heizrate 1/min[K/s]
V=0.00000833; %Volumenstrom [m3/s] 500ml/min
Tmin=30; %Anfangstemperatur [°C]
sch=5; %Schrittweite der Schleife [K]
Ta=145; %Obere Grenze der Temperatur
cH2Oein= 0.0;
cH2ein= 0.0755; %in [mol/m³]2000ppm H2
cO2ein= 2.26; %[mol/m³] = 6 Vol%
options=optimset('Largescale','off','TolX',10^-50,'TolFun',10^-50,'MaxFunEvals',10000,'MaxIter',50); %TolX: max. Abweichung in x-Richtung; TolFun: Abweichung des Funktionswertes; MaxFunEvals: Max. Anzahl der Funktionsauswertungen; MaxIter: Max. Anzahl an Interationsschritten
options1=optimset('Largescale','off','TolX',10^-50,'TolFun',10^-50,'MaxFunEvals',100,'MaxIter',50); %TolX: max. Abweichung in x-Richtung; TolFun: Abweichung des Funktionswertes; MaxFunEvals: Max. Anzahl der Funktionsauswertungen; MaxIter: Max. Anzahl an Interationsschritten
lb1=[00];%[1.6e+9,1000]
ub1=[1.6e11 200000];%[1.6e+11, 200000]
lb=[0.000.000.000.000.00]; %untere Grenze
ub=[1.001.001.001.001.00];
Wenn ich das korrigiere, kommt allerdings die nächste Fehlermeldung. Es stellt sich heraus, dass in der Funktion theta die Variable T nicht belegt ist, was dann zur Fehlermeldung führt:
??? In an assignment A(I) = B, the number of elements in B and
I must be the same.
Wenn ich T mit 1 belege, zeigt sich, dass die Koeffizientenmatrix für lsqnonlin schlecht konditioniert ist. Vielleicht ist das mit dem richtigen T besser, das musst Du mal ausprobieren.
Ansonsten ist es wohl immer problematisch, zwei Optimierungsverfahren ineinander zu schachteln, aber ich weiß auch, dass es manchmal nicht anders geht.
Herzliche Grüße
Bijick
_________________
>> why
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 20.08.2008, 14:09
Titel:
Danke, jetzt weiß ich wenigstes wo ich weitersuchen muss, hatte die Stelle eigentlich schon abgehakt. Das X0 hatte ich genau wegen dieser Matrixfehlermeldung drinnen. Werde jetzt mal an dem T rumbasteln.
Danke für die Hilfe
Grüßle,
Charlie
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
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.