dynare/scilab/jacob_a.sci

34 lines
723 B
Scilab

function [jacobia_]=jacob_a(func,z,varargin)
// Copyright (C) 2001 Michel Juillard
//
// symmetric formula to compute the Jacobian
//
global d1_
nargin = length(varargin);
if nargin > 2 then
d1_ = evstr(func+'(z,varargin)');
else
d1_ = evstr(func+'(z)');
end
nz = size(z,1);
jacobia_ = zeros(size(d1_,1),nz);
dh = max(abs(z),gstep_*ones(nz,1))*(%eps^(1/3));
xdh1 = z;
xdh2 = z;
for j = 1:nz
xdh1(j) = z(j)-dh(j);
xdh2(j) = z(j)+dh(j);
h = xdh2(j)-xdh1(j);
if nargin > 2 then
jacobia_(:,j) = (evstr(func+'(xdh2,varargin)')-evstr(func+'(xdh1,varargin)'))/h;
else
jacobia_(:,j) = (evstr(func+'(xdh2)')-evstr(func+'(xdh1)'))/h;
end
xdh1(j) = z(j);
xdh2(j) = z(j);
end
// 10/21/02 MJ creation