Filter löschen
Filter löschen

Does anybody know how to obtain an adecuate step for finite differences in Matlab?

1 Ansicht (letzte 30 Tage)
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!

Akzeptierte Antwort

Torsten
Torsten am 18 Feb. 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 Kommentare
student
student am 24 Apr. 2015
Hi Torsten, I'm wondering if you could tell me where exactly did you found the formula of the step for finite differences
Delta_X0(k) = sqrt(Uround*max(1e-5,abs(X0(k)))) where Uround is the SMALLEST NUMBER SATISFYING 1.0D0+UROUND>1.0D0.
Thank you very much

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (0)

Kategorien

Mehr zu Systems of Nonlinear Equations finden Sie in Help Center und File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by