This is chap1.m in view mode; [Download] [Up]
(* ********************************************************** COSY_PAK package chap1.m ********************************************************** *) If [ TrueQ[ $VersionNumber >= 2.0 ], Off[ General::spell ]; Off[ General::spell1 ] ] (* B E G I N P A C K A G E *) BeginPackage["COSYPAK`chap1`","Algebra`ReIm`", "SignalProcessing`Support`SigProc`", "SignalProcessing`Analog`LaPlace`", "SignalProcessing`Analog`InvLaPlace`", "SignalProcessing`Analog`LSolve`"]; ChekAnal::usage = "ChekAnal[Transf, s, r, w,showder]: Checks the analyticity of the transfer function Transf(s) at the point s=r+jw using Cauchy-Reimann conditions. If `showder=1' (optional) then the derivatives in the computation are shown. "; PoleZeros::usage = "PoleZeros[Transf, s]: Computes finite poles and zeros of the transfer function Transf . Returns {list of poles, list of zeros}. "; Begin["`Private`"]; (* Function to check the analyticity of the transfer function *) ChekAnal[Transf_,s_, r_,w_]:= ChekAnal[Transf,s, r,w,n] ; ChekAnal[Transf_,s_, r_,w_,showdrv_]:= Block[{g,greal,gimag,sol,dGrealr,dGrealw,dGimagr,dGimagw,poles}, r/:Im[r]=0; w/:Im[w]=0; g = ExpandAll[Transf/.s->(r + w I)]; greal = Simplify[Re[g]]; gimag = Simplify[Im[g]]; Print[" G(r + w I) = ", greal + I gimag ]; dGrealr = D[greal,r]; (* derive real part of G(r + w I) *) dGrealw = D[greal,w]; dGimagr = D[gimag,r]; (* derive imaginary part of G(r + w I) *) dGimagw = D[gimag,w]; (* Show the derivatives *) If[ showdrv==1, Print["The derivatives:"]; Print["d Re[G(r + w I)] /dr = ",Together[dGrealr] ]; Print["d Re[G(r + w I)] /dw = ",Together[dGrealw] ]; Print["d Im[G(r + w I)] /dr = ",Together[dGimagr] ]; Print["d Im[G(r + w I)] /dw = ",Together[dGimagw] ] ]; (* dGx/dsigma - dGy/domega *) If[ (Simplify[dGrealr-dGimagw] ==0) && (Simplify[dGrealw+dGimagr] ==0), poles = Solve[ Denominator[Simplify[Transf]] ==0, s]; Print[" "]; Print["The Transfer function G(s)= ", Transf," IS an analytical", " function except at the singulality points: ", s/.poles], Print["The Transfer function G(s)= ", Transf," IS NOT an analytical", " function."] ]; ]; (* Function list the zeros and poles of the transfer function *) PoleZeros[Transf_,s_]:= Block[{gg,gden,gnum}, gg = Simplify[Transf]; gden = Denominator[gg] ; gnum = Numerator[gg]; poles = N[Solve[gden ==0, s]]; zeros = N[Solve[gnum ==0, s]]; Print["The transfer function G(s)= ", Transf]; Print[" " ]; Print["The Poles of G(s) is:",s/.poles]; Print[" " ]; Print["The Zeros of G(s) is:",s/.zeros]; Return[{s/.poles,s/.zeros}] ]; End[] EndPackage[]; (* E N D P A C K A G E *) If [ TrueQ[ $VersionNumber >= 2.0 ], On[ General::spell ]; On[ General::spell1 ] ]
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.