Does anybody know how to obtain an adecuate step for finite differences in Matlab?
1 vue (au cours des 30 derniers jours)
Afficher commentaires plus anciens
Hi, I have a vector of dim Nx1,fnl0 which depends on a vector X0 of dim 3Nx1. I would like to obtain the parcial derivatives of this vectorfnl0 respective X0 by finite differences, in order to calculate the Jacobian, dfnl0_dX . I´m trying to construct the Jacobian column by column, by concatenating the results of each step k:
X0(vector dim 3Nx1) fnl0(vector dim Nx1) delta_X0=sqrt(eps)*norm(X0) dfnl0_dX=Zeros[N,3N] % Jacobian
for k=1:3*N
X0pert=X0; X0pert(k,1)=X0pert(k,1)+delta_X0; fnl0_pert=f_nonlinear(dx0pert,param); derivative= (fnl0_pert - fnl0) / delta_X0; dfnl0_dX=horzcat(dfnl0_dX,derivative);
end
The Problem is that the elements of vector X0 are very different between them, some elements 1e-20 and others of order 1e-6, and so it seems that I am not obtaining correct results, as I have been trying to do the same Operation with different delta_X0 and the results vary a lot.
Could anyone help me in obatining an adecuate step delta_X0 to solve this problem?
Thank your very much!
0 commentaires
Réponse acceptée
Torsten
le 18 Fév 2015
I looked into a sophisticated solver.
There,
Delta_X0(k) = sqrt(Uround*max(1e-5,abs(X0(k))))
where Uround is the SMALLEST NUMBER SATISFYING 1.0D0+UROUND>1.0D0.
Note that Delta_X0 is a vector with different values depending on the component.
Best wishes
Torsten.
6 commentaires
Torsten
le 27 Avr 2015
Search for the line
DELT=DSQRT(UROUND*MAX(1.D-5,ABS(YSAFE)))
Best wishes
Torsten.
Plus de réponses (0)
Voir également
Catégories
En savoir plus sur Logical dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!