# numdiff

числовая оценка градиента

## Последовательность вызова

    g = numdiff(fun, x [,dx])

## Аргументы

fun

  внешняя функция или подпрограмма, функция Scilab'а или список. См. ниже последовательность вызова, см. также external о подробностях о внешних функциях.

x

  вектор, аргумент функции `fun`.

dx

  вектор, шаг конечной разности. Значение по умолчанию равно `dx=sqrt(%eps)*(1+1d-3*abs(x))`.

g

  вектор, оцененный градиент

## Описание

Заданная функция `fun(x)` от `R^n` до `R^p` вычисляет такую матрицу `g`, что

    g(i,j) = (df_i)/(dx_j)

используя методы конечной разницы. Использует формулу порядка 1.

Без параметров функция последовательность вызова `fun` `y=fun(x)`, и `numdiff` может быть вызвана в виде `g=numdiff(fun,x)`. Иначе последовательность вызова `fun` должна быть `y = fun(x, param_1, pararm_2, ..., param_q)`. Если параметры `param_1, param_2, ..., param_q` существуют, то `numdiff` может быть вызвана следующим образом: `g=numdiff(list(fun, param_1, param_2, ..., param_q), x)`.

См. derivative относительно проблем числовой точности и сравнение между двумя алгоритмами.

## Примеры

    // пример 1 (без параметров)
    // myfun - это функция от R^2 до R: (x(1),x(2)) |--> myfun(x)
    function f=myfun(x)
      f=x(1)*x(1)+x(1)*x(2)
    endfunction
    x=[5 8]
    g=numdiff(myfun,x)
    // Точный градиент (т. е. производная принадлежит x(1): первый элемент
    // и производная принадлежит x(2): второй элемент) равен
    exact=[2*x(1)+x(2)  x(1)]

    //пример 2 (с параметрами)
    // myfun - это функция от R до R:  x(1) |--> myfun(x)
    // myfun содержит 3 параметра: a, b, c
    function  f=myfun(x,a,b,c)
      f=(x+a)^c+b
    endfunction
    a=3; b=4; c=2;
    x=1
    g2=numdiff(list(myfun,a,b,c),x)
    // Точный градиент, то есть производная принадлежит x(1), равен:
    exact2=c*(x+a)^(c-1)

## Смотрите также

- optim
- derivative
- external