home *** CD-ROM | disk | FTP | other *** search
- "File: ODE1.MTH (c) 01/10/90 Soft Warehouse, Inc."
-
- "ELEMENTARY METHODS FOR SOLVING 1ST-ORDER ORDINARY DIFFERENTIAL EQUATIONS."
-
- "Solves the separable ODE y' = p(x) q(y) for y(x0) = y0:"
-
- SEPARABLE(px,qy,x,y_,x0,y0):=INT(1/qy,y_,y0,y_)=INT(px,x,x0,x)
-
- "The ODE p(x,y) + q(x,y) y' = 0 is exact if following simplifies to 0:"
-
- EXACT_IF_0(pxy,qxy,x,y_):=DIF(pxy,y_)-DIF(qxy,x)
-
- "Solves the exact ODE p(x,y) + q(x,y) y' = 0 where dp/dy=dq/dx & y(x0)=y0:"
-
- EXACT(pxy,qxy,x,y_,x0,y0):=INT(pxy,x,x0,x)+INT(LIM(qxy,x,x0),y_,y0,y_)=0
-
- " Solve p(x,y) + q(x,y)y' =0, y(x0)=y0 with a known integrating factor mu:"
-
- USE_INTEG_FCTR(mu,pxy,qxy,x,y_,x0,y0):=EXACT(mu*pxy,mu*qxy,x,y_,x0,y0)
-
- "Solves the linear ODE y' + p(x) y = q(x):"
-
- LINEAR1(px,qx,x,y_,x0,y0):=USE_INTEG_FCTR(#e^INT(px,x),px*y_-qx,1,x,y_,x0,y0)
-
- "Solves the Bernoulli ODE y' + p(x) y = q(x) y^k:"
-
- BERNOULLI(px,qx,k,x,y_,x0,y0):=LIM(LINEAR1((1-k)*px,(1-k)*qx,x,y_,x0,y0),y_,y_~
- ^(1-k))
-
- "The ODE y' = r(x,y) is homogeneous if the following is free of x:"
-
- HOMOGENEOUS_IF_FREE_OF_X(rxy,x,y_):=LIM(rxy,y_,x*y_)
-
- "Solves the homogeneous ODE y' = r(x,y):"
-
- HOMOGENEOUS(rxy,x,y_,x0,y0):=LIM(SEPARABLE(1/x,LIM(rxy,x,1)-y_,x,y_,x0,y0/x0),~
- y_,y_/x)
-
- "ADVANCED METHODS FOR SOLVING 1ST-ORDER ORDINARY DIFFERENTIAL EQUATIONS."
-
- "Solves ODEs of the form y' = q (a x + b y + k), y(x0) = x0:"
-
- FUN_LIN_CCF(qxy,a,b,c,x,y_,x0,y0):=LIM(SEPARABLE(1,a+b*LIM(qxy,y_,(y_-a*x-c)/b~
- ),x,y_,x0,a*x0+b*y0+c),y_,a*x+b*y_+c)
-
- "An auxiliary function:"
-
- LIN_FRAC_AUX(rxy,h_,k_,x,y_,x0,y0):=LIM(LIM(HOMOGENEOUS(LIM(LIM(rxy,y_,y_+k_),~
- x,x+h_),x,y_,x0-h_,y0-k_),y_,y_-k_),x,x-h_)
-
- "Returns soln to y' = r((ax+by+c)/(sx+ty+d), y(x0)=y0, sa-eb /=0, cd /=0:"
-
- LIN_FRAC(rxy,a,b,c,s_,t_,d_,x,y_,x0,y0):=LIN_FRAC_AUX(rxy,(b*d_-c*t_)/(a*t_-b*~
- s_),(c*s_-a*d_)/(a*t_-b*s_),x,y_,x0,y0)
-
- "For pxy + qxy y' = 0, see if test result is free of x:"
-
- TEST_FREE_OF_X(pxy,qxy,x,y_):=(DIF(qxy,x)-DIF(pxy,y_))/pxy
-
- "Solves pxy + qxy y' = 0, y(x0) = y0 if above test result if free of x:"
-
- INTEG_FCTR_FREE_OF_X(test_result,pxy,qxy,x,y_,x0,y0):=USE_INTEG_FCTR(#e^INT(te~
- st_result,y_),pxy,qxy,x,y_,x0,y0)
-
- "For pxy + qxy y' = 0, see if test result is free of y:"
-
- TEST_FREE_OF_Y(pxy,qxy,x,y_):=(DIF(pxy,y_)-DIF(qxy,x))/qxy
-
- "Solves pxy + qxy 'y = 0, y(x0) = y0 if above test result if free of y:"
-
- INTEG_FCTR_FREE_OF_Y(test_result,pxy,qxy,x,y_,x0,y0):=USE_INTEG_FCTR(#e^INT(te~
- st_result,x),pxy,qxy,x,y_,x0,y0)
-
- "Two auxiliary functions:"
-
- TESTM2(v_,x,y_):=x^ELEMENT(v_,1)*y_^ELEMENT(v_,2)
-
- TESTM1(v_,x,y_):=TESTM2(ELEMENT(ROW_REDUCE([LIM(LIM(v_,y_,5),x,2), LIM(LIM(v_,~
- y_,3),x,7)])`,3),x,y_)
-
- "A result of form x^m y^n is an integrating factor for pxy + qxy y' = 0:"
-
- TEST_MONOMIAL(pxy,qxy,x,y_):=TESTM1([y_*qxy, -x*pxy, x*y_*(DIF(pxy,y_)-DIF(qxy~
- ,x))],x,y_)
-
- "Returns k free of x & y if ODE y'=r(x,y)=h(yx^k)y/x is gen.-homogeneous:"
-
- GEN_HOM_IF_CONST(rxy,x,y_):=x*DIF(x*rxy/y_,x)/(y_*DIF(x*rxy/y_,y_))
-
- "For k=GEN_HOM_IF_CONST(...), solves the gen hom ODE y'=r(x,y)=h(yx^k)y/x:"
-
- GEN_HOM(rxy,k_,x,y_,x0,y0):=LIM(SEPARABLE(1/x,y_*(k_+LIM(rxy*x/y_,y_,y_/x^k_))~
- ,x,y_,x0,y0*x0^k_),y_,y_*x^k_)
-
- "r(x,y)y' + p(x)h(y) = q(x) is almost lin if returned value is free of y:"
-
- ALMOST_LIN_IF_FREE_OF_X(rxy,hy,y_):=DIF(hy,y_)/rxy
-
- "Returns soln to almost-linear r(x,y)y' + p(x)h(y) = q(x), y(x0)=y0:"
-
- ALMOST_LIN(rxy,hy,px,qx,x,y_,x0,y0):=LIM(LINEAR1(px*DIF(hy,y_)/rxy,qx*DIF(hy,y~
- _),x,y_,x0,LIM(hy,y_,y0)),y_,hy)
-
- "Returns vect with gen soln to f(x v - y) = g(v), and an eqn that you can"
-
- " solve for v to substitute into the ODE to get a singular solution."
-
- " Variable v represents y'."
-
- "eg: CLAIRAUT((x v - y)^2, v^2+1, x,y,v) helps solve (x y' - y)^2 =y'^2+1."
-
- CLAIRAUT(fxvy,gv,x,y_,v_):=[LIM(fxvy=gv,v_,@1), x*LIM(DIF(LIM(fxvy,y_,x*v_-y_)~
- ,y_),y_,x*v_-y_)=DIF(gv,v_)]
-
- "Given y=r(x,v) where v denotes dy/dx, returns expr for dv/dx."
-
- "If you can solve that ODE for v(x), then substitute into r to get y:"
-
- SOLVABLE_Y(rxv,x,v_):=(v_-DIF(rxv,x))/DIF(rxv,v_)
-
- "Given x=r(y,v) where variable v denotes dy/dx, returns expr for dv/dy."
-
- "If you can solve that ODE for v(y), then substitute into r to get x(y):"
-
- SOLVABLE_X(ryv,y_,v_):=(1-v_*DIF(ryv,y_))/(v_*DIF(ryv,v_))
-
- "Three auxiliary functions:"
-
- LIM_2(uxy,x,x0,y_,y0):=LIM(LIM(uxy,y_,y0),x,x0)
-
- 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,~
- x)+r1*DIF(r3,y_),x,x0,y_,y0)/4!
-
- 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~
- IF(r2,y_),x,y_,x0,y0)
-
- "Returns 4th-degree truncated Taylor-series soln to y'=r(x,y), y(x0)=y0:"
-
- "If you wish, write TAYn, TAYn-1, .. TAY4 & revise TAY3 by above pattern."
-
- TAY_ODE1(rxy,x,y_,x0,y0):=y0+(x-x0)*LIM_2(rxy,x,x0,y_,y0)+TAY2(rxy,DIF(rxy,x)+~
- rxy*DIF(rxy,y_),x,y_,x0,y0)
-
- "Given approx soln yprev to y'=r(x,y), y(x0)=y0, returns improved approx:"
-
- "It may help to use y0 as 1st approx & TAYLOR on rxy &/or iterates:"
-
- PICARD(rxy,yprev,x,y_,x0,y0):=y0+INT(LIM(rxy,y_,yprev),x,x0,x)
-