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

Schleife fortsetzen trotz Fehlermeldung

 

Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 21.09.2010, 13:55     Titel: Schleife fortsetzen trotz Fehlermeldung
  Antworten mit Zitat      
Hallo liebes Forum,

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.01 0.1 1 10 50];
Prob2 = 600:50:1250;

% Startwerte und Grenzen bleiben bei allen Schleifendurchgängen gleich...
blow = [0 -3 -3 -3 -3 -3 -3]; % untere Grenze
bup = [200 3 3 3 3 3 3]; % obere Grenze
start = [5 1 0.5 0 -1 -1 -1 ]; % Startwerte
func='A*x^a*exp(b/x)*B*Prob1^c*C*exp(d*Prob2)';

for i=1:length(Prob1)
    for j=1:length(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

        % Koeffizienten Approximation
        problemtxt = {'Prob1' 'Prob2'};
        problemnum = {Prob1(i) Prob2(j)};

        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


Schonmal jetzt vielen Dank für alle Verbesserungsvorschläge!


eupho
Forum-Meister

Forum-Meister


Beiträge: 777
Anmeldedatum: 07.01.09
Wohnort: Marburg
Version: R2009b
     Beitrag Verfasst am: 21.09.2010, 14:45     Titel:
  Antworten mit Zitat      
Mit

Code:


solltest du weiterkommen...
Private Nachricht senden Benutzer-Profile anzeigen
 
Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 21.09.2010, 15:06     Titel:
  Antworten mit Zitat      
Bin inzwischen auch darüber gestolpert...

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???
 
Harald
Forum-Meister

Forum-Meister


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

hast du das try-catch in die Schleife eingebaut? etwa so:

Code:
try
[c good] = fit(xdat, ydat, funcfit, opt, 'problem', problemnum);
catch
c = ...
good = ...
end


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



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 21.09.2010, 15:17     Titel:
  Antworten mit Zitat      
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!
 
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.