home *** CD-ROM | disk | FTP | other *** search
/ Chip 2002 June / Chip_2002-06_cd1.bin / zkuste / derive / download / Setup.exe / %MAINDIR% / Users / Subst.mth < prev    next >
Encoding:
Text File  |  2002-05-15  |  2.3 KB  |  64 lines

  1. "== Equations System Solving by Substitution == SUBST.MTH == 30.03.00"
  2.  
  3. "Multiple Solutions Supported. Copyright(C) 2000 by Sergey V.Biryukov"
  4.  
  5. "                         Email: ciprel@cityline.ru  Subject:DERIVE  "
  6.  
  7. "Modified for DERIVE v.5.00                            See SUBST.DOC "
  8.  
  9. "******************** Use Only in EXACT Mode !!! ********************"
  10.  
  11. [Precision:=Exact,default1:=1]
  12.  
  13. ;Transpose matrix v even it is a matrix of equations.
  14. TRNSP(v):=IF(VECTOR?(v),IF(DIM(v)=1,IF(VECTOR?(v SUB 1),VECTOR([k],k,v SUB 1)~
  15. ,v),IF(VECTOR?(v SUB 1),VECTOR(VECTOR(v SUB j SUB i,j,DIM(v)),i,DIM(v SUB 1))~
  16. ,v)),v)
  17.  
  18. ;Substitute x=x0 in expr u. x & x0 - vectors or 1 column matrices of variables and its values. 
  19. SBST(u,x,x0):=ITERATE(u,APPEND(x),APPEND(x0),1)
  20.  
  21. ;Recursive function forward declaration
  22. SOLF1(m,vr,n,nmax):=
  23.  
  24. ;Solve Forward Mutual Recursive Declaration 1
  25. SOLF2(m,vr,n,nmax,ss):=VECTOR([ss SUB j_,LIM(m,vr SUB n,RHS(ss SUB j_)),SOLF1~
  26. (LIM(m,vr SUB n,RHS(ss SUB j_)),vr,nmax,n+1)],j_,DIM(ss))
  27.  
  28. ;Solve Forward Mutual Recursive Declaration 2
  29. SOLF1(m,vr,nmax,n):=IF(n=nmax,TRNSP([SOLVE(m SUB 1,vr SUB n)]),SOLF2(DELETE_E~
  30. LEMENT(m,1),vr,n,nmax,SOLVE(m SUB 1,vr SUB n)))
  31.  
  32. ;Solve Forward System m with respect to variables vr. Use default1 steps.
  33. SOLF(m,vr,default1):=SOLF1(m,APPEND(vr),IF(default1=1,DIM(m),default1),1)
  34.  
  35. APP(v):=IF(VECTOR?(v),IF(DIM(v)=1,v SUB 1,APPEND(v)),v)
  36.  
  37. ;Solve Back
  38. SOLB(u):=IF(VECTOR?(u SUB 1 SUB 2 SUB 1),APP(VECTOR(VECTOR(APPEND([SBST(k SUB~
  39.  1,LHS(t),RHS(t))],t),t,SOLB(k SUB 3)),k,u)),u)
  40.  
  41. ;Solve System m with respect to vr (variables)
  42. SOLVE_(m,vr):=TRNSP(SELECT(SBST(m,LHS(k_),RHS(k_)),k_,SOLB(SOLF(m,APPEND(vr))~
  43. )))
  44.  
  45. "======================== Examples =============================="
  46. ; Linear System
  47. SOLVE_([[2*a+3*b=8],[4*a+5*b=14],[6*a+7*b+8*c=44]],[[a],[b],[c]])=[[a=1],[b=2~
  48. ],[c=3]]
  49.  
  50. ; Linear System
  51. SOLVE_([[2*a+3*b=8],[4*a+5*b=14]],[[a],[b]])=[[a=1],[b=2]]
  52.  
  53. ;Nonlinear System
  54. SOLVE_([[c=a/b],[b-1=c],[2*c=a-2]],[[a],[b],[c]])=[[a=6],[b=3],[c=2]]
  55.  
  56. ;The same Nonlinear System, but different solve variables order.
  57. SOLVE_([[c=a/b],[b-1=c],[2*c=a-2]],[[b],[c],[a]])=[[b=3],[c=2],[a=6]]
  58.  
  59. ;The same Nonlinear System, but different solve variables order.
  60. SOLVE_([[c=a/b],[b-1=c],[2*c=a-2]],[[c],[a],[b]])=[[c=2],[a=6],[b=3]]
  61.  
  62. "========================= SUBST.MTH  END ==========================="
  63.  
  64.