# numdiff

数値的な傾きの推定

## 呼び出し手順

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

## 引数

fun

  外部, Scilab 関数またはリスト. 呼び出し手順については,

  以下を参照ください. また,外部関数に関する詳細については,

  externalを参照ください.

x

  ベクトル, 関数`fun`の引数

dx

  ベクトル, 有限差分ステップ. デフォルト値は

  `dx=sqrt(%eps)*(1+1d-3*abs(x))`です.

g

  ベクトル, 傾きの推定値

## 説明

指定した関数 `fun(x)`

from

`R^n` to `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)`.

数値精度,2つのアルゴリズムの比較については,

微分を参照ください.

## 例

    // 例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)]となります.
    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