{VERSION 5 0 "SUN SPARC SOLARIS" "5.0" } {USTYLETAB {CSTYLE "Maple Input" -1 0 "Courier" 0 1 255 0 0 1 0 1 0 0 1 0 0 0 0 1 }{CSTYLE "2D Math" -1 2 "Times" 0 1 0 0 0 0 0 0 2 0 0 0 0 0 0 1 }{CSTYLE "2D Comment" 2 18 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 } {CSTYLE "" -1 256 "" 1 14 0 0 0 0 0 1 0 0 0 0 0 0 0 1 }{CSTYLE "" -1 257 "" 1 14 0 0 0 0 0 1 0 0 0 0 0 0 0 1 }{CSTYLE "" -1 258 "" 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 1 }{PSTYLE "Normal" -1 0 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 } {PSTYLE "Maple Output" 0 11 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 }3 3 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "Maple Plot" 0 13 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 }3 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 0 256 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 }3 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 0 257 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 }3 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 0 258 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 }3 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE " " 0 259 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }3 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 0 260 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }3 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 0 261 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }3 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 0 262 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }3 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 0 263 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }3 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 0 264 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }3 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 13 265 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }1 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }} {SECT 0 {PARA 256 "" 0 "" {TEXT 256 11 "Math 2280-1" }}{PARA 257 "" 0 "" {TEXT 257 57 "Numerical Solutions to first order Differential Equat ions" }}{PARA 258 "" 0 "" {TEXT -1 16 "January 25, 2006" }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 111 " You should dow nload this file from our Math 2280 homework or lecture page, or by dir ectly opening the URL " }}{PARA 263 "" 0 "" {TEXT -1 63 " http://www.m ath.utah.edu/~korevaar/2280spring06/numerical1.mws" }}{PARA 0 "" 0 "" {TEXT -1 128 "from Maple. It contains discussion and Maple commands w hich will help you answer your first Maple project questions, located \+ at" }}{PARA 264 "" 0 "" {TEXT -1 62 "http://www.math.utah.edu/~korevaa r/2280spring06/proj1probs.mws" }}{PARA 0 "" 0 "" {TEXT -1 617 " In this handout we will study numerical methods for approximating soluti ons to first order differential equations. We will see soon how highe r order differential equations can be converted into first order syste ms of differential equations. It turns out that there is a natural w ay to generalize what we do here in the context of a single first orde r differential equations, to systems of first order differential equat ions. So understanding this project material will be an important st ep in understanding numerical solutions to higher order differential e quations and to systems of differential equations." }}{PARA 0 "" 0 "" {TEXT -1 75 " We will be working through material from sections 2. 4-2.6 of the text." }}{PARA 0 "" 0 "" {TEXT -1 1041 " The most bas ic method of approximating solutions to differential equations is call ed Euler's method, after the 1700's mathematician who first formulated it. If you want to approximate the solution to the initial value pro blem dy/dx = f(x,y), y(x0)=y0, first pick a step size ``h''. Then for x between x0 and x0+h, use the constant slope f(x0,y0). At x-value x 1:=x0+h your y-value will therefore be y1:=y0 + f(x0,y0)h. Then for x between x1 and x1+h you use the constant slope f(x1,y1), so that at x 2:=x1+h your y-value is y2:=y1+f(x1,y1)h. You continue in this manner . It is easy to visualize if you understand the slope field concept w e've been talking about; you just use the slope field with finite rath er than infinitesimal stepping in the x-variable. You use the value o f the slope field at your current point to get a slope which you then \+ use to move to the next point. It is straightforward to have the comp uter do this sort of tedious computation for you. In Euler's time suc h computations would have been done by hand!" }}{PARA 0 "" 0 "" {TEXT -1 1 " " }{TEXT 258 1 " " }{TEXT -1 131 " A good first example to il lustrate Euler's method is our favorite DE from the time of Calculus, \+ namely the initial value problem" }}{PARA 261 "" 0 "" {XPPEDIT 18 0 "d y/dx = y;" "6#/*&%#dyG\"\"\"%#dxG!\"\"%\"yG" }{TEXT -1 0 "" }}{PARA 262 "" 0 "" {XPPEDIT 18 0 "y(0) = 1;" "6#/-%\"yG6#\"\"!\"\"\"" }{TEXT -1 1 "." }}{PARA 0 "" 0 "" {TEXT -1 14 "We know that " }{XPPEDIT 18 0 "y = exp(x);" "6#/%\"yG-%$expG6#%\"xG" }{TEXT -1 496 " is the soluti on. Let's take h=0.2 and try to approximate the solution on the x-inte rval [0,1]. Since the approximate solution will be piecewise affine, \+ we only need to know the approximations at the discrete x values x=0,0 .2,0.4,0.6,0.8,1. I've drawn a picture on the next page with appoxima ted (x,y) points and the exact the solution graph. Use the empty spac e to fill in the hand-computations which produce these y values and po ints. Then compare to the ``do loop'' computation on page 3:" }} {PAGEBK }{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 259 "" 0 "" {GLPLOT2D 298 257 257 {PLOTDATA 2 "6'-%'POINTSG6(7$$\"\"!F($\"#5!\"\"7$$\"+++++? !#5$\"+++++7!\"*7$$\"+++++SF/$\"++++S9F27$$\"+++++gF/$\"++++G$\"3)y_2wWO?-\"!#<7$$\"3[LL$e9ui2%FQ$\"3aNdbY\\gT5F T7$$\"3nmmm\"z_\"4iFQ$\"3#=fT9tfS1\"FT7$$\"3[mmmT&phN)FQ$\"3;Hr`&G_r3 \"FT7$$\"3BLLe*=)H\\5!#=$\"3L^LEiEj56FT7$$\"3fmm\"z/3uC\"Fao$\"3q]yZ%y aG8\"FT7$$\"3%)***\\7LRDX\"Fao$\"3')oPGkJLc6FT7$$\"3]mm\"zR'ok;Fao$\"3 -Am\"\\\\E6=\"FT7$$\"3v***\\i5`h(=Fao$\"36)e/'[$pj?\"FT7$$\"3WLLL3En$4 #Fao$\"3]RSV5x*GB\"FT7$$\"3pmm;/RE&G#Fao$\"3)>3j2pYnD\"FT7$$\"3\")**** *\\K]4]#Fao$\"3Sm9jYu9%G\"FT7$$\"3$******\\PAvr#Fao$\"3%*p#e<$=E78FT7$ $\"3)******\\nHi#HFao$\"3PYw>&\\P*R8FT7$$\"3jmm\"z*ev:JFao$\"3@KG01]dl 8FT7$$\"3?LLL347TLFao$\"3?9H.#p*p'R\"FT7$$\"3+LLLLY.KNFao$\"35Lbfo2iB9 FT7$$\"3v***\\7o7Tv$Fao$\"3\"ouv#H**eb9FT7$$\"3&GLLLQ*o]RFao$\"3r1/UDl [%[\"FT7$$\"3@++D\"=lj;%Fao$\"3\\;8&[1^o^\"FT7$$\"31++vV&R'=e\"FT7$$\"3GLLeR\"3Gy%Fao$ \"3+.c]c%)H8;FT7$$\"3cmm;/T1&*\\Fao$\"3#**eh)zw!zk\"FT7$$\"3%em;zRQb@& Fao$\"3G,G!GGVYo\"FT7$$\"3[***\\(=>Y2aFao$\"3L6+U5yG<jrpbKv\"FT7$$\"3k******\\y))GeFao$\"33!=v7P07z\"FT7$$\"3'*) ***\\i_QQgFao$\"3XOlB#\\E\"H=FT7$$\"3@***\\7y%3TiFao$\"3*)eT_<6em=FT7$ $\"35****\\P![hY'Fao$\"3DV)H1Jn!4>FT7$$\"3jKLL$Qx$omFao$\"3uZcmrs1[>FT 7$$\"3!)*****\\P+V)oFao$\"39RAPIze!*>FT7$$\"3?mm\"zpe*zqFao$\"3hLeRd*= *H?FT7$$\"3%)*****\\#\\'QH(Fao$\"3zh'*f?z!Q2#FT7$$\"3GKLe9S8&\\(Fao$\" 3^**33Q,(f6#FT7$$\"3R***\\i?=bq(Fao$\"3m>.C'Qe4;#FT7$$\"3\"HLL$3s?6zFa o$\"3C(p,G?ne?#FT7$$\"3a***\\7`Wl7)Fao$\"3EvYezG)QD#FT7$$\"3#pmmm'*RRL )Fao$\"3^8U**za6,BFT7$$\"3Qmm;a<.Y&)Fao$\"3+^n_#[T/N#FT7$$\"3KS+CFT7$$\"3t******\\Qk\\*)Fao$\"3t&G]\"H'[sW#FT7$$\"3CL L$3dg6<*Fao$\"3bh$4Z;k?]#FT7$$\"3HmmmmxGp$*Fao$\"3d[Xr/78_DFT7$$\"3A++ D\"oK0e*Fao$\"3j4')HYrh1EFT7$$\"3A++v=5s#y*Fao$\"3!*=xB3j&)fEFT7$FL$\" 3`X!f%G=G=FFT-%'COLOURG6&%$RGBGF(F(F(-%+AXESLABELSG6$Q\"t6\"Q!Fa]l-%&T ITLEG6#%Fapproximate|+and~exact~solution~graphsG-%%VIEWG6$;F'FL%(DEFAU LTG" 1 2 0 1 10 0 2 9 1 4 2 1.000000 45.000000 45.000000 0 0 "Curve 1 " "Curve 2" }}{TEXT -1 0 "" }}{PAGEBK }{PARA 0 "" 0 "" {TEXT -1 34 "He re is the automated computation:" }}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 46 "restart: #clear any memory from earlier work " }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 150 "x0:=0.0; xn:=1.0; y0:=1.0; n:=5; h :=(xn-x0)/n; \n # specify initial\n # values, number of steps, st ep size. " }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 100 "f:=(x,y)->y; \n #this is the \"slope\" \+ function f(x,y) \n #in dy/dx = f(x,y). We want dy/dx = y." }}} {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 47 "x:=x0; y:=y0; #initialize \+ x,y for the do loop" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 338 "for i from 1 to n do\n k:= f(x,y): #current slope,use: to suppr ess output\n y:= y + h*k: #new y value via Euler\n x := x + h: #updated x-value:\n print(x,y,exp(x)); \n \+ #display current values, \n #and compare to exact solu tion.\n od: \n #``od'' ends a do loop " }}} {PARA 0 "" 0 "" {TEXT -1 331 "Notice your approximations are all a lit tle too small, in particular your final approximation 2.488... is shor t of the exact value of exp(1)=e=2.71828.. The reason for this is tha t because of the form of our f(x,y) our approximate slope is always le ss than the actual slope should be. You can also see this on the page two graph." }}{PARA 0 "" 0 "" {TEXT -1 44 " The following command c reated that graph:" }}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 56 "with(p lots):with(linalg): #to plot and do linear algebra" }}}{PARA 0 "" 0 " " {TEXT -1 0 "" }}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 36 "n:=5:h:=1/ n:x0:=0:y0:=1: #initialize" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 68 "xval:=vector(n+1);yval:=vector(n+1); \n #to collect all our poi nts" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 52 "xval[1]:=x0; yval[1] :=y0; \n #initial values" }}}{PARA 11 "" 1 "" {TEXT -1 0 "" } }{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 369 " #paste in the previous w ork, and modify to store\n #all values in an array:\nfor i from 1 to \+ n do\n x:=xval[i]: #current x\n y:=yval[i]: #curre nt y\n k:= f(x,y): #current slope\n yval[i+1]:= y + h*k: #new y value via Euler\n xval[i+1]:= x + h: #upda ted x-value:\n od: #``od'' ends a do loop \+ " }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 57 "approxsol:=pointplot( \{seq([xval[i],yval[i]], i=1..n+1)\}):" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 95 "exactsol:=plot(exp(t),t=0..1,`color`=`black`): \n \+ #used t because x was already used above" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 76 "display(\{approxsol,exactsol\},title=`approximate \nand exact solution graphs`);" }}}{PARA 265 "" 1 "" {TEXT -1 425 " \+ It should be that as your step size ``h'' gets smaller, your approxim ations get better to the actual solution. This is true if your comput er can do exact math (which it can't), but in practice you don't want \+ to make the computer do too many computations because of problems with round-off error and computation time, so for example, choosing h=0.00 00001 would not be practical. But, trying h=0.01 should be instructive .\n" }}{PARA 0 "" 0 "" {TEXT -1 93 "If we change the n-value to 100 an d keep the other data the same we can rerun our experiment:" }}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 62 "x0:=0.0; xn:=1.0; y0:=1.0; n:=100; \+ h:=(xn-x0)/n;\nx:=x0; y:=y0;" }}}{PARA 11 "" 1 "" {TEXT -1 0 "" }} {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 591 "for i from 1 to n do\n \+ k:= f(x,y): #current slope\n y:= y + h*k: #new y value \+ via Euler\n x:= x + h: #updated x-value:\n if frac (i/10)=0\n then print(x,y,exp(x));\n fi; #use \+ the ``if'' test to decide when to print;\n #the command \+ ``frac'' computes the remainder \n #of a quotient, it wi ll be zero for us if i \n #is a multiple of 10. This way we only print\n #the approximations every 0.1 increment s, even\n #though our actual time step is 0.01.\n od: " }}}{PARA 0 "" 0 "" {TEXT -1 270 " So you can see we \+ got closer to the actual value of e, but really, considering how much \+ work we did this was not a great result. We can make a picture of wha t we did as follows, using the mouse to cut and paste previous work, a nd then editing it for the new situation:" }}{PAGEBK }{PARA 0 "" 0 "" {TEXT -1 0 "" }}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 33 "restart:with (plots):with(linalg):" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 487 " \nf:=(x,y)->y;\nn:=100; x0:=0.0; y0:=1.0;\nxn:=1.0; h:=(xn-x0)/n;\nxva l:=vector(n+1);yval:=vector(n+1); \n #to collect all our points. No w n=100\nxval[1]:=x0; yval[1]:=y0; \n #initial values\nfor i \+ from 1 to n do\n x:=xval[i]: #current x\n y:=yval[i ]: #current y\n k:= f(x,y): #current slope\n yval[ i+1]:= y + h*k: #new y value via Euler\n xval[i+1]:= x + h: #updated x-value:\n od: #``od'' ends \+ a do loop " }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 184 "approxsol2: =pointplot(\{seq([xval[i],yval[i]], i=1..n+1)\}):\nexactsol:=plot(exp( t),t=0..1,`color`=`red`): \n #used t because x was already used \+ above\ndisplay(\{approxsol2,exactsol\});" }}}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 522 " In more complicated problems it is a very serious issue to find relatively efficient ways of appro ximating solutions. An entire field of mathematics, ``numerical analy sis'' deals with such issues for a variety of mathematical problems. \+ The book talks about some improvements to Euler in sections 2.5 and \+ 2.6, in particular it discusses improved Euler, and Runge Kutta. Rung e Kutta-type codes are actually used in commerical numerical packages, e.g. in Maple. Next, let's summarize some highlights from 2.5-2.6. " }}{PAGEBK }{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 99 " For any time step h the fundamental theorem of calculus asser ts that, since dy/dx = f(x,y(x))," }}{PARA 260 "" 0 "" {XPPEDIT 18 0 " y(x+h) = y(x)+Int(f(t,y(t)),t = x .. `x+h`);" "6#/-%\"yG6#,&%\"xG\"\" \"%\"hGF),&-F%6#F(F)-%$IntG6$-%\"fG6$%\"tG-F%6#F4/F4;F(%$x+hGF)" } {TEXT -1 1 "." }}{PARA 0 "" 0 "" {TEXT -1 818 "The problem with Euler \+ is that we always approximated this integral by h*f(x,y(x)), i.e. we u sed the left-hand endpoint as our approximation of the ``average heigh t''. The improvements to Euler depend on better approximations to tha t integral. These are subtle, because we don't yet have an approximat ion for y(t) when t is greater than x, so also not for the integrand. \+ ``Improved Euler'' uses an approximation to the Trapezoid Rule to app roximate the integral. Recall, the trapezoid rule for this integral a pproximation would be (1/2)*h*(f(x,y(x))+f((x+h),y(x+h)). Since we do n't know y(x+h) we approximate it using unimproved Euler, and then fee d that into the trapezoid rule. This leads to the improved Euler do l oop below. Of course before you use it you must make sure you initial ize everything correctly." }}{PARA 0 "" 0 "" {TEXT -1 1 " " }}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 33 "x:=x0; y:=y0; n:=5; h:=(xn-x0)/n;" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 292 "for i from 1 to n do\n \+ k1:=f(x,y): #left-hand slope\n k2:=f(x+h,y+h*k1): #app roximation to right-hand slope\n k:= (k1+k2)/2: #approximatio n to average slope\n y:= y+h*k: #improved Euler update\n x:= x+h: #update x\n print(x,y,exp(x));\nod: " }} {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}}{PARA 0 "" 0 "" {TEXT -1 82 "No tice you almost did as well with n=5 as you did with n=100 in unimprov ed Euler. " }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 337 " One can also use Taylor a pproximation methods to improve upon Euler; by differentiating the equ ation dy/dx = f(x,y) one can solve for higher order derivatives of y i n terms of the lower order ones, and then use the Taylor approximation for y(x+h) in terms of y(x). See the book for more details of this m ethod, we won't do it here." }}{PARA 0 "" 0 "" {TEXT -1 681 " In t he same vein as ``improved Euler'' we can use the Simpson approximatio n for the integral instead of the Trapezoid one, and this leads to the Runge-Kutta method. (You may or may not have talked about Simpson's \+ Rule in Calculus, it is based on a quadratic approximation to the func tion f, whereas the Trapezoid rule is based on a first order approxima tion.) Here is the code for the Runge-Kutta method. The text explain s it in section 2.6. Simpson's rule approximates an integral in terms of the integrand values at each endpoint and at the interval midpoint . Runge-Kutta uses two different approximations for the midpoint valu e y(x+h/2) to plug into f(x+h/2,y(x+h/2))." }}{PARA 0 "" 0 "" {TEXT -1 90 " Before you use the loop on the next page you must initiali ze your values, as before. " }}{PAGEBK }{PARA 0 "" 0 "" {TEXT -1 1 " \+ " }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 0 "" }} {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 33 "x:=x0; y:=y0; n:=5; h:=(xn-x 0)/n;" }}}{PARA 11 "" 1 "" {TEXT -1 0 "" }}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 458 "for i from 1 to n do\n k1:=f(x,y): # left-hand slope\n k2:=f(x+h/2,y+h*k1/2): #1st guess at midpoint s lope\n k3:=f(x+h/2,y+h*k2/2): #second guess at midpoint slope\n \+ k4:=f(x+h,y+h*k3): #guess at right-hand slope\n k:=(k1+2*k2 +2*k3+k4)/6: #Simpson's approximation for the integral\n x:=x+h: \+ #x update\n y:=y+h*k: #y update\n \+ print(x,y,exp(x)); #display current values\n od: " }} {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}}{PARA 0 "" 0 "" {TEXT -1 74 "Notice how close Run ge-Kutta gets you to the correct value of e, with n=5!" }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 292 " As we know, solu tions to non-linear DE's can blow up, and there are other interesting \+ pathologies as well, so if one is doing numerical solutions there is a real need for care. The text has a number of examples of this, and t here are a couple of related problems in your project as well. " }} {PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}} {MARK "77" 0 }{VIEWOPTS 1 1 0 1 1 1803 1 1 1 1 }{PAGENUMBERS 0 1 2 33 1 1 }