{VERSION 6 0 "IBM INTEL NT" "6.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 "2D Output" 2 20 "" 0 1 0 0 255 1 0 0 0 0 0 0 0 0 0 1 } {CSTYLE "" -1 256 "" 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 257 "" 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 258 "" 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 259 "" 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 260 "" 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 } {CSTYLE "" -1 261 "" 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 262 "" 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 263 "" 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 264 "" 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 265 "" 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 } {CSTYLE "" -1 266 "" 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 267 "" 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 268 "" 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 269 "" 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 270 "" 1 14 0 0 0 0 0 1 0 0 0 0 0 0 0 0 } {CSTYLE "" -1 271 "" 1 14 0 0 0 0 0 1 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 272 "" 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 273 "" 1 14 0 0 0 0 0 1 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 274 "" 1 14 0 0 0 0 0 1 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 275 "" 1 14 0 0 0 0 0 1 0 0 0 0 0 0 0 0 } {CSTYLE "" -1 276 "" 1 14 0 0 0 0 0 1 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 277 "" 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 278 "" 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 279 "" 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 280 "" 1 14 0 0 0 0 0 1 0 0 0 0 0 0 0 0 } {CSTYLE "" -1 281 "" 1 14 0 0 0 0 0 1 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 282 "" 1 14 0 0 0 0 0 1 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 283 "" 1 14 0 0 0 0 0 1 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 284 "" 1 14 0 0 0 0 0 1 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 285 "" 1 14 0 0 0 0 0 1 0 0 0 0 0 0 0 0 } {CSTYLE "" -1 286 "" 1 14 0 0 0 0 0 1 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 287 "" 1 14 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 288 "" 1 14 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 289 "" 1 14 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 290 "" 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 } {CSTYLE "" -1 291 "" 1 14 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 292 "" 1 14 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 293 "" 1 14 0 0 0 0 0 1 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 294 "" 1 14 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 295 "" 1 14 0 0 0 0 0 0 0 0 0 0 0 0 0 0 } {CSTYLE "" -1 296 "" 1 14 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 297 "" 1 14 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 298 "" 1 14 0 0 0 0 0 1 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 299 "" 1 14 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 300 "" 1 14 0 0 0 0 0 0 0 0 0 0 0 0 0 0 } {CSTYLE "" -1 301 "" 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 302 "" 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 303 "" 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 304 "" 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 305 "" 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 } {CSTYLE "" -1 306 "" 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 307 "" 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 308 "" 1 14 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 309 "" 1 14 0 0 0 0 0 1 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 310 "" 1 14 0 0 0 0 0 0 0 0 0 0 0 0 0 0 } {CSTYLE "" -1 311 "" 1 14 0 0 0 0 0 1 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 312 "" 1 14 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 313 "" 1 14 0 0 0 0 0 1 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 314 "" 1 14 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 315 "" 1 14 0 0 0 0 0 1 0 0 0 0 0 0 0 0 } {CSTYLE "" -1 316 "" 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 317 "" 1 14 0 0 0 0 1 0 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 }{CSTYLE "" -1 319 "" 1 14 0 0 0 0 1 0 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 320 "" 1 14 0 0 0 0 0 0 0 0 0 0 0 0 0 0 } {CSTYLE "" -1 321 "" 1 14 0 0 0 0 1 0 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 322 "" 1 14 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 323 "" 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 324 "" 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 325 "" 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 } {CSTYLE "" -1 326 "" 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 327 "" 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 328 "" 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 329 "" 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 330 "" 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 } {CSTYLE "" -1 331 "" 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 332 "" 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 333 "" 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 334 "" 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 335 "" 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 } {CSTYLE "" -1 336 "" 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 337 "" 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 338 "" 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 339 "" 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 340 "" 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 } {CSTYLE "" -1 341 "" 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 342 "" 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 343 "" 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 344 "" 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 345 "" 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 } {CSTYLE "" -1 346 "" 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 347 "" 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 348 "" 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 349 "" 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 350 "" 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 } {CSTYLE "" -1 351 "" 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 352 "" 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 353 "" 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 354 "" 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 355 "" 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 } {CSTYLE "" -1 356 "" 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 357 "" 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 358 "" 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 359 "" 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 360 "" 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 } {CSTYLE "" -1 361 "" 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 362 "" 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 364 "" 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 365 "Helvetica" 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 366 "" 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 367 "" 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 369 "fixed" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 370 "fix ed" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 371 "" 0 1 0 0 0 0 0 1 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 "Text Output" -1 6 1 {CSTYLE "" -1 -1 "Courier" 1 10 0 0 255 1 2 2 2 2 2 1 2 1 3 1 } 1 1 0 0 0 0 1 0 1 0 2 2 0 1 }{PSTYLE "Warning" -1 7 1 {CSTYLE "" -1 -1 "Courier" 1 10 0 0 255 1 2 2 2 2 2 1 1 1 3 1 }1 1 0 0 0 0 1 0 1 0 2 2 0 1 }{PSTYLE "Diagnostic" -1 9 1 {CSTYLE "" -1 -1 "Courier" 1 10 64 128 64 1 2 2 2 2 2 1 1 1 3 1 }1 1 0 0 0 0 1 0 1 0 2 2 0 1 }{PSTYLE "Maple Output" -1 11 1 {CSTYLE "" -1 -1 "Times" 1 12 0 0 0 1 2 2 2 2 2 2 1 1 1 1 }3 3 0 0 0 0 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 "Maple Plot" -1 13 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 "Title" -1 18 1 {CSTYLE "" -1 -1 "Times" 1 18 0 0 0 1 2 1 1 2 2 2 1 1 1 1 }3 1 0 0 12 12 1 0 1 0 2 2 19 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 }} {SECT 0 {EXCHG {PARA 18 "" 0 "" {TEXT -1 32 "MAPLE Notes for Computer \+ Algebra" }}}{EXCHG {PARA 256 "" 0 "" {TEXT -1 87 "Michael Monagan\nDep artment of Mathematics\nSimon Fraser University\nUpdated January 2013. " }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 8 "restart;" }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 215 "These notes are for Maple V Release 13. \+ They are platform independent, i.e., they are the same for the Macint osh, PC, and Unix versions of Maple. These notes should be backwards \+ compatible and forwards compatible." }}}{SECT 1 {PARA 3 "" 0 "" {TEXT -1 21 "Maple as a Calculator" }}{EXCHG {PARA 0 "" 0 "" {TEXT -1 141 "I nput of a numerical calculation uses +, -, *, /, and ^ for addition, s ubtraction, multiplication, division, and exponentiation respectively. " }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 8 "1+2*3-2;" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#\"\"&" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 4 "2^3;" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#\"\")" }}}{EXCHG {PARA 0 "> \+ " 0 "" {MPLTEXT 1 0 8 "120/105;" }}{PARA 11 "" 1 "" {XPPMATH 20 "6##\" \")\"\"(" }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 252 "Because the input in volved integers, not decimal numbers, Maple calculates the exact fract ion when there is a division, automatically cancelling out the greates t common divisor (GCD). In this case the GCD is 15, which you can cal culate specifically as" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 14 "i gcd(120,105);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#\"#:" }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 230 "Observe that every command ends with a s emicolon ; This is a gramatical requirement of Maple. If you forget , Maple will assume that the comand is not complete. This allows you \+ to break long commands across a line. For example" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 6 "1+2*3/" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 6 " (2+3);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6##\"#6\"\"&" }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 287 "We are not going to use decimal numbers very m uch in this course. However, here is how you would do some decimal ca lculations. The presence of a decimal point . in a number means that the number is a decimal number and Maple will, by default, do all cal culations to 10 decimal places." }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 10 "120/105.0;" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$\"+Vr&G9\"!\"* " }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 10 "sqrt(2.0);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$\"+iN@99!\"*" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 8 "sqrt(2);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#*$\"\"##\" \"\"F$" }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 135 "Notice the difference \+ caused by the presence of a decimal point in these examples. Now, if \+ you have input an exact quantity, like the " }{XPPEDIT 18 0 "sqrt(2); " "6#-%%sqrtG6#\"\"#" }{TEXT -1 186 " above, and you now want to get \+ a numerical value to 3 decimal digits, use the evalf command to evalua te to floating point. Use the % character to refer to the previous Ma ple output. " }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 11 "evalf(%,3) ;" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$\"$T\"!\"#" }}}{EXCHG {PARA 0 " " 0 "" {TEXT -1 44 "To input a formula, just use a symbol, e.g. " } {XPPEDIT 18 0 "x;" "6#%\"xG" }{TEXT -1 107 " and the arithmetic operat ors and functions known to Maple. For example, here is a quartic pol ynomial in " }{XPPEDIT 18 0 "x;" "6#%\"xG" }{TEXT -1 2 " ." }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 10 "x^4-3*x+2;" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#,(*$)%\"xG\"\"%\"\"\"F(*&\"\"$F(F&F(!\"\"\"\"#F(" }}} {EXCHG {PARA 0 "" 0 "" {TEXT -1 89 "We are going to use this polynomia l for a few calculations. We want to give it the name " }{XPPEDIT 18 0 "f;" "6#%\"fG" }{TEXT -1 92 " so we can refer to it later. We do th is using the assignment operation in Maple as follows" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 15 "f := x^4-3*x+2;" }}{PARA 11 "" 1 " " {XPPMATH 20 "6#>%\"fG,(*$)%\"xG\"\"%\"\"\"F**&\"\"$F*F(F*!\"\"\"\"#F *" }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 9 "The name " }{XPPEDIT 18 0 "f; " "6#%\"fG" }{TEXT -1 69 " is now a variable. It refers to the polyno mial. Here is it's value" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 2 "f;" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#,(*$)%\"xG\"\"%\"\"\"F(*&\"\"$F (F&F(!\"\"\"\"#F(" }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 44 "To evaluate \+ this as a function at the point " }{XPPEDIT 18 0 "x = 3;" "6#/%\"xG\" \"$" }{TEXT -1 32 " use the eval command as follows" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 12 "eval(f,x=3);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#\"#u" }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 37 "The follow ing commands differentiate " }{TEXT 257 2 "f " }{TEXT -1 16 "with resp ect to " }{TEXT 258 2 "x " }{TEXT -1 11 "and factor " }{TEXT 256 1 "f " }{TEXT -1 61 " into irreducible factors over the field of rational n umbers." }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 10 "diff(f,x);" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#,&*&\"\"%\"\"\")%\"xG\"\"$F&F&F)!\"\" " }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 10 "factor(f);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#*&,&%\"xG\"\"\"F&!\"\"F&,**$)F%\"\"$F&F&*$)F%\" \"#F&F&F%F&F.F'F&" }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 79 "You can grap h functions using the plotting commands. The basic syntax for the " } {TEXT 259 4 "plot" }{TEXT -1 67 " command for a function of one variab le is illustrated as follows: " }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 0 " " }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 19 "plot(f,x=0.4..1.4);" }} {PARA 13 "" 1 "" {GLPLOT2D 323 278 278 {PLOTDATA 2 "6%-%'CURVESG6$7U7$ $\"3A+++++++S!#=$\"3!*)**********fD)F*7$$\"3)omm;arz@%F*$\"3'HdY(e^hiw F*7$$\"3&QL$e9ui2WF*$\"39.$f 'F*7$$\"3:nm;aphN[F*$\"3=A\\:uF#*RgF*7$$\"3KLLe*=)H\\]F*$\"3\\[;([Z@@] &F*7$$\"3Emm\"z/3uC&F*$\"3gQS*)=\"of,&F*7$$\"3M++DJ$RDX&F*$\"3D4#Ge\"f EEXF*7$$\"3Gnm\"zR'okcF*$\"3*fsAhnBc.%F*7$$\"3U***\\i5`h(eF*$\"3Y&3)3I Y!Qc$F*7$$\"3oLLL3En$4'F*$\"3c82[;/$y4$F*7$$\"3!pmmT!RE&G'F*$\"3M4&*Q` r\"[q#F*7$$\"3.+++D.&4]'F*$\"3SF^(fobKG#F*7$$\"3;+++vB_7$$\"3BLLLLY.KvF*$\"3K.@B&z VOA'Fgp7$$\"3_++D\"o7Tv(F*$\"3XRRPb^HGNFgp7$$\"3kLLL$Q*o]zF*$\"3yt3Oje tQ9Fgp7$$\"3W++D\"=lj;)F*$!3E%y6O%HMg^!#?7$$\"3%3+]PaR) RFgp7$$\"3!ommT5k]**)F*$!3;akF'[NdQ%Fgp7$$\"32mm\"zRQb@*F*$!3e!*pNeekT VFgp7$$\"3r***\\(=>Y2%*F*$!3*R-6!*>c2!RFgp7$$\"3Omm;zXu9'*F*$!3!)z'oVf vY)HFgp7$$\"3()******\\y))G)*F*$!3\\$pb@uSu`\"Fgp7$$\"3.++DE&QQ+\"!#<$ \"3sU3Z,%er#RF\\r7$$\"31+]7y%3T-\"Fht$\"3yMm,Wx@lFFgp7$$\"3#)***\\P![h Y5Fht$\"3[qxJmHB1gFgp7$$\"3=LLLQx$o1\"Fht$\"3-sVg)psb[*Fgp7$$\"3+++]P+ V)3\"Fht$\"3_$ec@jk\"Fht$\"3AHqbs4U&R%F*7$$\"3') **\\7`Wl77Fht$\"3\")eO)3Tv\\C&F*7$$\"3smmm'*RRL7Fht$\"37LxtDG_ShF*7$$ \"3mmmTvJga7Fht$\"3HF[/)o\"ePrF*7$$\"3YL$e9tOcF\"Fht$\"3(G&HUNMH5#)F*7 $$\"35+++&Qk\\H\"Fht$\"3)**QoD@.@F*F*7$$\"3NLL3dg6<8Fht$\"39(o`q]k\"e5 Fht7$$\"3lmmmw(GpL\"Fht$\"3o@\"o[wNR=\"Fht7$$\"3%***\\7oK0e8Fht$\"36f% *H*p9tK\"Fht7$$\"3%******\\oi\"o8Fht$\"3uW&zY*fS*R\"Fht7$$\"3#***\\(=5 s#y8Fht$\"3I#*p?yHzt9Fht7$$\"3#**\\P40O\"*Q\"Fht$\"31%pUV&*Hjb\"Fht7$$ \"3!**************R\"Fht$\"3&***********fT;Fht-%'COLOURG6&%$RGBG$\"*++ ++\"!\")$\"\"!F\\\\lF[\\l-%+AXESLABELSG6$%\"xGQ!6\"-%%VIEWG6$;$\"\"%! \"\"$\"#9Fi\\l%(DEFAULTG" 1 2 0 1 10 0 2 9 1 4 2 1.000000 45.000000 45.000000 0 0 "Curve 1" }}}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 104 "In th e graph I can see a local minimum near x=0.9. We can find this point \+ using calculus. The command " }{TEXT 304 6 "fsolve" }{TEXT -1 40 "( f (x)=0, x ), on input of a polynomial " }{TEXT 305 4 "f(x)" }{TEXT -1 66 " computes 10 digit numerical approximations for the real roots of \+ " }{TEXT 306 4 "f(x)" }{TEXT -1 1 "." }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 12 "diff(f,x)=0;" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#/,&*& \"\"%\"\"\")%\"xG\"\"$F'F'F*!\"\"\"\"!" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 22 "fsolve(diff(f,x)=0,x);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$\"+kHg&3*!#5" }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 61 "Here are s ome functions which we integrate to try Maple out." }}}{EXCHG } {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 15 "f := t*exp(-t);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"fG*&%\"tG\"\"\"-%$expG6#,$F&!\"\"F'" }}} {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 15 "integrate(f,t);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#,$*&,&\"\"\"F&%\"tGF&F&-%$expG6#,$F'!\"\"F&F," }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 80 "Maple used integration by parts . Here is how you compute the definite integral " }{XPPEDIT 18 0 "int (f(t),t = 0 .. infinity);" "6#-%$intG6$-%\"fG6#%\"tG/F);\"\"!%)infinit yG" }{TEXT -1 2 " ." }}}{EXCHG }{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 21 "int(f,t=0..infinity);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#\"\"\"" } }}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 17 "g := sqrt(1-x^2);" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"gG*$,&\"\"\"F'*$)%\"xG\"\"#F'!\"\" #F'F+" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 9 "int(g,x);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#,&*(\"\"#!\"\"%\"xG\"\"\",&F(F(*$)F'F%F(F&#F (F%F(*&F,F(-%'arcsinG6#F'F(F(" }}}{EXCHG }{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 25 "h := x*exp(-x^2)/ln(1+x);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"hG*(%\"xG\"\"\"-%$expG6#,$*$)F&\"\"#F'!\"\"F'-%#lnG 6#,&F'F'F&F'F/" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 15 "integrate (h,x);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#-%$intG6$*(%\"xG\"\"\"-%$exp G6#,$*$)F'\"\"#F(!\"\"F(-%#lnG6#,&F(F(F'F(F0F'" }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 105 "That means Maple could not integrate it. This mean s there is no elementary closed form for the integral." }}}{EXCHG } {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 15 "f := diff(g,x);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"fG,(*&-%$expG6#,$*$)%\"xG\"\"#\"\"\"!\"\"F/ -%#lnG6#,&F/F/F-F/F0F/**F.F/F-F.F'F/F1F0F0**F-F/F'F/F1!\"#F4F0F0" }}} {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 17 "f := simplify(f);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"fG,$**-%$expG6#,$*$)%\"xG\"\"#\"\"\"!\" \"F/,,-%#lnG6#,&F/F/F-F/F0*&F2F/F-F/F0*(F.F/F,F/F2F/F/*(F.F/)F-\"\"$F/ F2F/F/F-F/F/F2!\"#F5F0F0" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 15 "integrate(f,x);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#*(%\"xG\"\"\"-%$ex pG6#,$*$)F$\"\"#F%!\"\"F%-%#lnG6#,&F%F%F$F%F-" }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 172 "We have used the name f as variable to refer to formu lae and the symbols x for an uknown in a formula. Often you will h ave assigned to a name like we have done here to " }{XPPEDIT 18 0 "f; " "6#%\"fG" }{TEXT -1 34 " but you want now to use the name " } {XPPEDIT 18 0 "f;" "6#%\"fG" }{TEXT -1 87 " as a symbol again, not as \+ a variable. You can unassign the value of a name as follows" }}} {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 2 "f;" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#,$**-%$expG6#,$*$)%\"xG\"\"#\"\"\"!\"\"F-,,-%#lnG6#,&F- F-F+F-F.*&F0F-F+F-F.*(F,F-F*F-F0F-F-*(F,F-)F+\"\"$F-F0F-F-F+F-F-F0!\"# F3F.F." }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 9 "f := 'f';" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"fGF$" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 2 "f;" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#%\"fG" }}} {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}}}{SECT 1 {PARA 3 "" 0 " " {TEXT -1 49 "Calculating Sums and Solving Systems of Equations" }} {EXCHG {PARA 0 "" 0 "" {TEXT -1 18 "The Maple command " }{TEXT 369 17 "sum(f(i), i=m..n)" }{TEXT -1 20 " calculates the sum " }{XPPEDIT 18 0 "sum(f(i),i = m .. n);" "6#-%$sumG6$-%\"fG6#%\"iG/F);%\"mG%\"nG" } {TEXT -1 126 ". Often you will want to simplify Maple's output. You can use the expand, simplify, factor and combine commands to do this. " }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 26 "f := sum( 2^i, i=0..n-1 );" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"fG,&)\"\"#%\"nG\"\"\"F)!\" \"" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 26 "f := sum( a^i, i=0..n -1 );" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"fG,&*&)%\"aG%\"nG\"\"\",& F(F*F*!\"\"F,F**&F*F*F+F,F," }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 12 "simplify(f);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#*&,&%\"aG\"\"\"F&! \"\"F',&)F%%\"nGF&F&F'F&" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 21 "f := sum(i^2,i=1..n);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"fG,**&\" \"$!\"\",&%\"nG\"\"\"F+F+F'F+*&\"\"#F(F)F-F(*&\"\"'F(F*F+F+#F+F/F+" }} }{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 10 "expand(f);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#,(*&#\"\"\"\"\"$F&*$)%\"nGF'F&F&F&*&#F&\"\"#F&*$)F *F-F&F&F&*&#F&\"\"'F&F*F&F&" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 10 "factor(f);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#,$**\"\"'!\"\"%\"nG \"\"\",&F'F(F(F(F(,&*&\"\"#F(F'F(F(F(F(F(F(" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 36 "g := sum( k*binomial(n,k), k=0..n );" }}{PARA 11 " " 1 "" {XPPMATH 20 "6#>%\"gG,$*(\"\"#!\"\")F'%\"nG\"\"\"F*F+F+" }}} {EXCHG {PARA 0 "" 0 "" {TEXT -1 19 "The Maple command " }{TEXT 370 32 "solve( \{equations\}, \{unknowns\} )" }{TEXT -1 108 " solves a sys tem of equations for the given unknowns. Here is an example of a linea r system in two unknowns." }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 21 "sys := \{x+y=2,x-y=1\};" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%$sysG <$/,&%\"xG\"\"\"%\"yG!\"\"F)/,&F(F)F*F)\"\"#" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 20 "solve( sys, \{x,y\} );" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#<$/%\"xG#\"\"$\"\"#/%\"yG#\"\"\"F(" }}}{EXCHG {PARA 0 " " 0 "" {TEXT -1 43 "And a non-linear system is input similarly." }}} {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 25 "sys := \{x^2+y^2=1,x+y=1\}; " }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%$sysG<$/,&%\"xG\"\"\"%\"yGF)F)/, &*$)F(\"\"#F)F)*$)F*F/F)F)F)" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 17 "solve(sys,\{x,y\});" }}{PARA 11 "" 1 "" {XPPMATH 20 "6$<$/%\"xG \"\"\"/%\"yG\"\"!<$/F%F)/F(F&" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 26 "sys := \{x^2+y^2=2, x+y=1\};" }}{PARA 11 "" 1 "" {XPPMATH 20 "6# >%$sysG<$/,&%\"xG\"\"\"%\"yGF)F)/,&*$)F(\"\"#F)F)*$)F*F/F)F)F/" }}} {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 17 "solve(sys,\{x,y\});" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#<$/%\"xG,&-%'RootOfG6$,(*&\"\"#\"\"\") %#_ZGF,F-F-*&F,F-F/F-!\"\"F-F1/%&labelG%$_L1GF1F-F-/%\"yGF'" }}} {EXCHG {PARA 0 "" 0 "" {TEXT -1 214 "This is Maple's RootOf notation f or the solutions. This is avoid generating large complicated radicals in the output. But in this case, the solutions can be expressed simp ly as radicals. Do this to get radicals." }}}{EXCHG {PARA 0 "> " 0 " " {MPLTEXT 1 0 21 "_EnvExplicit := true;" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%-_EnvExplicitG%%trueG" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 17 "solve(sys,\{x,y\});" }}{PARA 11 "" 1 "" {XPPMATH 20 "6$<$/%\"xG, &#\"\"\"\"\"#F(*&F)!\"\"\"\"$F'F+/%\"yG,&F'F(*&F)F+F,F'F(<$/F%F//F.F& " }}}{EXCHG }{EXCHG }{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}}} {SECT 1 {PARA 3 "" 0 "" {TEXT -1 8 "Integers" }}{EXCHG {PARA 0 "" 0 " " {TEXT -1 363 "Here are some commands which do integer calculations t hat we will use in the course. Integers in Maple are not limited to t he precision of the hardware on your computer. They are limited by an internal limit of Maple to approximately half a million digits. Any \+ calculations that you do with large integers though will take longer f or larger integers. Here is " }{XPPEDIT 18 0 "2^100;" "6#*$\"\"#\"$+ \"" }{TEXT -1 2 " ." }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 6 "2^100 ;" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#\"@w`?.n\\,%H#G-g]wE\"" }}} {EXCHG {PARA 0 "" 0 "" {TEXT -1 156 "The command irem(a,b) computes th e integer remainder of a divided by b. The command iquo(a,b) computes the integer quotient of a divided by b. For example" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 16 "a := 20;\nb := 7;" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"aG\"#?" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"bG \"\"(" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 15 "r := irem(a,b);" } }{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"rG\"\"'" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 15 "q := iquo(a,b);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"qG\"\"#" }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 28 "It should be th e case that " }{TEXT 260 12 "a = b q + r " }{TEXT -1 14 ". Let's che ck" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 12 "a = b*q + r;" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#/\"#?F$" }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 134 "The commands igcd(a,b) and ilcm(a,b) compute the greates t common divisor and least common multiple of integers a and b, respec tively. " }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 10 "igcd(6,4);" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#\"\"#" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 10 "ilcm(6,4);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#\"#7" } }}{EXCHG {PARA 0 "" 0 "" {TEXT -1 13 "The command " }{TEXT 261 6 "igc dex" }{TEXT -1 1 "(" }{TEXT 262 11 "a,b,'s','t'" }{TEXT -1 12 ") out puts " }{XPPEDIT 18 0 "g = GCD(a,b);" "6#/%\"gG-%$GCDG6$%\"aG%\"bG" } {TEXT -1 21 " . It also assigns " }{XPPEDIT 18 0 "s,t;" "6$%\"sG%\"t G" }{TEXT -1 35 " integers satisfying the equation " }{XPPEDIT 18 0 " s*a+t*b = g;" "6#/,&*&%\"sG\"\"\"%\"aGF'F'*&%\"tGF'%\"bGF'F'%\"gG" } {TEXT -1 17 " and satisfying " }{XPPEDIT 18 0 "abs(s) < abs(b);" "6#2 -%$absG6#%\"sG-F%6#%\"bG" }{TEXT -1 6 " and " }{XPPEDIT 18 0 "abs(t) \+ < abs(a);" "6#2-%$absG6#%\"tG-F%6#%\"aG" }{TEXT -1 77 " . So this com mand implements the extended Euclidean algorithm. For example" }}} {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 25 "g := igcdex(3,5,'s','t');" } }{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"gG\"\"\"" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 2 "s;" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#\"\"#" }}} {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 2 "t;" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#!\"\"" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 8 "s*3+ t*5;" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#\"\"\"" }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 12 "The command " }{TEXT 263 7 "isprime" }{TEXT -1 1 "( " }{TEXT 264 1 "n" }{TEXT -1 19 ") outputs false if " }{TEXT 265 1 "n " }{TEXT -1 26 " is composite and true if " }{TEXT 266 1 "n" }{TEXT -1 24 " is prime. The command " }{TEXT 267 7 "ifactor" }{TEXT -1 1 "( " }{TEXT 268 1 "n" }{TEXT -1 64 ") computes the integer factorization \+ of an integer. For example" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 13 "isprime(997);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#%%trueG" }}} {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 14 "isprime(1001);" }}{PARA 11 " " 1 "" {XPPMATH 20 "6#%&falseG" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 14 "ifactor(1001);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#*(-%!G6#\"\" (\"\"\"-F%6#\"#6F(-F%6#\"#8F(" }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 162 "Now, if you are not sure what a command does, or how to use it, you c an use Maple's on-line help system. You input ?command and then a ret urn. Try the following" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 8 "? isprime" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 8 "?ifactor" }}} {EXCHG {PARA 0 "" 0 "" {TEXT -1 286 "You should get a window with some information about the command and how to use it. Almost all of the o n-line help files have examples. If you don't know the name of the co mmand, you can use the help browser to search for the command - see th e Help menu at the top right of the window." }}}{EXCHG {PARA 0 "" 0 " " {TEXT -1 124 "For the algorithms based on the Chinese remainder theo rem we will need a source of primes. Say 32 bit primes. The command \+ " }{TEXT 303 9 "nextprime" }{TEXT -1 71 "(n) outputs the first prime g reater than or equal to n and the command " }{TEXT 307 9 "prevprime" } {TEXT -1 52 "(n) finds the first prime less than or equal to n. " }}} {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 21 "p := prevprime(2^32);" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"pG\"+\"Hn\\H%" }}}{EXCHG {PARA 0 " > " 0 "" {MPLTEXT 1 0 18 "p := prevprime(p);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"pG\"+zs'\\H%" }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 188 "Often we will need random numbers, random integers in the range 0 ..p-1. You can create a random number generator using the rand comman d as follows. Then call it to create random numbers." }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 14 "R := rand(10):" }}}{EXCHG {PARA 0 " > " 0 "" {MPLTEXT 1 0 4 "R();" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#\"\"$ " }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 4 "R();" }}{PARA 11 "" 1 " " {XPPMATH 20 "6#\"\"&" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 20 "s eq( R(), i=1..10 );" }}{PARA 11 "" 1 "" {XPPMATH 20 "6,\"\"%\"\"!\"\"( F#\"\"*\"\"\"F'\"\"$F%\"\"#" }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 41 "Yo u can also create long random integers." }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 18 "U := rand(10^100):" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 4 "U();" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#\"_q<5]j*\\c%) fZr****=;i`)oxCb6&\\\")38.qOsTQ#y)4@Mua35Qs^w\\5f^(" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}}}{SECT 1 {PARA 3 "" 0 "" {TEXT -1 5 " Lists" }}{EXCHG {PARA 0 "" 0 "" {TEXT -1 225 "The simplest data struct ure in Maple is a list. The elements of a list may be of any type. \+ To create a list of values enclose them in square brackets [, ]. List s may be nested of course and the entries may be of any type." }}} {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 9 "restart;\n" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 25 "E := []; # the empty list" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"EG7\"" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 18 "L := [1,2,-3,4,1];" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"LG7'\" \"\"\"\"#!\"$\"\"%F&" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 23 "M : = [[1,2,3],[x,y,z]];" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"MG7$7%\"\" \"\"\"#\"\"$7%%\"xG%\"yG%\"zG" }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 61 " To count the number of entries in a list use nops(L) command." }}} {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 8 "nops(L);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#\"\"&" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 8 "nops (M);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#\"\"#" }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 114 "To access the i'th element of a list (counting from 1 ) use a subscript. A negative subscript counts from the end." }}} {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 5 "L[3];" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#!\"$" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 6 "L[-1] ;" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#\"\"\"" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 5 "M[2];" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7%%\"xG%\" yG%\"zG" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 8 "M[2][2];" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#%\"yG" }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 38 "Use the following to extract a sublist" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 8 "L[2..3];" }}{PARA 11 "" 1 "" {XPPMATH 20 " 6#7$\"\"#!\"$" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 9 "L[2..-1];" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7&\"\"#!\"$\"\"%\"\"\"" }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 57 "To append (prepend) elements to a list us e the following." }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 6 "op(L);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6'\"\"\"\"\"#!\"$\"\"%F#" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 10 "[op(L),5];" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7(\"\"\"\"\"#!\"$\"\"%F$\"\"&" }}}{EXCHG {PARA 0 "" 0 " " {TEXT -1 38 "To test if an element is in a list use" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 12 "member(2,L);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#%%trueG" }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 204 "Althou gh you can assign to an entry of a list (as if it were an array) if th e list has less than 100 elements, do not do this. It creates a copy of the entire list. So it's not efficient. Use Arrays ." }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 11 "L[2] := 10;" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>&%\"LG6#\"\"#\"#5" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 2 "L;" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7'\"\"\"\"#5!\"$ \"\"%F$" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}}}{SECT 1 {PARA 3 "" 0 "" {TEXT -1 24 "Loops and If statements." }}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 8 "restart;" }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 232 "To do a sequence of calculations it will be handy to know how \+ to use some of Maple's looping commands and also the if command. To e xecute a command in Maple conditionally use the if command which has e ither of the following forms\n\n" }{TEXT 279 4 " " }{TEXT 286 2 "if " }{TEXT 287 13 " " }{TEXT 280 4 "then" }{TEXT 288 14 " " }{TEXT 281 4 "else" }{TEXT 289 14 " " } {TEXT 282 2 "fi" }{TEXT 290 1 "\n" }{TEXT -1 14 "\nor just\n\n " } {TEXT 283 2 "if" }{TEXT 291 13 " " }{TEXT 284 4 "then" } {TEXT 292 14 " " }{TEXT 285 3 "fi\n" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 43 "if 2>1 then print(good) else print(bad) fi;" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#%%goodG" }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 112 "To execute one or more statements zero or more times in \+ a loop use the for command. It has the following form\n\n" }{TEXT 272 4 " " }{TEXT 293 3 "for" }{TEXT 294 12 " " }{TEXT 273 4 "from" }{TEXT 295 9 " " }{TEXT 274 2 "to" }{TEXT 296 7 " " }{TEXT 275 2 "do" }{TEXT 297 14 " " }{TEXT 276 3 "od\n" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 29 "for i from 1 to \+ 5 do i^2; od;" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#\"\"\"" }}{PARA 11 " " 1 "" {XPPMATH 20 "6#\"\"%" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#\"\"*" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#\"#;" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#\"#D" }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 93 "To execute some sta tements while a condition is true use the while loop. It has the synt ax\n\n" }{TEXT 269 4 " " }{TEXT 298 5 "while" }{TEXT 299 13 " " }{TEXT 270 2 "do" }{TEXT 300 14 " " }{TEXT 271 3 "od " }{TEXT 301 2 "\n\n" }{TEXT -1 80 "In the following example we \+ repeatedly divide an integer n by 2 until it is odd." }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 51 "n := 12; while irem(n,2) = 0 do n := iquo (n,2); od;" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"nG\"#7" }}{PARA 11 " " 1 "" {XPPMATH 20 "6#>%\"nG\"\"'" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#> %\"nG\"\"$" }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 52 "Here is a loop to c alculate the GCD of two integers " }{XPPEDIT 18 0 "a;" "6#%\"aG" } {TEXT -1 5 " and " }{XPPEDIT 18 0 "b;" "6#%\"bG" }{TEXT -1 110 " using Euclid's algorithm. Notice that this loop has three statements in th e body of the loop - between the " }{TEXT 277 3 "do " }{TEXT -1 4 ".. . " }{TEXT 278 2 "od" }{TEXT -1 111 ", each of which is terminated by \+ a semicolon. You don't have to put them on the same line as I have do ne here." }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 17 "a := 64; b := 2 0;" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"aG\"#k" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"bG\"#?" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 15 "while b <> 0 do" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 34 " r := irem (a,b); a := b; b := r;" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 3 "od;" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"rG\"\"%" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"aG\"#?" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"bG\" \"%" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"rG\"\"!" }}{PARA 11 "" 1 " " {XPPMATH 20 "6#>%\"aG\"\"%" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"bG \"\"!" }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 52 "Thus 4 should be the GCD (64,20). A check with Maple" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 12 "igcd(64,20);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#\"\"%" }}} {EXCHG {PARA 0 "" 0 "" {TEXT -1 86 "We will use Maple to obtain the fi rst prime bigger than the integer 128^6. Note, the " }{TEXT 302 10 "n extprime " }{TEXT -1 32 "command does this automatically." }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 52 "p := 128^6+1;\nwhile not isprime(p) do p := p + 2 od;" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"pG\".06^Y!)R %" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"pG\".26^Y!)R%" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"pG\".46^Y!)R%" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"pG\".66^Y!)R%" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"pG\".86^Y! )R%" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"pG\".:6^Y!)R%" }}{PARA 11 " " 1 "" {XPPMATH 20 "6#>%\"pG\".<6^Y!)R%" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"pG\".>6^Y!)R%" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 17 " nextprime(128^6);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#\".>6^Y!)R%" }}} {EXCHG {PARA 0 "" 0 "" {TEXT -1 44 "Two other useful looping construct s are the " }{TEXT 324 3 "map" }{TEXT -1 17 " command and the " } {TEXT 325 3 "seq" }{TEXT -1 17 " command and the " }{TEXT 367 4 "add \+ " }{TEXT -1 49 "command. The examples show what the commands do." }}} {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 17 "L := [1,2,3,4,5];" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"LG7'\"\"\"\"\"#\"\"$\"\"%\"\"&" }}} {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 12 "map( f, L );" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7'-%\"fG6#\"\"\"-F%6#\"\"#-F%6#\"\"$-F%6#\"\"%-F%6 #\"\"&" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 18 "map( isprime, L ) ;" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7'%&falseG%%trueGF%F$F%" }}} {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 19 "seq( i^2, i=1..5 );" }} {PARA 11 "" 1 "" {XPPMATH 20 "6'\"\"\"\"\"%\"\"*\"#;\"#D" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 26 "seq( L[i], i=1..nops(L) );" }} {PARA 11 "" 1 "" {XPPMATH 20 "6'\"\"\"\"\"#\"\"$\"\"%\"\"&" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 35 "seq( isprime(L[i]), i=1..nops(L) ); " }}{PARA 11 "" 1 "" {XPPMATH 20 "6'%&falseG%%trueGF$F#F$" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 34 "seq( L[i]*x^(i-1), i=1..nops(L) ); " }}{PARA 11 "" 1 "" {XPPMATH 20 "6'\"\"\",$*&\"\"#F#%\"xGF#F#,$*&\"\" $F#)F'F&F#F#,$*&\"\"%F#)F'F*F#F#,$*&\"\"&F#)F'F.F#F#" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 23 "L := [seq( n^2, n=L )];" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"LG7'\"\"\"\"\"%\"\"*\"#;\"#D" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 20 "add( f(i), i=1..5 );" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#,,-%\"fG6#\"\"\"F'-F%6#\"\"#F'-F%6#\"\"$F'-F%6#\"\"%F'- F%6#\"\"&F'" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 19 "add( i^2, i= 1..5 );" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#\"#b" }}}{EXCHG {PARA 0 "> \+ " 0 "" {MPLTEXT 1 0 20 "add( x[i], i=0..5 );" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#,.&%\"xG6#\"\"!\"\"\"&F%6#F(F(&F%6#\"\"#F(&F%6#\"\"$F(& F%6#\"\"%F(&F%6#\"\"&F(" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 19 " add( x^i, i=0..5 );" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#,.\"\"\"F$%\"xG F$*$)F%\"\"#F$F$*$)F%\"\"$F$F$*$)F%\"\"%F$F$*$)F%\"\"&F$F$" }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 60 "Read the help files for these commands, t hey are very handy." }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 4 "?map " }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 4 "?seq" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 4 "?add" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}}}{SECT 1 {PARA 3 "" 0 "" {TEXT -1 30 "Maple Functions and \+ Procedures" }}{EXCHG {PARA 0 "" 0 "" {TEXT -1 115 "A simple function, \+ like the function ek(x) = a*x+b mod n may be input using the arrow not ation in Maple, as follows" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 24 "ek := x -> 3*x+5 mod 26;" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%#ekG f*6#%\"xG6\"6$%)operatorG%&arrowGF(-%$modG6$,&*&\"\"$\"\"\"9$F2F2\"\"& F2\"#EF(F(F(" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 14 "ek(1); ek( 7);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#\"\")" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#\"\"!" }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 38 "A procedu re in Maple takes the form\n\n " }{TEXT 308 4 " " }{TEXT 309 4 "pro c" }{TEXT 310 21 "( p1, p2, ... )\n " }{TEXT 311 5 "local" }{TEXT 312 20 " l1, l2, ... ;\n " }{TEXT 313 6 "global" }{TEXT 314 23 " g , g2, ... ;\n " }{TEXT 317 10 "statement1" }{TEXT 318 11 ";\n \+ " }{TEXT 319 10 "statement2" }{TEXT 320 25 ";\n .... \n " }{TEXT 321 11 " statementn" }{TEXT 322 5 ";\n " }{TEXT 315 10 " end proc" }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 409 "There may be zero or more parameters, one or more locals , one or more globals and one or more statements in the procedure body .\nThe local and global statements are optional. Variables in the pro cedure body that are not explicitly declared as parameters, locals, or globals are declared to be local automatically if assigned to, otherw ise they are global. The value returned by the procedure is the value of " }{TEXT 316 10 "statementn" }{TEXT -1 206 ", the last statement i n the body of the procedure or the value of an explicit return stateme nt. Type declarations for parameters and local variables need not be \+ explicitly given. Some examples will help. " }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 37 "f := proc(x) y := x^2; y-1; end proc;" }}{PARA 7 "" 1 "" {TEXT -1 59 "Warning, `y` is implicitly declared local to pr ocedure `f`\n" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"fGf*6#%\"xG6#%\"y G6\"F*C$>8$*$)9$\"\"#\"\"\",&F-F2F2!\"\"F*F*F*" }}}{EXCHG {PARA 0 "> \+ " 0 "" {MPLTEXT 1 0 5 "f(2);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#\"\"$ " }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 5 "f(z);" }}{PARA 11 "" 1 " " {XPPMATH 20 "6#,&*$)%\"zG\"\"#\"\"\"F(F(!\"\"" }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 248 "This next example searches a list L for the value \+ x. It outputs the position of the first occurrence of x in L and 0 oth erwise. I am also telling Maple that the input should be of type list . Below is an example with inputs of type integer. See " }{TEXT 364 5 "?type" }{TEXT -1 76 " for how to specify types and for what types a re available if you need them." }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 155 "position := proc(x::anything,L::list) local i;\n for i from 1 to nops(L) do if L[i]=x then return i fi; od;\n 0; # meaning x is not in the list\nend proc;" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#>%)posi tionGf*6$'%\"xG%)anythingG'%\"LG%%listG6#%\"iG6\"F/C$?(8$\"\"\"F3-%%no psG6#9%%%trueG@$/&F76#F29$OF2\"\"!F/F/F/" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 26 "position(x,[u,v,w,x,y,z]);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#\"\"%" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 20 "pos ition(y,[u,v,w]);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#\"\"!" }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 102 "This next example is an implementation of the Euclidean algorithm. It uses the multiple assignment." }}} {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 11 "a,b := 2,3;" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>6$%\"aG%\"bG6$\"\"#\"\"$" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 165 "EuclideanAlgorithm := proc(a::integer,b::intege r) local c,d,r;\n (c,d) := (abs(a),abs(b));\n while d <> 0 do r \+ := irem(c,d); (c,d) := (d,r); od;\n c;\nend proc;" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#>%3EuclideanAlgorithmGf*6$'%\"aG%(integerG'%\"bGF)6% %\"cG%\"dG%\"rG6\"F0C%>6$8$8%6$-%$absG6#9$-F86#9%?(F0\"\"\"F?F00F5\"\" !C$>8&-%%iremGF3>F36$F5FDF4F0F0F0" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 27 "EuclideanAlgorithm(24,210);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#\"\"'" }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 224 "Procedur es may be nested, nested lexical scoping is used (a la Pascal). \nPro cedures may be returned and passed freely as parameters. \nThe simple st debugging tool is to insert print statements in the procedure. For example" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 175 "EuclideanAlgor ithm := proc(a::integer,b::integer) local c,d,r;\n (c,d) := (abs(a) ,abs(b));\n while d <> 0 do r := irem(c,d); print(r); (c,d) := (d,r ); od;\n c;\nend proc:" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 27 "EuclideanAlgorithm(24,210);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#\"# C" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#\"#=" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#\"\"'" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#\"\"!" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#\"\"'" }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 95 "The next simplest debugging tool is the trace command. A ll assigment statements are displayed." }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 26 "trace(EuclideanAlgorithm);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#%3EuclideanAlgorithmG" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 27 "EuclideanAlgorithm(24,210);" }}{PARA 9 "" 1 "" {TEXT -1 45 "\{--> enter EuclideanAlgorithm, args = 24, 210" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>6$%\"cG%\"dG6$\"#C\"$5#" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"rG\"#C" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#\"#C" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#>6$%\"cG%\"dG6$\"$5#\"#C" }}{PARA 11 " " 1 "" {XPPMATH 20 "6#>%\"rG\"#=" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#\" #=" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>6$%\"cG%\"dG6$\"#C\"#=" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"rG\"\"'" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#\"\"'" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>6$%\"cG%\"dG6 $\"#=\"\"'" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"rG\"\"!" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#\"\"!" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>6$%\" cG%\"dG6$\"\"'\"\"!" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#\"\"'" }}{PARA 9 "" 1 "" {TEXT -1 51 "<-- exit EuclideanAlgorithm (now at top level) \+ = 6\}" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#\"\"'" }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 240 "The printf command can be used to print more detail ed information in a controlled format. It works just like the printf \+ command in the C language. The main difference is the %a option for p rinting algebraic objects like polynomials. E.g." }}}{EXCHG {PARA 0 " > " 0 "" {MPLTEXT 1 0 41 "printf( \"A polynomial %a\\n\", x^2-2*y*x ); " }}{PARA 6 "" 1 "" {TEXT -1 22 "A polynomial x^2-2*y*x" }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 301 "Here we print the quotients in the Eucli dean algorithm. Notice the three argument version of the iquo comman d. It computes and returns the quotient but assigns the third input ( a variable) the value of the remainder. Notice that the quotients, wi th exception of the first one, are typically small." }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 23 "q := iquo( 6, 4, 'r' );" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"qG\"\"\"" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 2 "r;" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#\"\"#" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 227 "EuclideanAlgorithm := proc(a::integer,b::i nteger) local c,d,r,q;\n (c,d) := (abs(a),abs(b));\n while d <> \+ 0 do \n r := irem(c,d,'q'); \n printf(\"Quotient = %d\\n \",q); \n (c,d) := (d,r); od;\n c;\nend proc:" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 36 "EuclideanAlgorithm(123456789,54321) ;" }}{PARA 6 "" 1 "" {TEXT -1 15 "Quotient = 2272" }}{PARA 6 "" 1 "" {TEXT -1 12 "Quotient = 1" }}{PARA 6 "" 1 "" {TEXT -1 12 "Quotient = 2 " }}{PARA 6 "" 1 "" {TEXT -1 12 "Quotient = 1" }}{PARA 6 "" 1 "" {TEXT -1 12 "Quotient = 1" }}{PARA 6 "" 1 "" {TEXT -1 12 "Quotient = 1 " }}{PARA 6 "" 1 "" {TEXT -1 13 "Quotient = 14" }}{PARA 6 "" 1 "" {TEXT -1 12 "Quotient = 1" }}{PARA 6 "" 1 "" {TEXT -1 12 "Quotient = 2 " }}{PARA 6 "" 1 "" {TEXT -1 12 "Quotient = 1" }}{PARA 6 "" 1 "" {TEXT -1 13 "Quotient = 26" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#\"\"$" } }}{EXCHG {PARA 0 "" 0 "" {TEXT -1 57 "Here is a recursive implementati on of Euclid's algorithm." }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 243 "EuclideanAlgorithm := proc(a::integer,b::integer)\n if a<0 then EuclideanAlgorithm(-a,b)\n elif b<0 then EuclideanAlgorithm(a,-b)\n elif a " 0 "" {MPLTEXT 1 0 27 "EuclideanAlgorithm(-30,16);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#\"\"#" }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 21 "There is \+ more. See " }{TEXT 323 5 "?proc" }{TEXT -1 45 " if you need more in formation or more tools." }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 " " }}}}{SECT 1 {PARA 3 "" 0 "" {TEXT -1 18 "Modular Arithmetic" }} {EXCHG {PARA 0 "" 0 "" {TEXT -1 129 "Modular arithmetic is done using \+ the mod operator in Maple. By default, Maple uses the positive rang e for the integers modulo " }{XPPEDIT 18 0 "m;" "6#%\"mG" }{TEXT -1 49 ", that is, the result is calculated in the range " }{XPPEDIT 18 0 "0 .. m-1;" "6#;\"\"!,&%\"mG\"\"\"F'!\"\"" }{TEXT -1 3 ". \n" }}} {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 8 "restart;" }}}{EXCHG {PARA 0 " > " 0 "" {MPLTEXT 1 0 9 "12 mod 7;" }}{PARA 11 "" 1 "" {XPPMATH 20 "6# \"\"&" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 12 "2+3*3 mod 7;" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#\"\"%" }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 11 "To compute " }{XPPEDIT 18 0 "a^(-1);" "6#)%\"aG,$\"\"\"! \"\"" }{TEXT -1 4 "mod " }{XPPEDIT 18 0 "m;" "6#%\"mG" }{TEXT -1 36 ", you can do either of the following" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 13 "2^(-1) mod 7;" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#\"\" %" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 10 "1/2 mod 7;" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#\"\"%" }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 11 "To compute " }{XPPEDIT 18 0 "a^n;" "6#)%\"aG%\"nG" }{TEXT -1 5 " m od " }{XPPEDIT 18 0 "m;" "6#%\"mG" }{TEXT -1 18 " you can do either" } }}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 14 "2 ^ 200 mod 7;" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#\"\"%" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 15 "2 &^ 200 mod 7;" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#\"\"%" }}} {EXCHG {PARA 0 "" 0 "" {TEXT -1 71 "Use the latter. The difference is that in the first case, the integer " }{XPPEDIT 18 0 "2^200;" "6#*$\" \"#\"$+#" }{TEXT -1 34 " was computed then reduced modulo " }{XPPEDIT 18 0 "m;" "6#%\"mG" }{TEXT -1 57 " . In the second case, all products were reduced modulo " }{XPPEDIT 18 0 "m;" "6#%\"mG" }{TEXT -1 31 " s o no large integers occured." }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 97 "W e will use a loop to verify that Fermat's (little) theorem holds for \+ p = 13 but not for n = 14." }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 51 "p := 13;\nfor i from 0 to p-1 do (i^p mod p) = i od;" }}{PARA 11 " " 1 "" {XPPMATH 20 "6#>%\"pG\"#8" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#/ \"\"!F$" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#/\"\"\"F$" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#/\"\"#F$" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#/\"\"$F$ " }}{PARA 11 "" 1 "" {XPPMATH 20 "6#/\"\"%F$" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#/\"\"&F$" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#/\"\"'F$" } }{PARA 11 "" 1 "" {XPPMATH 20 "6#/\"\"(F$" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#/\"\")F$" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#/\"\"*F$" } }{PARA 11 "" 1 "" {XPPMATH 20 "6#/\"#5F$" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#/\"#6F$" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#/\"#7F$" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 51 "n := 14;\nfor i from 0 to n-1 do (i ^n mod p) = i od;" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"nG\"#9" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#/\"\"!F$" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#/\"\"\"F$" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#/\"\"%\"\"#" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#/\"\"*\"\"$" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#/\"\"$\"\"%" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#/\"#7\" \"&" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#/\"#5\"\"'" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#/\"#5\"\"(" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#/\"#7\"\" )" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#/\"\"$\"\"*" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#/\"\"*\"#5" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#/\"\"%\"# 6" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#/\"\"\"\"#7" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#/\"\"!\"#8" }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 143 "You can use the ichrem command to solve the Chinese remainder problem. \n Suppose we want to solve u == 3 mod 5 and u == 4 mod 7 and u = 1 mod 3 ." }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 31 "u := chrem( [3,4,1], [ 5,7,3] );" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"uG\"#))" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 8 "u mod 5;" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#\"\"$" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 8 "u mo d 7;" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#\"\"%" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 8 "u mod 3;" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#\"\" \"" }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 4 "The " }{TEXT 371 5 "chrem" } {TEXT -1 95 " command applies itself accross the coefficients of polyn omials. E.g. suppose we want to solve" }}{PARA 0 "" 0 "" {TEXT -1 4 " f = " }{XPPEDIT 18 0 "3*x^2+2*x;" "6#,&*&\"\"$\"\"\"*$%\"xG\"\"#F&F&*& F)F&F(F&F&" }{TEXT -1 15 " mod 7 and f = " }{XPPEDIT 18 0 "2*x^3+5*x+7 ;" "6#,(*&\"\"#\"\"\"*$%\"xG\"\"$F&F&*&\"\"&F&F(F&F&\"\"(F&" }{TEXT -1 8 " mod 11." }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 46 "f := chre m( [3*x^2+2*x,2*x^3+5*x+7], [7,11] );" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"fG,**&\"#m\"\"\")%\"xG\"\"#F(F(*&\"#;F(F*F(F(*&\"#NF()F*\"\"$F( F(\"\"(F(" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 8 "f mod 7;" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#,&*&\"\"$\"\"\")%\"xG\"\"#F&F&*&F)F&F( F&F&" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 9 "f mod 11;" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#,(*&\"\"#\"\"\")%\"xG\"\"$F&F&*&\"\"&F&F(F&F &\"\"(F&" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}}}{EXCHG } {SECT 1 {PARA 3 "" 0 "" {TEXT -1 29 "Polynomials and Finite Fields" }} {EXCHG {PARA 0 "" 0 "" {TEXT -1 94 "Polynomials in Maple are simply in put as formulae using the arithmetic operators. For example" }}} {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 9 "restart;\n" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 18 "f := x^4-3*x^2+12;" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"fG,(*$)%\"xG\"\"%\"\"\"F**&\"\"$F*)F(\"\"#F*!\"\"\" #7F*" }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 33 "is a polynomial in one va riable, " }{XPPEDIT 18 0 "x;" "6#%\"xG" }{TEXT -1 68 " with integer co efficients. Here is a polynomial in two variables. " }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 31 "a := (x-y)*(x^2-y^2)*(x^3-y^3);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"aG*(,&%\"xG\"\"\"%\"yG!\"\"F(,&*$)F'\"\" #F(F(*$)F)F.F(F*F(,&*$)F'\"\"$F(F(*$)F)F4F(F*F(" }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 68 "To multiply the factors of the polynomial out use th e expand command" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 10 "expand( a);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#,.*$)%\"xG\"\"'\"\"\"F(*&)F&\" \"%F()%\"yG\"\"#F(!\"\"*&F&F()F-\"\"&F(F(*&F-F()F&F2F(F/*&)F-F+F()F&F. F(F(*$)F-F'F(F/" }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 92 "To factor the \+ polynomial into prime factors with integer coefficients use the factor command" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 21 "factor(f);\nfac tor(a);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#,(*$)%\"xG\"\"%\"\"\"F(*&\" \"$F()F&\"\"#F(!\"\"\"#7F(" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#*(),&%\" xG\"\"\"%\"yG!\"\"\"\"$F',&F&F'F(F'F',(*$)F&\"\"#F'F'*&F&F'F(F'F'*$)F( F/F'F'F'" }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 68 "To compute the degree of a polynomial and read off a coefficient in " }{XPPEDIT 18 0 "x^i; " "6#)%\"xG%\"iG" }{TEXT -1 3 " do" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 26 "degree(f,x); coeff(f,x,2);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#\"\"%" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#!\"$" }}} {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 25 "degree(a,x); degree(a,y);" } }{PARA 11 "" 1 "" {XPPMATH 20 "6#\"\"'" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#\"\"'" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 27 "coeff(a,x,2) ; coeff(a,y,2);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#*$)%\"yG\"\"%\"\"\" " }}{PARA 11 "" 1 "" {XPPMATH 20 "6#,$*$)%\"xG\"\"%\"\"\"!\"\"" }}} {EXCHG {PARA 0 "" 0 "" {TEXT -1 78 "We will only need polynomials in \+ one variable and mostly work in the rings " }{TEXT 366 1 "Z" }{TEXT -1 9 "[x] and " }{TEXT 358 1 "Z" }{TEXT -1 2 "p[" }{TEXT 359 1 "x" } {TEXT -1 9 "] where " }{XPPEDIT 18 0 "p;" "6#%\"pG" }{TEXT -1 66 " wi ll be a prime integer. In what follows we show operations for " } {TEXT 354 1 "Z" }{TEXT -1 2 "p[" }{TEXT 356 1 "x" }{TEXT -1 11 "] and \+ also " }{TEXT 352 1 "Q" }{TEXT -1 1 "[" }{TEXT 353 1 "x" }{TEXT -1 88 "]. For help for operations for polynomials see ?polynomial. For help for operations in " }{TEXT 355 1 "Z" }{TEXT -1 2 "p[" }{TEXT 357 1 "x " }{TEXT -1 36 "] see ?mod.\nHere are two polynomials" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 23 "a := 2*x^6-3*x^5+3*x+3;" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"aG,**&\"\"#\"\"\")%\"xG\"\"'F(F(*&\"\"$F ()F*\"\"&F(!\"\"*&F-F(F*F(F(F-F(" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 19 "b := 3*x^4-4*x^3+1;" }}{PARA 11 "" 1 "" {XPPMATH 20 " 6#>%\"bG,(*&\"\"$\"\"\")%\"xG\"\"%F(F(*&F+F()F*F'F(!\"\"F(F(" }}} {EXCHG {PARA 0 "" 0 "" {TEXT -1 12 "The command " }{TEXT 360 4 "eval" }{TEXT -1 67 "( a(x), x=k ) evaluates the polynomial a(x) at x = k. T he command " }{TEXT 361 4 "Eval" }{TEXT -1 11 "( a, x=k ) " }{TEXT 362 3 "mod" }{TEXT -1 36 " p does this modulo p . For example" }}} {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 15 "eval( a, x=2 );" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#\"#T" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 21 "Eval( a, x=2 ) mod 7;" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#\"\"'" }} }{EXCHG {PARA 0 "" 0 "" {TEXT -1 76 "Here is how we can tabulate the v alues of this polynomial for all values in " }{XPPEDIT 18 0 "Z[7];" "6 #&%\"ZG6#\"\"(" }{TEXT -1 39 ". We conclude that a(x) has no roots. \+ " }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 33 "seq( Eval(a,x=i) mod 7, i=0..6 );" }}{PARA 11 "" 1 "" {XPPMATH 20 "6)\"\"$\"\"&\"\"'F%\"\"%F& F$" }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 59 "We can interpolate a polyno mial from it's values as follows" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 2 "a;" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#,**&\"\"#\"\"\") %\"xG\"\"'F&F&*&\"\"$F&)F(\"\"&F&!\"\"*&F+F&F(F&F&F+F&" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 21 "X := [seq(i,i=0..8)];" }}{PARA 11 " " 1 "" {XPPMATH 20 "6#>%\"XG7+\"\"!\"\"\"\"\"#\"\"$\"\"%\"\"&\"\"'\"\" (\"\")" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 34 "Y := [seq( eval(a ,x=i), i=0..8 )];" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"YG7+\"\"$\"\" &\"#T\"$T(\"%N^\"&$*=#\"&0+(\"',\\=\"'6gU" }}}{EXCHG {PARA 0 "> " 0 " " {MPLTEXT 1 0 14 "interp(X,Y,p);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#, **&\"\"#\"\"\")%\"pG\"\"'F&F&*&\"\"$F&)F(\"\"&F&!\"\"*&F+F&F(F&F&F+F& " }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 13 "The command " }{TEXT 326 6 " expand" }{TEXT -1 1 "(" }{TEXT 331 3 "a*b" }{TEXT -1 30 ") multiplies out the product " }{XPPEDIT 18 0 "a*b;" "6#*&%\"aG\"\"\"%\"bGF%" } {TEXT -1 15 ". The command " }{TEXT 327 6 "Expand" }{TEXT -1 1 "(" } {TEXT 330 3 "a*b" }{TEXT -1 2 ") " }{TEXT 328 3 "mod" }{TEXT -1 1 " " }{TEXT 329 1 "p" }{TEXT -1 25 " does the product modulo " }{XPPEDIT 18 0 "p;" "6#%\"pG" }{TEXT -1 75 ", that is, all coefficients in the r esulting polynomial are reduced modulo " }{XPPEDIT 18 0 "p;" "6#%\"pG " }{TEXT -1 15 " . For example" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 7 "p := 5;" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"pG\"\"&" }}} {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 12 "expand(a*b);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#,4*&\"\"'\"\"\")%\"xG\"#5F&F&*&\"# " 0 "" {MPLTEXT 1 0 18 "Expand(a*b) mod p;" }}{PARA 11 "" 1 "" {XPPMATH 20 "6 #,4\"\"$\"\"\"*&F$F%%\"xGF%F%*&F$F%)F'F$F%F%*&\"\"#F%)F'\"\"%F%F%*$)F' \"\"&F%F%*&F+F%)F'\"\"'F%F%*&F+F%)F'\"\")F%F%*&F$F%)F'\"\"*F%F%*$)F'\" #5F%F%" }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 15 "The operations " } {TEXT 332 3 "rem" }{TEXT -1 12 "(a,b,x) and " }{TEXT 333 3 "quo" } {TEXT -1 45 "(a,b,x) compute, respectively, the remainder " }{XPPEDIT 18 0 "r;" "6#%\"rG" }{TEXT -1 14 " and quotient " }{XPPEDIT 18 0 "q;" "6#%\"qG" }{TEXT -1 4 " of " }{XPPEDIT 18 0 "a;" "6#%\"aG" }{TEXT -1 11 "divided by " }{XPPEDIT 18 0 "b;" "6#%\"bG" }{TEXT -1 12 " satisfyi ng " }{XPPEDIT 18 0 "a = b*q+r;" "6#/%\"aG,&*&%\"bG\"\"\"%\"qGF(F(%\"r GF(" }{TEXT -1 7 " with " }{XPPEDIT 18 0 "r = 0;" "6#/%\"rG\"\"!" } {TEXT -1 4 " or " }{XPPEDIT 18 0 "deg(r) < deg(b);" "6#2-%$degG6#%\"rG -F%6#%\"bG" }{TEXT -1 36 ". The corresponding operations for " } {XPPEDIT 18 0 "Z[p];" "6#&%\"ZG6#%\"pG" }{TEXT -1 5 " are " }{TEXT 336 3 "Rem" }{TEXT -1 8 "(a,b,x) " }{TEXT 337 3 "mod" }{TEXT 334 1 " \+ " }{TEXT -1 8 "p and " }{TEXT 338 3 "Quo" }{TEXT -1 8 "(a,b,x) " } {TEXT 339 3 "mod" }{TEXT -1 17 " p . For example" }}}{EXCHG {PARA 0 " > " 0 "" {MPLTEXT 1 0 16 "r := rem(a,b,x);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"rG,*#\"#&)\"#F\"\"\"*&#\"#G\"\"*F)%\"xGF)F)*&#\"\"# \"\"$F)*$)F.F1F)F)!\"\"*&#\"#;F(F)*$)F.F2F)F)F5" }}}{EXCHG {PARA 0 "> \+ " 0 "" {MPLTEXT 1 0 16 "q := quo(a,b,x);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"qG,(*&#\"\"#\"\"$\"\"\"*$)%\"xGF(F*F*F**&#F*\"\"*F*F-F*!\"\" #\"\"%\"#FF1" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 20 "expand( a = b*q+r );" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#/,**&\"\"#\"\"\")%\"xG\" \"'F'F'*&\"\"$F')F)\"\"&F'!\"\"*&F,F'F)F'F'F,F'F$" }}}{EXCHG {PARA 0 " > " 0 "" {MPLTEXT 1 0 22 "r := Rem(a,b,x) mod p;" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"rG,(*&\"\"#\"\"\")%\"xG\"\"$F(F(*$)F*F'F(F(*&F'F(F* F(F(" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 22 "q := Quo(a,b,x) mod p;" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"qG,(*&\"\"%\"\"\")%\"xG\"\" #F(F(F*F(\"\"$F(" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 26 "Expand( a = b*q+r ) mod p;" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#/,**&\"\"#\"\" \")%\"xG\"\"'F'F'*&F&F')F)\"\"&F'F'*&\"\"$F'F)F'F'F/F'F$" }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 13 "The commands " }{TEXT 348 3 "gcd" }{TEXT -1 10 "(a,b) and " }{TEXT 349 3 "lcm" }{TEXT -1 136 "(a,b) compute, re spectively the greatest common divisor and least common multiple of tw o polynomials. The corresponding operations for " }{XPPEDIT 18 0 "Z[p ];" "6#&%\"ZG6#%\"pG" }{TEXT -1 5 " are " }{TEXT 344 3 "Gcd" }{TEXT -1 6 "(a,b) " }{TEXT 347 3 "mod" }{TEXT -1 7 " p and " }{TEXT 345 3 "L cm" }{TEXT -1 6 "(a,b) " }{TEXT 346 3 "mod" }{TEXT -1 16 " p. For exa mple" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 23 "gcd(x^4-2*x^2+2,x^4 +1);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#\"\"\"" }}}{EXCHG {PARA 0 "> \+ " 0 "" {MPLTEXT 1 0 29 "Gcd(x^4-2*x^2+2,x^4+1) mod p;" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#,&*$)%\"xG\"\"#\"\"\"F(F'F(" }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 12 "The command " }{TEXT 335 5 "gcdex" }{TEXT -1 24 "(a, b,x,'s','t') outputs " }{XPPEDIT 18 0 "g = GCD(a,b);" "6#/%\"gG-%$GCDG 6$%\"aG%\"bG" }{TEXT -1 49 " . It also outputs through the input para meters " }{XPPEDIT 18 0 "s,t;" "6$%\"sG%\"tG" }{TEXT -1 35 " integers satisfying the equation " }{XPPEDIT 18 0 "s*a+t*b = g;" "6#/,&*&%\"sG \"\"\"%\"aGF'F'*&%\"tGF'%\"bGF'F'%\"gG" }{TEXT -1 17 " and satisfying " }{XPPEDIT 18 0 "deg(s) < deg(b);" "6#2-%$degG6#%\"sG-F%6#%\"bG" } {TEXT -1 6 " and " }{XPPEDIT 18 0 "deg(t) < deg(a);" "6#2-%$degG6#%\" tG-F%6#%\"aG" }{TEXT -1 35 " . The corresponding command for " } {XPPEDIT 18 0 "Z[p];" "6#&%\"ZG6#%\"pG" }{TEXT -1 45 " is Gcdex(a,b,x ,'s','t') mod p. For example" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 21 "gcdex(a,b,x,'s','t');" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#\"\"\" " }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 2 "s;" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#,*#\"%Zo\"&lb#\"\"\"*&#\"%c8\"%8^F'%\"xGF'!\"\"*&#\"%e$ )F&F'*$)F,\"\"#F'F'F'*&#\"%7LF&F'*$)F,\"\"$F'F'F-" }}}{EXCHG {PARA 11 "" 1 "" {XPPMATH 20 "6#,.#\"%C]\"&lb#\"\"\"*&#\"$,#F&F'%\"xGF'!\"\"*&# \"%e\\F&F')F+\"\"$F'F'*&#\"%MZF&F'*$)F+\"\"#F'F'F,*&#\"%3AF&F')F+\"\"& F'F'*&#\"%)=\"\"%8^F'*$)F+\"\"%F'F'F," }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 18 "expand( s*a+t*b );" }}{PARA 11 "" 1 "" {XPPMATH 20 "6 #\"\"\"" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 27 "Gcdex(a,b,x,'s', 't') mod p;" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#,(*$)%\"xG\"\"#\"\"\"F( *&\"\"$F(F&F(F(F(F(" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 2 "s;" } }{PARA 11 "" 1 "" {XPPMATH 20 "6#,&%\"xG\"\"\"\"\"%F%" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 2 "t;" }}{PARA 11 "" 1 "" {XPPMATH 20 " 6#,**$)%\"xG\"\"$\"\"\"F(*&F'F()F&\"\"#F(F(*&F'F(F&F(F(\"\"%F(" }}} {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 22 "Expand(a*s+t*b) mod p;" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#,(*$)%\"xG\"\"#\"\"\"F(*&\"\"$F(F&F(F( F(F(" }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 12 "The command " }{TEXT 340 7 "irreduc" }{TEXT -1 35 "(a) outputs true if the polynomial " } {XPPEDIT 18 0 "a(x);" "6#-%\"aG6#%\"xG" }{TEXT -1 32 " is irreducible \+ and the command " }{TEXT 341 6 "factor" }{TEXT -1 34 "(a) outputs the factorization of " }{XPPEDIT 18 0 "a(x);" "6#-%\"aG6#%\"xG" }{TEXT -1 77 " into irreducible factors over the integers. The corresponding commands for " }{XPPEDIT 18 0 "Z[p];" "6#&%\"ZG6#%\"pG" }{TEXT -1 7 " are " }{TEXT 342 7 "Irreduc" }{TEXT -1 4 "(a) " }{TEXT 350 3 "mod" }{TEXT -1 8 " p and " }{TEXT 343 6 "Factor" }{TEXT -1 4 "(a) " } {TEXT 351 3 "mod" }{TEXT -1 16 " p. For example" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 10 "factor(a);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6 #,**&\"\"#\"\"\")%\"xG\"\"'F&F&*&\"\"$F&)F(\"\"&F&!\"\"*&F+F&F(F&F&F+F &" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 10 "factor(b);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#*&,(*&\"\"$\"\"\")%\"xG\"\"#F'F'*&F*F'F)F'F' F'F'F'),&F)F'F'!\"\"F*F'" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 16 "Factor(a) mod 5;" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#,$*(\"\"#\"\"\",& %\"xGF&F&F&F&),&F(F&\"\"%F&\"\"&F&F&" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 16 "Factor(b) mod 5;" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#, $*(\"\"$\"\"\",(*$)%\"xG\"\"#F&F&*&\"\"%F&F*F&F&F+F&F&),&F*F&F-F&F+F&F &" }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 15 "The polynomial " }{XPPEDIT 18 0 "x^2+x+1;" "6#,(*$%\"xG\"\"#\"\"\"F%F'F'F'" }{TEXT -1 27 " is ir reducible modulo 2 " }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 22 "Fac tor(x^2+x+1) mod 2;" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#,(*$)%\"xG\"\"# \"\"\"F(F&F(F(F(" }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 143 "and hence th e finite field of 4 elements can be represented by polynomials of degr ee < 2 over the integers modulo 2, i.e. the polynomials R = " } {XPPEDIT 18 0 "\{0, 1, x+1, x\};" "6#<&\"\"!\"\"\",&%\"xGF%F%F%F'" } {TEXT -1 79 " . We construct the multiplication table M for this fi nite field as follows." }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 35 "R := [0,1,x,x+1];\nM := matrix(4,4);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6 #>%\"RG7&\"\"!\"\"\"%\"xG,&F(F'F'F'" }}{PARA 11 "" 1 "" {XPPMATH 20 "6 #>%\"MG-%&arrayG6%;\"\"\"\"\"%F(7\"" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 81 "for i to 4 do \n for j to 4 do M[i,j] := Rem(R[i]* R[j],x^2+x+1,x) mod 2 od;\nod;" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 9 "print(M);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#K%'matrixG6#7&7&\" \"!F(F(F(7&F(\"\"\"%\"xG,&F+F*F*F*7&F(F+F,F*7&F(F,F*F+Q(pprint06\"" }} }{EXCHG {PARA 0 "" 0 "" {TEXT -1 5 "See " }{TEXT 365 4 "?mod" }{TEXT -1 66 " for other operations on polynomials over the integers modulo \+ p ." }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}}}{SECT 1 {PARA 3 "" 0 "" {TEXT -1 28 "Subscripted Names and Arrays" }}{EXCHG {PARA 0 "" 0 "" {TEXT -1 69 "Variables may be subscripted. For example, here \+ is a polynomial in " }{XPPEDIT 18 0 "x[1],x[2],x[3];" "6%&%\"xG6#\"\" \"&F$6#\"\"#&F$6#\"\"$" }{TEXT -1 37 ". You can assign to the subscr ipts." }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 9 "restart;\n" }}} {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 22 "f := 1-x[1]*x[2]*x[3];" }} {PARA 0 "> " 0 "" {MPLTEXT 1 0 10 "x[1] := 3;" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"fG,&\"\"\"F&*(&%\"xG6#F&F&&F)6#\"\"#F&&F)6#\"\"$F&! \"\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>&%\"xG6#\"\"\"\"\"$" }}} {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 2 "f;" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#,&\"\"\"F$*(\"\"$F$&%\"xG6#\"\"#F$&F(6#F&F$!\"\"" }}} {EXCHG {PARA 0 "" 0 "" {TEXT -1 203 "There may be more than one subscr ipt and the subscripts may be any value. \nArrays are like arrays from computing science. Here is how to create a one-dimensional array A w ith values indexed from 1 to 5." }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 17 "A := Array(1..5);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"AG-%' RTABLEG6%\"*o5&*\\\"-%'VECTORG6#7'\"\"!F-F-F-F-%&ArrayG" }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 60 "By default, the entries in the array A ar e initialized to 0." }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 10 "A[1] := 3;" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>&%\"AG6#\"\"\"\"\"$" }}} {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 5 "A[1];" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#\"\"$" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 41 "for i from 2 to 5 do A[i] := 3*A[i-1] od;" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>&%\"AG6#\"\"#\"\"*" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>&%\"AG6# \"\"$\"#F" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>&%\"AG6#\"\"%\"#\")" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#>&%\"AG6#\"\"&\"$V#" }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 189 "Here is a Maple procedure for multiplying two \+ positive integers of length m and n stored in the arrays A and B base \+ 10 where the arrays are indexed from 0, so A is indexed from 0 to m-1. N" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 280 "IntMul := proc(m::p osint,n::posint,A::Array,B::Array)\nlocal C, i,j,carry,t;\nC := Array( 0..m+n-1);\nfor i from 0 to m-1 do\n carry := 0;\n for j from 0 \+ to n-1 do\n t := A[i]*B[j]+carry+C[i+j];\n C[i+j] := ire m(t,10,'carry');\n od;\n C[i+j] := carry;\nod;\nC;\nend: " }}} {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 17 "a,b := 9876,1234;" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>6$%\"aG%\"bG6$\"%w)*\"%M7" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 24 "A := convert(a,base,10);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"AG7&\"\"'\"\"(\"\")\"\"*" }}}{EXCHG {PARA 0 " " 0 "" {TEXT -1 67 "The above is a list. Here is a short way to make \+ it into an Array." }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 19 "A := A rray(0..3,A);" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#>%\"AG-%'RTABLEG6%\"* )Q^*\\\"-%&ArrayG6';\"\"!\"\"$<&/6#F-\"\"'/6#\"\"\"\"\"(/6#\"\"#\"\")/ 6#F.\"\"*/%)datatypeG%)anythingG/%(storageG%,rectangularG/%&orderG%.Fo rtran_orderGF*" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 36 "B := Arra y(0..3,convert(b,base,10));" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#>%\"BG- %'RTABLEG6%\"*_9&*\\\"-%&ArrayG6';\"\"!\"\"$<&/6#F-\"\"%/6#\"\"\"F./6# \"\"#F8/6#F.F5/%)datatypeG%)anythingG/%(storageG%,rectangularG/%&order G%.Fortran_orderGF*" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 21 "C := IntMul(4,4,A,B);" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#>%\"CG-%'RTABLEG6 %\"*;:&*\\\"-%&ArrayG6';\"\"!\"\"(<*/6#F-\"\"%/6#\"\"\"\"\")/6#\"\"#\" \"*/6#\"\"$\"\"'/6#F2F6/6#\"\"&F5/6#F>F9/6#F.F5/%)datatypeG%)anythingG /%(storageG%,rectangularG/%&orderG%.Fortran_orderGF*" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 30 "c := add( C[i]*10^i, i=0..7 );" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"cG\")%)p=7" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 4 "a*b;" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#\")%)p=7" }}} {EXCHG {PARA 0 "" 0 "" {TEXT -1 302 "The same basic procedure can be u sed to multiply polynomials. Suppose we represent a polynomial as a l ist of coefficients. To allow us to convert from Maple's polynomial r epresentation we'll write a Maple procedure MapleToList and ListToMapl e to convert from and to Maple's polynomial representation." }}} {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 210 "MapleToList := proc(f::poly nom(rational),x) local i;\n if f=0 then return [] fi;\n [seq( co eff(f,x,i), i=0..degree(f,x) )];\nend:\nListToMaple := proc(L,x) local i;\n add( L[i]*x^(i-1), i=1..nops(L) );\nend:" }}}{EXCHG {PARA 0 " > " 0 "" {MPLTEXT 1 0 18 "f := 3*x^3-12*x+5;" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"fG,(*&\"\"$\"\"\")%\"xGF'F(F(*&\"#7F(F*F(!\"\"\"\"& F(" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 22 "F := MapleToList(f,x) ;" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"FG7&\"\"&!#7\"\"!\"\"$" }}} {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 17 "ListToMaple(F,x);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#,(*&\"\"$\"\"\")%\"xGF%F&F&*&\"#7F&F(F&!\"\" \"\"&F&" }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 194 "Now we can write the \+ polynomial multiplication procedure - again, we'll use Arrays of coeff icients. We'll show how to construct the Array in two ways, the secon d being a shortcut for the first." }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 366 "PolMul := proc(f::list(rational),g::list(rational)) \nlocal C,m,n,i,j,A,B;\nif f=[] or g=[] then return [] fi;\nm := nops( f)-1; A := Array(0..m);\nfor i from 0 to m do A[i] := f[i+1] od;\nn := nops(g)-1; B := Array(0..n,g);\nC := Array(0..m+n+1);\nfor i from 0 t o m do\n for j from 0 to n do\n C[i+j] := A[i]*B[j]+C[i+j]; \n od;\nod;\n[ seq( C[i], i=0..m+n ) ];\nend: " }}}{EXCHG {PARA 0 " > " 0 "" {MPLTEXT 1 0 42 "a := -62-50*x^5-12*x^4-18*x^3+31*x^2-26*x;" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"aG,.\"#i!\"\"*&\"#]\"\"\")%\"xG \"\"&F*F'*&\"#7F*)F,\"\"%F*F'*&\"#=F*)F,\"\"$F*F'*&\"#JF*)F,\"\"#F*F** &\"#EF*F,F*F'" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 21 "b := x^4+5 *x^2+6*x+7;" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"bG,**$)%\"xG\"\"%\" \"\"F**&\"\"&F*)F(\"\"#F*F**&\"\"'F*F(F*F*\"\"(F*" }}}{EXCHG {PARA 0 " > " 0 "" {MPLTEXT 1 0 63 "ListToMaple( PolMul( MapleToList(a,x), Maple ToList(b,x) ), x );" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#,6\"$M%!\"\"*& \"$a&\"\"\"%\"xGF(F%*&\"$\\#F()F)\"\"#F(F%*&\"#qF()F)\"\"$F(F%*&\"#**F ()F)\"\"%F(F%*&\"$Q&F()F)\"\"&F(F%*&\"$H$F()F)\"\"'F(F%*&\"$o#F()F)\" \"(F(F%*&\"#7F()F)\"\")F(F%*&\"#]F()F)\"\"*F(F%" }}}{EXCHG {PARA 0 "> \+ " 0 "" {MPLTEXT 1 0 12 "expand(a*b);" }}{PARA 11 "" 1 "" {XPPMATH 20 " 6#,6\"$M%!\"\"*&\"$a&\"\"\"%\"xGF(F%*&\"$\\#F()F)\"\"#F(F%*&\"#qF()F) \"\"$F(F%*&\"#**F()F)\"\"%F(F%*&\"$Q&F()F)\"\"&F(F%*&\"$H$F()F)\"\"'F( F%*&\"$o#F()F)\"\"(F(F%*&\"#7F()F)\"\")F(F%*&\"#]F()F)\"\"*F(F%" }}} {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}}}{EXCHG }}{MARK "13" 0 } {VIEWOPTS 1 1 0 1 1 1803 1 1 1 1 }{PAGENUMBERS 0 1 2 33 1 1 } {RTABLE_HANDLES 149951068 149951388 149951452 149951516 }{RTABLE M7R0 I6RTABLE_SAVE/149951068X*%)anythingG6"6"[gl!!%!!!"&"&""$""*"#F"#")"$V#F& } {RTABLE M7R0 I6RTABLE_SAVE/149951388X*%)anythingG6"6"[gl!!%!!!"%!$""'""("")""*F& } {RTABLE M7R0 I6RTABLE_SAVE/149951452X*%)anythingG6"6"[gl!!%!!!"%!$""%""$""#"""F& } {RTABLE M7R0 I6RTABLE_SAVE/149951516X*%)anythingG6"6"[gl!!%!!!")!(""%"")""*""'F("""""#F+F& }