How can I go back and resolve failed attempts?

1 vue (au cours des 30 derniers jours)
sittmo
sittmo le 6 Août 2013
Hi everyone, so I have the following code:
clc;
clear;
% Import data
% PD: probability of default
% CM: covariance matrix
% DT: default threshold
PD = xlsread('Data_CIMDO.xlsx','PD');
CM = xlsread('Data_CIMDO.xlsx','COV');
DT = xlsread('Data_CIMDO.xlsx','DT');
Original_PD = PD; %Store original PD
LM_rows = 11; %Expected LM rows
LM_columns = length(PD) %Expected LM columns
LM_FINAL = zeros(LM_rows,LM_columns); %Dimensions of LM_FINAL
for i = 1:length(PD)
PD = Original_PD(:,i);
options = optimset('Display','iter');
x0 = rand(size(PD,1)+1,1);
[LM,fval,exitflag] = fsolve(@(x)ConstLM(x,PD,CM,DT), x0, options);
LM_FINAL(:,i) = LM;
end
Now since the code depends on the initial value (x0) when solving for LM, after one run of the code there are many unsolved values for LM as the initial x0 was incorrectly guessed. So how can I adjust the code such that it keeps running until all LM's have been solved?
Thanks.

Réponse acceptée

Jan
Jan le 6 Août 2013
Modifié(e) : Jan le 6 Août 2013
...
for k = 1:100
[LM, fval, exitflag] = fsolve(@(x)ConstLM(x,PD,CM,DT), x0, options);
if exitflag == 1
break;
end
end
if exitflag ~= 1
warning('FSOLVE did not find a solution.');
end
...
I'd prefer such a loop with a maximum loop counter to guarantee that the function stops in finite time.
  2 commentaires
sittmo
sittmo le 6 Août 2013
Thanks Jan Simon for your assistance.
As I am still quite a beginner with MATLAB, please excuse any silly questions.
For the "for k = 1:100" loop, is that basically running the following line of code:
"[LM, fval, exitflag] = fsolve(@(x)ConstLM(x,PD,CM,DT), x0, options)"
...100 times and stops if exitflag is equal to 1?
If after 100 cycles and exitflag is not 1, then it exits the loop and goes to the next equation to solve?
Also does the code you provided ensure that each time we attempt a re-solve, x0 changes to a new value?
Thank you again.
Walter Roberson
Walter Roberson le 7 Août 2013
You can put the
x0 = rand(size(PD,1)+1,1);
before the fsolve() call to use a new starting point each time.

Connectez-vous pour commenter.

Plus de réponses (0)

Catégories

En savoir plus sur Get Started with MATLAB dans Help Center et File Exchange

Tags

Aucun tag saisi pour le moment.

Produits

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by