diff options
Diffstat (limited to 'texmf-dist/scripts/ketcindy/ketlib/ketpicscifiles6/Deqplot.sci')
-rw-r--r-- | texmf-dist/scripts/ketcindy/ketlib/ketpicscifiles6/Deqplot.sci | 195 |
1 files changed, 195 insertions, 0 deletions
diff --git a/texmf-dist/scripts/ketcindy/ketlib/ketpicscifiles6/Deqplot.sci b/texmf-dist/scripts/ketcindy/ketlib/ketpicscifiles6/Deqplot.sci new file mode 100644 index 00000000..43d8ea6e --- /dev/null +++ b/texmf-dist/scripts/ketcindy/ketlib/ketpicscifiles6/Deqplot.sci @@ -0,0 +1,195 @@ + +// 08.09.22 +// 09.03.10 +// 09.10.09 ( ` and order ) +// 09.10.09b ( system ) +// 09.11.12 ( debug for x<0 ) +// 13.10.19 ( __ added to variables ) +// 15.11.16 N changed to number of intervals +// 15.12.08 bug of optiion ( __ ) fixed + +function P__=Deqplot(varargin) + global XMIN XMAX YMIN YMAX + Nargs__=length(varargin); + Eps__=10^(-5); + Fnstr__=varargin(1); + Fnstr__=strsubst(Fnstr__,Prime(),'`'); + K__=mtlb_findstr(Fnstr__,'='); + Str__=part(Fnstr__,1:(K__-1)); + Fnstr__=part(Fnstr__,(K__+1):length(Fnstr__)); + JL__=mtlb_findstr(Str__,'`'); + Yname__=part(Str__,1:(JL__(1)-1)); + Yname__=strsubst(Yname__,',',';'); + Tmp__=mtlb_findstr(Yname__,';'); + if length(Tmp__)>0 + Dim__=length(Tmp__)+1; + Order__=1; + Fnstr__=strsubst(Fnstr__,',',';'); + else + Dim__=1; + Order__=length(JL__); + end; + Rgstr__=varargin(2); + K__=mtlb_findstr(Rgstr__,'='); + if K__~=[] + Xname__=part(Rgstr__,1:K__-1); + Rng__=evstr(part(Rgstr__,K__+1:length(Rgstr__))); + else + Xname__=Rgstr__; + Rng__=[XMIN,XMAX]; + end; + X0__=varargin(3); + Y0__=varargin(4); + if size(Y0__,2)>1 + Y0__=Y0__'; + end; + N__=50; + if Nargs__>=5 + Tmp__=varargin(5); + Tmp__=strsubst(Tmp__,"=","__="); // 15.12.08 + Tmp__=strsubst(Tmp__,"____","__"); + execstr(Tmp__); + end; + X1__=Rng__(1); X2__=Rng__(2); + dX__=(X2__-X1__)/(N__-1); + dX__=(X2__-X1__)/(N__); // 15.11.16 + if Dim__>1 + Tmp__=mtlb_findstr(Yname__,'['); + Data__=part(Yname__,Tmp__+1:length(Yname__)); + Tmp__=mtlb_findstr(Data__,']'); + Data__=part(Data__,1:Tmp__-1); + Data__=';'+Data__+';'; + NL__=mtlb_findstr(Data__,';'); + NameL__=list(); + for I__=1:length(NL__)-1 + Tmp__=part(Data__,NL__(I__)+1:NL__(I__+1)-1); + NameL__(I__)=Tmp__; + end; + Fnrep__=Fnstr__; + for I__=1:length(NameL__) + Tmp__=NameL__(I__); + Fnrep__=strsubst(Fnrep__,Tmp__,'Pt('+string(I__)+')'); + end; + Tmp1__='Outf=Dfp__('+Xname__+',Pt)'; + Tmp2__='Outf='+Fnrep__; + deff(Tmp1__,Tmp2__); + Y0p__=Y0__; + Tmp1__='Outf=Dfn__('+Xname__+',Pt)'; + Tmp2__='Outf=-('+Fnrep__+')'; + deff(Tmp1__,Tmp2__); + Y0n__=Y0__; + else + YL__=mtlb_findstr(Fnstr__,Yname__); + Fnrep__=part(Fnstr__,1:YL__(1)-1); + for I__=1:length(YL__) + Py__=YL__(I__); + J__=1; + K__=Py__+1; + while part(Fnstr__,K__:K__)=='`' + J__=J__+1; K__=K__+1; + end; + Fnrep__=Fnrep__+Yname__+'('+string(J__)+')'; + if I__==length(YL__) + Fnrep__=Fnrep__+part(Fnstr__,K__:length(Fnstr__)); + else + J__=YL__(I__+1)-1; + if J__>=K__ + Fnrep__=Fnrep__+part(Fnstr__,K__:J__); + end; + end; + end; + Eqvec__='['; + for I__=1:Order__-1 + Eqvec__=Eqvec__+Yname__+'('+string(I__+1)+');'; + end; + Eqvec__=Eqvec__+Fnrep__+']'; + Tmp1__='Outf=Dfp__('+Xname__+','+Yname__+')'; + Tmp2__='Outf='+Eqvec__; + deff(Tmp1__,Tmp2__); + Y0p__=Y0__; + YL__=mtlb_findstr(Fnstr__,Yname__); + Fnrep__=part(Fnstr__,1:YL__(1)-1); + for I__=1:length(YL__) + Py__=YL__(I__); + J__=1; + K__=Py__+1; + while part(Fnstr__,K__:K__)=='`' + J__=J__+1; K__=K__+1; + end; + if modulo(J__,2)==1 + Fnrep__=Fnrep__+Yname__+'('+string(J__)+')'; + else + Fnrep__=Fnrep__+'(-'+Yname__+'('+string(J__)+'))'; + end; + if I__==length(YL__) + Fnrep__=Fnrep__+part(Fnstr__,K__:length(Fnstr__)); + else + J__=YL__(I__+1)-1; + if J__>=K__ + Fnrep__=Fnrep__+part(Fnstr__,K__:J__); + end; + end; + end; + if modulo(Order__,2)==1 + Fnrep__='-('+Fnrep__+')'; + end; + Fnrep__=strsubst(Fnrep__,Xname__,'(-'+Xname__+')'); // 09.11.12 + Eqvec__='['; + for I__=1:Order__-1 + Eqvec__=Eqvec__+Yname__+'('+string(I__+1)+');'; + end; + Eqvec__=Eqvec__+Fnrep__+']'; + Tmp1__='Outf=Dfn__('+Xname__+','+Yname__+')'; + Tmp2__='Outf='+Eqvec__; + deff(Tmp1__,Tmp2__); + Y0n__=[]; + for I__=1:size(Y0__,1) + Y0n__=[Y0n__;(-1)^(I__-1)*Y0__(I__)]; + end; + end; + if X0__<=X1__ + X__=X1__:dX__:X2__; + Y__=ode(Y0p__,X0__,X__,Dfp__); + M__=min(size(X__,2),size(Y__,2)); + if Dim__>1 + PL__=Y__'; + P__=PL__(1:M__,:); + else + P__=[X__(:,1:M__);Y__(1,1:M__)]'; + end; + return; + end; + if X2__<=X0__ + X__=(-X2__):dX__:(-X1__); + Y__=ode(Y0n__,-X0__,X__,Dfn__); + X__=-X__; + M__=min(size(X__,2),size(Y__,2)); + if Dim__>1 + PL__=Y__'; + P__=PL__(1:M__,:); + else + P__=[X__(:,1:M__);Y__(1,1:M__)]'; + end; + return; + end; + XP__=X0__:dX__:X2__; + YP__=ode(Y0p__,X0__,XP__,Dfp__); + M__=min(size(XP__,2),size(YP__,2)); + XP__=XP__(:,1:M__); + YP__=YP__(:,1:M__); + XN__=(-X0__)+dX__:dX__:(-X1__); + YN__=ode(Y0n__,-X0__,XN__,Dfn__); + M__=min(size(XN__,2),size(YN__,2)); + XN__=XN__(:,1:M__); + YN__=YN__(:,1:M__); + XN__=-XN__; + XN__=XN__(length(XN__):-1:1); + YN__=YN__(:,size(YN__,2):-1:1); + if Dim__>1 + P__=[YN__';YP__'] + else + X__=[XN__,XP__]; + Y__=[YN__(1,:),YP__(1,:)]; + P__=[X__;Y__]'; + end; +endfunction; |