Statistiques
| Révision:

root / numgrad.inc

Historique | Voir | Annoter | Télécharger (916 octets)

1
{ ******************************************************************
2
  Numerical gradient
3
  ****************************************************************** }
4

    
5
procedure Gradient(X, G : TVector);
6

    
7
const
8
  Eta = 1.0E-4;     { Relative increment }
9

    
10
var
11
  I     : Integer;  { Loop variable }
12
  Temp  : Float;    { Temporary variable }
13
  Delta : Float;    { Increment }
14
  Xm    : Float;    { X - Delta }
15
  Xp    : Float;    { X + Delta }
16
  Fm    : Float;    { F(X - Delta) }
17
  Fp    : Float;    { F(X + Delta) }
18

    
19
begin
20
  for I := 1 to Nvar do
21
    begin
22
      if X[I] <> 0.0 then
23
        Delta := Eta * Abs(X[I])
24
      else
25
        Delta := Eta;
26

    
27
      Xp := X[I] + Delta;
28
       Xm := X[I] - Delta;
29

    
30
      Temp := X[I];
31

    
32
      X[I] := Xm;
33
      Fm := Func(X);
34

    
35
      X[I] := Xp;
36
      Fp := Func(X);
37

    
38
      G[I] := (Fp - Fm) / (2.0 * Delta);
39

    
40
      X[I] := Temp
41
    end;
42
end;