{VERSION 3 0 "IBM INTEL NT" "3.0" } {USTYLETAB {CSTYLE "Maple Input" -1 0 "Courier" 1 10 128 0 0 1 0 2 0 0 1 0 0 0 0 }{CSTYLE "2D Math" -1 2 "Times" 1 11 0 0 0 1 0 0 2 0 0 0 0 0 0 }{CSTYLE "2D Comment" 2 18 "" 0 0 0 128 0 0 0 0 0 0 0 0 0 0 0 } {CSTYLE "2D Input" 2 19 "" 0 0 128 0 0 1 0 0 0 0 0 0 0 0 0 }{CSTYLE "2 D Output" 2 20 "" 0 0 0 0 128 1 0 0 0 0 0 0 0 0 0 }{CSTYLE "Non-propor tional" -1 256 "Courier" 1 11 0 0 0 0 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 }{CSTYLE "" -1 258 "" 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 259 "" 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 260 "" 1 11 0 0 0 0 0 0 0 0 0 0 0 0 0 }{CSTYLE "" 19 261 "" 1 11 0 0 0 0 0 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 262 "" 1 11 0 0 0 0 0 0 0 0 0 0 0 0 0 }{CSTYLE "" 19 263 "" 1 11 0 0 0 0 0 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 264 "" 1 11 0 0 0 0 0 0 0 0 0 0 0 0 0 }{PSTYLE "Normal" -1 0 1 {CSTYLE "" -1 -1 "Times" 1 12 0 0 0 1 2 0 2 0 0 0 0 0 0 }0 1 0 -1 6 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "Text Output" -1 2 1 {CSTYLE "" -1 -1 "Courier" 1 10 0 0 128 1 0 0 0 0 0 1 3 0 3 }1 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 24 6 0 0 0 0 0 0 -1 0 } {PSTYLE "Heading 2" 3 4 1 {CSTYLE "" -1 -1 "" 1 15 0 0 0 0 0 0 0 0 0 0 0 0 0 }0 0 0 -1 6 4 0 0 0 0 0 0 -1 0 }{PSTYLE "" 2 6 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 2 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 0 0 0 0 0 0 2 0 0 0 0 0 0 0 }0 3 0 -1 -1 -1 3 36 0 0 0 0 -1 0 }{PSTYLE "" 11 12 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 }1 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "Title" 0 18 1 {CSTYLE "" -1 -1 "Times" 1 22 0 128 128 1 0 1 0 0 0 0 0 0 0 }3 1 0 -1 14 12 0 0 0 0 0 0 19 0 }{PSTYLE "Author" 0 19 1 {CSTYLE "" -1 -1 "Times" 1 16 0 0 128 1 0 1 0 0 0 0 0 0 0 }3 1 0 -1 8 0 0 0 0 0 0 0 261 0 }{PSTYLE "Address" 0 256 1 {CSTYLE "" -1 -1 "Times" 1 14 0 0 128 1 1 2 0 0 0 0 0 0 0 }3 1 0 -1 6 -1 0 0 0 0 0 0 263 0 }{PSTYLE "Date" 0 257 1 {CSTYLE "" -1 -1 "" 1 14 0 0 128 1 2 0 0 0 0 0 0 0 0 }3 0 0 -1 8 6 0 0 0 0 0 0 -1 0 }{PSTYLE "A ddress - email" -1 258 1 {CSTYLE "" -1 -1 "Verdana" 1 10 0 0 128 1 2 0 0 0 0 0 0 0 0 }3 0 0 -1 4 -1 0 0 0 0 0 0 262 0 }{PSTYLE "Normal Inde nted" 0 259 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 }0 0 0 18 -1 -1 0 18 0 0 0 0 -1 0 }{PSTYLE "Address" 0 260 1 {CSTYLE "" -1 -1 "Times" 1 14 0 0 128 1 1 2 0 0 0 0 0 0 0 }3 1 0 -1 6 -1 0 0 0 0 0 0 258 0 }{PSTYLE "Address - email" -1 261 1 {CSTYLE "" -1 -1 "Verdana " 1 10 0 0 128 1 2 0 0 0 0 0 0 0 0 }3 0 0 -1 4 -1 0 0 0 0 0 0 257 0 } } {SECT 0 {PARA 18 "" 0 "" {TEXT -1 52 "An Automated Linear Least Square s Solution Generator" }}{PARA 19 "" 0 "" {TEXT -1 15 "Marc A. Murison " }}{PARA 260 "" 0 "" {TEXT -1 74 "Astronomical Applications Departmen t\nU.S. Naval Observatory\nWashington, DC" }}{PARA 261 "" 0 "" {TEXT -1 62 "murison@riemann.usno.navy.mil\nhttp://aa.usno.navy.mil/murison/ " }}{PARA 257 "" 0 "" {TEXT -1 12 "26 May, 1999" }}{SECT 0 {PARA 3 "" 0 "1. Introduction" {TEXT -1 15 "1. Introduction" }}{EXCHG {PARA 259 " " 0 "" {TEXT -1 766 "In day-to-day work, one often has need to perform a quick linear least squares calculation for some model which approxi mates a physical process. Since the model is likely to be something o ther than simple linear regression, one winds up (often re-) deriving \+ the appropriate normal equations and solving for the model parameters. This is wasted effort, thanks to the availability of computer algebr a systems, in which it is easy to automate this process. In the secti on which follows, I illustrate the basic \"quick and dirty\" linear le ast squares process by means of a simple example. In section 3, I pre sent a Maple procedure that performs the algebra autmatically for any \+ model that is linear in the parameters, and in section 4 are a few exa mples of its usage." }}}}{SECT 0 {PARA 3 "" 0 "2. A Linear Least Squar es Example" {TEXT -1 33 "2. A Linear Least Squares Example" }}{EXCHG {PARA 259 "" 0 "" {TEXT -1 58 "Start with a simple second degree polyn omial as our model:" }{TEXT 260 1 " " }{XPPEDIT 261 1 "model := A+B*t[ i]+C*t[i]^2:" "6#>%&modelG,(%\"AG\"\"\"*&%\"BGF'&%\"tG6#%\"iGF'F'*&%\" CGF'*$&F+6#F-\"\"#F'F'" }{TEXT 262 2 ". " }{TEXT -1 10 " Then the " } {XPPEDIT 18 0 "chi^2;" "6#*$%$chiG\"\"#" }{TEXT -1 14 " statistic is \+ " }{XPPEDIT 263 1 "chi^2 = Sum((y[i]-model)^2,i = 1 .. N);" "6#/*$%$ch iG\"\"#-%$SumG6$*$,&&%\"yG6#%\"iG\"\"\"%&modelG!\"\"\"\"#/F/;\"\"\"%\" NG" }{TEXT 264 3 ". " }}{PARA 11 "" 1 "" {XPPMATH 20 "6#/*$)%$chiG\" \"#\"\"\"-%$SumG6$*$),*&%\"yG6#%\"iG\"\"\"%\"AG!\"\"*&%\"BGF3&%\"tGF1F 3F5*&%\"CGF3)F8F'F(F5F'F(/F2;F3%\"NG" }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 22 "where the sum is over " }{TEXT 257 1 "N" }{TEXT -1 32 " availab le data points, and the " }{XPPEDIT 18 0 "y[i];" "6#&%\"yG6#%\"iG" } {TEXT -1 40 " are the data values, measured at times " }{XPPEDIT 18 0 "t[i];" "6#&%\"tG6#%\"iG" }{TEXT -1 78 ". In keeping with the \"quick and dirty\" premise, we do not take into account " }{TEXT 258 9 "a pr iori " }{TEXT -1 167 "any weighting of the data. It is a simple matte r to add weight factors into the solutions afterwards; including them \+ now would serve only to clutter up the notation. " }}}{EXCHG {PARA 259 "" 0 "" {TEXT -1 46 "Next, we calculate the partial derivatives of " }{XPPEDIT 18 0 "chi^2;" "6#*$%$chiG\"\"#" }{TEXT -1 111 " with resp ect to the model parameters, setting these derivatives to zero and thu s forming the normal equations." }}}{EXCHG {PARA 0 "" 0 "" {XPPEDIT 19 1 "diff(rhs(%),A) = 0;" "6#/-%%diffG6$-%$rhsG6#%\"%G%\"AG\"\"!" }} {PARA 0 "" 0 "" {XPPEDIT 19 1 "diff(rhs(%%),B) = 0;" "6#/-%%diffG6$-%$ rhsG6#%#%%G%\"BG\"\"!" }}{PARA 0 "" 0 "" {XPPEDIT 19 1 "diff(rhs(%%%), C) = 0;" "6#/-%%diffG6$-%$rhsG6#%$%%%G%\"CG\"\"!" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#/-%$SumG6$,*&%\"yG6#%\"iG!\"#%\"AG\"\"#*&%\"BG\"\"\"&% \"tGF*F1F.*&%\"CGF1)F2F.\"\"\"F./F+;F1%\"NG\"\"!" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#/-%$SumG6$,$*&,*&%\"yG6#%\"iG\"\"\"%\"AG!\"\"*&%\"BGF.& %\"tGF,F.F0*&%\"CGF.)F3\"\"#\"\"\"F0F.F3F9!\"#/F-;F.%\"NG\"\"!" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#/-%$SumG6$,$*&,*&%\"yG6#%\"iG\"\"\"%\" AG!\"\"*&%\"BGF.&%\"tGF,F.F0*&%\"CGF.)F3\"\"#\"\"\"F0F.F7F9!\"#/F-;F.% \"NG\"\"!" }}}{EXCHG {PARA 0 "" 0 "" {XPPEDIT 19 1 "NormalEqs := \{%, \+ %%, %%%\}:" "6#>%*NormalEqsG<%%\"%G%#%%G%$%%%G" }}}{EXCHG {PARA 259 " " 0 "" {TEXT -1 117 "Finally, we solve the normal equations for the pa rameter values. These values are the linear least squares solution." }}}{EXCHG {PARA 0 "" 0 "" {XPPEDIT 19 1 "sols := sortsols(solve(value( NormalEqs),\{A, B, C\}),[A, B, C]):" "6#>%%solsG-%)sortsolsG6$-%&solve G6$-%&valueG6#%*NormalEqsG<%%\"AG%\"BG%\"CG7%F0F1F2" }}}{EXCHG {PARA 0 "" 0 "" {XPPEDIT 19 1 "for p in sols do print(p) od;" "6#?&%\"pG%%so lsG%%trueG-%&printG6#F$" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#/%\"AG*&,.* &-%$sumG6$&%\"yG6#%\"iG/F.;\"\"\"%\"NGF1)-F)6$*$)&%\"tGF-\"\"$\"\"\"F/ \"\"#F;F1*(F(F;-F)6$*$)F8\"\"%F;F/F1-F)6$*$)F8FF;F1*(FIF;F4F1-F)6$*&FFF;F+F;F/F1FG*(FCF;F4F;FK F;FG*&)FCFF; )FIFF;F2F;FCF;FG!\"\"" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#/%\" BG*&,.*(-%$sumG6$*$)&%\"tG6#%\"iG\"\"%\"\"\"/F0;\"\"\"%\"NGF5-F)6$&%\" yGF/F3F5-F)6$F-F3F5F5*(F;F2-F)6$*&)F-\"\"#F2F9F5F3F5-F)6$*$FAF2F3F5!\" \"*(-F)6$*&F-F5F9F2F3F5F6F5F(F2FF*(F7F2FCF2-F)6$*$)F-\"\"$F2F3F5FF*(F6 F2FLF2F>F2F5*&)FCFBF2FHF2F5F2,,*(F;F2FCF2FLF2!\"#*&F6F2)FLFBF2F5*$)FCF PF2F5*&F(F2)F;FBF2F5*(F(F2F6F2FCF2FF!\"\"" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#/%\"CG*&,.*(-%$sumG6$&%\"tG6#%\"iG/F.;\"\"\"%\"NGF1-F)6 $*$)F+\"\"#\"\"\"F/F1-F)6$*&F+F1&%\"yGF-F1F/F1!\"\"*(F2F1-F)6$*$)F+\" \"$F8F/F1F9F8F1*(F@F8-F)6$F*&-F)6$*&F6F8F*&)F3F7F8FFF8F1F8,,*(F(F8F3F8F@F8!\"#*&F2F8)F@F7F8F1*$)F 3FDF8F1*&-F)6$*$)F+\"\"%F8F/F1FLF8F1*(FXF8F2F8F3F8F>!\"\"" }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 63 "This is a bit easier to look at if we mak e a few substitutions." }}}{EXCHG {PARA 0 "" 0 "" {XPPEDIT 19 1 "subs( seq(sum(t[i]^k,i = 1 .. N) = T[k],k = 1 .. 4),seq(sum(y[i]*t[i]^k,i = \+ 1 .. N) = S[k],k = 0 .. 2),sols);" "6#-%%subsG6%-%$seqG6$/-%$sumG6$)&% \"tG6#%\"iG%\"kG/F1;\"\"\"%\"NG&%\"TG6#F2/F2;\"\"\"\"\"%-F'6$/-F+6$*&& %\"yG6#F1\"\"\")&F/6#F1F2FG/F1;\"\"\"F6&%\"SG6#F2/F2;\"\"!\"\"#%%solsG " }}{PARA 12 "" 1 "" {XPPMATH 20 "6#7%/%\"AG*&,.*&&%\"SG6#\"\"!\"\"\") &%\"TG6#\"\"$\"\"#\"\"\"F-*(F)F4&F06#\"\"%F-&F06#F3F-!\"\"*(&F06#F-F-& F*F>F-F6F4F-*(F=F4F/F-&F*F:F-F;*(F9F4F/F4F?F4F;*&)F9F3F4FAF4F-F4,,*(F= F4F9F4F/F4!\"#*&%\"NGF-F.F4F-*$)F9F2F4F-*&F6F4)F=F3F4F-*(F6F4FIF4F9F4F ;!\"\"/%\"BG*&,.*(F6F4F)F4F=F4F-*(F=F4FAF4F9F4F;*(F?F4FIF4F6F4F;*(F)F4 F9F4F/F4F;*(FIF4F/F4FAF4F-*&FDF4F?F4F-F4FEFO/%\"CG*&,.*(F=F4F9F4F?F4F; *(FIF4F/F4F?F4F-*(F/F4F)F4F=F4F;*&FAF4FMF4F-*(FAF4FIF4F9F4F;*&FDF4F)F4 F-F4FEFO" }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 30 "Collecting on the mix ed terms " }{XPPEDIT 18 0 "S[k];" "6#&%\"SG6#%\"kG" }{TEXT -1 20 ", we have the result" }}}{EXCHG {PARA 0 "" 0 "" {XPPEDIT 19 1 "collect(%,[ seq(S[k],k = 0 .. 2), N],factor):" "6#-%(collectG6%%\"%G7$-%$seqG6$&% \"SG6#%\"kG/F.;\"\"!\"\"#%\"NG%'factorG" }}}{EXCHG {PARA 0 "" 0 "" {XPPEDIT 19 1 "for p in % do print(p) od;" "6#?&%\"pG%\"%G%%trueG-%&pr intG6#F$" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#/%\"AG,(*&*&,&*$)&%\"TG6# \"\"$\"\"#\"\"\"\"\"\"*&&F,6#\"\"%F1&F,6#F/F1!\"\"F0&%\"SG6#\"\"!F1F0, **&F(F1%\"NGF1F1*(&F,6#F1F1F6F0F+F1!\"#*$)F6F.F0F1*&F3F0)FAF/F0F1!\"\" F1*&*&,&*&F+F0F6F0F8*&FAF0F3F0F1F1&F:FBF1F0F=FHF1*&*&,&*$)F6F/F0F1*&FA F0F+F0F8F1&F:F7F1F0F=FHF1" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#/%\"BG,(* &*&,&*&&%\"TG6#\"\"$\"\"\"&F+6#\"\"#F.!\"\"*&&F+6#F.F.&F+6#\"\"%F.F.F. &%\"SG6#\"\"!F.\"\"\",**&,&*$)F*F1F=F.*&F6F=F/F=F2F.%\"NGF.F.*(F4F=F/F =F*F=!\"#*$)F/F-F=F.*&F6F=)F4F1F=F.!\"\"F.*&*&,&*&FDF=F6F=F2*$)F/F1F=F .F.&F:F5F.F=F>FKF.*&*&,&*&FDF=F*F=F.*&F4F=F/F=F2F.&F:F0F.F=F>FKF." }} {PARA 12 "" 1 "" {XPPMATH 20 "6#/%\"CG,(*&*&,&*$)&%\"TG6#\"\"#F.\"\"\" \"\"\"*&&F,6#F0F0&F,6#\"\"$F0!\"\"F0&%\"SG6#\"\"!F0F/,**&,&*$)F4F.F/F0 *&&F,6#\"\"%F0F+F0F7F0%\"NGF0F0*(F2F/F+F/F4F/!\"#*$)F+F6F/F0*&FBF/)F2F .F/F0!\"\"F0*&*&,&*&FEF/F4F/F0*&F2F/F+F/F7F0&F9F3F0F/F= 4 then\n debug_print(procname,\"partials\",4);\n \+ for p in partials do\n print(p);\n od;\n fi;\n\n #-------- -----------------------------------\n # form the summation substituti ons variables\n #-------------------------------------------\n sums \+ := convert( select( (x,y)->op(0,x)=y, \n ind ets(value(expand(partials)),function), sum ), \n lis t );\n #degree() can't handle summation subscripts, so remove them\n \+ YTsums := subs( t=T, y=Y, sums );\n _subslist := [];\n nmax \+ := 0;\n debug_print(procname,\"summation terms\",4,sums);\n debug_p rint(procname,\"YT terms\",5,YTsums);\n Tcount := 0;\n Scount := 0; \n for k from 1 to nops(YTsums) do\n if ispoly then\n select( has,[op(YTsums[k])],T);\n if %=[] then\n n := 0;\n el se\n n := degree( op(%), T );\n fi;\n nmax := max(n,n max);\n fi;\n if has(YTsums[k],Y) then\n if not ispoly then \n n := Scount;\n nmax := max(n,nmax);\n Scount \+ := Scount + 1;\n fi;\n _subslist := [op(_subslist),sums[k]=' S'[n]];\n else\n if not ispoly then \n n := Tcount;\n \+ Tcount := Tcount + 1;\n fi;\n _subslist := [op(_subsli st),sums[k]='T'[n]];\n fi;\n od;\n\n #--------------------------- ------------------------\n # substitute for the summation terms in th e partials\n #---------------------------------------------------\n \+ partials := collect( eval( value(expand(partials)), _subslist ), \n \+ [seq(S[k],k=1..nmax),N], factor );\n\n #put subst itution list into form suitable for putting the sums back\n _subslist := map( (x)->rhs(x)=lhs(x), _subslist );\n\n #---------------------- ----\n # form the normal equations\n #--------------------------\n \+ eqs := collect( partials, [op(params),sum], factor );\n if printlevel >= 1 then\n debug_print(procname,\"normal equations\",1);\n for p in eqs do\n print(p);\n od;\n fi;\n\n #------------------ ---------\n # solve the normal equations \n #----------------------- ----\n debug_print(procname,\"Solving the normal equations...\",1);\n _EnvAllSolutions := true;\n map( allvalues, [solve( convert(eqs,set ), convert(params,set) )] );\n map( sortsols, %, params );\n if nops (%)=1 then\n solset := op(%);\n else\n solset := %;\n debug_ print(procname,\"There are \".(nops(solset)).\" solutions\",1);\n fi; \n debug_print(procname,\"raw solution(s)\",4,solset);\n\n #-------- -------------------------------------------\n # replace the denominat ors with another substitution\n #------------------------------------ ---------------\n\n #first define a workhorse procedure\n replace_de nominators := proc( expr, N, nmax, S, Delta )\n\n local k, p, d;\n \+ global _subslist;\n\n #---------------------------------\n # \+ determine the common denominator\n #------------------------------- --\n #grab and filter denominators from solution parameter expressi ons\n map( denom, \{ seq(op(rhs(expr[k])),k=1..nops(expr)) \} );\n \+ map( (x)->if type(x,\{integer,fraction\}) then 0 else x fi, % );\n \+ d := % minus \{0\};\n if nops(d) > 1 then\n debug_print(pro cname,\"denominator set\",0,d);\n ERROR(\"Unable to determine a u nique denominator!\");\n elif d=\{\} then\n debug_print(procna me,\"no denominator for solution\",2,expr);\n RETURN(expr);\n \+ else\n d := op(d);\n fi;\n\n #----------------------------- ---------\n # make the substitution in the solution\n #--------- -----------------------------\n _subslist := [ Delta=eval(d,_subsli st), op(_subslist) ];\n collect( algsubs(d=Delta,expr), [Delta,seq( S[k],k=0..nmax),N], factor );\n end;\n\n #now make the substitutions \n if type(solset,list(list)) then #multiple solutions\n for k \+ from 1 to nops(solset) do\n subsop(k=replace_denominators(solset[ k],N,nmax,S,Delta),solset);\n solset := subs( Delta=delta[k], \+ % );\n _subslist := subs( Delta=delta[k], _subslist );\n od;\n else #only one solution\n solset := replace_denominators(solset,N,nmax,S,Delta);\n fi;\n\n debug_print( procname,\"substitution list\",2,_subslist);\n\n #------------------- ---\n # check the solution(s)\n #----------------------\n if type(s olset,list(list)) then #multiple solutions\n debug_print(procname, \"Verifying the \".(nops(solset)).\" solutions...\",1);\n goodsols \+ := [];\n for k from 1 to nops(solset) do\n tmp := expand(subs( _subslist,eval(eqs,solset[k])));\n if not type(tmp,list(0=0)) the n\n debug_print(procname,\"Solution \".k.\" is invalid!\",0,sol set[k]);\n debug_print(procname,\"Solution \".k.\" substituted \+ into normal eqs\",0,eqs);\n debug_print(procname,\"Throwing out solution \".k,0);\n else\n goodsols := [op(goodsols),sols et[k]];\n fi;\n od;\n solset := goodsols;\n if nops(sols et)=1 then \n solset := op(solset); \n fi;\n else \+ #single solution\n debug_print(procname,\"Verifyin g the solution...\",1);\n eqs := factor(expand(subs(_subslist,eval( eqs,solset))));\n if not type(eqs,list(0=0)) then\n debug_prin t(procname,\"Solution substituted into normal eqs\",0,eqs);\n ERR OR(\"Invalid solution!\");\n fi;\n fi;\n\n if time()-time0 > 10 t hen\n debug_print(procname,\"Done!\",1);\n fi;\n solset;\nend:" } }}{EXCHG {PARA 0 "" 0 "" {XPPEDIT 19 1 "" "6#%#%?G" }}}}{SECT 0 {PARA 3 "" 0 "4. Examples" {TEXT -1 11 "4. Examples" }}{SECT 0 {PARA 4 "" 0 "Polynomial of degree 1" {TEXT -1 22 "Polynomial of degree 1" }} {EXCHG {PARA 0 "" 0 "" {TEXT -1 175 "We start with simple linear regre ssion to check the program. We set the procedure's \"chattiness\" to \+ maximum verbosity. The solution appears as the last bracketed express ion." }}}{EXCHG {PARA 0 "" 0 "" {XPPEDIT 19 1 "printlevel := 4:" "6#>% +printlevelG\"\"%" }}}{EXCHG {PARA 0 "" 0 "" {XPPEDIT 19 1 "leastsqrs( y = A+B*t[i],t,i,[A, B]);" "6#-%*leastsqrsG6&/%\"yG,&%\"AG\"\"\"*&%\"B GF*&%\"tG6#%\"iGF*F*F.F07$F)F," }}{PARA 6 "" 1 "" {TEXT -1 31 "leastsq rs[0]: i,t,y,ispoly,chi2" }}{PARA 11 "" 1 "" {XPPMATH 20 "6'%\"iG&%\"t G6#F#&%\"yGF&%%trueG-%$SumG6$*$),(F'\"\"\"%\"AG!\"\"*&%\"BGF0F$F0F2\" \"#\"\"\"/F#;F0%\"NG" }}{PARA 6 "" 1 "" {TEXT -1 45 "leastsqrs[0]: For ming the normal equations..." }}{PARA 6 "" 1 "" {TEXT -1 22 "leastsqrs [0]: partials" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#/-%$SumG6$,(&%\"yG6#% \"iG!\"#%\"AG\"\"#*&%\"BG\"\"\"&%\"tGF*F1F./F+;F1%\"NG\"\"!" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#/-%$SumG6$,$*&,(&%\"yG6#%\"iG\"\"\"%\"AG!\" \"*&%\"BGF.&%\"tGF,F.F0F.F3\"\"\"!\"#/F-;F.%\"NG\"\"!" }}{PARA 6 "" 1 "" {TEXT -1 29 "leastsqrs[0]: summation terms" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7&-%$sumG6$&%\"yG6#%\"iG/F*;\"\"\"%\"NG-F%6$*&&%\"tGF)F -F'F-F+-F%6$F2F+-F%6$*$)F2\"\"#\"\"\"F+" }}{PARA 6 "" 1 "" {TEXT -1 30 "leastsqrs[0]: normal equations" }}{PARA 11 "" 1 "" {XPPMATH 20 "6# /,(&%\"SG6#\"\"!!\"#*&%\"AG\"\"\"%\"NGF,\"\"#*&%\"BGF,&%\"TG6#F,F,F.F( " }}{PARA 11 "" 1 "" {XPPMATH 20 "6#/,(&%\"SG6#\"\"\"!\"#*&%\"AGF(&%\" TGF'F(\"\"#*&%\"BGF(&F-6#F.F(F.\"\"!" }}{PARA 6 "" 1 "" {TEXT -1 45 "l eastsqrs[0]: Solving the normal equations..." }}{PARA 6 "" 1 "" {TEXT -1 29 "leastsqrs[0]: raw solution(s)" }}{PARA 11 "" 1 "" {XPPMATH 20 " 6#7$/%\"AG*&,&*&&%\"SG6#\"\"!\"\"\"&%\"TG6#\"\"#F-F-*&&F/6#F-F-&F*F4F- !\"\"\"\"\",&*$)F3F1F7F6*&F.F7%\"NGF-F-!\"\"/%\"BG,$*&,&*&F5F7F6#F2-F*6$*&F,F2FCF2F0/&%\"TGFGF)/& FM6#F4F8" }}{PARA 6 "" 1 "" {TEXT -1 39 "leastsqrs[0]: Verifying the s olution..." }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$/%\"AG*&,&*&&%\"SG6#\" \"!\"\"\"&%\"TG6#\"\"#F-F-*&&F/6#F-F-&F*F4F-!\"\"\"\"\"%&DeltaG!\"\"/% \"BG*&,&*&F5F7%\"NGF-F-*&F3F7F)F7F6F7F8F9" }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 52 "The substitutions are stored in the global variable " } {TEXT 259 9 "_subslist" }{TEXT -1 30 ". Hence, the full solution is" }}}{EXCHG {PARA 0 "" 0 "" {XPPEDIT 19 1 "eval(%,_subslist);" "6#-%%eva lG6$%\"%G%*_subslistG" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$/%\"AG*&,&* &-%$sumG6$&%\"yG6#%\"iG/F/;\"\"\"%\"NGF2-F*6$*$)&%\"tGF.\"\"#\"\"\"F0F 2F2*&-F*6$F8F0F2-F*6$*&F8F2F,F2F0F2!\"\"F;,&*$)F=F:F;FB*&F4F;F3F2F2!\" \"/%\"BG*&,&*&F?F;F3F;F2*&F=F;F)F;FBF;FCFG" }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 229 "We can convert the solution into an optimized Maple proc edure. This procedure can then be used to evaluate the model with a s et of data. It is easily saved to disk for conversion into a C or for tran procedure \227 also quite easy." }}}{EXCHG {PARA 0 "" 0 "" {XPPEDIT 19 1 "tmp := array(map(proc (x) options operator, arrow; rhs( x) end,%)):" "6#>%$tmpG-%&arrayG6#-%$mapG6$R6#%\"xG7\"6$%)operatorG%&a rrowG6\"-%$rhsG6#F-F2F2F2%\"%G" }}}{EXCHG {PARA 0 "" 0 "" {XPPEDIT 19 1 "foo := optimize(makeproc(tmp,parameters = [N, y, t]));" "6#>%$fooG- %)optimizeG6#-%)makeprocG6$%$tmpG/%+parametersG7%%\"NG%\"yG%\"tG" }} {PARA 12 "" 1 "" {XPPMATH 20 "6#>%$fooGR6%%\"NG%\"yG%\"tG6)%#t8G%$t11G %#t4G%#t5G%#t1G%$tmpG%#t2G6\"F2C,>8)-%&arrayG6#;\"\"\"\"\"#>8(-%$sumG6 $&9%6#%\"iG/FD;F:%\"NG>8*-F?6$*$)&9&FCF;\"\"\"FE>8&-F?6$FNFE>8'-F?6$*& FNF:FAF:FE>8$*$)FRF;FP>8%*&FPFP,&Fen!\"\"*&FIF:FGF:F:!\"\">&F56#F:*&,& *&F=F:FIFPF:*&FRF:FVF:F\\oF:FinF:>&F56#F;*&,&*&FVFPFGFPF:*&FRFPF=FPF\\ oF:FinFPF5F2F2F2" }}}{EXCHG {PARA 0 "" 0 "" {XPPEDIT 19 1 "writeto(\"d :/Maple/test.p\");" "6#-%(writetoG6#Q0d:/Maple/test.p6\"" }}}{EXCHG {PARA 0 "" 0 "" {XPPEDIT 19 1 "print(foo);" "6#-%&printG6#%$fooG" }}} {EXCHG {PARA 0 "" 0 "" {XPPEDIT 19 1 "writeto(terminal);" "6#-%(writet oG6#%)terminalG" }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 200 "This is simpl e and straightforward in this example. Later on, we will see that the solutions can get rather unwieldy, but that the optimized procedures \+ created from them are still relatively simple. " }}}}{SECT 0 {PARA 4 " " 0 "Polynomial of degree 2" {TEXT -1 22 "Polynomial of degree 2" }} {EXCHG {PARA 0 "" 0 "" {XPPEDIT 19 1 "printlevel := 2:" "6#>%+printlev elG\"\"#" }}}{EXCHG {PARA 0 "" 0 "" {XPPEDIT 19 1 "leastsqrs(Y = A+B*t [i]+C*t[i]^2,t,i,[A, B, C]);" "6#-%*leastsqrsG6&/%\"YG,(%\"AG\"\"\"*&% \"BGF*&%\"tG6#%\"iGF*F**&%\"CGF**$&F.6#F0\"\"#F*F*F.F07%F)F,F2" }} {PARA 6 "" 1 "" {TEXT -1 30 "leastsqrs[0]: normal equations" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#/,*&%\"SG6#\"\"!!\"#*&%\"AG\"\"\"%\"NGF,\"\" #*&%\"BGF,&%\"TG6#F,F,F.*&%\"CGF,&F26#F.F,F.F(" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#/,*&%\"SG6#\"\"\"!\"#*&%\"AGF(&%\"TGF'F(\"\"#*&%\"BGF(& F-6#F.F(F.*&%\"CGF(&F-6#\"\"$F(F.\"\"!" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#/,*&%\"SG6#\"\"#!\"#*&%\"AG\"\"\"&%\"TGF'F,F(*&%\"BGF,&F.6#\"\"$ F,F(*&%\"CGF,&F.6#\"\"%F,F(\"\"!" }}{PARA 6 "" 1 "" {TEXT -1 45 "least sqrs[0]: Solving the normal equations..." }}{PARA 6 "" 1 "" {TEXT -1 31 "leastsqrs[0]: substitution list" }}{PARA 12 "" 1 "" {XPPMATH 20 "6 #7*/%&DeltaG,,*(-%$sumG6$&%\"tG6#%\"iG/F.;\"\"\"%\"NGF1-F)6$*$)F+\"\"# \"\"\"F/F1-F)6$*$)F+\"\"$F8F/F1!\"#*&)F9F7F8F2F1F1*$)F3F=F8F1*(-F)6$*$ )F+\"\"%F8F/F1F2F8F3F8!\"\"*&FDF8)F(F7F8F1/&%\"SG6#\"\"!-F)6$&%\"YGF-F //&%\"TG6#F1F(/&FW6#F7F3/&FNFX-F)6$*&F+F1FSF1F//&FW6#F=F9/&FNFen-F)6$* &F6F8FSF8F//&FW6#FHFD" }}{PARA 6 "" 1 "" {TEXT -1 39 "leastsqrs[0]: Ve rifying the solution..." }}{PARA 12 "" 1 "" {XPPMATH 20 "6#7%/%\"AG*&, (*&,&*$)&%\"TG6#\"\"$\"\"#\"\"\"\"\"\"*&&F-6#\"\"%F2&F-6#F0F2!\"\"F2&% \"SG6#\"\"!F2F2*&,&*&F7F1F,F2F9*&&F-6#F2F2F4F1F2F2&F;FCF2F2*&,&*&F,F1F BF1F9*$)F7F0F1F2F2&F;F8F2F2F1%&DeltaG!\"\"/%\"BG*&,(*&F?F1F:F1F2*&,&FH F2*&F4F1%\"NGF2F9F2FDF1F2*&,&*&FBF1F7F1F9*&F,F1FUF1F2F2FJF1F2F1FKFL/% \"CG*&,(*&FFF1F:F1F2*&FWF1FDF1F2*&,&*&F7F1FUF1F9*$)FBF0F1F2F2FJF1F2F1F KFL" }}}{EXCHG {PARA 0 "" 0 "" {XPPEDIT 19 1 "tmp := array(map(proc (x ) options operator, arrow; rhs(x) end,eval(%,_subslist))):" "6#>%$tmpG -%&arrayG6#-%$mapG6$R6#%\"xG7\"6$%)operatorG%&arrowG6\"-%$rhsG6#F-F2F2 F2-%%evalG6$%\"%G%*_subslistG" }}}{EXCHG {PARA 0 "" 0 "" {XPPEDIT 19 1 "optimize(makeproc(tmp,parameters = [N, Y, t]));" "6#-%)optimizeG6#- %)makeprocG6$%$tmpG/%+parametersG7%%\"NG%\"YG%\"tG" }}{PARA 12 "" 1 " " {XPPMATH 20 "6#R6%%\"NG%\"YG%\"tG63%#t7G%$t26G%$t31G%$t12G%$t16G%$t2 8G%$t17G%$t13G%$t21G%$t18G%$t36G%#t4G%$t10G%$tmpG%#t3G%#t1G%#t2G6\"F:C 7>81-%&arrayG6#;\"\"\"\"\"$>83-%$sumG6$*$)&9&6#%\"iGFC\"\"\"/FN;FB%\"N G>84*$)FE\"\"#FO>82-FG6$*$)FK\"\"%FOFP>8/-FG6$*$)FKFWFOFP>8$-FG6$&9%FM FP>80-FG6$FKFP>8',&*&FjnFBFEFB!\"\"*&FfoFBFYFBFB>8+-FG6$*&FKFBFcoFBFP> 8(*$)FjnFWFO>8*,&*&FEFOFfoFOF]pFepFB>8--FG6$*&F^oFOFcoFOFP>8,*&FfoFOFj nFO>8%*&FYFOFRFB>8)*$)FfoFWFO>8&*&FOFO,,*&FbqFBFEFO!\"#*&FTFBFRFOFB*&F epFBFjnFOFB*&FeqFBFjnFOF]p*&FYFOFhqFBFB!\"\">&F=6#FB*&,(*&,&FTFB*&FYFO FjnFOF]pFBF`oFBFB*&FjoFBF`pFBFB*&FipFBF]qFBFBFBF\\rFB>8.,&FbqF]p*&FEFO FRFOFB>&F=6#FW*&,(*&FjoFOF`oFOFB*&,&FepFBFeqF]pFBF`pFOFB*&FasFBF]qFOFB FBF\\rFO>&F=6#FC*&,(*&FipFOF`oFOFB*&FasFOF`pFOFB*&,&*&FjnFOFRFOF]pFhqF BFBF]qFOFBFBF\\rFOF=F:F:F:" }}}}{SECT 0 {PARA 4 "" 0 "Polynomial of de gree 3" {TEXT -1 22 "Polynomial of degree 3" }}{EXCHG {PARA 0 "" 0 "" {TEXT -1 75 "In this example, we will not show the solution, since it \+ is a bit unwieldy." }}}{EXCHG {PARA 0 "" 0 "" {XPPEDIT 19 1 "leastsqrs (Y = A+B*t[i]+C*t[i]^2+D*t[i]^3,t,i,[A, B, C, D]):" "6#-%*leastsqrsG6& /%\"YG,*%\"AG\"\"\"*&%\"BGF*&%\"tG6#%\"iGF*F**&%\"CGF**$&F.6#F0\"\"#F* F**&%\"DGF**$&F.6#F0\"\"$F*F*F.F07&F)F,F2F8" }}{PARA 6 "" 1 "" {TEXT -1 30 "leastsqrs[0]: normal equations" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#/,,&%\"SG6#\"\"!!\"#*&%\"AG\"\"\"%\"NGF,\"\"#*&%\"BGF,&%\"TG6#F,F,F .*&%\"CGF,&F26#F.F,F.*&%\"DGF,&F26#\"\"$F,F.F(" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#/,,&%\"SG6#\"\"\"!\"#*&%\"AGF(&%\"TGF'F(\"\"#*&%\"BGF(& F-6#F.F(F.*&%\"CGF(&F-6#\"\"$F(F.*&%\"DGF(&F-6#\"\"%F(F.\"\"!" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#/,,&%\"SG6#\"\"#!\"#*&%\"AG\"\"\"&%\"T GF'F,F(*&%\"BGF,&F.6#\"\"$F,F(*&%\"CGF,&F.6#\"\"%F,F(*&%\"DGF,&F.6#\" \"&F,F(\"\"!" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#/,,&%\"SG6#\"\"$!\"#*& %\"AG\"\"\"&%\"TGF'F,\"\"#*&%\"BGF,&F.6#\"\"%F,F/*&%\"CGF,&F.6#\"\"&F, F/*&%\"DGF,&F.6#\"\"'F,F/\"\"!" }}{PARA 6 "" 1 "" {TEXT -1 45 "leastsq rs[0]: Solving the normal equations..." }}{PARA 6 "" 1 "" {TEXT -1 31 "leastsqrs[1]: substitution list" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#7- /%&DeltaG,B*&-%$sumG6$*$)&%\"tG6#%\"iG\"\"'\"\"\"/F0;\"\"\"%\"NGF5)-F) 6$*$)F-\"\"#F2F3\"\"$F2F5*()F8F%$tmpG-%&arrayG6#-%$mapG6$R6 #%\"xG7\"6$%)operatorG%&arrowG6\"-%$rhsG6#F-F2F2F2-%%evalG6$%#%%G%*_su bslistG" }}}{EXCHG {PARA 0 "" 0 "" {XPPEDIT 19 1 "optimize(makeproc(tm p,parameters = [N, Y, t])):" "6#-%)optimizeG6#-%)makeprocG6$%$tmpG/%+p arametersG7%%\"NG%\"YG%\"tG" }}}}{SECT 0 {PARA 4 "" 0 "Sinusoid \227 R epresentation 1" {TEXT -1 27 "Sinusoid \227 Representation 1" }} {EXCHG {PARA 0 "" 0 "" {XPPEDIT 19 1 "printlevel := 1:" "6#>%+printlev elG\"\"\"" }}}{EXCHG {PARA 0 "" 0 "" {XPPEDIT 19 1 "leastsqrs(Y = A*co s(2*Pi*nu*t[i]+phi),t,i,[A, phi]);" "6#-%*leastsqrsG6&/%\"YG*&%\"AG\" \"\"-%$cosG6#,&**\"\"#F*%#PiGF*%#nuGF*&%\"tG6#%\"iGF*F*%$phiGF*F*F4F67 $F)F7" }}{PARA 6 "" 1 "" {TEXT -1 30 "leastsqrs[0]: normal equations" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#/,**&,.*&)-%$cosG6#%$phiG\"\"#\"\"\" &%\"TG6#\"\"!\"\"\"\"\")*&F(F.&F06#F3F3!\")*(F)F3-%$sinGF+F3&F06#F-F3! #;*&F(F.%\"NGF3F-*(F)F.F:F.&F06#\"\"$F3F4*&)F:F-F.&F06#\"\"%F3F4F3%\"A GF3F3*&F)F.&%\"SGF1F3!\"%*&F)F.&FMF7F3F-*&F:F.&FMF=F3FIF2" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#/,&*&,2*(-%$cosG6#%$phiG\"\"\"-%$sinGF*F,%\"NGF ,!\"#*(F(\"\"\"F-F2&%\"TG6#\"\"!F,!\")*&)F(\"\"#F2&F46#\"\"$F,\"\"%*&F 9F2&F46#F:F,F7*(F(F2F-F2&F46#F>F,\"\")*(F(F2F-F2&F46#F,F,FE*&)F-F:F2F; F2!\"%*&FJF2F@F2FEF,)%\"AGF:F2F,*&,(*&F-F2&%\"SGFHF,F0*&F(F2&FSFAF,F>* &F-F2&FSF5F,F>F,FNF,F,F6" }}{PARA 6 "" 1 "" {TEXT -1 45 "leastsqrs[0]: Solving the normal equations..." }}{PARA 6 "" 1 "" {TEXT -1 35 "least sqrs[2]: There are 3 solutions" }}{PARA 6 "" 1 "" {TEXT -1 42 "leastsq rs[4]: Verifying the 3 solutions..." }}{PARA 6 "" 1 "" {TEXT -1 37 "le astsqrs[18]: Solution 2 is invalid!" }}{PARA 12 "" 1 "" {XPPMATH 20 "6 #7$/%\"AG,$*&*$-%%sqrtG6#,fo**&%\"TG6#\"\"#\"\"\"&%\"SGF0F2&F46#F2F2&F /6#\"\"%F2\"#;**&F/6#\"\"$F2F3\"\"\"&F46#\"\"!F2F7F?F:**FF4FJF3/,&*&,2*(F*F/F;F/FAF/!\"#*(F*F /F;F/F0F/F9*&F)F/FCF/FJ*&F)F/F=F/F9*(F*F/F;F/FHF/F5*(F*F/F;F/F7F/F5*&F GF/FCF/FO*&FGF/F=F/F5F4)FKF.F/F4*&,(*&F;F/FQF/FY*&F*F/FSF/FJ*&F;F/FMF/ FJF4FKF/F4F3" }}{PARA 6 "" 1 "" {TEXT -1 38 "leastsqrs[18]: Throwing o ut solution 2" }}{PARA 6 "" 1 "" {TEXT -1 37 "leastsqrs[31]: Solution \+ 3 is invalid!" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#7$/%\"AG,$*&*$-%%sqrt G6#,fo**&%\"TG6#\"\"#\"\"\"&%\"SGF0F2&F46#F2F2&F/6#\"\"%F2\"#;**&F/6# \"\"$F2F3\"\"\"&F46#\"\"!F2F7F?F:**FF4FJF3/,&*&,2*(F*F/F;F/FAF/!\"#*(F*F/F;F/F0F/F9*&F) F/FCF/FJ*&F)F/F=F/F9*(F*F/F;F/FHF/F5*(F*F/F;F/F7F/F5*&FGF/FCF/FO*&FGF/ F=F/F5F4)FKF.F/F4*&,(*&F;F/FQF/FY*&F*F/FSF/FJ*&F;F/FMF/FJF4FKF/F4F3" } }{PARA 6 "" 1 "" {TEXT -1 38 "leastsqrs[31]: Throwing out solution 3" }}{PARA 6 "" 1 "" {TEXT -1 20 "leastsqrs[31]: Done!" }}{PARA 11 "" 1 " " {XPPMATH 20 "6#7$/%\"AG\"\"!/%$phiG,&-%'arctanG6#,$*&,&&%\"SG6#F&\" \"#&F16#\"\"\"!\"\"\"\"\"&F16#F3!\"\"#F6F3F6*&%#PiGF6%$_Z|irGF6F6" }}} {EXCHG {PARA 0 "" 0 "" {TEXT -1 15 "As we can see, " }{XPPEDIT 18 0 "Y = A*cos(2*Pi*nu*t[i]+phi);" "6#/%\"YG*&%\"AG\"\"\"-%$cosG6#,&**\"\"#F '%#PiGF'%#nuGF'&%\"tG6#%\"iGF'F'%$phiGF'F'" }{TEXT -1 143 " is not a p articularly good choice of representation, since the solution involves inverse trigonometric functions and is particularly useless (" } {XPPEDIT 18 0 "A = 0;" "6#/%\"AG\"\"!" }{TEXT -1 61 "). The next, equ ivalent, example leads to a useful solution." }}}}{SECT 0 {PARA 4 "" 0 "Sinusoid \227 Representation 2" {TEXT -1 27 "Sinusoid \227 Represen tation 2" }}{EXCHG {PARA 0 "" 0 "" {XPPEDIT 19 1 "printlevel := 2:" "6 #>%+printlevelG\"\"#" }}}{EXCHG {PARA 0 "" 0 "" {XPPEDIT 19 1 "leastsq rs(Y = A*cos(2*Pi*nu*t[i])+B*sin(2*Pi*nu*t[i]),t,i,[A, B]);" "6#-%*lea stsqrsG6&/%\"YG,&*&%\"AG\"\"\"-%$cosG6#**\"\"#F+%#PiGF+%#nuGF+&%\"tG6# %\"iGF+F+F+*&%\"BGF+-%$sinG6#**\"\"#F+F1F+F2F+&F46#F6F+F+F+F4F67$F*F8 " }}{PARA 6 "" 1 "" {TEXT -1 30 "leastsqrs[0]: normal equations" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#/,**&,(&%\"TG6#\"\"\"!\")%\"NG\"\"#&F( 6#\"\"!\"\")F*%\"AGF*F**&,&&F(6#\"\"$!\"%&F(6#F-F1F*%\"BGF*F*&%\"SGF:F 8&F=F/F-F0" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#/,(*&,&&%\"TG6#\"\"$!\"% &F(6#\"\"#\"\")\"\"\"%\"AGF0F0&%\"SG6#F0F+*&%\"BGF0&F(6#\"\"%F0F/\"\"! " }}{PARA 6 "" 1 "" {TEXT -1 45 "leastsqrs[0]: Solving the normal equa tions..." }}{PARA 6 "" 1 "" {TEXT -1 31 "leastsqrs[1]: substitution li st" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#7+/%&DeltaG,.*&-%$sumG6$*$)-%$co sG6#*(%#PiG\"\"\"%#nuGF2&%\"tG6#%\"iGF2\"\"%\"\"\"/F7;F2%\"NGF2-F)6$*& )-%$sinGF/\"\"#F9)F-FCF9F:F2F8*&-F)6$*$FDF9F:F2F=F9!\"%*&F%$tmpG-%&arrayG6#-%$mapG6$R6#%\" xG7\"6$%)operatorG%&arrowG6\"-%$rhsG6#F-F2F2F2-%%evalG6$%\"%G%*_subsli stG" }}}{EXCHG {PARA 0 "" 0 "" {XPPEDIT 19 1 "optimize(makeproc(tmp,pa rameters = [N, Y, t]));" "6#-%)optimizeG6#-%)makeprocG6$%$tmpG/%+param etersG7%%\"NG%\"YG%\"tG" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#R6%%\"NG%\" YG%\"tG6/%$tmpG%#t1G%#t2G%#t8G%$t14G%#t7G%#t6G%#t4G%$t10G%$t17G%$t21G% $t27G%$t25G6\"F6C2>8$-%&arrayG6#;\"\"\"\"\"#>8%-%$sumG6$&9%6#%\"iG/FH; F>%\"NG>8&-FC6$*&)-%$sinG6#*(%#PiGF>%#nuGF>&9&FGF>F?\"\"\")-%$cosGFTF? FZFI>8+-FC6$*&)Ffn\"\"$FZFRF>FI>8*-FC6$*&FRFZFfnF>FI>8),&Fin!\"#F`oF>> 8'-FC6$*(FEF>FRFZFfnFZFI>8,-FC6$*&FEFZFenFZFI>8(-FC6$*$)Ffn\"\"%FZFI>8 --FC6$*$FenFZFI>8.*$)FinF?FZ>80*$)F`oF?FZ>8/*&FZFZ,.*&FMF>FcpF>Fhp*&Fj pF>FMFZ!\"%*&FKF>FMFZF>F_qF\\r*&F`oF>FinF>FhpFcq!\"\"!\"\">&F96#F>*&,( *&FAF>FMFZF_r*&FeoF>FioF>F>*&F^pF>FMFZF?F>FgqF>>&F96#F?*&,(*&,&FinF>F` o#F_rF?F>FAFZF>*&,(FcpF?FjpFgoFK#F>F?F>FioFZF>*&FeoFZF^pFZF>F>FgqFZF9F 6F6F6" }}}}{SECT 0 {PARA 4 "" 0 "Logarithm" {TEXT -1 9 "Logarithm" }} {EXCHG {PARA 0 "" 0 "" {XPPEDIT 19 1 "leastsqrs(Y = A+B*log(t[i]),t,i, [A, B]);" "6#-%*leastsqrsG6&/%\"YG,&%\"AG\"\"\"*&%\"BGF*-%$logG6#&%\"t G6#%\"iGF*F*F1F37$F)F," }}{PARA 6 "" 1 "" {TEXT -1 30 "leastsqrs[0]: n ormal equations" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#/,(&%\"SG6#\"\"!!\" #*&%\"AG\"\"\"%\"NGF,\"\"#*&%\"BGF,&%\"TG6#F,F,F.F(" }}{PARA 11 "" 1 " " {XPPMATH 20 "6#/,(&%\"SG6#\"\"\"!\"#*&%\"AGF(&%\"TGF'F(\"\"#*&%\"BGF (&F-6#\"\"!F(F.F3" }}{PARA 6 "" 1 "" {TEXT -1 45 "leastsqrs[0]: Solvin g the normal equations..." }}{PARA 6 "" 1 "" {TEXT -1 31 "leastsqrs[0] : substitution list" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#7'/%&DeltaG,&*$ )-%$sumG6$-%#lnG6#&%\"tG6#%\"iG/F2;\"\"\"%\"NG\"\"#\"\"\"!\"\"*&-F*6$* $)F,F7F8F3F5F6F5F5/&%\"SG6#\"\"!-F*6$&%\"YGF1F3/&%\"TGFBF;/&FJ6#F5F)/& FAFM-F*6$*&F,F5FFF5F3" }}{PARA 6 "" 1 "" {TEXT -1 39 "leastsqrs[0]: Ve rifying the solution..." }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$/%\"AG*&, &*&&%\"SG6#\"\"!\"\"\"&%\"TGF+F-F-*&&F/6#F-F-&F*F2F-!\"\"\"\"\"%&Delta G!\"\"/%\"BG*&,&*&F3F5%\"NGF-F-*&F1F5F)F5F4F5F6F7" }}}{EXCHG {PARA 0 " " 0 "" {XPPEDIT 19 1 "eval(%,_subslist);" "6#-%%evalG6$%\"%G%*_subslis tG" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#7$/%\"AG*&,&*&-%$sumG6$&%\"YG6#% \"iG/F/;\"\"\"%\"NGF2-F*6$*$)-%#lnG6#&%\"tGF.\"\"#\"\"\"F0F2F2*&-F*6$F 8F0F2-F*6$*&F8F2F,F2F0F2!\"\"F>,&*$)F@F=F>FE*&F4F>F3F2F2!\"\"/%\"BG*&, &*&FBF>F3F>F2*&F@F>F)F>FEF>FFFJ" }}}{EXCHG {PARA 0 "" 0 "" {XPPEDIT 19 1 "tmp := array(map(proc (x) options operator, arrow; rhs(x) end,ev al(%%,_subslist))):" "6#>%$tmpG-%&arrayG6#-%$mapG6$R6#%\"xG7\"6$%)oper atorG%&arrowG6\"-%$rhsG6#F-F2F2F2-%%evalG6$%#%%G%*_subslistG" }}} {EXCHG {PARA 0 "" 0 "" {XPPEDIT 19 1 "optimize(makeproc(tmp,parameters = [N, Y, t]));" "6#-%)optimizeG6#-%)makeprocG6$%$tmpG/%+parametersG7% %\"NG%\"YG%\"tG" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#R6%%\"NG%\"YG%\"tG6 )%$tmpG%#t5G%$t11G%#t4G%#t8G%#t1G%#t2G6\"F0C,>8$-%&arrayG6#;\"\"\"\"\" #>8)-%$sumG6$&9%6#%\"iG/FB;F8%\"NG>8*-F=6$*$)-%#lnG6#&9&FAF9\"\"\"FC>8 '-F=6$FLFC>8%-F=6$*&FLF8F?F8FC>8(*$)FSF9FQ>8&*&FQFQ,&Ffn!\"\"*&FGF8FEF 8F8!\"\">&F36#F8*&,&*&FGFQF;F8F8*&FSF8FWF8F]oF8FjnF8>&F36#F9*&,&*&FWFQ FEFQF8*&F;FQFSFQF]oF8FjnFQF3F0F0F0" }}}}{SECT 0 {PARA 4 "" 0 "Exponent ial" {TEXT -1 11 "Exponential" }}{EXCHG {PARA 0 "" 0 "" {XPPEDIT 19 1 "leastsqrs(Y = A+B*exp(t[i]),t,i,[A, B]);" "6#-%*leastsqrsG6&/%\"YG,&% \"AG\"\"\"*&%\"BGF*-%$expG6#&%\"tG6#%\"iGF*F*F1F37$F)F," }}{PARA 6 "" 1 "" {TEXT -1 30 "leastsqrs[0]: normal equations" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#/,(&%\"SG6#\"\"!!\"#*&%\"AG\"\"\"%\"NGF,\"\"#*&%\"BGF,& %\"TGF'F,F.F(" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#/,(&%\"SG6#\"\"\"!\"# *&%\"AGF(&%\"TG6#\"\"!F(\"\"#*&%\"BGF(&F-F'F(F0F/" }}{PARA 6 "" 1 "" {TEXT -1 45 "leastsqrs[0]: Solving the normal equations..." }}{PARA 6 "" 1 "" {TEXT -1 31 "leastsqrs[0]: substitution list" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7'/%&DeltaG,&*$)-%$sumG6$-%$expG6#&%\"tG6#%\"iG/F2; \"\"\"%\"NG\"\"#\"\"\"!\"\"*&-F*6$*$)F,F7F8F3F5F6F5F5/&%\"SG6#\"\"!-F* 6$&%\"YGF1F3/&%\"TGFBF)/&FA6#F5-F*6$*&F,F5FFF5F3/&FJFMF;" }}{PARA 6 " " 1 "" {TEXT -1 39 "leastsqrs[0]: Verifying the solution..." }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$/%\"AG*&,&*&&%\"SG6#\"\"!\"\"\"&%\"TG6#F-F -F-*&&F/F+F-&F*F0F-!\"\"\"\"\"%&DeltaG!\"\"/%\"BG*&,&*&F3F5%\"NGF-F-*& F2F5F)F5F4F5F6F7" }}}{EXCHG {PARA 0 "" 0 "" {XPPEDIT 19 1 "eval(%,_sub slist);" "6#-%%evalG6$%\"%G%*_subslistG" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$/%\"AG*&,&*&-%$sumG6$&%\"YG6#%\"iG/F/;\"\"\"%\"NGF2-F*6$*$)-%$ expG6#&%\"tGF.\"\"#\"\"\"F0F2F2*&-F*6$F8F0F2-F*6$*&F8F2F,F2F0F2!\"\"F> ,&*$)F@F=F>FE*&F4F>F3F2F2!\"\"/%\"BG*&,&*&FBF>F3F>F2*&F@F>F)F>FEF>FFFJ " }}}{EXCHG {PARA 0 "" 0 "" {XPPEDIT 19 1 "tmp := array(map(proc (x) o ptions operator, arrow; rhs(x) end,eval(%%,_subslist))):" "6#>%$tmpG-% &arrayG6#-%$mapG6$R6#%\"xG7\"6$%)operatorG%&arrowG6\"-%$rhsG6#F-F2F2F2 -%%evalG6$%#%%G%*_subslistG" }}}{EXCHG {PARA 0 "" 0 "" {XPPEDIT 19 1 " optimize(makeproc(tmp,parameters = [N, Y, t]));" "6#-%)optimizeG6#-%)m akeprocG6$%$tmpG/%+parametersG7%%\"NG%\"YG%\"tG" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#R6%%\"NG%\"YG%\"tG6)%#t5G%$t11G%#t1G%#t2G%$tmpG%#t4G%#t 8G6\"F0C,>8(-%&arrayG6#;\"\"\"\"\"#>8&-%$sumG6$&9%6#%\"iG/FB;F8%\"NG>8 '-F=6$*$)-%$expG6#&9&FAF9\"\"\"FC>8)-F=6$FLFC>8$-F=6$*&FLF8F?F8FC>8**$ )FSF9FQ>8%*&FQFQ,&Ffn!\"\"*&FGF8FEF8F8!\"\">&F36#F8*&,&*&F;F8FGFQF8*&F SF8FWF8F]oF8FjnF8>&F36#F9*&,&*&FWFQFEFQF8*&FSFQF;FQF]oF8FjnFQF3F0F0F0 " }}}}{SECT 0 {PARA 4 "" 0 "Exponentially Decaying Sinusoid" {TEXT -1 31 "Exponentially Decaying Sinusoid" }}{EXCHG {PARA 0 "" 0 "" {TEXT -1 84 "The substitution list for this case is quite long, so its outpu t will be suppressed." }}}{EXCHG {PARA 0 "" 0 "" {XPPEDIT 19 1 "printl evel := 1:" "6#>%+printlevelG\"\"\"" }}}{EXCHG {PARA 0 "" 0 "" {XPPEDIT 19 1 "leastsqrs(Y = A+exp(-t[i])*(B*cos(2*Pi*nu*t[i])+C*sin(2 *Pi*nu*t[i])),t,i,[A, B, C]):" "6#-%*leastsqrsG6&/%\"YG,&%\"AG\"\"\"*& -%$expG6#,$&%\"tG6#%\"iG!\"\"F*,&*&%\"BGF*-%$cosG6#**\"\"#F*%#PiGF*%#n uGF*&F16#F3F*F*F**&%\"CGF*-%$sinG6#**\"\"#F*F=F*F>F*&F16#F3F*F*F*F*F*F 1F37%F)F7FB" }}{PARA 6 "" 1 "" {TEXT -1 30 "leastsqrs[0]: normal equat ions" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#/,**&%\"AG\"\"\"%\"NGF'\"\"#*& ,&&%\"TG6#\"\"!\"\"%&F-6#F)!\"#F'%\"BGF'F'&%\"SGF.F3*&%\"CGF'&F-6#\"\" $F'F0F/" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#/,,*&,&&%\"TG6#\"\"!\"\"%&F (6#\"\"#!\"#\"\"\"%\"AGF0F0*&,(&F(6#F+\"\")&F(6#\"\"'!\")&F(6#\"\"&F.F 0%\"BGF0F0*&,&&F(6#F6!\"%&F(6#\"\"(F6F0%\"CGF0F0&%\"SG6#F0FC&FIF-F.F* " }}{PARA 11 "" 1 "" {XPPMATH 20 "6#/,**&%\"AG\"\"\"&%\"TG6#\"\"$F'\" \"%*&,&&F)6#\"\")!\"%&F)6#\"\"(F1F'%\"BGF'F'&%\"SGF*F2*&%\"CGF'&F)6#F' F'F1\"\"!" }}{PARA 6 "" 1 "" {TEXT -1 45 "leastsqrs[0]: Solving the no rmal equations..." }}{PARA 6 "" 1 "" {TEXT -1 39 "leastsqrs[2]: Verify ing the solution..." }}}{EXCHG {PARA 0 "" 0 "" {XPPEDIT 19 1 "soln := \+ %:" "6#>%%solnG%\"%G" }}}{EXCHG {PARA 0 "" 0 "" {XPPEDIT 19 1 "for p i n soln do print(p) od:" "6#?&%\"pG%%solnG%%trueG-%&printG6#F$" }} {PARA 12 "" 1 "" {XPPMATH 20 "6#/%\"AG*&,**&,.*$)&%\"TG6#\"\"(\"\"#\" \"\"\"\"%*$)&F,6#\"\")F/F0\"\"\"*&F+F7F4F7!\"%*&&F,6#\"\"&F7&F,6#F7F7! \"\"*&&F,6#F1F7F>F0F9*&&F,6#\"\"'F7F>F0F1F7&%\"SG6#\"\"!F7F7*&,**&F+F0 &F,6#\"\"$F7F9*&&F,FJF7F>F0F1*&F4F0FOF0F/*&&F,6#F/F7F>F0!\"#F7&FIF?F7F 7*&,*FUF7FNF/FTF@FRFXF7&FIFWF7F7*&,0*&FOF0FEF0F9*&FOF0F;F0F7*&FOF0FBF0 F1*&FSF0F+F0F9*&F+F0FVF0F/*&FSF0F4F0F/*&FVF0F4F0F@F7&FIFPF7F7F0%&Delta G!\"\"" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#/%\"BG*&,**&,**&&%\"TG6#\"\" (\"\"\"&F+6#\"\"$F.!\"#*&&F+6#\"\"!F.&F+6#F.F.\"\"#*&&F+6#\"\")F.F/\" \"\"F.*&&F+6#F9F.F7F>!\"\"F.&%\"SGF5F.F.*&,&*&F7F>%\"NGF.F2*$)F/F9F>F9 F.&FDF8F.F.*&,&FGF.FIFBF.&FDFAF.F.*&,&*&,&F;FBF*F9F.FHF>F.*&F/F>,&F4F9 F@FBF.FBF.&FDF0F.F.F>%&DeltaG!\"\"" }}{PARA 12 "" 1 "" {XPPMATH 20 "6# /%\"CG*&,**&,0*&&%\"TG6#\"\"#\"\"\"&F+6#\"\")F.#!\"\"F-*&&F+6#\"\"!F.& F+6#\"\"(F.!\"#*&F5\"\"\"F/F=F.*&F8F=F*F=F.*&&F+6#\"\"$F.&F+6#\"\"'F.F ;*&F@F=&F+6#\"\"&F.#F.F-*&F@F=&F+6#\"\"%F.F-F.&%\"SGF6F.F.*&,&*&,&F/F3 F8F-F.%\"NGF.F.*&F@F=,&F5F-F*F3F.F3F.&FP6#F.F.F.*&,&*&,&F/FJF8F3F.FUF= F.FVFJF.&FPF,F.F.*&,&*&,(FCF-FGF2FLF;F.FUF=F.*$)FWF-F=FJF.&FPFAF.F.F=% &DeltaG!\"\"" }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 83 "The following com mands produce an optimized procedure, which we will not show here." }} }{EXCHG {PARA 0 "" 0 "" {XPPEDIT 19 1 "tmp := array(map(proc (x) optio ns operator, arrow; rhs(x) end,eval(soln,_subslist))):" "6#>%$tmpG-%&a rrayG6#-%$mapG6$R6#%\"xG7\"6$%)operatorG%&arrowG6\"-%$rhsG6#F-F2F2F2-% %evalG6$%%solnG%*_subslistG" }}}{EXCHG {PARA 0 "" 0 "" {XPPEDIT 19 1 " optimize(makeproc(tmp,parameters = [N, Y, t])):" "6#-%)optimizeG6#-%)m akeprocG6$%$tmpG/%+parametersG7%%\"NG%\"YG%\"tG" }}}}{SECT 0 {PARA 4 " " 0 "Sinusoid with Exponentially Decaying Component" {TEXT -1 46 "Sinu soid with Exponentially Decaying Component" }}{EXCHG {PARA 0 "" 0 "" {XPPEDIT 19 1 "model := Y = A+B*cos(2*Pi*nu[1]*t[i])+C*sin(2*Pi*nu[1]* t[i])+exp(-t[i])*(D*cos(2*Pi*nu[2]*t[i])+E*sin(2*Pi*nu[2]*t[i])):" "6# >%&modelG/%\"YG,*%\"AG\"\"\"*&%\"BGF)-%$cosG6#**\"\"#F)%#PiGF)&%#nuG6# \"\"\"F)&%\"tG6#%\"iGF)F)F)*&%\"CGF)-%$sinG6#**\"\"#F)F1F)&F36#\"\"\"F )&F76#F9F)F)F)*&-%$expG6#,$&F76#F9!\"\"F),&*&%\"DGF)-F-6#**\"\"#F)F1F) &F36#\"\"#F)&F76#F9F)F)F)*&%\"EGF)-F=6#**\"\"#F)F1F)&F36#\"\"#F)&F76#F 9F)F)F)F)F)" }}}{EXCHG {PARA 0 "" 0 "" {XPPEDIT 19 1 "leastsqrs(model, t,i,[A, B, C, D, E]):" "6#-%*leastsqrsG6&%&modelG%\"tG%\"iG7'%\"AG%\"B G%\"CG%\"DG%\"EG" }}{PARA 6 "" 1 "" {TEXT -1 30 "leastsqrs[4]: normal \+ equations" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#/,.*&%\"NG\"\"\"%\"AGF'\" \"#*&,&F&!\"#&%\"TG6#\"#6\"\"%F'%\"BGF'F'*&%\"CGF'&F.6#\"#7F'F1*&,&&F. 6#\"#8F1&F.6#\"#:F,F'%\"DGF'F'&%\"SG6#\"\"$F,*&%\"EGF'&F.6#\"#=F'F1\" \"!" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#/,0*&,&%\"NG!\"#&%\"TG6#\"#6\" \"%\"\"\"%\"AGF.F.*&,(F)!\")F'\"\"#&F*6#\"\"$\"\")F.%\"BGF.F.*&,&&F*6# \"\"'F7&F*6#\"#7!\"%F.%\"CGF.F.*&,*&F*6#\"#8FA&F*6#\"\"*FA&F*6#\"#:F3& F*6#\"\"(F7F.%\"DGF.F.*&,&&F*6#\"#5F7&F*6#\"#=FAF.%\"EGF.F.&%\"SGF5F3& Ffn6#\"\"&FA\"\"!" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#/,.*&%\"AG\"\"\"& %\"TG6#\"#7F'\"\"%*&,&&F)6#\"\"'\"\")F(!\"%F'%\"BGF'F'*&%\"CGF'&F)6#\" #;F'F2*&,&&F)6#\"#F3F'%\"DGF'F'&%\"SG6#F,F3*&%\"EGF'&F)6#F 2F'F2\"\"!" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#/,0*&,&&%\"TG6#\"#8\"\"% &F(6#\"#:!\"#\"\"\"%\"AGF0F0*&,*F'!\"%&F(6#\"\"*F4F,\"\"#&F(6#\"\"(\" \")F0%\"BGF0F0*&,&&F(6#\"#F4F0%\"CGF0F0*&,(&F(6#\"#9F<&F(6 #\"\"!!\")&F(6#F0F8F0%\"DGF0F0*&,&&F(6#F8F<&F(6#F+F4F0%\"EGF0F0&%\"SGF MF4&FenFQF8FN" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#/,.*&%\"AG\"\"\"&%\"T G6#\"#=F'\"\"%*&,&&F)6#\"#5\"\")F(!\"%F'%\"BGF'F'*&%\"CGF'&F)6#F2F'F2* &,&&F)6#\"\"#F2&F)6#F,F3F'%\"DGF'F'&%\"SGF%%solnG%\"%G " }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 64 "As we can see, the solution f or this model is quite complicated:" }}}{EXCHG {PARA 0 "" 0 "" {XPPEDIT 19 1 "cost(soln);" "6#-%%costG6#%%solnG" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#,*%*additionsG\"%)=#%0multiplicationsG\"%\\x%*divisions G\"\"&%,assignmentsGF)" }}}{EXCHG {PARA 0 "" 0 "" {XPPEDIT 19 1 "map(c ost,soln);" "6#-%$mapG6$%%costG%%solnG" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#7',*%*additionsG\"$*y%0multiplicationsG\"%kG%*divisionsG\"\"\"%, assignmentsGF*,*F%\"$%RF'\"%#Q\"F)F*F+F*F,,*F%\"$<#F'\"$R(F)F*F+F*F," }}}{EXCHG {PARA 0 "" 0 "" {XPPEDIT 19 1 "cost(_subslist);" "6#-%%costG 6#%*_subslistG" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#,*%*additionsG\"$a#% 0multiplicationsG\"%\\7%%sumsG\"%36%,assignmentsG\"#F" }}}{EXCHG {PARA 0 "" 0 "" {XPPEDIT 19 1 "map(cost,eval(soln,_subslist));" "6#-%$ mapG6$%%costG-%%evalG6$%%solnG%*_subslistG" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#7',,%*additionsG\"%V5%0multiplicationsG\"%8T%%sumsG\"%o R%*divisionsG\"\"\"%,assignmentsGF,,,F%\"$['F'\"%JEF)\"%([#F+F,F-F,F., ,F%\"$r%F'\"%))>F)\"%U=F+F,F-F,F." }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 27 "However, it optimizes well:" }}}{EXCHG {PARA 0 "" 0 "" {XPPEDIT 19 1 "optsoln := optimize(soln,tryhard):" "6#>%(optsolnG-%)optimizeG6$ %%solnG%(tryhardG" }}}{EXCHG {PARA 0 "" 0 "" {XPPEDIT 19 1 "cost(optso ln);" "6#-%%costG6#%(optsolnG" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#,,%*a dditionsG\"$R(%0multiplicationsG\"%h5%*divisionsG\"\"\"%+subscriptsG\" #E%,assignmentsG\"$Z%" }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 83 "The foll owing command produces an optimized procedure, which we will not show \+ here." }}}{EXCHG {PARA 0 "" 0 "" {XPPEDIT 19 1 "makeproc(eval([optsoln ],_subslist),parameters = [N, Y, t],globals = [A, B, C, D, E]):" "6#-% )makeprocG6%-%%evalG6$7#%(optsolnG%*_subslistG/%+parametersG7%%\"NG%\" YG%\"tG/%(globalsG7'%\"AG%\"BG%\"CG%\"DG%\"EG" }}}}}}{MARK "8 9 13 0 0 " 0 }{VIEWOPTS 1 1 0 1 1 1803 }