% 一橋大学「金融経済論I」（２００７年度、担当：塩路)
%
% 2007年10月16日
% ファイル名＝fdjac_japan.m
%
% 目的：数値的に関数の微分を取る(数値微分）
% 注釈：このファイルはMatlabのFunctionを定義するものである。
%       単独で使用するものではない。
%
% このプログラムは、以下をそのままコピーしたものである。
% (著者)　Paul L. Fackler & Mario J. Miranda
% (書名)　Applied Computational Economics and Finance
% (出版社など)　MIT Press、2004年(ペーパーバック版)
% (ページ)　104ページ

function fjac = fdjac_japan(f,x)
    % "f"は微分を取ろうとする関数（を定式化する、別の.mファイル)
    % "x"は微係数を評価するポイント（どこで微分を取るか)

h = eps^(1/3)*max(abs(x),1); 
    %"eps"はきわめて小さい数。Matlabヘルプ参照。
xh1=x+h; xh0=x-h;
hh=xh1-xh0;
for j=1:length(x);
   xx = x; 
   xx(j) = xh1(j); f1=feval(f,xx);
   xx(j) = xh0(j); f0=feval(f,xx);
   fjac(:,j) = (f1-f0)/hh(j);
end