home *** CD-ROM | disk | FTP | other *** search
/ Piper's Pit BBS/FTP: ibm 0010 - 0019 / ibm0010-0019 / ibm0010.tar / ibm0010 / DERIVE.ZIP / ODE1.MTH < prev    next >
Encoding:
Text File  |  1990-01-12  |  5.0 KB  |  150 lines

  1. "File:  ODE1.MTH   (c)          01/10/90        Soft Warehouse, Inc."
  2.  
  3. "ELEMENTARY METHODS FOR SOLVING 1ST-ORDER ORDINARY DIFFERENTIAL EQUATIONS."
  4.  
  5. "Solves the separable ODE  y' = p(x) q(y)  for  y(x0) = y0:"
  6.  
  7. SEPARABLE(px,qy,x,y_,x0,y0):=INT(1/qy,y_,y0,y_)=INT(px,x,x0,x)
  8.  
  9. "The ODE  p(x,y) + q(x,y) y' = 0 is exact if following simplifies to 0:"
  10.  
  11. EXACT_IF_0(pxy,qxy,x,y_):=DIF(pxy,y_)-DIF(qxy,x)
  12.  
  13. "Solves the exact ODE  p(x,y) + q(x,y) y' = 0  where dp/dy=dq/dx & y(x0)=y0:"
  14.  
  15. EXACT(pxy,qxy,x,y_,x0,y0):=INT(pxy,x,x0,x)+INT(LIM(qxy,x,x0),y_,y0,y_)=0
  16.  
  17. " Solve  p(x,y) + q(x,y)y' =0, y(x0)=y0 with a known integrating factor mu:"
  18.  
  19. USE_INTEG_FCTR(mu,pxy,qxy,x,y_,x0,y0):=EXACT(mu*pxy,mu*qxy,x,y_,x0,y0)
  20.  
  21. "Solves the linear ODE  y' + p(x) y = q(x):"
  22.  
  23. LINEAR1(px,qx,x,y_,x0,y0):=USE_INTEG_FCTR(#e^INT(px,x),px*y_-qx,1,x,y_,x0,y0)
  24.  
  25. "Solves the Bernoulli ODE  y' + p(x) y = q(x) y^k:"
  26.  
  27. BERNOULLI(px,qx,k,x,y_,x0,y0):=LIM(LINEAR1((1-k)*px,(1-k)*qx,x,y_,x0,y0),y_,y_~
  28. ^(1-k))
  29.  
  30. "The ODE  y' = r(x,y) is homogeneous if the following is free of x:"
  31.  
  32. HOMOGENEOUS_IF_FREE_OF_X(rxy,x,y_):=LIM(rxy,y_,x*y_)
  33.  
  34. "Solves the homogeneous ODE  y' = r(x,y):"
  35.  
  36. HOMOGENEOUS(rxy,x,y_,x0,y0):=LIM(SEPARABLE(1/x,LIM(rxy,x,1)-y_,x,y_,x0,y0/x0),~
  37. y_,y_/x)
  38.  
  39. "ADVANCED METHODS FOR SOLVING 1ST-ORDER ORDINARY DIFFERENTIAL EQUATIONS."
  40.  
  41. "Solves ODEs of the form y' = q (a x + b y + k),  y(x0) = x0:"
  42.  
  43. FUN_LIN_CCF(qxy,a,b,c,x,y_,x0,y0):=LIM(SEPARABLE(1,a+b*LIM(qxy,y_,(y_-a*x-c)/b~
  44. ),x,y_,x0,a*x0+b*y0+c),y_,a*x+b*y_+c)
  45.  
  46. "An auxiliary function:"
  47.  
  48. LIN_FRAC_AUX(rxy,h_,k_,x,y_,x0,y0):=LIM(LIM(HOMOGENEOUS(LIM(LIM(rxy,y_,y_+k_),~
  49. x,x+h_),x,y_,x0-h_,y0-k_),y_,y_-k_),x,x-h_)
  50.  
  51. "Returns soln to y' = r((ax+by+c)/(sx+ty+d), y(x0)=y0, sa-eb /=0, cd /=0:"
  52.  
  53. LIN_FRAC(rxy,a,b,c,s_,t_,d_,x,y_,x0,y0):=LIN_FRAC_AUX(rxy,(b*d_-c*t_)/(a*t_-b*~
  54. s_),(c*s_-a*d_)/(a*t_-b*s_),x,y_,x0,y0)
  55.  
  56. "For  pxy + qxy y' = 0, see if test result is free of x:"
  57.  
  58. TEST_FREE_OF_X(pxy,qxy,x,y_):=(DIF(qxy,x)-DIF(pxy,y_))/pxy
  59.  
  60. "Solves  pxy + qxy y' = 0,  y(x0) = y0  if above test result if free of x:"
  61.  
  62. INTEG_FCTR_FREE_OF_X(test_result,pxy,qxy,x,y_,x0,y0):=USE_INTEG_FCTR(#e^INT(te~
  63. st_result,y_),pxy,qxy,x,y_,x0,y0)
  64.  
  65. "For  pxy + qxy y' = 0, see if test result is free of y:"
  66.  
  67. TEST_FREE_OF_Y(pxy,qxy,x,y_):=(DIF(pxy,y_)-DIF(qxy,x))/qxy
  68.  
  69. "Solves  pxy + qxy 'y = 0,  y(x0) = y0  if above test result if free of y:"
  70.  
  71. INTEG_FCTR_FREE_OF_Y(test_result,pxy,qxy,x,y_,x0,y0):=USE_INTEG_FCTR(#e^INT(te~
  72. st_result,x),pxy,qxy,x,y_,x0,y0)
  73.  
  74. "Two auxiliary functions:"
  75.  
  76. TESTM2(v_,x,y_):=x^ELEMENT(v_,1)*y_^ELEMENT(v_,2)
  77.  
  78. TESTM1(v_,x,y_):=TESTM2(ELEMENT(ROW_REDUCE([LIM(LIM(v_,y_,5),x,2), LIM(LIM(v_,~
  79. y_,3),x,7)])`,3),x,y_)
  80.  
  81. "A result of form x^m y^n is an integrating factor for pxy + qxy y' = 0:"
  82.  
  83. TEST_MONOMIAL(pxy,qxy,x,y_):=TESTM1([y_*qxy, -x*pxy, x*y_*(DIF(pxy,y_)-DIF(qxy~
  84. ,x))],x,y_)
  85.  
  86. "Returns k free of x & y if ODE y'=r(x,y)=h(yx^k)y/x is gen.-homogeneous:"
  87.  
  88. GEN_HOM_IF_CONST(rxy,x,y_):=x*DIF(x*rxy/y_,x)/(y_*DIF(x*rxy/y_,y_))
  89.  
  90. "For k=GEN_HOM_IF_CONST(...), solves the gen hom ODE y'=r(x,y)=h(yx^k)y/x:"
  91.  
  92. GEN_HOM(rxy,k_,x,y_,x0,y0):=LIM(SEPARABLE(1/x,y_*(k_+LIM(rxy*x/y_,y_,y_/x^k_))~
  93. ,x,y_,x0,y0*x0^k_),y_,y_*x^k_)
  94.  
  95. "r(x,y)y' + p(x)h(y) = q(x) is almost lin if returned value is free of y:"
  96.  
  97. ALMOST_LIN_IF_FREE_OF_X(rxy,hy,y_):=DIF(hy,y_)/rxy
  98.  
  99. "Returns soln to almost-linear  r(x,y)y' + p(x)h(y) = q(x),  y(x0)=y0:"
  100.  
  101. ALMOST_LIN(rxy,hy,px,qx,x,y_,x0,y0):=LIM(LINEAR1(px*DIF(hy,y_)/rxy,qx*DIF(hy,y~
  102. _),x,y_,x0,LIM(hy,y_,y0)),y_,hy)
  103.  
  104. "Returns vect with gen soln to  f(x v - y) = g(v), and an eqn that you can"
  105.  
  106. " solve for v to substitute into the ODE to get a singular solution."
  107.  
  108. " Variable v represents y'."
  109.  
  110. "eg: CLAIRAUT((x v - y)^2, v^2+1, x,y,v) helps solve (x y' - y)^2 =y'^2+1."
  111.  
  112. CLAIRAUT(fxvy,gv,x,y_,v_):=[LIM(fxvy=gv,v_,@1), x*LIM(DIF(LIM(fxvy,y_,x*v_-y_)~
  113. ,y_),y_,x*v_-y_)=DIF(gv,v_)]
  114.  
  115. "Given  y=r(x,v)  where v denotes dy/dx, returns expr for dv/dx."
  116.  
  117. "If you can solve that ODE for v(x), then substitute into r to get y:"
  118.  
  119. SOLVABLE_Y(rxv,x,v_):=(v_-DIF(rxv,x))/DIF(rxv,v_)
  120.  
  121. "Given  x=r(y,v)  where variable v denotes dy/dx, returns expr for dv/dy."
  122.  
  123. "If you can solve that ODE for v(y), then substitute into r to get x(y):"
  124.  
  125. SOLVABLE_X(ryv,y_,v_):=(1-v_*DIF(ryv,y_))/(v_*DIF(ryv,v_))
  126.  
  127. "Three auxiliary functions:"
  128.  
  129. LIM_2(uxy,x,x0,y_,y0):=LIM(LIM(uxy,y_,y0),x,x0)
  130.  
  131. TAY3(r1,r3,x,y_,x0,y0):=(x-x0)^3*LIM_2(r3,x,x0,y_,y0)/6+(x-x0)^4*LIM_2(DIF(r3,~
  132. x)+r1*DIF(r3,y_),x,x0,y_,y0)/4!
  133.  
  134. TAY2(r1,r2,x,y_,x0,y0):=(x-x0)^2*LIM_2(r2,x,x0,y_,y0)/2+TAY3(r1,DIF(r2,x)+r1*D~
  135. IF(r2,y_),x,y_,x0,y0)
  136.  
  137. "Returns 4th-degree truncated Taylor-series soln to y'=r(x,y), y(x0)=y0:"
  138.  
  139. "If you wish, write TAYn, TAYn-1, .. TAY4 & revise TAY3 by above pattern."
  140.  
  141. TAY_ODE1(rxy,x,y_,x0,y0):=y0+(x-x0)*LIM_2(rxy,x,x0,y_,y0)+TAY2(rxy,DIF(rxy,x)+~
  142. rxy*DIF(rxy,y_),x,y_,x0,y0)
  143.  
  144. "Given approx soln yprev to y'=r(x,y), y(x0)=y0, returns improved approx:"
  145.  
  146. "It may help to use y0 as 1st approx & TAYLOR on rxy &/or iterates:"
  147.  
  148. PICARD(rxy,yprev,x,y_,x0,y0):=y0+INT(LIM(rxy,y_,yprev),x,x0,x)
  149.  
  150.