ある点における数値的な傾きの推定
g = numdiff(fun, x [,dx])
外部, Scilab 関数またはリスト. 呼び出し手順については, 以下を参照ください. また,外部関数に関する詳細については, externalを参照ください. f: Rn --> Rp
傾きを探す点の n
座標のベクトル
ベクトル, 有限差分ステップ. デフォルト値は
dx = sqrt(%eps)*(1+1d-3*abs(x))
です.
行列, 軌跡x
における傾きの推定値
Rn から Rpまで
関数 fun(x)
を指定すると, 有限差分法により
以下のような p x n
行列 g
を計算します.
g(i,j) = [(df_i)/(dx_j)](x)
1次の式を使用します.
パラメータがない場合, 関数fun
の呼び出し手順は,
x
∈ Rn
および y
∈ Rpとして,
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) // 例3 (f: R^3 --> R^3) // myfunはR^2からR^2への関数: (x(1), x(2), x(3)) |--> (myfun(x)(1), myfun(x)(2), mfun(x)(3)) function f=myfun(x) f(1) = x(1) * x(1); f(2) = x(1) * x(2) * x(3); f(3) = 2*x(1) + 2*x(2) + 2*x(3); endfunction x = [5 8 10]; g = numdiff(myfun, x) // 正確な傾斜は以下となります: // [ df_1/dx_1 df_1/dx_2 df_1/dx_3 ; // df_2/dx_1 df_2/dx_2 df_2/dx_3 ; // df_3/dx_1 df_3/dx_2 df_3/dx_3 ; ] exact3 = [2*x(1) 0 0 ; x(2)*x(3) x(1)*x(3) x(1)*x(2) ; 2 2 2] | ![]() | ![]() |
Version | Description |
5.5.0 | 廃止予定となりました. Scilab 6.0.0で削除されます. |
我々は,numdiff
関数を使用する
numderivative
関数を使うように更新できる方法について
議論しています.
以下の関数について考えてみましょう:
および点:
ここで, 命令:
は以下で置換できます
正確に同じステップを使用することが重要です,
numdiff
と値が同じステップを使用します: