#Dr. Gustafson, #I am in your 2250-4 class and am continually struggling with the codes for #the problems in section 2.4, 2.5, and 2.6. Actually 2.5 (Improved Euler) #seems to be going pretty well, but I can't get very good results for 2.4 #(Euler) or 2.6 (Runge-Kutta Idea). Is there a web site where I may be able #to find help and/or codes on these sections, as nothing I type in for my #codes will seem to work? Thanks for your time. # ========================================= # Can't copy with the mouse? Work-arounds: # ======================================== # Try first: hold down SHIFT and then hit the paste button on # the mouse. Usually needed from xterm windows and firefox to other # edit windows and browser forms. # # If pasting into Xmaple, then try just the mouse paste button. It # might work. For some systems, ctrl-V will perform the paste. # # Lastly: Run the application "xclipboard &" to capture mouse copies. # Keep xclipboard near the xmaple window. Go to the browser window, # copy with the mouse. Switch to the xclipboard window. Copy with # the mouse from the xclipboard. Then paste with mouse button 2 or # mouse button 3 into xmaple. # ========================================= # Maple code doesn't work? Read this: # ======================================== # To type in a group, hold shift then press return, except # for the last line of group, in which case use just return. # If you copy multiple groups with the mouse, then split # them using key F3 with the cursor placed at the front of # a line where the split is to happen. # Warning: These snips of code made for y'=1-x-y, y(0)=3. # Code computes approx values for y(0.1) to y(1.0). # 'Dots' is the list of dots for connect-the-dots graphics. # ======================================== # Euler. Group 1, initialize. f:=(x,y)->1-x-y: x0:=0:y0:=3:h:=0.1:Dots:=[x0,y0]:n:=10: # Group 2, repeat n times. Euler's method for i from 1 to n do Y:=y0+h*f(x0,y0); x0:=x0+h:y0:=Y:Dots:=Dots,[x0,y0]; od: # Group 3, display dots and plot. Dots; plot([Dots]); # ======================================== # Heun. Group 1, initialize. f:=(x,y)->1-x-y: x0:=0:y0:=3:h:=0.1:Dots:=[x0,y0]:n:=10: # Group 2, repeat n times. Heun method. for i from 1 to n do Y1:=y0+h*f(x0,y0); Y:=y0+h*(f(x0,y0)+f(x0+h,Y1))/2: x0:=x0+h:y0:=Y:Dots:=Dots,[x0,y0]; od: # Group 3, display dots and plot. Dots; plot([Dots]); # ======================================== # RK4. Group 1, initialize. f:=(x,y)->1-x-y: x0:=0:y0:=3:h:=0.1:Dots:=[x0,y0]:n:=10: # Group 2, repeat n times. RK4 method. for i from 1 to n do k1:=h*f(x0,y0): k2:=h*f(x0+h/2,y0+k1/2): k3:=h*f(x0+h/2,y0+k2/2): k4:=h*f(x0+h,y0+k3): Y:=y0+(k1+2*k2+2*k3+k4)/6: x0:=x0+h:y0:=Y:Dots:=Dots,[x0,y0]; od: # Group 3, display some dots and plot. Dots[1],Dots[2],Dots[n+1]; plot([Dots]); # Code snips for exact/error reports # ========================================= # Making multiple curves on one plot # ======================================== Exact:=x->2-x+exp(-x); # An exact solution plot({Exact(x),[Dots]},x=0..1/2); # plot exact and approx solutions # ======================================== # How to create a Dots table for the exact solution # ======================================== Exact:= x -> 2-x+exp(-x):n:=10: ExactDots:=seq([Dots[j][1],Exact(Dots[j][1])],j=1..n+1); # ======================================== # How to define and print percentage relative error: # ======================================== P:=unapply(evalf(100*abs(exact-approx)/abs(exact)),(exact,approx)); ExactVal:=Exact(Dots[11][1]): # Compute exact y-value for x=1.0 ApproxVal:=Dots[11][2]: # Get Euler approx y-value for x=1.0 P(ExactVal),ApproxVal); # print percent relative error # ======================================== # How to create a Dots table for percentage error # ======================================== P:=unapply(evalf(100*abs(exact-approx)/abs(exact)),(exact,approx)); Pdots:=seq([Dots[j][1],P(Exact(Dots[j][1]),Dots[j][2])],j=1..11); # ========================================= # Printing results and tables # Make tables with a pencil, it saves time. # ======================================== # To extract and print items 1,101,201,1001 from a list: Dots1:=Dots[1],Dots[101],Dots[201],Dots[1001]; # ========================================= # Loop control # ======================================== # To automate the production of a Dots list, # enclose the desired code between 1 and 2 below. # 1. for k from 1 to 10 do # 2. od: # # Keyword "od:" is short for "end do:" # Use ":" to stop loop results from printing. # ========================================= # Debug # ======================================== # To remove loop control and do it by hand, insert # pound (#) signs as follows: # 1. # for k from 1 to 10 do # 2. # od: # The hand-done loop is made by placing the mouse cursor # in the group, then press return. Repeat for each loop step, # which is 10 times for the loop above. # the end