da mir viele Beiträge in diesem Forum schon bei meinem Matlab-Problemchen weitergeholfen haben, ich hierzu aber nichts finden kann, schreibe ich nun selbst einmal.
Mein Problem:
Ich versuche mehrere Regressionsrechnungen mit unterschiedlichen 'Problem'-Parametern in einer Schleife durchzuführen. Dabei sollen jeweils 7 Koeffizienten an eine Gleichung angepasst werden, um den Kurvenverlauf von aufgezeichneten Messdaten nachbilden zu können.
Würde nun gerne wissen ob es eine Möglichkeit gibt, die Schleife, in der die fit-Funktion aufgerufen wird, zum weiterlaufen zu zwingen, obwohl die fit-Funktion einen Fehlermeldung, aufgrund schlecht gewählter Startwerte oder Grenzen, liefert.
Habe bisher leider noch nie mit der Fitting Toolbox gearbeitet. Meine Vorkenntnisse was Regressionsrechnungen anbelangen, sind auch nahezu null... Deswegen hoffe ich mal auf Hilfe!
Code:
% So sieht der Programmcode aus.
Prob1 = [0.010.111050];
Prob2 = 600:50:1250;
% Startwerte und Grenzen bleiben bei allen Schleifendurchgängen gleich...
blow = [0-3-3-3-3-3-3]; % untere Grenze
bup = [200333333]; % obere Grenze
start = [510.50-1-1-1]; % Startwerte
func='A*x^a*exp(b/x)*B*Prob1^c*C*exp(d*Prob2)';
% Einlesen von Messwerten in Feld messdaten(n x m) % Programmcode gekürzt
[row col]=find(messdaten(:,1) == Prob2(j)); % Suche der Stellen der Messreihe in der die Werte des zweiten Problemwertes stehen
h=1;
for t=25:25:length(messdaten(row,4))% damit nicht mit allen Messwerten gerechnet wird if t > length(messdaten(row,4)) break else
ydat(h,1) = messdaten(row(1)+t,4);
xdat(h,1) = messdaten(row(1)+t,3);
h=h+1;
end end
opt = fitoptions('Method','NonlinearLeastSquares','Lower',blow,'Upper',bup,'Startpoint',start,'MaxIter',2000,'MaxFunEvals',2500);
funcfit = fittype(func,'problem',problemtxt,'independent',{'x'},'options',opt);
[c good] = fit(xdat, ydat, funcfit, opt, 'problem', problemnum); % Sobald hier die Funktion fit ein Fehler wegen schlecht gewählter Startwerte oder Grenzen liefert bricht die gesamte Schleife ab. Wenn möglich soll er aber einfach weitermachen. if good.rsquare < 0.9 || good.rsquare > 1 continue else
Coeffs{i,j}=[{'A'}, [c.A]; {'B'}, [c.B]; {'C'}, [c.C]; {'a'}, [c.a]; {'b'}, [c.b]; {'c'}, [c.c]; {'d'}, [c.d];];
end end end
hab ich vorher irgendwie nie gebraucht. Hab jetzt nur das Problem das er nach dem try die catch Bedingung nicht richtig ausführt. Hab relativ simpel den fit-Aufruf in die try Abfrage geschrieben und in die catch ein continue. Dennoch bricht er nach dem dritten von fünf Schleifendurchgängen ab. Habe eventuell die Syntax nicht so richtig verstanden...
Laut Matlab Hilfe wird, nachdem der Aufruf in dem try Teil ein Fehler produziert die Anweisungen im catch Teil abgearbeitet. Dann würde er aber den continue Befehl ausführen. Warum macht er das dann aber nicht???
Das das anscheinlich nicht funktioniert hat lag daran das für die Schleifendurchgänge 4 und 5 nur Fehler produziert wurden. Ergo wurde die Matrix auch nicht erweitert. Deshalb hab ich das nicht gleich gesehen...
Das Problem hat sich demnach erledigt. Vielen Dank für die Hilfe!
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.