Does anybody know how to obtain an adecuate step for finite differences in Matlab?
2 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
student
el 18 de Feb. de 2015
Comentada: Torsten
el 27 de Abr. de 2015
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 comentarios
Respuesta aceptada
Torsten
el 18 de Feb. de 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 comentarios
Torsten
el 27 de Abr. de 2015
Search for the line
DELT=DSQRT(UROUND*MAX(1.D-5,ABS(YSAFE)))
Best wishes
Torsten.
Más respuestas (0)
Ver también
Categorías
Más información sobre Logical en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!