{VERSION 6 0 "IBM INTEL LINUX" "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 363 "" 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 364 "Helvetica" 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 365 "" 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 "fixed" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 368 "fix ed" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 369 "" 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 370 "" 0 1 0 0 0 0 0 1 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 }{CSTYLE "" -1 372 "" 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 375 "" 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 376 "" 0 1 0 0 0 0 1 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 "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 "Dia gnostic" -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 "Ti mes" 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 83 "Michael Monagan\nDep artment of Mathematics\nSimon Fraser University\nUpdated May 2013." }} }{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 8 "restart;" }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 238 "These notes are for Maple V Release 13. They ar e platform independent, i.e., they are the same for the Macintosh, PC, and Unix versions of Maple. These notes should be backwards compatib le to Maple 9 and forwards compatible to Maple 17." }}}{SECT 1 {PARA 3 "" 0 "" {TEXT -1 21 "Maple as a Calculator" }}{EXCHG {PARA 0 "" 0 " " {TEXT -1 141 "Input of a numerical calculation uses +, -, *, /, and \+ ^ for addition, subtraction, multiplication, division, and exponentiat ion 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 "Be cause the input involved integers, not decimal numbers, Maple calculat es the exact fraction when there is a division, automatically cancelli ng out the greatest common divisor (GCD). In this case the GCD is 15, which you can calculate specifically as" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 14 "igcd(120,105);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#\"# :" }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 230 "Observe that every command \+ ends with a semicolon ; This is a gramatical requirement of Maple. \+ If you forget, Maple will assume that the comand is not complete. Thi s 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 decima l numbers very much in this course. However, here is how you would do some decimal calculations. The presence of a decimal point . in a n umber means that the number is a decimal number and Maple will, by def ault, do all calculations 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 example s. Now, if you have input an exact quantity, like the " }{XPPEDIT 18 0 "sqrt(2);" "6#-%%sqrtG6#\"\"#" }{TEXT -1 186 " above, and you now w ant to get a numerical value to 3 decimal digits, use the evalf comman d to evaluate to floating point. Use the % character to refer to the \+ previous Maple 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 sym bol, e.g. " }{XPPEDIT 18 0 "x;" "6#%\"xG" }{TEXT -1 107 " and the arit hmetic operators and functions known to Maple. For example, here is a quartic polynomial 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 polynomial 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 late r. We do this 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 th e polynomial. 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 following commands differentiate " }{TEXT 257 2 "f " }{TEXT -1 16 "wi th respect to " }{TEXT 258 2 "x " }{TEXT -1 11 "and factor " }{TEXT 256 1 "f" }{TEXT -1 61 " into irreducible factors over the field of ra tional numbers." }}}{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 graph functions using the plotting commands. The basic syntax fo r the " }{TEXT 259 4 "plot" }{TEXT -1 67 " command for a function of o ne variable 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%-%'C URVESG6$7U7$$\"3A+++++++S!#=$\"3!*)**********fD)F*7$$\"3)omm;arz@%F*$ \"3'HdY(e^hiwF*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\"fEEXF*7$$\"3Gnm\"zR'okcF*$\"3*fsAhnBc.%F*7$$\"3U***\\i5`h( eF*$\"3Y&3)3IY!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.K vF*$\"3K.@B&zVOA'Fgp7$$\"3_++D\"o7Tv(F*$\"3XRRPb^HGNFgp7$$\"3kLLL$Q*o] zF*$\"3yt3OjetQ9Fgp7$$\"3W++D\"=lj;)F*$!3E%y6O%HMg^!#?7$$\"3%3+]PaR)RFgp7$$\"3!ommT5k]**)F*$!3;akF'[NdQ%Fgp7$$\"32mm\"zRQb@*F *$!3e!*pNeekTVFgp7$$\"3r***\\(=>Y2%*F*$!3*R-6!*>c2!RFgp7$$\"3Omm;zXu9' *F*$!3!)z'oVfvY)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![hY5Fht$\"3[qxJmHB1gFgp7$$\"3=LLLQx$o1\"Fht$\"3-sVg)psb[*F gp7$$\"3+++]P+V)3\"Fht$\"3_$ec@jk\"Fht$\"3AHqbs4 U&R%F*7$$\"3')**\\7`Wl77Fht$\"3\")eO)3Tv\\C&F*7$$\"3smmm'*RRL7Fht$\"37 LxtDG_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\"e5Fht7$$\"3lmmmw(GpL\"Fht$\"3o@\"o[wNR=\"Fht7$$\"3%***\\7o K0e8Fht$\"36f%*H*p9tK\"Fht7$$\"3%******\\oi\"o8Fht$\"3uW&zY*fS*R\"Fht7 $$\"3#***\\(=5s#y8Fht$\"3I#*p?yHzt9Fht7$$\"3#**\\P40O\"*Q\"Fht$\"31%pU V&*Hjb\"Fht7$$\"3!**************R\"Fht$\"3&***********fT;Fht-%'COLOURG 6&%$RGBG$\"*++++\"!\")$\"\"!F\\\\lF[\\l-%+AXESLABELSG6$%\"xGQ!6\"-%%VI EWG6$;$\"\"%!\"\"$\"#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 the graph I can see a local minimum near x=0.9. We c an 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 some functions which we integrate to try Maple out." }}}{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 {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 {PARA 0 "> " 0 "" {MPLTEXT 1 0 25 "h := x*exp(-x^2)/ln(1+x);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"h G*(%\"xG\"\"\"-%$expG6#,$*$)F&\"\"#F'!\"\"F'-%#lnG6#,&F'F'F&F'F/" }}} {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 15 "integrate(h,x);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#-%$intG6$*(%\"xG\"\"\"-%$expG6#,$*$)F'\"\"#F(! \"\"F(-%#lnG6#,&F(F(F'F(F0F'" }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 105 " That means Maple could not integrate it. This means there is no eleme ntary closed form for the integral." }}}{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\"\"\"-%$expG6#,$*$)F$\"\"#F%!\"\"F%- %#lnG6#,&F%F%F$F%F-" }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 172 "We have u sed the name f as variable to refer to formulae and the symbols x for an uknown in a formula. Often you will have assigned to a name lik e 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 Sy stems of Equations" }}{EXCHG {PARA 0 "" 0 "" {TEXT -1 18 "The Maple co mmand " }{TEXT 367 17 "sum(f(i), i=m..n)" }{TEXT -1 20 " calculates th e 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 M aple's output. You can use the expand, simplify, factor and combine c ommands to do this." }}}{EXCHG }{EXCHG }{EXCHG }{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 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%\"nG\"\"\"F(!\"\"F(,&F&F(F(F)F)" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 26 "f := sum( 2^k, k=0..n-1 );" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"fG,&)\"\"#%\"nG\"\"\"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 368 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 {PARA 0 "" 0 "" {TEXT -1 213 "Maple can solve recurrence r elations which is useful in the analysis of algorithms. The unoptimiz ed version of the Fast Fourier Transform does two recursive calls on a n input of half the size + n multiplications." }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 45 "FFTcost := \{ T(n) = 2*T(n/2) + n, T(1) = 0 \}; " }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%(FFTcostG<$/-%\"TG6#\"\"\"\"\"!/ -F(6#%\"nG,&*&\"\"#F*-F(6#,$*&F2!\"\"F/F*F*F*F*F/F*" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 24 "rsolve( FFTcost, T(n) );" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#*(%\"nG\"\"\"-%#lnG6#F$F%-F'6#\"\"#!\"\"" }}} {EXCHG {PARA 0 "" 0 "" {TEXT -1 141 "Here is the recurrence relation f or Gaussian elimination of an n by n matrix A over a field F to row Ec helon form.\nGaussian elimination does " }{XPPEDIT 18 0 "(n-1)^2;" "6# *$),&%\"nG\"\"\"F'!\"\"\"\"#F'" }{TEXT -1 86 " multiplications to zero out the 1st column then repeates on the n-1 by n-1 matrix. " }}} {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 43 "rec := \{ T(n) = T(n-1) + (n -1)^2, T(1)=0 \};" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%$recG<$/-%\"TG6 #\"\"\"\"\"!/-F(6#%\"nG,&-F(6#,&F/F*F*!\"\"F**$)F3\"\"#F*F*" }}} {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 27 "sol := rsolve( rec, T(n) ); " }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%$solG,***\"\"#\"\"\",&%\"nGF(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(F0F(" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 25 "sort ( simplify(sol), n );" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#,(*&#\"\"\"\" \"$F&*$)%\"nGF'F&F&F&*&#F&\"\"#F&*$)F*F-F&F&!\"\"*&#F&\"\"'F&F*F&F&" } }}{EXCHG {PARA 0 "" 0 "" {TEXT -1 31 "Thus Gaussian elimination does \+ " }{XPPEDIT 18 0 "n^3/3;" "6#*&%\"nG\"\"$F%!\"\"" }{TEXT -1 3 " + " } {XPPEDIT 18 0 "O(n^2);" "6#-%\"OG6#*$%\"nG\"\"#" }{TEXT -1 17 " multip lications." }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 146 "Here is the classi cal result for Karatsuba's fast integer multiplication algorithm which does 3 multiplications of half the size plus linear work." }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 49 "Karatsuba := \{ T(n) = 3*T(n/2) + c *n, T(1) = d \};" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%*KaratsubaG<$/-% \"TG6#\"\"\"%\"dG/-F(6#%\"nG,&*&\"\"$F*-F(6#,$*&\"\"#!\"\"F/F*F*F*F**& %\"cGF*F/F*F*" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 26 "rsolve( Ka ratsuba, T(n) );" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#,(*&%\"dG\"\"\")% \"nG*&-%#lnG6#\"\"$F&-F+6#\"\"#!\"\"F&F&*(F0F&%\"cGF&F(F&F1*(F0F&F'F&F 3F&F&" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 9 "evalf(%);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#,(*&%\"dG\"\"\")%\"nG$\"+,D'\\e\"!\"*F&F&*($ \"\"#\"\"!F&%\"cGF&F(F&!\"\"*($F.F/F&F'F&F0F&F&" }}}{EXCHG {PARA 0 "> \+ " 0 "" {MPLTEXT 1 0 0 "" }}}}{SECT 1 {PARA 3 "" 0 "" {TEXT -1 8 "Integ ers" }}{EXCHG {PARA 0 "" 0 "" {TEXT -1 363 "Here are some commands whi ch do integer calculations that we will use in the course. Integers i n Maple are not limited to the precision of the hardware on your compu ter. They are limited by an internal limit of Maple to approximately \+ half a million digits. Any calculations that you do with large intege rs though will take longer for 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 the integer remainder of a divided by b. The comm and iquo(a,b) computes the integer quotient of a divided by b. For ex ample" }}}{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 the case that " }{TEXT 260 12 "a = b q + r \+ " }{TEXT -1 14 ". Let's check" }}}{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 greatest common divisor and least common multiple of i ntegers a and b, respectively. " }}}{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 com mand " }{TEXT 261 6 "igcdex" }{TEXT -1 1 "(" }{TEXT 262 11 "a,b,'s',' t'" }{TEXT -1 12 ") outputs " }{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%\"tG" }{TEXT -1 35 " integers satisfying the equ ation " }{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 command implements the extended Euclidean alg orithm. 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 "ispri me" }{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 "ifacto r" }{TEXT -1 1 "(" }{TEXT 268 1 "n" }{TEXT -1 64 ") computes the integ er 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 t o use it, you can use Maple's on-line help system. You input ?command and then a return. 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 win dow with some information about the command and how to use it. Almost all of the on-line help files have examples. If you don't know the n ame of the command, you can use the help browser to search for the com mand - see the Help menu at the top right of the window." }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 124 "For the algorithms based on the Chinese \+ remainder theorem 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 greater than or equal to n and the command " }{TEXT 307 9 "prevprime" }{TEXT -1 52 "(n) finds the first prime less than or equ al to n. " }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 21 "p := prevprim e(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 th e range 0..p-1. You can create a random number generator using the ra nd command 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 "seq( R(), i=1..10 );" }}{PARA 11 "" 1 "" {XPPMATH 20 "6,\"\"%\"\"!\"\"(F#\"\"*\"\"\"F'\"\"$F%\"\"#" }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 41 "You 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 11 "" 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 s implest data structure 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 b rackets [, ]. Lists 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 l ist (counting from 1) use a subscript. A negative subscript counts fr om 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 sub list" }}}{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 (prep end) elements to a list use 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 "Although you can assign to an entry of a list (as if it \+ were an array) if the 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 c ommand. To execute a command in Maple conditionally use the if comman d which has either 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 statements while a condition is true use the while loop. It has the syntax\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 e xample 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 "Her e is a loop to calculate 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 st atements in the 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 lin e as I have done here." }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 17 "a := 64; b := 20;" }}{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 t he 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 91 "This is a good point to menti on what the relational operators are and the logical operators" }} {PARA 0 "" 0 "" {TEXT -1 100 "The relational operators are < , > , \+ = , <= , >=, <> (not equals).\nThe logical operators are " }{TEXT 370 3 "and" }{TEXT -1 2 ", " }{TEXT 371 2 "or" }{TEXT -1 5 " and " } {TEXT 372 3 "not" }{TEXT -1 2 " ." }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 86 "We will use Maple to obtain the first prime bigger than the intege r 128^6. Note, the " }{TEXT 302 10 "nextprime " }{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 constructs are the " }{TEXT 324 3 "map" }{TEXT -1 17 " command and the " }{TEXT 325 3 "seq" } {TEXT -1 17 " command and the " }{TEXT 366 4 "add " }{TEXT -1 49 "comm and. 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 "s eq( 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 "se q( 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$%\"xGF$*$)F%\"\"#F$F$*$)F%\"\"$F$F$*$)F%\"\"% F$F$*$)F%\"\"&F$F$" }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 60 "Read the he lp files for these commands, they 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 notation 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#>%#ekGj+6#%\"xG6\"6$%)operatorG%&arrow GF(-%$modG6$,&*&\"\"$\"\"\"9$F2F2\"\"&F2\"#EF(F(F(6#\"\"!" }}}{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 procedure in Maple takes the for m\n\n " }{TEXT 308 4 " " }{TEXT 309 4 "proc" }{TEXT 310 21 "( p1, p 2, ... )\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 ma y 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 globa l statements are optional. Variables in the procedure body that are n ot explicitly declared as parameters, locals, or globals are declared \+ to be local automatically if assigned to, otherwise they are global. \+ The value returned by the procedure is the value of " }{TEXT 316 10 "s tatementn" }{TEXT -1 206 ", the last statement in the body of the proc edure or the value of an explicit return statement. Type declarations for parameters and local variables need not be explicitly given. Som e 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 "W arning, `y` is implicitly declared local to procedure `f`\n" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"fGj+6#%\"xG6#%\"yG6\"F*C$>8$*$)9$\"\"#\" \"\",&F-F2F2!\"\"F*F*F*6#\"\"!" }}}{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 outpu ts the position of the first occurrence of x in L and 0 otherwise. I \+ am also telling Maple that the input should be of type list. Below is an example with inputs of type integer. See " }{TEXT 363 5 "?type" } {TEXT -1 76 " for how to specify types and for what types are availabl e if you need them." }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 155 "pos ition := 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 11 "" 1 "" {XPPMATH 20 "6#>%)positionGj+6$'% \"xG%)anythingG'%\"LG%%listG6#%\"iG6\"F/C$?(8$\"\"\"F3-%%nopsG6#9%%%tr ueG@$/&F76#F29$OF2\"\"!F/F/F/6$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#>%3EuclideanAlgorithmGj+6$'%\"aG%(integerG'%\"bGF)6% %\"cG%\"dG%\"rG6\"F0C%>6$8$8%6$-%$absG6#9$-F86#9%?(F0\"\"\"F?F00F5\"\" !C$>8&-%%iremGF3>F36$F5FDF4F0F0F06$\"#l\"*3)p\"p\"" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 27 "EuclideanAlgorithm(24,210);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#\"\"'" }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 224 "Pro cedures may be nested, nested lexical scoping is used (a la Pascal). \+ \nProcedures may be returned and passed freely as parameters. \nThe s implest debugging tool is to insert print statements in the procedure. For example" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 175 "Euclidean Algorithm := proc(a::integer,b::integer) local c,d,r;\n (c,d) := (a bs(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 "" {TEXT -1 163 "I'd \+ like to give another example of a recursive program. Suppose we have \+ an array A of n elements and we want to sort the array. One way to do this is as follows" }}{PARA 0 "" 0 "" {TEXT -1 63 "Step 1: sort the f irst n-1 elements recursively\nStep 2: insert " }{XPPEDIT 18 0 "A[n]; " "6#&%\"AG6#%\"nG" }{TEXT -1 48 " the last element in the right place .\nThat's it!" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 323 "Insertion Sort := proc(A,n) local i, x;\n if n=1 then return; end if; # there 's nothing to do!\n InsertionSort(A,n-1); # recursively sort the fi rst n-1 elements\n print(n-1,A); # so we can see what happened\n x := A[n];\n for i from n-1 by -1 to 1 while x < A[i] do A[i+1] := A[ i]; od;\n A[i+1] := x;\n return;\nend:" }}}{EXCHG {PARA 0 "> " 0 " " {MPLTEXT 1 0 47 "A := Array([5,1,9,2,6]):\nInsertionSort(A,5);\nA;" }}{PARA 11 "" 1 "" {XPPMATH 20 "6$\"\"\"-%'RTABLEG6%\"*oZRR\"-%'VECTOR G6#7'\"\"&F#\"\"*\"\"#\"\"'%&ArrayG" }}{PARA 11 "" 1 "" {XPPMATH 20 "6 $\"\"#-%'RTABLEG6%\"*oZRR\"-%'VECTORG6#7'\"\"\"\"\"&\"\"*F#\"\"'%&Arra yG" }}{PARA 11 "" 1 "" {XPPMATH 20 "6$\"\"$-%'RTABLEG6%\"*oZRR\"-%'VEC TORG6#7'\"\"\"\"\"&\"\"*\"\"#\"\"'%&ArrayG" }}{PARA 11 "" 1 "" {XPPMATH 20 "6$\"\"%-%'RTABLEG6%\"*oZRR\"-%'VECTORG6#7'\"\"\"\"\"#\"\" &\"\"*\"\"'%&ArrayG" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#-%'RTABLEG6%\"* oZRR\"-%'VECTORG6#7'\"\"\"\"\"#\"\"&\"\"'\"\"*%&ArrayG" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 47 "A := Array([5,9,2,6,1]):\nInsertion Sort(A,5);\nA;" }}{PARA 11 "" 1 "" {XPPMATH 20 "6$\"\"\"-%'RTABLEG6%\" *OjQR\"-%'VECTORG6#7'\"\"&\"\"*\"\"#\"\"'F#%&ArrayG" }}{PARA 11 "" 1 " " {XPPMATH 20 "6$\"\"#-%'RTABLEG6%\"*OjQR\"-%'VECTORG6#7'\"\"&\"\"*F# \"\"'\"\"\"%&ArrayG" }}{PARA 11 "" 1 "" {XPPMATH 20 "6$\"\"$-%'RTABLEG 6%\"*OjQR\"-%'VECTORG6#7'\"\"#\"\"&\"\"*\"\"'\"\"\"%&ArrayG" }}{PARA 11 "" 1 "" {XPPMATH 20 "6$\"\"%-%'RTABLEG6%\"*OjQR\"-%'VECTORG6#7'\"\" #\"\"&\"\"'\"\"*\"\"\"%&ArrayG" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#-%'R TABLEG6%\"*OjQR\"-%'VECTORG6#7'\"\"\"\"\"#\"\"&\"\"'\"\"*%&ArrayG" }}} {EXCHG }{EXCHG }{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 operat or in Maple. By default, Maple uses the positive range for the intege rs 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 comput e " }{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 t he 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 " mod " }{XPPEDIT 18 0 "m;" "6#%\"m G" }{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 " so no large integers o ccured." }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 97 "We 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 fr om 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 com mand to solve the Chinese remainder problem. \nSuppose we want to solv e 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 mod 7;" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#\"\"%" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 8 "u mo d 3;" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#\"\"\"" }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 4 "The " }{TEXT 369 5 "chrem" }{TEXT -1 95 " command app lies itself accross the coefficients of polynomials. 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 := chrem( [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 "" }}}}{SECT 1 {PARA 3 "" 0 "" {TEXT -1 29 "Polynomials and Finite Fields" }}{EXCHG {PARA 0 "" 0 " " {TEXT -1 94 "Polynomials in Maple are simply input 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 variable, " }{XPPEDIT 18 0 "x ;" "6#%\"xG" }{TEXT -1 68 " with integer coefficients. Here is a poly nomial 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 mult iply the factors of the polynomial out use the 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 prim e factors with integer coefficients use the factor command" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 21 "factor(f);\nfactor(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 "W e will only need polynomials in one variable and mostly work in the \+ rings " }{TEXT 365 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 " will be a prime integer. In what foll ows 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 polynomi als 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 t wo 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. The command " }{TEXT 361 4 "Eval" }{TEXT -1 11 "( a, x=k ) " }{TEXT 362 3 "mod" }{TEXT -1 36 " p does this modulo p . For examp le" }}}{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 values 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 interp olate a polynomial 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 := [s eq( 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 modul o " }{XPPEDIT 18 0 "p;" "6#%\"pG" }{TEXT -1 75 ", that is, all coeffic ients in the resulting 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 opera tions " }{TEXT 332 3 "rem" }{TEXT -1 12 "(a,b,x) and " }{TEXT 333 3 "q uo" }{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 " satisfying " }{XPPEDIT 18 0 "a = b*q+r;" "6#/%\"aG,&*&%\"bG\"\"\"%\"q GF(F(%\"rGF(" }{TEXT -1 7 " with " }{XPPEDIT 18 0 "r = 0;" "6#/%\"rG \"\"!" }{TEXT -1 4 " or " }{XPPEDIT 18 0 "deg(r) < deg(b);" "6#2-%$deg G6#%\"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 364 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%\"*)[(RR\"-%'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 11 "" 1 "" {XPPMATH 20 "6#>%\"AG-%'RTABLEG6%\"* ovRR\"-%&ArrayG6';\"\"!\"\"$<&/6#F-\"\"'/6#\"\"\"\"\"(/6#\"\"#\"\")/6# F.\"\"*/%)datatypeG%)anythingG/%(storageG%,rectangularG/%&orderG%.Fort ran_orderGF*" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 36 "B := Array( 0..3,convert(b,base,10));" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"BG-%' RTABLEG6%\"*[wRR\"-%&ArrayG6';\"\"!\"\"$<&/6#F-\"\"%/6#\"\"\"F./6#\"\" #F8/6#F.F5/%)datatypeG%)anythingG/%(storageG%,rectangularG/%&orderG%.F ortran_orderGF*" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 21 "C := Int Mul(4,4,A,B);" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#>%\"CG-%'RTABLEG6%\"* GxRR\"-%&ArrayG6';\"\"!\"\"(<*/6#F-\"\"%/6#\"\"\"\"\")/6#\"\"#\"\"*/6# \"\"$\"\"'/6#F2F6/6#\"\"&F5/6#F>F9/6#F.F5/%)datatypeG%)anythingG/%(sto rageG%,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 "" }}}}{SECT 1 {PARA 3 "" 0 " " {TEXT -1 32 "Lists or Arrays and Benchmarking" }}{EXCHG {PARA 0 "" 0 "" {TEXT -1 47 "PLEASE note that appending to a list of length " } {TEXT 375 1 "n" }{TEXT -1 29 " items makes a copy so costs " }{TEXT 376 4 "O(n)" }{TEXT -1 41 ". So don't do the following for example." }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 78 "n := 5;\nL := [];\np := 2 ;\nfor i to n do L := [op(L), p]; p := nextprime(p); od;" }}{PARA 11 " " 1 "" {XPPMATH 20 "6#>%\"LG7\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>% \"nG\"\"&" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"pG\"\"#" }}{PARA 11 " " 1 "" {XPPMATH 20 "6#>%\"LG7#\"\"#" }}{PARA 11 "" 1 "" {XPPMATH 20 "6 #>%\"pG\"\"$" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"LG7$\"\"#\"\"$" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"pG\"\"&" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"LG7%\"\"#\"\"$\"\"&" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"pG\"\"(" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"LG7&\"\"#\"\" $\"\"&\"\"(" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"pG\"#6" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"LG7'\"\"#\"\"$\"\"&\"\"(\"#6" }}{PARA 11 " " 1 "" {XPPMATH 20 "6#>%\"pG\"#8" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7' \"\"#\"\"$\"\"&\"\"(\"#6" }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 29 "Why n ot? Because this uses " }{XPPEDIT 18 0 "O(n^2);" "6#-%\"OG6#*$%\"nG \"\"#" }{TEXT -1 119 " space and time. It will be very slow for large n . You are much better off using an Array or table. For example us e" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 86 "n := 5;\nA := Array(1. .n);\np := 2; \nfor i to n do A[i] := p; p := nextprime(p); od; \nA;" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"nG\"\"&" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"AG-%'RTABLEG6%\"*))ooS\"-%'VECTORG6#7'\"\"!F-F-F-F- %&ArrayG" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"pG\"\"#" }}{PARA 11 " " 1 "" {XPPMATH 20 "6#>&%\"AG6#\"\"\"\"\"#" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"pG\"\"$" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>&%\"AG6 #\"\"#\"\"$" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"pG\"\"&" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>&%\"AG6#\"\"$\"\"&" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"pG\"\"(" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>&%\"AG6 #\"\"%\"\"(" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"pG\"#6" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>&%\"AG6#\"\"&\"#6" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"pG\"#8" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#-%'RTABLE G6%\"*))ooS\"-%'VECTORG6#7'\"\"#\"\"$\"\"&\"\"(\"#6%&ArrayG" }}} {EXCHG {PARA 0 "" 0 "" {TEXT -1 80 "This is so important that I'm goin g to time it so you appreciate the difference." }}}{EXCHG {PARA 0 "> \+ " 0 "" {MPLTEXT 1 0 109 "n := 5000:\nA := Array(1..n):\np := 2:\nst := time():\nfor i to n do A[i] := p: p := nextprime(p): od:\ntime()-st; " }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$\"#(*!\"$" }}}{EXCHG {PARA 0 "> \+ " 0 "" {MPLTEXT 1 0 97 "n := 5000:\nL := []:\nst := time():\nfor i to \+ n do L := [op(L),p]: p := nextprime(p): od:\ntime()-st;" }}{PARA 11 " " 1 "" {XPPMATH 20 "6#$\"$\"H!\"$" }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 91 "The same quadratic behaviour occurs with sets and polynomials. So these are quadratic too." }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 107 "n := 5000:\nS := \{\}:\np := 2:\nst := time():\nfor i to n do S : = S union \{p\}: p := nextprime(p): od:\ntime()-st;" }}{PARA 11 "" 1 " " {XPPMATH 20 "6#$\"$f$!\"$" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 94 "n := 5000:\nf := 0:\nst := time():\nfor i to n do f := f + x^p; p \+ := nextprime(p); od:\ntime()-st;" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$ \"%@:!\"$" }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 160 "If you need to do s omething like this and n is large then first create the values in an A rray or table and then construct the set, list or polynomial like this ." }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 46 "st := time(): S := \{s eq( u, u=S )\}: time()-st;" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$\"\"\"! \"$" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 46 "st := time(): f := a dd( x^p, p=L ): time()-st;" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$\"#D!\" $" }}}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}}}{MARK "9" 0 } {VIEWOPTS 1 1 0 1 1 1803 1 1 1 1 }{PAGENUMBERS 0 1 2 33 1 1 } {RTABLE_HANDLES 139394768 139386336 139397488 139397568 139397648 139397728 140686888 }{RTABLE M7R0 I6RTABLE_SAVE/139394768X*%)anythingG6"6"[gl!!%!!!"&"&"""""#""&""'""*F& } {RTABLE M7R0 I6RTABLE_SAVE/139386336X*%)anythingG6"6"[gl!!%!!!"&"&"""""#""&""'""*F& } {RTABLE M7R0 I6RTABLE_SAVE/139397488X*%)anythingG6"6"[gl!!%!!!"&"&""$""*"#F"#")"$V#6" } {RTABLE M7R0 I6RTABLE_SAVE/139397568X*%)anythingG6"6"[gl!!%!!!"%!$""'""("")""*6" } {RTABLE M7R0 I6RTABLE_SAVE/139397648X*%)anythingG6"6"[gl!!%!!!"%!$""%""$""#"""6" } {RTABLE M7R0 I6RTABLE_SAVE/139397728X*%)anythingG6"6"[gl!!%!!!")!(""%"")""*""'F("""""#F+6" } {RTABLE M7R0 I6RTABLE_SAVE/140686888X*%)anythingG6"6"[gl!!%!!!"&"&""#""$""&""("#6F& }