{VERSION 4 0 "IBM INTEL NT" "4.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 "" 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 1 }{CSTYLE "" -1 257 "" 0 1 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 }{CSTYLE "" -1 259 "" 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 1 }{CSTYLE "" -1 260 "" 1 14 0 0 0 0 0 1 0 0 0 0 0 0 0 1 } {CSTYLE "" -1 261 "" 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 1 }{CSTYLE "" -1 262 "" 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 1 }{CSTYLE "" -1 263 "" 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 1 }{CSTYLE "" -1 264 "" 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 1 }{CSTYLE "" -1 265 "" 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 1 } {CSTYLE "" -1 266 "" 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 1 }{CSTYLE "" -1 267 "" 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 1 }{CSTYLE "" -1 268 "" 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 1 }{CSTYLE "" -1 269 "" 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 1 }{CSTYLE "" -1 270 "" 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 1 } {CSTYLE "" -1 271 "" 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 1 }{CSTYLE "" -1 272 "" 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 1 }{CSTYLE "" -1 273 "" 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 1 }{CSTYLE "" -1 274 "" 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 1 }{CSTYLE "" -1 275 "" 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 1 } {CSTYLE "" -1 276 "" 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 1 }{CSTYLE "" -1 277 "" 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 1 }{CSTYLE "" -1 278 "" 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 1 }{CSTYLE "" -1 279 "" 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 1 }{CSTYLE "" -1 280 "" 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 1 } {CSTYLE "" -1 281 "" 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 1 }{CSTYLE "" -1 282 "" 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 1 }{CSTYLE "" -1 283 "" 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 1 }{CSTYLE "" -1 284 "" 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 1 }{CSTYLE "" -1 285 "" 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 1 } {CSTYLE "" -1 286 "" 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 1 }{CSTYLE "" -1 287 "" 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 1 }{CSTYLE "" -1 288 "" 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 1 }{CSTYLE "" -1 289 "" 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 1 }{CSTYLE "" -1 290 "" 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 1 } {CSTYLE "" -1 291 "" 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 1 }{CSTYLE "" -1 292 "" 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 1 }{CSTYLE "" -1 293 "" 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 1 }{CSTYLE "" -1 294 "" 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 1 }{CSTYLE "" -1 295 "" 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 1 } {CSTYLE "" -1 296 "" 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 1 }{CSTYLE "" -1 297 "" 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 1 }{CSTYLE "" -1 298 "" 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 1 }{CSTYLE "" -1 299 "" 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 1 }{CSTYLE "" -1 300 "" 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 1 } {CSTYLE "" -1 301 "" 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 1 }{CSTYLE "" -1 302 "" 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 1 }{CSTYLE "" -1 303 "" 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 1 }{CSTYLE "" -1 304 "" 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 1 }{CSTYLE "" -1 305 "" 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 1 } {CSTYLE "" -1 306 "" 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 1 }{CSTYLE "" -1 307 "" 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 1 }{CSTYLE "" -1 308 "" 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 1 }{CSTYLE "" -1 309 "" 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 1 }{CSTYLE "" -1 310 "" 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 1 } {CSTYLE "" -1 311 "" 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 1 }{CSTYLE "" -1 312 "" 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 1 }{CSTYLE "" -1 313 "" 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 1 }{CSTYLE "" -1 314 "" 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 1 }{CSTYLE "" -1 315 "" 1 14 0 0 0 0 0 0 0 0 0 0 0 0 0 0 } {CSTYLE "" -1 317 "" 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 318 "" 1 14 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }{PSTYLE "Normal" -1 0 1 {CSTYLE "" -1 -1 "Times" 1 12 0 0 0 1 2 2 2 2 2 2 1 1 1 1 }1 1 0 0 0 0 1 0 1 0 2 2 0 1 }{PSTYLE "Heading 1" -1 3 1 {CSTYLE "" -1 -1 "Times " 1 18 0 0 0 1 2 1 2 2 2 2 1 1 1 1 }1 1 0 0 8 4 1 0 1 0 2 2 0 1 } {PSTYLE "Heading 2" -1 4 1 {CSTYLE "" -1 -1 "Times" 1 14 0 0 0 1 2 1 2 2 2 2 1 1 1 1 }1 1 0 0 8 2 1 0 1 0 2 2 0 1 }{PSTYLE "Maple Output" -1 12 1 {CSTYLE "" -1 -1 "Times" 1 12 0 0 0 1 2 2 2 2 2 2 1 1 1 1 }1 3 0 0 0 0 1 0 1 0 2 2 0 1 }{PSTYLE "Normal" -1 256 1 {CSTYLE "" -1 -1 "Times" 1 12 0 0 0 1 2 2 2 2 2 2 1 1 1 1 }3 1 0 0 0 0 1 0 1 0 2 2 0 1 }{PSTYLE "Maple Output" -1 257 1 {CSTYLE "" -1 -1 "Times" 1 12 0 0 0 1 2 2 2 2 2 2 1 1 1 1 }1 3 0 0 0 0 1 0 1 0 2 2 0 1 }{PSTYLE "Heading 1 " -1 258 1 {CSTYLE "" -1 -1 "Times" 1 14 0 0 0 1 2 1 2 2 2 2 1 1 1 1 } 1 1 0 0 8 4 1 0 1 0 2 2 0 1 }} {SECT 0 {EXCHG {PARA 256 "" 0 "" {TEXT 260 17 "Maple Programming" }} {PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 125 "One writ es Maple procedures using basic programming techniques. Maple allows m any of the standard programming commands, such " }{TEXT 256 2 "do" } {TEXT -1 2 ", " }{TEXT 257 5 "while" }{TEXT -1 2 ", " }{TEXT 258 12 "i f-then-else" }{TEXT -1 6 ", and " }{TEXT 259 3 "for" }{TEXT -1 236 ". \+ The procedures use local and global variables and can be stored as use r defined libraries. Below we create a few elementary programs and so \+ a few other useful Maple commands for identifying parts of expressions and functions, such as " }{TEXT 261 6 "normal" }{TEXT -1 1 "," } {TEXT 262 5 " irem" }{TEXT -1 1 "," }{TEXT 263 5 " igcd" }{TEXT -1 2 " , " }{TEXT 264 7 "isprime" }{TEXT -1 2 ", " }{TEXT 265 2 "op" }{TEXT -1 6 ", and " }{TEXT 266 4 "nops" }{TEXT -1 2 ", " }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}}{SECT 0 {PARA 258 "" 0 "" {TEXT -1 1 "B" }{TEXT 315 22 "asic Programs in Maple" }}{PARA 0 "" 0 "" {TEXT -1 88 "This sectio n introduces a series of problems that we solve by creating Maple Proc edures." }}{SECT 1 {PARA 4 "" 0 "" {TEXT -1 21 "Runge-Kutta Procedure " }}{PARA 0 "" 0 "" {TEXT -1 172 "We begin with a procedure from the t ext, which creates the classical Runge-Kutta method for solving a syst em of ordinary differential equations. This procedure uses both a " } {TEXT 268 3 "for" }{TEXT -1 30 " statement, which has the form" }} {PARA 0 "" 0 "" {TEXT 269 7 " for" }{TEXT -1 2 " " }{TEXT 271 1 "i " }{TEXT -1 2 " " }{TEXT 270 4 "from" }{TEXT -1 2 " " }{TEXT 272 5 " start" }{TEXT -1 2 " " }{TEXT 274 2 "by" }{TEXT -1 2 " " }{TEXT 273 6 "change" }{TEXT -1 2 " " }{TEXT 275 2 "to" }{TEXT -1 2 " " }{TEXT 276 6 "finish" }}{PARA 0 "" 0 "" {TEXT -1 38 "and a do statement, whic h has the form" }}{PARA 0 "" 0 "" {TEXT 277 6 " do" }{TEXT -1 2 " \+ " }{TEXT 279 2 " " }}{PARA 0 "" 0 "" {TEXT 280 18 " statement \+ " }{TEXT -1 1 " " }{TEXT 278 1 " " }}{PARA 0 "" 0 "" {TEXT 281 7 " \+ od:" }}{PARA 0 "" 0 "" {TEXT -1 31 "The procedure contains several " } {TEXT 267 5 "local" }{TEXT -1 54 " variables, which are defined only i nside the program." }}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 22 "RKS := proc(f,x,y,h,N)" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 23 " local k1,k2, k3,k4,n;" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 23 " for n from 0 to N do " }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 27 " k1 := h*f(x[n], y[n]);" }} {PARA 0 "> " 0 "" {MPLTEXT 1 0 35 " k2 := h*f(x[n]+h/2,y[n]+k1/2); " }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 35 " k3 := h*f(x[n]+h/2,y[n]+k2 /2);" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 31 " k4 := h*f(x[n]+h,y[n]+ k3);" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 48 " y[n+1] := y[n] + (k1 + 2*k2 + 2*k3 + k4)/6;" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 24 " x[n+1 ] := x[n] + h:" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 6 " od:" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 4 "end:" }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 68 "Suppose we want to use this procedure to solve Legendre's equation \+ " }}{PARA 256 "" 0 "" {TEXT -1 0 "" }{XPPEDIT 18 0 "(1-x^2)*diff(Y(x), `$`(x,2))-2*x*diff(Y(x),x)+20*Y(x) = 0;" "6#/,(*&,&\"\"\"F'*$%\"xG\"\" #!\"\"F'-%%diffG6$-%\"YG6#F)-%\"$G6$F)F*F'F'*(F*F'F)F'-F-6$-F06#F)F)F' F+*&\"#?F'-F06#F)F'F'\"\"!" }}{PARA 0 "" 0 "" {TEXT -1 17 "for 5 steps with " }{TEXT 288 2 "h " }{TEXT -1 54 "= 0.2, then compare the answer to the exact answer at " }{TEXT 282 1 "t" }{TEXT -1 6 " = 1. " }}} {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 49 "f := (x,y) -> [y[2], (2*x*y[ 2]-20*y[1])/(1-x^2)];" }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 45 "Suppose \+ we start with the initial conditions " }{TEXT 283 1 "y" }{TEXT -1 9 "( 0) = 1, " }{TEXT 284 1 "y" }{TEXT -1 9 "'(0) = 0." }}}{EXCHG {PARA 0 " > " 0 "" {MPLTEXT 1 0 26 "x[0] := 0; y[0] := [1, 0];" }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 97 "We implement the Runge-Kutta solver for 9 steps with stepsize 0.1. Note that the program goes to " }{TEXT 287 1 "N" } {TEXT -1 34 "+1. (This equation is singular at " }{TEXT 286 1 "x" } {TEXT -1 6 " = 1.)" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 21 "RKS(f , x, y, 0.1, 8);" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 67 "seq([x[ k],y[k]], k = 0..9); \nXY := [seq([x[k],y[k][1]], k = 0..9)]:" }}} {EXCHG {PARA 0 "" 0 "" {TEXT -1 99 "We would like to compare this answ er to the solution of this differential equation, so next we use " } {TEXT 285 6 "dsolve" }{TEXT -1 29 " to find the actual solution." }}} {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 56 "de := (1-x^2)*diff(Y(x),x,x) -2*x*diff(Y(x),x)+20*Y(x)=0;" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 38 "dsolve(\{de, Y(0)=1, D(Y)(0)=0\}, Y(x));" }}}{EXCHG {PARA 0 "> \+ " 0 "" {MPLTEXT 1 0 23 "Y := unapply(rhs(%),x);" }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 84 "We can readily compare the actual solution to the nu merical value computed above at " }{TEXT 289 1 "t" }{TEXT -1 15 " = 0. 5 and 0.9." }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 46 "[Y(0.5),y[5][ 1]];abs((Y(0.5)-y[5][1])/Y(0.5));" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 46 "[Y(0.9),y[9][1]];abs((Y(0.9)-y[9][1])/Y(0.9));" }}} {EXCHG {PARA 0 "" 0 "" {TEXT -1 66 "Below we visualize the actual solu tion and the numerical solution." }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 12 "with(plots):" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 61 "P1 := plot([XY]): P2 := plot(Y(x), x = 0..0.9, color = BLUE):" } }}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 17 "display(\{P1,P2\});" }}} {PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}} {PARA 0 "" 0 "" {TEXT -1 0 "" }}{SECT 1 {PARA 4 "" 0 "" {TEXT -1 29 "L egendre Polynomial Procedure" }}{PARA 0 "" 0 "" {TEXT -1 90 "Below is \+ a procedure for generating Legendre polynomials. They are defined recu rsively by " }}{PARA 256 "" 0 "" {TEXT -1 0 "" }{XPPEDIT 18 0 "L[n](x) = (2*n-1)*x*L[n-1](x)/n-(n-1)*L[n-2](x)/n;" "6#/-&%\"LG6#%\"nG6#%\"xG ,&**,&*&\"\"#\"\"\"F(F0F0F0!\"\"F0F*F0-&F&6#,&F(F0F0F16#F*F0F(F1F0*(,& F(F0F0F1F0-&F&6#,&F(F0F/F16#F*F0F(F1F1" }}{PARA 12 "" 1 "" {TEXT -1 28 "with the initial conditions " }{XPPEDIT 18 0 "L[0](x) = 1;" "6#/-& %\"LG6#\"\"!6#%\"xG\"\"\"" }{TEXT -1 6 " and " }{XPPEDIT 18 0 "L[1](x ) = x;" "6#/-&%\"LG6#\"\"\"6#%\"xGF*" }{TEXT -1 21 ". The procedure us es " }{TEXT 290 12 "if-then-else" }{TEXT -1 31 " statements, which has the form" }}{PARA 257 "" 0 "" {TEXT -1 4 " " }{TEXT 291 3 "if " } {TEXT -1 2 " " }{TEXT 293 11 "condition 1" }{TEXT -1 3 " " }{TEXT 292 4 "then" }}{PARA 0 "" 0 "" {TEXT -1 8 " " }{TEXT 294 20 "st atement sequence 1" }}{PARA 0 "" 0 "" {TEXT -1 3 " " }{TEXT 295 5 "e lif " }{TEXT -1 2 " " }{TEXT 296 11 "condition 2" }{TEXT -1 2 " " } {TEXT 297 4 "then" }}{PARA 0 "" 0 "" {TEXT -1 8 " " }{TEXT 298 20 "statement sequence 2" }}{PARA 0 "" 0 "" {TEXT -1 7 " ...." }} {PARA 0 "" 0 "" {TEXT -1 3 " " }{TEXT 299 5 "elif " }{TEXT -1 1 " " }{TEXT 301 11 "condition n" }{TEXT -1 2 " " }{TEXT 300 4 "then" }} {PARA 0 "" 0 "" {TEXT -1 8 " " }{TEXT 302 20 "statement sequenc e n" }}{PARA 0 "" 0 "" {TEXT -1 3 " " }{TEXT 303 4 "else" }}{PARA 0 "" 0 "" {TEXT -1 8 " " }{TEXT 304 26 "default statement sequenc e" }}{PARA 0 "" 0 "" {TEXT -1 2 " " }{TEXT 305 4 " fi;" }}{PARA 257 " " 0 "" {TEXT -1 8 "and the " }{TEXT 306 6 "normal" }{TEXT -1 49 " func tion, which reduces fractional expressions. " }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 14 "L := proc(n,x)" }} {PARA 0 "> " 0 "" {MPLTEXT 1 0 17 " local result:" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 15 " if n<2 then" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 20 " result := x^n;" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 8 " el se" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 47 " result := normal((2*n-1 )/n*x * L(n-1,x) -" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 47 " \+ (n-1)/n * L(n-2,x));" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 7 " fi;" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 31 " if not type(x,num eric) then" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 23 " L(n,x) := resul t;" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 7 " fi;" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 19 " RETURN(result);" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 4 "end:" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 21 "L(4,x); (8/3)* L(4,x);" }}}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{SECT 1 {PARA 4 "" 0 "" {TEXT -1 16 "Other Procedures" }}{EXCHG {PARA 0 "" 0 "" {TEXT -1 37 "Below s hows a simple program for the " }{TEXT 313 5 "elif " }{TEXT -1 8 "comm and." }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 21 "max3 := proc(a, b, \+ c)" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 47 " print(`The maximum of`, \+ a, b, c, ` is `); " }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 19 " if a < b then " }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 32 " if b < c then c el se b fi" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 22 " elif a < c then c" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 14 " else a " }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 8 " fi:" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 4 "end: " }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 14 "max3(23,5,50);" }}} {EXCHG {PARA 0 "" 0 "" {TEXT -1 111 "There are other useful control op erations that can be used in programming. For example, the operation c ommand, " }{TEXT 307 2 "op" }{TEXT -1 36 ", and number of operations c ommand, " }{TEXT 308 4 "nops" }{TEXT -1 15 ". The function " }{TEXT 309 7 "isprime" }{TEXT -1 48 " is a probabilistic primality testing ro utine. " }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 22 "Prime_check := proc(A)" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 27 " local i, k, prime_cand:" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 23 " for i to nops(A) do" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 19 " \+ k := op(i,A);" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 32 " prime_cand := 2^(2*k+1)-1;" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 26 " if isprime( prime_cand)" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 40 " then print(prime _cand, ` is prime`);" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 43 " else pr int(prime_cand, ` is not prime`)" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 7 " fi;" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 7 " od:" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 4 "end:" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 21 "A := [1,3,5,9,12,21];" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 15 "Prime_check(A);" }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 123 "Below is \+ a program for Euclid's algorithm for finding the greatest common divis or of two integers. (Maple has the function " }{TEXT 310 4 "igcd" } {TEXT -1 54 " that does this automatically.) This demonstrates the " } {TEXT 311 5 "while" }{TEXT -1 47 " command for programming. It uses th e function " }{TEXT 312 4 "irem" }{TEXT -1 57 ", which computes the in teger remainder of m divided by n." }}{PARA 0 "" 0 "" {TEXT -1 0 "" }} }{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 23 "Euclid_gcd := proc(M,N)" }} {PARA 0 "> " 0 "" {MPLTEXT 1 0 19 " local a, b, d:" }}{PARA 0 "> \+ " 0 "" {MPLTEXT 1 0 20 " a := M; b := N;" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 18 " while b<>0 do" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 22 " d := irem(a,b);" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 14 " \+ a := b;" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 14 " b := d;" }} {PARA 0 "> " 0 "" {MPLTEXT 1 0 7 " od:" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 19 " a := abs(a):" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 59 " lprint(`The integer gcd of`, M, ` and `, N, ` is `, a);" }} {PARA 0 "> " 0 "" {MPLTEXT 1 0 4 "end:" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 19 "Euclid_gcd(-40,16);" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 13 "igcd(-40,16);" }}}{PARA 0 "" 0 "" {TEXT -1 0 "" }} {PARA 0 "" 0 "" {TEXT -1 0 "" }}}{PARA 0 "" 0 "" {TEXT -1 0 "" }} {SECT 1 {PARA 4 "" 0 "" {TEXT -1 15 "Newton's Method" }}{EXCHG {PARA 0 "" 0 "" {TEXT -1 12 "Maple has a " }{TEXT 314 5 "break" }{TEXT -1 139 " command to allow early exit of a program. Below we show a Newton 's method for finding the zero of a function up to a prescribed tolera nce." }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 29 "Newton := proc(f, x0, N, tol)" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 25 "local i, x1, x2, err, df:" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 9 "x1 := x0;" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 30 "df := \+ unapply(diff(f(x),x),x);" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 20 "for i f rom 1 to N do" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 52 "x2 := x1 - f(x1)/d f(x1);\nerr := evalf(abs(x2 - x1));" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 18 "if err < tol then " }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 69 "print(`Th e zero of the function is x =`, x2, `in`, i, `iterations.`);" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 5 "break" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 3 "fi:" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 9 "x1 := x2;" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 3 "od:" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 15 "if i = N+ 1 then" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 66 "print(`The Newton method \+ fails to converge in`, N, `iterations.`);" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 3 "fi:" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 4 "end:" }}} {EXCHG {PARA 0 "" 0 "" {TEXT -1 47 "We test this on a problem where we know a zero." }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 21 "f := x -> \+ sin(0.5*x);" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 32 "x0 := 0.1: N := 3: tol := 1E-15:" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 22 "New ton(f, x0, N, tol);" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 28 "g := x -> sin(x) - x*cos(x);" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 32 "x0 := 4.8: N := 10: tol := 1E-8:" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 22 "Newton(g, x0, N, tol);" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 31 "plot(g(x),x=-10..10,y=-10..10);" }}}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}}{PARA 0 "" 0 "" {TEXT -1 0 "" }}} {SECT 1 {PARA 3 "" 0 "" {TEXT 318 18 "Creating Libraries" }}{PARA 0 " " 0 "" {TEXT -1 79 "We begin by going to the location where your curre nt Worksheet is saved. Inside" }{TEXT -1 40 " this folder we created a folder called " }{TEXT 317 6 "lib241" }{TEXT -1 164 ". Now we can iss ue commands in Maple to create and save procedures or variables in thi s library. Unfortunately, I'm still working on how to extract the item s saved." }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 124 "We start with the march command that addresses our folder and tel ls the number of things we want to save inside the library." }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 26 "ma rch('create',lib241,20);" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 24 "savelibname := \"lib241\";" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 14 "savelib('x0');" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 18 "savel ib('Newton');" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 13 "savelib('g ');" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 26 "L := march('list',li b241);" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}}{EXCHG {PARA 0 "" 0 " " {TEXT -1 0 "" }}}}{MARK "2" 0 }{VIEWOPTS 1 1 0 1 1 1803 1 1 1 1 } {PAGENUMBERS 0 1 2 33 1 1 }