{VERSION 3 0 "IBM INTEL NT" "3.0" } {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 "2D Comment" 2 18 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 } {CSTYLE "2D 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 "" -1 256 "Courier" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 257 "Courier" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 258 "Courier" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 259 "Courier" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 } {CSTYLE "" -1 260 "Courier" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 261 "Courier" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 262 "" 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 "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 " 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 "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 "" 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 "Maple Plot" 0 13 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 }3 0 0 -1 -1 -1 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 }{PSTYLE "Author" 0 19 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 }3 0 0 -1 8 8 0 0 0 0 0 0 -1 0 }} {SECT 0 {PARA 18 "" 0 "" {TEXT -1 42 "Eigenstructure of the Catmull-Cl ark scheme" }}{PARA 19 "" 0 "" {TEXT -1 27 "Denis Zorin, February 199 8" }}{PARA 0 "" 0 "" {TEXT -1 419 "In this worksheet, we examine the e igenstructure of the subdivision matrices of the Catmull-Clark subdivi sion scheme. This scheme was analyzed in the papers by Ball and Storry (tangent plane continuity) and Peters and Reif (C1-continuity). We mo stly follow the analysis found in the latter paper. In addition, we de termine the range of coefficients for the extraordinary vertex, for w hich the scheme is C1-continuous." }}{SECT 1 {PARA 3 "" 0 "" {TEXT -1 9 "Utilities" }}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 13 "with(lina lg):" }}{PARA 7 "" 1 "" {TEXT -1 32 "Warning, new definition for norm " }}{PARA 7 "" 1 "" {TEXT -1 33 "Warning, new definition for trace" }} }{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 11 "readlib(C):" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 18 "readlib(optimize):" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 37 "readlib(procbody): readlib(procmake ):" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 30 "read(`subdivmatrix-ut il.mpl`):" }}}}{SECT 0 {PARA 3 "" 0 "" {TEXT -1 19 " Subdivision matri x" }}{EXCHG {PARA 0 "" 0 "" {TEXT -1 61 "The constants following Pete r and Reif , with K replacing n." }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 203 "assume( c, real); additionally( c <= 1 ); additionally( c >= -1 ) ;\nCCconst := \{ p1 = 1/64, p2 = 3/32, p3 = 9/16, q1 = 1/16, q2 = 3/8, r = 1/4 \};\nCCvar := \{ omega = exp( 2*Pi*I*m/K), c = cos( 2*Pi*m/K) \};" }}{PARA 11 "" 0 "" {TEXT -1 0 "" }}{PARA 11 "" 0 "" {TEXT -1 0 " " }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%(CCconstG<(/%#p1G#\"\"\"\"#k/%#p 2G#\"\"$\"#K/%#p3G#\"\"*\"#;/%#q1G#F)F4/%#q2G#F.\"\")/%\"rG#F)\"\"%" } }{PARA 11 "" 1 "" {XPPMATH 20 "6#>%&CCvarG<$/%&omegaG-%$expG6#,$**%\"I G\"\"\"%#PiGF.%\"mGF.%\"KG!\"\"\"\"#/%#c|irG-%$cosG6#,$*(F/F.F0F.F1F2F 3" }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 151 "The DFT-transformed subdivi sion matrix; the order of rows is different from P. & R. (there is a \+ typo in Peters and Reif in row 4, elements 1 and 3). " }}{PARA 0 "> \+ " 0 "" {MPLTEXT 1 0 585 "CC := matrix( [ [alpha*d, beta*d, \+ gamma*d,0,0,0,0], \n [ q2*d, 2*q1*c+q2, q1* (1+conjugate(omega)),0,0,0,0],\n [ r*d, r*(1+omega) , r,0,0,0,0],\n [ p2*d, 2*p1*c+p 3, p2*(1+conjugate(omega)), p2, p1,0,p1*conjugate(omega)],\n \+ [ q1*d, q1*omega + q2, q2, \+ q1, q1,0,0],\n [ p1*d, p2*(1+omega), \+ p3, p1*(1+omega), p2, p1, p2 ],\n [ q1*d, \+ q1 + q2*omega, q2 ,q1*omega,0,0,q1]\n]);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%#CCG-%'MATRIXG6#7)7)*&%&alphaG\"\"\"%\"dGF,*& %%betaGF,F-F,*&%&gammaGF,F-F,\"\"!F2F2F27)*&%#q2GF,F-F,,&*&%#q1GF,%#c| irGF,\"\"#F5F,*&F8F,,&F,F,-%*conjugateG6#%&omegaGF,F,F2F2F2F27)*&%\"rG F,F-F,*&FCF,,&F,F,F@F,F,FCF2F2F2F27)*&%#p2GF,F-F,,&*&%#p1GF,F9F,F:%#p3 GF,*&FHF,F " 0 "" {MPLTEXT 1 0 76 "CCExpanded := map( eva lc, subs( \{ omega = c + s*I, op(CCconst)\}, eval(CC))):" }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 95 "We are primarily interested in m = 1; in \+ this case d = 0 and we ignore the first row and column" }}{PARA 0 "> \+ " 0 "" {MPLTEXT 1 0 41 "A00 := submatrix( CCExpanded, 2..3,2..3);" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#>%$A00G-%'MATRIXG6#7$7$,&%#c|irG#\"\" \"\"\")#\"\"$F.F-,(#F-\"#;F-F+F2*&%\"IGF-%\"sGF-#!\"\"F37$,(#F-\"\"%F- F+F;F4F;F;" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 41 "A10 := submat rix( CCExpanded, 4..7,2..3):" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 42 "A11 := submatrix( CCExpanded, 4..7, 4..7):" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 106 "CCZero := map( evalc, subs( \{ gamma = 1 - a lpha - beta, c = 1, omega = 1, d = 1, op(CCconst)\}, eval(CC)));" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#>%'CCZeroG-%'MATRIXG6#7)7)%&alphaG%%be taG,(\"\"\"F-F*!\"\"F+F.\"\"!F/F/F/7)#\"\"$\"\")#F-\"\"##F-F3F/F/F/F/7 )#F-\"\"%F4F8F/F/F/F/7)#F2\"#K#\"#>F<#F2\"#;F;#F-\"#kF/FA7)#F-F@#\"\"( F@F1FDFDF/F/7)FAF?#\"\"*F@#F-F " 0 "" {MPLTEXT 1 0 54 "map( simplify, subs( s ^2 = 1-c^2, [eigenvals( A11)]));" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7& #\"\"\"\"#k#F%\"#;#F%\"\")#F%\"#K" }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 88 "It can be seen that whenever the eigenvalues are real, one of them is greater than 1/4. " }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 67 "eigenv := map( evalc, subs( \{ s^2 = 1 - c^2\} , [eigenvals(A00)]));" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%'eigenvG7$,(%#c|irG#\"\"\"\"#;#\"\"&F*F)*$ ,(*$F'\"\"#F)F'\"#5\"\"*F)#F)F0F(,(F'F(F+F)F-#!\"\"F*" }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 118 "Make sure that the roots are never equal ; then the largest is determined simply by comparing them for any valu e of c. " }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 46 "solve( (op(1, eigenv) - op(2, eigenv))^2 = 0);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6$!\"*!\"\"" }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 32 "Figure out which one is larger. " }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 130 "if simplify( subs( c = 0, op( 1, eigenv) > op(2, eigenv))) then \n lambda1 := op(1, eigenv);\nelse \n lambda1 := op(2, eigenv);\nfi;" }}{PARA 11 "" 1 "" {XPPMATH 20 "6 #>%(lambda1G,(#\"\"&\"#;\"\"\"%#c|irG#F)F(*$,(\"\"*F)F*\"#5*$F*\"\"#F) #F)F1F+" }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 37 "The larger eigenvalue \+ increases with " }{XPPEDIT 18 0 "c" "6#%\"cG" }{TEXT -1 109 " on the \+ interval of interest. We conclude that the largest eigenvalue for K > 4 is guaranteed to be in the " }}{PARA 0 "" 0 "" {TEXT -1 155 "1st or 0th block of the subdivision matrix. This is also true for K = 3, be cause there are only two blocks, excluding 0th, and they are complex-c onjugate." }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 43 "solve( \{diff(lambda1, c) > 0, abs(c) < 1\});" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#<$2!\"\"%#c |irG2F&\"\"\"" }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 41 "The largest eige nvalues of the 0th block:" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 53 "evZero := eigenvals( submatrix( CCZero, 1..3,1..3) );" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%'evZeroG6%\"\"\",(%&alphaG#F&\"\"##!\"\"\"\")F&*$,**$ F(F*\"#;F(!\")!\"$F&%%betaGF-F)#F&F-,(F(F)F+F&F.F+" }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 25 "Determine the ranges for " }{XPPEDIT 18 0 "alpha " "6#%&alphaG" }{TEXT -1 5 " and " }{XPPEDIT 18 0 "beta" "6#%%betaG" } }}{EXCHG {PARA 0 "" 0 "" {TEXT -1 41 "Determine when the eigenvalues \+ are real." }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 59 "solve( (4*( op(2, [ev Zero]) - op(3, [evZero] )))^2 >= 0 );" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#<#1,(#\"\"$\"\")\"\"\"*$%&alphaG\"\"#!\"#F+F)%%betaG" }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 54 "Determine where the eigenvalues interesec t the level " }{XPPEDIT 18 0 "lambda[1](-1/2)" "6#-&%'lambdaG6#\"\"\" 6#,$*&\"\"\"\"\"\"\"\"#!\"\"F." }{TEXT -1 87 ", which is the minimal v alue of the eigenvalue of the first block, achieved for K = 3. " }} {PARA 0 "> " 0 "" {MPLTEXT 1 0 58 "solve( abs(op(2, [evZero])) = subs( c = -1/2, lambda1) );" }{XPPMATH 20 "6$<$/%&alphaGF%/%%betaG,*F%#!\" *\"\"%#\"$<\"\"#k\"\"\"*&F%F/\"#<#F/\"\"##!\"\"F+*$F1F2#\"#8F.<$/F',*F %#\"\"*F+#\"#XF.F/F0#F/F+F6#\"\"&F.F$" }}{PARA 11 "" 1 "" {XPPMATH 20 "6$<$/%%betaG,*%&alphaG#!\"*\"\"%#\"$<\"\"#k\"\"\"*&F'F.\"#<#F.\"\"##! \"\"F**$F0F1#\"#8F-/F'F'<$/F%,*F'#\"\"*F*#\"#XF-F.F/#F.F*F5#\"\"&F-F8 " }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 59 "solve( abs( op(3, [evZe ro])) = subs( c = -1/2, lambda1) );" }}{PARA 11 "" 1 "" {XPPMATH 20 " 6$<$/%%betaG,*%&alphaG#!\"*\"\"%#\"$<\"\"#k\"\"\"*&F'F.\"#<#F.\"\"##! \"\"F**$F0F1#\"#8F-/F'F'<$/F%,*F'#\"\"*F*#\"#XF-F.F/#F.F*F5#\"\"&F-F8 " }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 79 "The parabola is the boundary \+ of the region where the eigenvalues are complex. " }}{PARA 0 "> " 0 " " {MPLTEXT 1 0 57 "solve( ( op(2, [evZero]))^2 - (op(3, [evZero]) )^2 \+ = 0 );" }}{PARA 11 "" 1 "" {XPPMATH 20 "6$<$/%%betaG,(#\"\"$\"\")\"\" \"*$%&alphaG\"\"#!\"#F,F*/F,F,<$/F,#F*\"\"%/F%F%" }}}{EXCHG {PARA 0 " " 0 "" {TEXT -1 43 "The following plot shows the region in the " } {XPPEDIT 18 0 "alpha-beta" "6#,&%&alphaG\"\"\"%%betaG!\"\"" }{TEXT -1 56 " plane where the eigenvalues of 0th block are less than " } {XPPEDIT 18 0 "lambda[1](-1/2)" "6#-&%'lambdaG6#\"\"\"6#,$*&\"\"\"\"\" \"\"\"#!\"\"F." }{TEXT -1 26 ". For the coefficients " }{XPPEDIT 18 0 "alpha, beta, gamma" "6%%&alphaG%%betaG%&gammaG" }{TEXT -1 18 " t o be positive, " }{XPPEDIT 18 0 "alpha" "6#%&alphaG" }{TEXT -1 5 " an d " }{XPPEDIT 18 0 "beta" "6#%%betaG" }{TEXT -1 53 " have to be inside the triangle [0,0], [1,0], [0,1]. " }}{PARA 0 "" 0 "" {TEXT -1 51 "Fo r the magnitudes of eigenvalues to be less than " }{XPPEDIT 18 0 "lam bda[1](-1/2)" "6#-&%'lambdaG6#\"\"\"6#,$*&\"\"\"\"\"\"\"\"#!\"\"F." } {TEXT -1 89 ", they have to be in the grey region, the equation of the line delimiting the region is \n" }{XPPEDIT 18 0 "beta = -9/4*alpha+1 17/64-1/4*alpha*sqrt(17)+13/64*sqrt(17)" "6#/%%betaG,**(\"\"*\"\"\"\" \"%!\"\"%&alphaGF(F**&\"$<\"F(\"#kF*F(**\"\"\"F(\"\"%F*F+F(-%%sqrtG6# \"# " 0 "" {MPLTEXT 1 0 396 "with(plots): display( PLOT(POLYGONS([[1,0], [1,1], [0,1]], COLOR( RGB, 1.0,1.0,1.0), STYLE(PATCH))), contourplot( max(abs(op(3, [evZero] )), abs(op(2, [evZero]))), alpha = 0..1, beta = 0..1, grid = [20,20], \+ contours = [subs(c = -1/2, lambda1)], filled=true, coloring=[grey, whi te]), plot( 3/8 - 2*alpha^2 + alpha, alpha = 0..1 , 0..1, color = whi te), plot( 1-alpha, alpha = 0..1, color = black) );" }}{PARA 13 "" 1 " " {GLPLOT2D 770 770 770 {PLOTDATA 2 "6*-%)POLYGONSG6%7%7$\"\"\"\"\"!7$ F(F(7$F)F(-%&COLORG6&%$RGBG$\"#5!\"\"F0F0-%&STYLEG6#%&PATCHG-%'CURVESG 6H7$7$$\"1Uot%*y:j_!#;$\"13?P&Ro1R*F>7$$\"1G?>$[NnB&F>$\"17j_5Uot%*F>7 $FA7$$\"1Q*y([$*RC_F>$\"17$7$$\"1%4,/5GQ2&F>$F(F)FG7$7$$\"1 F0@%ot%*y&F>$\"15h:@5*em(F>7$$\"1BMP9TT$\"1h_5Uot%*yF>7$FW7$$\"1() [jjHs$o&F>$\"1**3oiv[+!)F>7$7$$\"1W*fgE&\\bbF>$\"1X*y:j_5U)F>Fgn7$F]o7 $$\"1c1,X[H^aF>$\"1:)y2ZJ#f()F>7$7$$\"183k\"Q:cR&F>$\"1GE0@%ot%*)F>Fco 7$Fio7$F<$\"12?P&Ro1R*F>7$7$$\"15Uot%*y:jF>$\"1a\">.Au\"RfF>7$$\"1:%*f :\"3*)>'F>Fdp7$Fhp7$$\"1eY,!z]S9'F>$\"1iPNd\"Gv['F>7$7$$\"1,;aXtqPgF>$ \"1%*y:j_5UoF>F\\q7$Fbq7$$\"1I+vv(fT\"fF>$\"1u?4h\\tVsF>7$7$$\"1cL_'H< z(eF>$\"1x:j_5UotF>Fhq7$F^r7$FS$\"14h:@5*em(F>7$7$Feq$\"1dePNi'*3UF>7$ $\"15&)[$p6;%oF>$\"1t%*y:j_5UF>7$F[s7$$\"1mDM(*)f8%oF>$\"1+[g\"or7@%F> 7$7$$\"1bwx)e\"\\\"o'F>$\"1eJE0@%ot%F>Fas7$Fgs7$$\"18bg'F>$\"1O_# Q7$7$$\"1cDw[KY?lF>F$\"1r<=bMfFdF>7$ 7$$\"1Y8=)*R3gjF>FSFgt7$F]uFcp7$7$Far$\"1F$3CB(o)[#F>7$$\"15N>]*QXK(F> $\"1?%ot%*y:j#F>7$7$Ffu$\"1@%ot%*y:j#F>7$$\"1J)y+YE8I(F>$\"1n6#*RNn)p# F>7$7$$\"1CMh3wblrF>$\"10@%ot%*y:$F>F^v7$Fdv7$$\"100?nB$\"1xJFAM9 eMF>7$7$$\"1hOssvl.qF>$\"1*y:j_5Uo$F>Fjv7$F`wFhr7$7$FZ$\"13+\"z&e#=m(! #<7$$\"1.(R'RQ?6yF>$\"1ot%*y:j_5F>7$7$$\"1-(R'RQ?6yF>F^x7$$\"1)z!ovW'Q w(F>$\"1K=PXR]$=\"F>7$7$$\"14ME,-o^wF>$\"1`5Uot%*y:F>Fdx7$Fjx7$$\"12E( fa!)=`(F>$\"12PbkO!=%>F>7$7$$\"1!=*zVp%p[(F>$\"1PZ*y:j_5#F>F`y7$FfyFbu 7$7$$\"1[40sUsS\")F>F)7$$\"1(42?A\\f*zF>$\"1x%=d4M5D%Fjw7$7$$\"1mcFrjY pzF>$F=FjwF`z7$7$$\"1ncFrjYpzF>FizFgw-F$6h[l7&7$FarFSFa[l7$FZF<7$FZFS7 &Fa[lFa[lFb[l7$FarF<7&Fe[lFe[l7$FZFjsFb[l7&Fe[lFe[lFg[l7$FarFjs7&7$Far FeqF[\\l7$FZFdp7$FarFdp7&F]\\lF]\\lFc[lFa[l7&7$FarFarF`\\l7$FZFeqF[\\l 7&F[\\lF[\\lF\\\\lFa\\l7&F]\\lF]\\lFc[lF\\\\l7&F`\\lF`\\lFa\\l7$FZFar7 &7$FarFZFg\\lFe\\lF`\\l7&Fg\\lFg\\lFe\\l7$FZFZ7&7$FZF]yF[]l7$F`oF^x7$F `oF]y7&F[]lF[]lF\\]l7$FZF^x7&F_]lF_]l7$F`oFizF\\]l7&FfzF`z7$F`oF)Fa]l7 &F[[lFgwF_]lFa]l7&7$FarFPFf]l7$FZFD7$FZFP7&F]zF`zFc]lFc]l7&Ff]lFf]lFg] l7$FarFD7&F[^lF[^l7$FZF\\pFg]l7&F[^lF[^lF]^l7$FarF\\p7&7$FarF`oFa^lFi \\lFg\\l7&F_^lF_^l7$FZF`oF]^l7&F_^lF_^lFc^lFa^l7&Fa^lFa^lFi\\lFc^l7&7$ FZFcwFg^l7$F`oFgv7$FZFgv7&Fi^lFi^l7$F`oF\\v7$FZF\\v7&Fi^lFi^lF[_lFh^l7 &F\\_lF\\_l7$F`oFiyF[_l7&7$FZFiyFa_lF]]lF__l7&F\\_lF\\_lF__lFa_l7&Fa_l Fa_lF]]lF[]l7&Fi\\lFi\\l7$F`oFarFe\\l7&Fe\\lFe\\l7$F`oFeqFe_l7&Fe\\lFe \\lFg_lFa\\l7&Fa\\lFa\\l7$F`oFdpFg_l7&Fa\\lFa\\lFj_lF\\\\l7&F\\\\lF\\ \\l7$F`oFSFj_l7&F\\\\lF\\\\lF]`lFc[l7&Fc[lFc[l7$F`oFF>7&Fg[pFg[p7$Far$\"1G$3CB(o)[#F>Ffy7&Fb[p7$FZF)F]z7$ Faz$\"1w%=d4M5D%Fjw7&Fb[pFb[pF[[lFa\\p7&FaioFaio7$FSF\\vFijo7&F\\ioF\\ ioFbjoFf\\p7&FaioFaioFf\\pF\\io7&F]`oF]`oFejoF\\`o7&FjdoFjdoF^[p7$F$\"1)*3oiv[+!)F>7&FjdoFjdoF^[pFfbo7&F^[pF^[p7$FSFdpF][ p7&F^[pF^[pFi]p7$FSFeq7&F[]pF[]pF[^pF^[p7&F[]pF[]pF[^pFf\\o7&F`]pF`]pF f\\oF[]p7&F\\`oF\\`o7$FSF<7$FSFS7&F][pF][pFa^pF\\`o7&F][pF][pFa^pFi]p7 &FejoFejo7$FSFjsF`^p7&F\\`oF\\`oF`^pFejo7&FejoFejoFe^pF\\jo7&F[joF[joF [[p7$FSF^s7&F\\joF\\joFi^pF[jo7&F\\joF\\joFi^pFe^p7&F[joF[joF[[pFbio7& Ff\\pFf\\p7$FdpFiyFbjo7&FbjoFbjo7$FdpF]yF^_p7&F^ioF^io7$FdpF^xF^_n7&F^ ioF^ioFb_pF`_p7&FbjoFbjoF`_pF^io7&FehnFehnF]^nFfdo7&F^_nF^_n7$FdpFizF] _n7&F^_nF^_nFg_pFb_p7&F`doF`doF[]pF`]p7&F]_nF]_n7$FdpF)Fg_p7&FbhoFbho7 $$\"193k\"Q:cR&F>F\\p7$Fdo$\"19)y2ZJ#f()F>7&FbhoFbhoF;F]`p7&F]_nF]_nF[ `p7$FSF)7&FahoFahoF]oFb]p7&FbhoFahoF]oF``p7&F`doF`doF[]pFjdo7&Fc_nFc_n Fe`pF]_n7&FfeoFfeoFahoFado7&Fi]pFi]p7$FdpFSFa^p7&F\\apFi]pFhp7$Fdp$\"1 `\">.Au\"RfF>7&F[^pFi]pFhpF\\q7&Fa^pFa^p7$FdpF7&F[^pF[ ^pFbqF\\q7&FbhoFgfo7$FB$\"16j_5Uot%*F>F;7&FgfoFgfoFbhoFfeo7&F^_pF^_p7$ FeqF]yF`_p7&F^_pF^_pF^cp7$FeqFiy7&FhfoFhfoFMFdbp7&F`_pF`_p7$FeqF^xFb_p 7&F`_pF`_pFccpF^cp7&Fb_pFb_p7$FeqFizFccp7&Fg_pFg_p7$FeqF)Ffcp7&Fb_pFb_ pFfcpFg_p7&Fg_pFg_pFhcpF[`p7&FfanFfanFjdoF``n7&Ff\\oF[^pFbq7$$\"1H+vv( fT\"fF>$\"1v?4h\\tVsF>7&Ff\\oFf\\oF^rF]dp7&FcapFeapFgs7$$\"1;ef%>8bg'F >$\"1N_#Q7&FdemFfem7$$\"16&)[$p6;%oF>F^s7$Feq$\"1cePNi'*3UF>7& FeapFfemF[s7$$\"1nDM(*)f8%oF>$\"1,[g\"or7@%F>7&FeapFeapFgsFaep7&FehnFe hnF]^nFe_n7&FdioFdioFeioFcem7&FbemFbemFcemFdio7&FfioFfioF`cpF^_p7&Ffio FfioF`cpFeio7&FcapFcapFctFddp7&F\\apFcapFct7$$\"1mHr-(pwP'F>Fjt7&F\\ap F\\apF]uF^fp7&F^cpF^cp7$FarF^xFccp7&F^cpF^cpFcfpF]]p7&FfcpFfcp7$FarF)F hcp7&FfcpFfcpFffp7$FarFiz7&FccpFccpFhfpFfcp7&FccpFccpFhfpFcfp7&Fc_nFc_ nFe`pFdgo7&F`cpF`cpF]]pF^cp7&F`cpF`cpF]]pFg[p7&FeioFeioFg[pF`cp7&Fg[pF eio7$$\"16N>]*QXK(F>F\\vF\\\\p7&FcemFeioF[vF^v7&F\\apF\\apF^apF]u7&Fce mFcemFdvF^v7&FdemFcemFdv7$F[w$\"1yJFAM9eMF>7&FdemFdem7$$\"1fOssvl.qF>F cwFggp7&FdemFdemF]epF[hp7&FhfpFhfpF`\\pFffp7&FhfpFhfpF`\\pFb[p7&FcfpFc fpFb[pFhfp7&Fb[pFcfpF[x7$FZ$\"1:+\"z&e#=m(Fjw7&F]]pFcfpF[xFdx-Fgdm6&F/ $\")=THvF[emFihpFihpF\\em-F86$7S7$F)$\"1++++++]PF>7$$\"1nmm;arz@Fjw$\" 1e82B#p%eRF>7$$\"1LL$e9ui2%Fjw$\"1b$fFR&RCTF>7$$\"1nmm\"z_\"4iFjw$\"1V hQA\"3QH%F>7$$\"1mmmT&phN)Fjw$\"17&[`\"e'fW%F>7$$\"1LLe*=)H\\5F>$\"1h2 X^G4zXF>7$$\"1nm\"z/3uC\"F>$\"18_J!o-io%F>7$$\"1++DJ$RDX\"F>$\"1gV[H_c !y%F>7$$\"1nm\"zR'ok;F>$\"18\\BP-Xg[F>7$$\"1++D1J:w=F>$\"1&pJ1,j@#\\F> 7$$\"1LLL3En$4#F>$\"1si:5'zp'\\F>7$$\"1nm;/RE&G#F>$\"1_#H=ox2*\\F>7$$ \"1+++D.&4]#F>$\"1zkP>)*****\\F>7$$\"1+++vB_$\"1s[F.o`!*\\F>7$$\"1 +++v'Hi#HF>$\"1z)HGllO'\\F>7$$\"1nm\"z*ev:JF>$\"1oh$[$*oT#\\F>7$$\"1LL L347TLF>$\"1-H^BJ]e[F>7$$\"1LLLLY.KNF>$\"12,7.4)py%F>7$$\"1++D\"o7Tv$F >$\"1(eXlFSao%F>7$$\"1LLL$Q*o]RF>$\"1\"z;E1+\"zXF>7$$\"1++D\"=lj;%F>$ \"1JNa;akWWF>7$$\"1++vV&R$\"14D2;#=$*H%F>7$$\"1LL$e9Ege%F>$\"1Y*z P)*)pHTF>7$$\"1LLeR\"3Gy%F>$\"1;/d*Rdx&RF>7$$\"1nm;/T1&*\\F>$\"1)z>K-J \\v$F>7$$\"1mm\"zRQb@&F>$\"1P!))=Cq^_$F>7$$\"1***\\(=>Y2aF>$\"19P?QIL4 LF>7$$\"1mm;zXu9cF>$\"1t.JTKnfIF>7$$\"1+++]y))GeF>$\"1wWUO6q$y#F>7$$\" 1****\\i_QQgF>$\"1jX#o%f'f\\#F>7$$\"1***\\7y%3TiF>$\"1H***=$p&3?#F>7$$ \"1****\\P![hY'F>$\"1\")p#*[R$R&=F>7$$\"1LLL$Qx$omF>$\"1KI-)*f#\\_\"F> 7$$\"1+++v.I%)oF>$\"1s\\NW?eb6F>7$$\"1mm\"zpe*zqF>$\"1]\\v]m&z/)Fjw7$$ \"1+++D\\'QH(F>$\"1.&4<;=x.%Fjw7$$\"1KLe9S8&\\(F>$\"1G8_q_BF(*!#>7$$\" 1***\\i?=bq(F>$!1%Fjw7$$\"1LLL3s?6zF>$!1Vs..pKi&)Fjw7$$\"1++D JXaE\")F>$!1byUs1gJ8F>7$$\"1nmmm*RRL)F>$!1LT$p5rp!=F>7$$\"1mm;a<.Y&)F> $!1J$yW****3J#F>7$$\"1LLe9tOc()F>$!1Mt*\\RE%GGF>7$$\"1+++]Qk\\*)F>$!1j &o$e6e>LF>7$$\"1LL$3dg6<*F>$!1k#oBnw3!RF>7$$\"1mmmmxGp$*F>$!1j_D%)GUPW F>7$$\"1++D\"oK0e*F>$!1k)\\+h)yE]F>7$$\"1++v=5s#y*F>$!12')Q(30wg&F>7$F P$!1++++++]iF>-Fgdm6&F/F(F(F(-F86$7SFi\\n7$Fbip$\"1MLLe%G?y*F>7$Fgip$ \"1mmT&esBf*F>7$F\\jp$\"1LL$3s%3z$*F>7$Fajp$\"1LL$e/$Qk\"*F>7$Ffjp$\"1 nmT5=q]*)F>7$F[[q$\"1LL3_>f_()F>7$F`[q$\"1++vo1YZ&)F>7$Fe[q$\"1ML3-OJN $)F>7$Fj[q$\"1++v$*o%Q7)F>7$F_\\q$\"1nmm\"RFj!zF>7$Fd\\q$\"1LL$e4OZr(F >7$Fi\\q$\"1+++v'\\!*\\(F>7$F^]q$\"1+++DwZ#G(F>7$Fc]q$\"1*****\\KqP2(F >7$Fh]q$\"1LL3-TC%)oF>7$F]^q$\"1nmm\"4z)emF>7$Fb^q$\"1nmmm`'zY'F>7$Fg^ q$\"1,+v=t)eC'F>7$F\\_q$\"1omm;1J\\gF>7$Fa_q$\"1++v=[jLeF>7$Ff_q$\"1++ Dc/EGcF>7$F[`q$\"1nm;aQ(RT&F>7$F``q$\"1nmTg=><_F>7$Fe`q$\"1LL$e*e$\\+& F>7$Fj`q$\"1ML3-;Y%y%F>7$F_aq$\"1,+D\"3QDf%F>7$Fdaq$\"1ML$3Ub_Q%F>7$Fi aq$\"1+++]@6rTF>7$F^bq$\"1,+]PZhhRF>7$Fcbq$\"1,+v=_\"*ePF>7$Fhbq$\"1,+ ]i>&Q`$F>7$F]cq$\"1nmm;EiJLF>7$Fbcq$\"1+++D'*p:JF>7$Fgcq$\"1ML3-8/?HF> 7$F\\dq$\"1+++v]81FF>7$Fadq$\"1omT&)f'[]#F>7$Fgdq$\"1,+v$z\"[%H#F>7$F \\eq$\"1nmm\"z#z)3#F>7$Faeq$\"1++voaXt=F>7$Ffeq$\"1LLLL+1m;F>7$F[fq$\" 1ML$eCoRX\"F>7$F`fq$\"1nmT&oKOC\"F>7$Fefq$\"1+++]hN]5F>7$Fjfq$\"1omm\" H%R)G)Fjw7$F_gq$\"1PLLLB72jFjw7$Fdgq$\"1)***\\(=tY>%Fjw7$Figq$\"1)*** \\7)*ys@FjwFiil-Fgdm6&F/F)F)F)-%+AXESLABELSG6$%&alphaG%%betaG-%%VIEWG6 $;F)FPF\\br" 1 2 0 1 0 2 9 1 4 2 1.000000 45.000000 45.000000 0 }}}} {EXCHG {PARA 0 "" 0 "" {TEXT 262 18 "Eigenvalue summary" }{TEXT -1 29 ". Whenever the coefficients " }{XPPEDIT 18 0 "alpha" "6#%&alphaG" } {TEXT -1 5 " and " }{XPPEDIT 18 0 "beta" "6#%%betaG" }{TEXT -1 192 " a re in the region depicted above, the largest eigenvalue of the subdivi sion matrix is the eigenvalue of the first block, and it is greater th an any other eigenvalue of the subdivison matrix. " }{MPLTEXT 1 0 1 " \+ " }}}}{SECT 0 {PARA 3 "" 0 "" {TEXT -1 11 "Eigenvector" }}{EXCHG {PARA 0 "" 0 "" {TEXT -1 24 " The eigenvector of " }{XPPEDIT 18 0 "A[0,0]" "6#&%\"AG6$\"\"!F&" }{TEXT -1 43 " can be immediately seen \+ from the matrix." }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 37 "v0 := [ 4*lambd a - 1, (1+ c + I*s) ];" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%#v0G7$,&%' lambdaG\"\"%!\"\"\"\"\",(F*F*%#c|irGF**&%\"IGF*%\"sGF*F*" }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 9 "Invert " }{XPPEDIT 18 0 "A[1,.1] - lambd a*I" "6#,&&%\"AG6$\"\"\"$\"\"\"!\"\"\"\"\"*&%'lambdaGF+%\"IGF+!\"\"" } }{PARA 0 "> " 0 "" {MPLTEXT 1 0 110 "A11inv := map( simplify, subs( s^ 2 = 1 - c^2, eval(map( expand, evalm(inverse( evalm(A11 - lambda*&*()) )))))):" }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 8 "compute " }{XPPEDIT 18 0 "v[1]" "6#&%\"vG6#\"\"\"" }{TEXT -1 5 " as " }{XPPEDIT 18 0 "- (A[1 ,1] - lambda*I) *A[1,0]*v[0]" "6#,$*(,&&%\"AG6$\"\"\"\"\"\"\"\"\"*&%'l ambdaGF+%\"IGF+!\"\"F+&F'6$\"\"\"\"\"!F+&%\"vG6#F3F+F/" }}{PARA 0 "> \+ " 0 "" {MPLTEXT 1 0 110 "v1 := map( simplify, subs( \{ s^3 = s*(1-c^2 ), s^2 = 1-c^2\}, map( expand, evalm( -A11inv &* A10 &* v0 )))):\n " }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 40 "We do not substitute the value \+ for det " }{XPPEDIT 18 0 "A[1,1] - lambda*I" "6#,&&%\"AG6$\"\"\"\"\" \"\"\"\"*&%'lambdaGF)%\"IGF)!\"\"" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 71 "CCEigenvector := vector( [ v0[1], v0[2], v1[1], v1[2], v1[3], v1[4 ]] );" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#>%.CCEigenvectorG-%'VECTORG6# 7(,&%'lambdaG\"\"%!\"\"\"\"\",(F-F-%#c|irGF-*&%\"IGF-%\"sGF-F-,$*&,,F* !#g\"\"$F-*&F/F-F*\"\"#\"#;*&F/F-F*F-\"#?*$F*F9\"$)GF-,(F=\"$c#F*!#SF- F-F,F9*(,:*&F/F-F*F7\"%C5*(F1F-F2F-F*F7FE*$F*F7\"%WhF8\"%_6*(F1F-F2F-F *F9\"%?6F=!$%QF;!$c\"F*!#'**(F1F-F2F-F*F-!$'>\"\"'F-F/\"\"&F0FRF-F?F,, &F,F-F*F:F,,$*(,L*$F*F+\"&_\"\\*&F/F-F*F+FX*(F1F-F2F-F*F+FXFD\"&cq(*&F /F9F*F7F@FF\"&+o(FGFgn**F1F-F2F-F*F7F/F-F@*&F/F9F*F9\"$+%**F1F-F2F-F*F 9F/F-FjnF=!&3=\"FJF\\oF8!&39\"*&F/F9F*F-\"$+\"F*\"#g**F1F-F2F-F*F-F/F- F_oF;\"$g\"FOF`o\"#:F-F/FcoF0FcoF-,*FG\"&%Q;F=!%;GF*\"$/\"F,F-F,FSF,F9 *&,BFGFEFFFHFDFHFJFLFin\"#KF8FLF=FKF[oFjoF;FNFOFNFao\"#SF^oF[pF*FPFRF- F0FQF/FQF-,*F,F-F*\"#cF=!$'*)FG\"%'4%F," }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 54 "Verify that the vector is correct in the regular case." } }{PARA 0 "> " 0 "" {MPLTEXT 1 0 75 "map( simplify, subs( \{ lambda = 1 /2, s = 1, c = 0\}, eval(CCEigenvector)));" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#-%'VECTORG6#7(\"\"\",&F'F'%\"IGF'\"\"#,&F*F'F)F',&F*F'F )F*,&F'F'F)F*" }}}{PARA 4 "" 0 "" {TEXT -1 0 "" }}}{SECT 1 {PARA 3 "" 0 "" {TEXT -1 15 "Code generation" }}{EXCHG {PARA 0 "" 0 "" {TEXT -1 32 "Three functions are generated:\n " }{TEXT 256 23 "Float Eigenvalue (int K)" }{TEXT -1 28 " computes the eigenvalues, \n" }{TEXT 257 58 "v oid EigenvectorReal(Float c, Float lambda, Float EvRe[]) " }{TEXT -1 68 "initializes an array for the real part of the complex eigenvector, " }{TEXT 258 62 "void EigenvectorImaginary(Float c, Float lambda, Fl oat EvIm[])" }{TEXT -1 379 " initializes the array for the complex par t. \nMemory for arrays should be allocated by the calling function. Th e output is written to a file; if the name is `default`, it is writte n to the standard output (warning: for some reason, writing to standar d output is terribly slow; writing to a file and then looking at it i n an editor is much more efficient. All functions use " }{TEXT 259 6 "Float " }{TEXT -1 159 " as the name of the class for the interv al numbers. It is assumed to have explicit casts from 64-bit integer s, standard arithmetics operations, and macros " }{TEXT 260 3 "FR " }{TEXT -1 6 "and " }{TEXT 261 5 "Fdiv," }{TEXT -1 8 " (see " } {MPLTEXT 0 21 15 "ConvertToFloat " }{TEXT -1 13 "for details)." }}} {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 33 "OutputFile := `catmullclark. cpp`:" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 61 "MakeClassHeader( O utputFile, `CatmullClark`, 1,2,2, Bicubic):" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 122 "optEV := `optimize/makeproc`(map(ConvertToFloat,[ optimize( subs( c = cos(2*Fpi()/Float(K)), lambda1))]),parameters=['K' ]):" }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 105 "Fix a problem with C code generation: no return value is generated, if the last statement is a ssignment." }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 124 "optEVbody := procbod y(optEV):\nEVstatseq := op(5,optEVbody): EVstatseq := `&statseq`(op(E Vstatseq), op(1,op(-1,EVstatseq))):" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 50 "optEV := procmake(subsop(5=EVstatseq, optEVbody)):" } }}{EXCHG {PARA 0 "" 0 "" {TEXT -1 29 "Make correct header manually." } }{PARA 0 "> " 0 "" {MPLTEXT 1 0 181 "S := []: C(optEV,ansi); \nfprintf (OutputFile, `virtual Float Eigenvalue( int K ) \\n`):\nfor i from 2 t o vectdim(S) do \n fprintf(OutputFile, replaceall(op(i,S),`double`,`F loat`)):\nod:" }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 29 "For computations at infinity " }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 88 "optEV := `optimize /makeproc`(map(ConvertToFloat,[optimize( lambda1)]),parameters=['c']): " }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 124 "optEVbody := procbody( optEV):\nEVstatseq := op(5,optEVbody): EVstatseq := `&statseq`(op(EVs tatseq), op(1,op(-1,EVstatseq))):" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 50 "optEV := procmake(subsop(5=EVstatseq, optEVbody)):" } }}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 183 "S := []: C(optEV,ansi); \+ \nfprintf(OutputFile, `virtual Float Eigenvalue( Float c ) \\n`):\nfor i from 2 to vectdim(S) do \n fprintf(OutputFile, replaceall(op(i,S), `double`,`Float`)):\nod:" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 198 "fprintf(OutputFile, `virtual void EigenvalueRange( Float c, Float & lambdamin, Float& lambdamax ) \{\\n`):\nfprintf(OutputFile, ` lambda min = Eigenvalue(c); lambdamax = Eigenvalue(Float(1)); \\n\}\\n\\n`): \n" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 51 "GenerateEigenvectorCo de(CCEigenvector, OutputFile);" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 26 "fprintf(OutputFile, `\};`):" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 19 "fclose(OutputFile);" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}}}}{MARK "7 0 0" 4 }{VIEWOPTS 1 1 0 3 2 1804 }