commit
84d744ea75
|
@ -279,12 +279,30 @@ elseif ismember(options.solve_algo, [2, 12, 4])
|
||||||
dprintf('DYNARE_SOLVE (solve_algo=2|4|12): solving block %u with trust_region routine.', i);
|
dprintf('DYNARE_SOLVE (solve_algo=2|4|12): solving block %u with trust_region routine.', i);
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
[x, errorflag, errorcode] = solver(f, x, j1(j), j2(j), jacobian_flag, ...
|
blockcolumns=s(i+1)-s(i);
|
||||||
options.gstep, ...
|
if blockcolumns ~= blocklength
|
||||||
tolf, options.solve_tolx, maxit, ...
|
%non-square-block in DM; check whether initial value is solution
|
||||||
options.trust_region_initial_step_bound_factor, ...
|
[fval_check, fjac] = feval(f, x, args{:});
|
||||||
options.debug, args{:});
|
if norm(fval_check(j1(j))) < tolf
|
||||||
fre = true;
|
errorflag = false;
|
||||||
|
errorcode = 0;
|
||||||
|
continue
|
||||||
|
end
|
||||||
|
end
|
||||||
|
if blockcolumns>=blocklength
|
||||||
|
%(under-)determined block
|
||||||
|
[x, errorflag, errorcode] = solver(f, x, j1(j), j2(j), jacobian_flag, ...
|
||||||
|
options.gstep, ...
|
||||||
|
tolf, options.solve_tolx, maxit, ...
|
||||||
|
options.trust_region_initial_step_bound_factor, ...
|
||||||
|
options.debug, args{:});
|
||||||
|
fre = true;
|
||||||
|
else
|
||||||
|
fprintf('\nDYNARE_SOLVE (solve_algo=2|4|12): the Dulmage-Mendelsohn decomposition returned a non-square block. This means that the Jacobian is singular. You may want to try another value for solve_algo.\n')
|
||||||
|
%overdetermined block
|
||||||
|
errorflag = true;
|
||||||
|
errorcode = 0;
|
||||||
|
end
|
||||||
if errorflag
|
if errorflag
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in New Issue