summaryrefslogtreecommitdiff
path: root/texmf-dist/scripts/ketcindy/ketlib/ketpic2escifiles6/Derivative.sci
blob: cbffc3d7a991c095d042df6b8456472ba94a7784 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
// 09.10.04
// 09.10.05
// 09.10.06
// 14.10.24  numderivative used after 5.5

function Out=Derivative(varargin)
  Nargs=length(varargin);
  Out=[];
  Fs=varargin(1);
  Vv=varargin(2);
  Np=3;
  if type(Vv)==10
    Prstr=strsubst(Vv,'[','(');
    Prstr=strsubst(Prstr,']',')');
    Tmp=part(Prstr,1);
    if Tmp~='('
      Prstr='('+Prstr+')';
    end;
    deff('Out=Tmpfun'+Prstr,'Out='+Fs);
    Fs='Tmpfun'+Prstr;
    Vv=varargin(Np);
    Np=Np+1;
  end;
  Nd=[];
  if Np<=Nargs
    Nd=varargin(Np);
  end;
  Js=mtlb_findstr(Fs,'(');
  JL=mtlb_findstr(Fs,',');
  Je=mtlb_findstr(Fs,')');
  Sep=[Js(1),JL,Je];
  Fse=Fs;
  for I=1:length(Vv)
    J1=Sep(I)+1;
    J2=Sep(I+1)-1;
    Tmp1=part(Fs,J1:J2);
    Tmp2='X_'+string(I);
    Fse=strsubst(Fse,Tmp1,Tmp2);
  end;
  function Ans=Tmpf(W)
    X1=W(1);
    if length(W)>1
      X2=W(2);
    else;
      X2=%inf;
    end;
    if length(W)>2
      X3=W(3);
    else
      X3=%inf;
    end;
    Tmp=Assign(Fse,'X_1',X1,'X_2',X2,'X_3',X3);
    Ans=evstr(Tmp)';
  endfunction;
  Tmp1=getversion("scilab");
  if Tmp1(1)*10+Tmp1(2)>=55 then
    Out=numderivative(Tmpf,Vv')';
  else
    Out=derivative(Tmpf,Vv')';
  end
  if Nd~=[]
    Out=Out(Nd,:)
  end;
endfunction;