{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 "2D Math" -1 2 "Times" 0 1 0 0 0 0 0 0 2 0 0 0 0 0 0 }{CSTYLE "Hyperlink" -1 17 "" 0 1 0 128 128 1 0 0 1 0 0 0 0 0 0 } {CSTYLE "2D Comment" 2 18 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 }{CSTYLE "2 D Output" 2 20 "" 0 1 0 0 255 1 0 0 0 0 0 0 0 0 0 }{CSTYLE "" 0 21 "" 0 1 0 0 0 1 0 0 0 0 2 0 0 0 0 }{CSTYLE "Help Heading" -1 26 "" 1 14 0 0 0 0 0 1 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 "Text Output" -1 2 1 {CSTYLE "" -1 -1 "Courier" 1 10 0 0 255 1 0 0 0 0 0 1 3 0 0 }1 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "Warning " 2 7 1 {CSTYLE "" -1 -1 "" 0 1 0 0 255 1 0 0 0 0 0 0 1 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "Error" 7 8 1 {CSTYLE "" -1 -1 "" 0 1 255 0 255 1 0 0 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 } {PSTYLE "Maple Output" 0 11 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 }3 3 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "Bullet Item" 0 15 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 }0 0 0 -1 3 3 0 0 0 0 0 0 15 2 }} {SECT 0 {PARA 0 "" 0 "" {TEXT -1 0 "" }}{SECT 0 {PARA 0 "" 0 "" {TEXT 26 9 "Bug fix: " }{TEXT -1 21 "Problems with unapply" }}{PARA 0 "" 0 " " {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 13 "The function " } {MPLTEXT 0 21 7 "unapply" }{TEXT -1 154 ", which constructs a procedur e from an expression, has three major shortcomings, listed below. To \+ correct them, I have written the alternative procedure " }{MPLTEXT 0 21 7 "vnapply" }{TEXT -1 1 "." }}{PARA 15 "" 0 "" {MPLTEXT 0 21 7 "una pply" }{TEXT -1 106 " does not work with arrays (including matrices an d vectors) or tables. I'm not showing the result of the " }{MPLTEXT 0 21 7 "unapply" }{TEXT -1 80 " command below, because that result can cause Maple to crash if you click on it." }}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 33 "f:=unapply(vector([1,x,x^2]), x):" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 5 "f(t);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#-%' VECTORG6#7%\"\"\"%\"xG*$F(\"\"#" }}}{PARA 0 "" 0 "" {TEXT -1 16 "Here \+ it is with " }{MPLTEXT 0 21 7 "vnapply" }{TEXT -1 2 ": " }}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 52 "readlib(vnapply):\nf:= vnapply(vect or([1,x,x^2]), x);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"fG:6#%\"xG6 \"6$%)operatorG%&arrowGF(-%&arrayG6$;\"\"\"\"\"$7%/F1*$9$\"\"#/F0F0/F6 F5F(F(" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 5 "f(t);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#-%'VECTORG6#7%\"\"\"%\"tG*$F(\"\"#" }}}{PARA 15 "" 0 "" {TEXT -1 86 "When the expression contains derivatives with \+ respect to the variables, we don't want " }{MPLTEXT 0 21 7 "unapply" } {TEXT -1 28 " to return a result such as " }{XPPEDIT 18 0 "x -> diff(g (x),x)" ":6#%\"xG7\"6$%)operatorG%&arrowG6\"-%%diffG6$-%\"gG6#F$F$F)F) " }{TEXT -1 36 ", because that wouldn't work unless " }{MPLTEXT 0 21 1 "x" }{TEXT -1 72 " is a name of a variable. What we do want is to t ake the derivative of " }{MPLTEXT 0 21 1 "g" }{TEXT -1 101 ", and then return the function that evaluates this at its argument. This can be expressed using the " }{MPLTEXT 0 21 1 "D" }{TEXT -1 10 " operator." }}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 25 "unapply(diff(g(x),x), x); " }}{PARA 11 "" 1 "" {XPPMATH 20 "6#-%\"DG6#%\"gG" }}}{PARA 0 "" 0 "" {TEXT -1 15 "Unfortunately, " }{MPLTEXT 0 21 7 "unapply" }{TEXT -1 61 " fails to do this in slightly more complicated circumstances." }} {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 27 "unapply(2*diff(g(x),x), x); " }}{PARA 11 "" 1 "" {XPPMATH 20 "6#:6#%\"xG6\"6$%)operatorG%&arrowGF& ,$-%%diffG6$-%\"gG6#9$F1\"\"#F&F&" }}}{PARA 0 "" 0 "" {TEXT -1 16 "Her e it is with " }{MPLTEXT 0 21 7 "vnapply" }{TEXT -1 1 ":" }}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 27 "vnapply(2*diff(g(x),x), x);" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#:6#%\"xG6\"6$%)operatorG%&arrowGF&,$-- %\"DG6#%\"gG6#9$\"\"#F&F&" }}}{PARA 15 "" 0 "" {TEXT -1 1 " " } {MPLTEXT 0 21 7 "unapply" }{TEXT -1 145 " has a rather strange feature : if the expression is an integer power, then what is returned is the \+ power of a procedure rather than a procedure. " }}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 23 "f:= unapply((x+1)^2,x);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"fG*$:6#%\"xG6\"6$%)operatorG%&arrowGF),&9$\"\"\"F/F /F)F)\"\"#" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 12 "whattype(f); " }}{PARA 11 "" 1 "" {XPPMATH 20 "6#%\"^G" }}}{PARA 0 "" 0 "" {TEXT -1 51 "In most cases this behaviour is harmless: applying " }{MPLTEXT 0 21 1 "f" }{TEXT -1 17 " to any argument " }{MPLTEXT 0 21 1 "v" } {TEXT -1 16 " will result in " }{XPPEDIT 18 0 "(v+1)^2" "*$,&%\"vG\"\" \"\"\"\"F%\"\"#" }{TEXT -1 16 ", as it should. " }}{EXCHG {PARA 0 "> \+ " 0 "" {MPLTEXT 1 0 7 "f(q+1);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#*$,& %\"qG\"\"\"\"\"#F&F'" }}}{PARA 0 "" 0 "" {TEXT -1 46 "However, one pla ce it will not work is in the " }{MPLTEXT 0 21 6 "evalhf" }{TEXT -1 13 " environment:" }}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 13 "evalhf( f(3));" }}{PARA 8 "" 1 "" {TEXT -1 48 "Error, unable to evaluate funct ion `f` in evalhf" }}}{PARA 0 "" 0 "" {TEXT -1 17 "Here it is using " }{MPLTEXT 0 21 7 "vnapply" }{TEXT -1 1 ":" }}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 23 "g:= vnapply((x+1)^2,x);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"gG:6#%\"xG6\"6$%)operatorG%&arrowGF(*$,&9$\"\"\"F/F/\"\"#F(F (" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 13 "evalhf(g(3));" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#$\"#;\"\"!" }}}}{SECT 0 {PARA 0 "" 0 " " {TEXT 26 9 "See also:" }{TEXT -1 1 " " }{HYPERLNK 17 "array" 2 "arra y" "" }{TEXT -1 2 ", " }{HYPERLNK 17 "D" 2 "D" "" }{TEXT -1 2 ", " } {HYPERLNK 17 "diff" 2 "diff" "" }{TEXT -1 2 ", " }{HYPERLNK 17 "evalhf " 2 "evalhf" "" }{TEXT -1 2 ", " }{HYPERLNK 17 "table" 2 "table" "" } {TEXT -1 0 "" }{TEXT -1 2 ", " }{HYPERLNK 17 "unapply" 2 "unapply" "" }{TEXT -1 2 ", " }{HYPERLNK 17 "vnapply" 2 "vnapply" "" }}}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{SECT 0 {PARA 0 "" 0 "" {TEXT 26 24 "Maple Adviso r Database, " }{TEXT -1 15 " R. Israel 1998" }}}}{MARK "3 0" 0 } {VIEWOPTS 1 1 0 1 1 1803 }