{VERSION 2 3 "IBM INTEL NT" "2.3" } {USTYLETAB {CSTYLE "Maple Input" -1 0 "Courier" 0 1 255 0 0 1 0 1 0 0 1 0 0 0 0 }{CSTYLE "" -1 256 "" 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 } {PSTYLE "Normal" -1 0 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "Heading 1" 0 3 1 {CSTYLE "" -1 -1 "" 1 18 0 0 0 0 0 1 0 0 0 0 0 0 0 }1 0 0 0 6 6 0 0 0 0 0 0 -1 0 }{PSTYLE "Heading 2" 3 4 1 {CSTYLE "" -1 -1 "" 1 14 0 0 0 0 0 0 0 0 0 0 0 0 0 }0 0 0 -1 4 4 0 0 0 0 0 0 -1 0 }{PSTYLE "Title" 0 18 1 {CSTYLE "" -1 -1 "" 1 18 0 0 0 0 0 1 1 0 0 0 0 0 0 }3 0 0 -1 12 12 0 0 0 0 0 0 19 0 }} {SECT 0 {PARA 18 "" 0 "" {TEXT -1 20 "Symbolic Computation" }}{PARA 0 "" 0 "" {TEXT -1 53 "This worksheet is designed to accompany Chapter 6 of " }{TEXT 256 87 "Introduction to Scientific Programming: Computati onal Problem Solving Using Maple and C" }{TEXT -1 85 " by Joseph L. Za chary. In it we will explore the idea of symbolic computing further. " }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{SECT 1 {PARA 3 "" 0 "" {TEXT -1 12 "Introduction" }}{PARA 0 "" 0 "" {TEXT -1 319 "Chapter 6 only hints at the support for symbolic mathematics provided by Maple. In this w orksheet, we will explore this support in somewhat more depth. The ma terial that we will be covering requires varying levels of mathematica l expertise. Feel free to skip over examples if you don't have the ne cessary background." }}}{SECT 1 {PARA 3 "" 0 "" {TEXT -1 24 "Algebraic Simplification" }}{EXCHG {PARA 0 "" 0 "" {TEXT -1 130 "Maple's \"simp lify\" function expects an expression as a parameter, which it simplif ies. For example, notice the difference between" }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 25 "sin(x)^2 + cos( x)^2;" }}}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{EXCHG {PARA 0 "" 0 "" {TEXT -1 3 "and" }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 30 "simplify(sin(x)^2 + cos(x)^2);" }}}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{EXCHG {PARA 0 "" 0 "" {TEXT -1 110 "Be aware that Ma ple will sometimes make unstated assumptions when doing simplification . For example, compare" }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "> \+ " 0 "" {MPLTEXT 1 0 9 "16^(3/2);" }}}{PARA 0 "" 0 "" {TEXT -1 0 "" }} {EXCHG {PARA 0 "" 0 "" {TEXT -1 3 "and" }}{PARA 0 "" 0 "" {TEXT -1 0 " " }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 19 "simplify(16^(3/2));" }}{PARA 0 "" 0 "" {TEXT -1 66 "in which Maple has assumed that you want the posi tive square root." }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 " " 0 "" {TEXT -1 0 "" }}}}{SECT 1 {PARA 3 "" 0 "" {TEXT -1 16 "Equation Solving" }}{PARA 0 "" 0 "" {TEXT -1 448 "Maple provides two general-p urpose functions for solving equations, \"solve\" and \"fsolve\". \"s olve\" works symbolically much as you do when solving equations; \"fso lve\" works numerically by repeatedly guessing at a solution until it \+ finds one that works. \"solve\" is exact, \"fsolve\" is approximate. \+ For complicated equations, \"solve\" can be much slower than \"fsolve \". In fact, there are plenty of equations where \"solve\" fails but \+ \"fsolve\" succeeds." }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{SECT 1 {PARA 4 "" 0 "" {TEXT -1 5 "solve" }}{EXCHG {PARA 0 "" 0 "" {TEXT -1 101 "\" solve\" knows all kinds of tricks for solving equations. For example, it knows the quadratic formula" }}{PARA 0 "" 0 "" {TEXT -1 1 " " }} {PARA 0 "> " 0 "" {MPLTEXT 1 0 31 "solve(3*x^2 - 10*x + 6 = 0, x);" }} }{PARA 0 "" 0 "" {TEXT -1 0 "" }}{EXCHG {PARA 0 "" 0 "" {TEXT -1 66 "W ith floating-point coefficients, we get floating-point solutions." }} {PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 34 "sol ve(3.*x^2 - 10.*x + 6. = 0, x);" }}}{PARA 0 "" 0 "" {TEXT -1 0 "" }} {EXCHG {PARA 0 "" 0 "" {TEXT -1 31 "Complex roots are also possible" } }{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 30 "so lve(3*x^2 - 4*x + 6 = 0, x);" }}}{PARA 0 "" 0 "" {TEXT -1 0 "" }} {EXCHG {PARA 0 "" 0 "" {TEXT -1 42 "The coefficients can be entirely s ymbolic." }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 30 "solve(a*x^2 + b*x + c = 0, x);" }}}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{EXCHG {PARA 0 "" 0 "" {TEXT -1 90 "Maple can also sol ve simultaneous linear equations. Notice how set notation is used her e." }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 46 "solve(\{3*x + 4*y = 7, 5*x + 3*y = 11\}, \{x,y\});" }}}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{EXCHG {PARA 0 "" 0 "" {TEXT -1 38 "The equations don't have to be linear." }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 " > " 0 "" {MPLTEXT 1 0 46 "solve(\{3*x^2 + y = 7, 5*x + 3*y = 11\}, \{x ,y\});" }}}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{EXCHG {PARA 0 "" 0 "" {TEXT -1 111 "Maple tries to keep the answer simple by using the RootO f notation. If we had used floating-point coefficients" }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 50 "solve(\{3.*x^2 + y = 7., 5.*x + 3.*y = 11\}, \{x,y\});" }}{PARA 0 "" 0 "" {TEXT -1 34 "this wouldn't have been necessary." }}}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{EXCHG {PARA 0 "" 0 "" {TEXT -1 68 "It is not difficult to pose a n equation that solve cannot deal with." }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 23 "solve(3*cos(x) = x, x);" }}}} {SECT 1 {PARA 4 "" 0 "" {TEXT -1 6 "fsolve" }}{EXCHG {PARA 0 "" 0 "" {TEXT -1 107 "If you don't need an exact or a symbolic solution, fsolv e can solve more equations and is generally faster." }}{PARA 0 "" 0 " " {TEXT -1 0 "" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 24 "fsolve(3*cos(x) = x, x);" }}}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{EXCHG {PARA 0 "" 0 "" {TEXT -1 53 "Of course, if you forget and pose a symbolic equation" }} {PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 24 "fso lve(a*cos(x) = x, x);" }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 28 "you'll get an error message." }}}}}{SECT 1 {PARA 3 "" 0 "" {TEXT -1 8 "Calculus" }}{EXCHG {PARA 0 "" 0 "" {TEXT -1 91 " Mapl e is also handy for doing calculus. The \"diff\" function does symbol ic differentiation" }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "> " 0 " " {MPLTEXT 1 0 21 "diff(cos(sin(x)), x);" }}}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{EXCHG {PARA 0 "" 0 "" {TEXT -1 52 "whereas the \"int\" functio n does symbolic integration" }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 28 "int(-sin(sin(x))*cos(x), x);" }}}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{EXCHG {PARA 0 "" 0 "" {TEXT -1 56 "You can al so do definite integration by providing bounds" }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 37 "int(-sin(sin(x))*co s(x), x=0..Pi/2.);" }}}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{EXCHG {PARA 0 "" 0 "" {TEXT -1 35 "It is not difficult to stump Maple." }}{PARA 0 " " 0 "" {TEXT -1 0 "" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 20 "int(cos(sin( x)), x);" }}{PARA 0 "" 0 "" {TEXT -1 50 "and this is how it tells you \+ that it has failed. " }}}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{EXCHG {PARA 0 "" 0 "" {TEXT -1 89 "In situations like this, trying to do a d efinite integral as above may be futile as well." }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 29 "int(cos(sin(x)), x= 0..Pi/2.);" }}}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{EXCHG {PARA 0 "" 0 "" {TEXT -1 291 "In this case, if you wrap a call to \"evalf\" around the call to int, Maple will do a numerical integration. This means that \+ instead of first integration symbolically and then plugging in the bou nds, it will find an approximation to the integral without first compu ting the definite integral." }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 35 "evalf(int(cos(sin(x)), x=0..Pi/2));" }}} {PARA 0 "" 0 "" {TEXT -1 0 "" }}{EXCHG {PARA 0 "" 0 "" {TEXT -1 64 "It is possible to supply infinity and -infinity as bounds. Thus" }} {PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 24 "int (1/x, x=0..infinity);" }}}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{EXCHG {PARA 0 "" 0 "" {TEXT -1 39 "gives us an answer of infinity, whereas" }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 29 "i nt(1/exp(x), x=0..infinity);" }}{PARA 0 "" 0 "" {TEXT -1 25 "gives us \+ a finite answer." }}}}{SECT 1 {PARA 3 "" 0 "" {TEXT -1 13 "Substitutio ns" }}{EXCHG {PARA 0 "" 0 "" {TEXT -1 113 "Another handy feature of Ma ple is the ability to perform substitutions. Let's suppose that we de fine an equation" }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 18 "eqn := cos(x) = x;" }}}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{EXCHG {PARA 0 "" 0 "" {TEXT -1 32 "which we then solve numerically. " }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 23 "soln := fsolve(eqn, x);" }}}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{EXCHG {PARA 0 "" 0 "" {TEXT -1 75 "We can substitute the value of soln for x in the original equation by doing" }}{PARA 0 "" 0 "" {TEXT -1 0 "" }} {PARA 0 "> " 0 "" {MPLTEXT 1 0 25 "evalf(subs(x=soln, eqn));" }}} {PARA 0 "" 0 "" {TEXT -1 0 "" }}{EXCHG {PARA 0 "" 0 "" {TEXT -1 101 "T his works for any kind of expression--not just for equations. For exa mple, suppose we differentiate" }}{PARA 0 "" 0 "" {TEXT -1 0 "" }} {PARA 0 "> " 0 "" {MPLTEXT 1 0 28 "res := diff(exp(cos(x)), x);" }}} {PARA 0 "" 0 "" {TEXT -1 0 "" }}{EXCHG {PARA 0 "" 0 "" {TEXT -1 78 "an d we'd like to find out the value of res when x is 1.2. We can do tha t with" }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 24 "evalf(subs(x=1.2, res));" }}}{PARA 0 "" 0 "" {TEXT -1 0 "" }} {EXCHG {PARA 0 "" 0 "" {TEXT -1 92 "When an equation has multiple solu tions, it is possible to pick them out individually. Thus" }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 46 "solns := so lve(3.15*x^2 - 24.2*x + 15 = 0, x);" }}}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{EXCHG {PARA 0 "" 0 "" {TEXT -1 47 "We can access the first of the t wo solutions as" }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 9 "solns[1];" }}}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{EXCHG {PARA 0 "" 0 "" {TEXT -1 38 "and the second of the two solutions as" } }{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 9 "sol ns[2];" }}}}{SECT 1 {PARA 3 "" 0 "" {TEXT -1 20 "Vectors and Matrices " }}{EXCHG {PARA 0 "" 0 "" {TEXT -1 186 "Vectors and matrices are used extensively in linear algebra. Maple will do all of the standard ope rations upon them. The first step is to make the linear algebra funct ions visible with" }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "> " 0 " " {MPLTEXT 1 0 13 "with(linalg);" }}}{PARA 0 "" 0 "" {TEXT -1 0 "" }} {EXCHG {PARA 0 "" 0 "" {TEXT -1 31 "Now we can define a vector with" } }{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 21 "v \+ := vector([1,2,3]);" }}}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{EXCHG {PARA 0 "" 0 "" {TEXT -1 21 "and a 3x3 matrix with" }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 39 "m := matrix(3, 3, [1,2,3, 4,5,4,3,2,1]);" }}}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{EXCHG {PARA 0 "" 0 "" {TEXT -1 54 "Let's do some operations on them. We can do additio n," }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 13 "matadd(v, v);" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 13 "matadd(m, m); " }}}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{EXCHG {PARA 0 "" 0 "" {TEXT -1 15 "multiplication," }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 15 "multiply(m, m);" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 15 "multiply(m, v);" }}}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{EXCHG {PARA 0 "" 0 "" {TEXT -1 16 "and dot product." }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 14 "dotprod(v, v);" }}}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{EXCHG {PARA 0 "" 0 "" {TEXT -1 16 "We can transp ose" }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 13 "transpose(m);" }}}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{EXCHG {PARA 0 " " 0 "" {TEXT -1 10 "or invert." }}{PARA 0 "" 0 "" {TEXT -1 0 "" }} {PARA 0 "> " 0 "" {MPLTEXT 1 0 23 "minverse := inverse(m);" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 22 "multiply(m, minverse);" }}}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{EXCHG {PARA 0 "" 0 "" {TEXT -1 26 "Much more is possi ble. Do" }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 7 "?linalg" }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 13 "for pointers." }}}}}{MARK "0 0" 0 }{VIEWOPTS 1 1 0 1 1 1803 }