34 lines
723 B
Scilab
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
|