Scilab Home page | Wiki | Bug tracker | Forge | Mailing list archives | ATOMS | File exchange
Please login or create an account
Change language to: English - Français - Português - Русский

Please note that the recommended version of Scilab is 6.0.1. This page might be outdated.
However, this page did not exist in the previous stable version.

Scilabヘルプ >> Differential Equations, Integration > numdiff

numdiff

ある点における数値的な傾きの推定. この関数は廃止されます. numderivative 関数を代わりに 使用してください.

呼び出し手順

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

引数

fun

外部, Scilab 関数またはリスト. 呼び出し手順については, 以下を参照ください. また,外部関数に関する詳細については, externalを参照ください. f: Rn --> Rp

x

傾きを探す点の n 座標のベクトル

dx

ベクトル, 有限差分ステップ. デフォルト値は dx = sqrt(%eps)*(1+1d-3*abs(x))です.

g

行列, 軌跡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]

参照

  • interp — 3次スプライン評価関数
  • interp2d — 双3次スプライン (2d) 評価関数
  • splin — 3次スプライン補間
  • eval_cshep2d — 2次元の3次シェパード補間の評価
  • optim — non-linear optimization routine
  • diff — 差分および離散微分
  • derivative — approximate derivatives of a function. This function is obsolete. Please use the numderivative function instead.
  • numderivative — approximate derivatives of a function (Jacobian or Hessian)
  • external — Scilabオブジェクト, 外部関数またはルーチン

履歴

バージョン記述
5.5.0 廃止予定となりました. Scilab 6.0.0で削除されます.

付録

我々は,numdiff関数を使用する numderivative関数を使うように更新できる方法について 議論しています.

以下の関数について考えてみましょう:

function f=myfun(x)
f = x(1)*x(1)+x(1)*x(2)
endfunction

および点:

x = [5 8]

ここで, 命令:

g1 = numdiff(myfun, x)

は以下で置換できます

g2 = numderivative(myfun, x)

正確に同じステップを使用することが重要です, numdiffと値が同じステップを使用します:

x = [5 8];
h = sqrt(%eps)*(1+1d-3*abs(x))
g1 = numdiff(myfun, x)
g2 = numderivative(myfun, x, h)
g1 == g2
Scilab Enterprises
Copyright (c) 2011-2017 (Scilab Enterprises)
Copyright (c) 1989-2012 (INRIA)
Copyright (c) 1989-2007 (ENPC)
with contributors
Last updated:
Wed Apr 01 10:24:59 CEST 2015