C ALGORITHM 756, COLLECTED ALGORITHMS FROM ACM. C THIS WORK PUBLISHED IN TRANSACTIONS ON MATHEMATICAL SOFTWARE, C VOL. 22, NO. 2, June, 1996, P. 168--186. C C This file contains 2 files separated by lines of the form C C*** filename C C The filenames in this file are: C C guide.ps src.shar C C*** guide.ps %!PS-Adobe-2.0 %%Creator: dvips by Radical Eye Software %%Title: guide-13.dvi %%Pages: 22 1 %%BoundingBox: 0 0 612 792 %%EndComments %%BeginDocument: tex.pro /TeXDict 200 dict def TeXDict begin /bdf{bind def}def /Inch{Resolution mul} bdf /Dots{72 div Resolution mul}bdf /dopage{72 Resolution div dup neg scale translate}bdf /@letter{Resolution dup -10 mul dopage}bdf /@note{@letter}bdf /@a4{Resolution dup -10.6929133858 mul dopage}bdf /@translate{translate}bdf /@scale{scale}bdf /@rotate{rotate}bdf /@landscape{[0 1 -1 0 0 0]concat Resolution dup dopage}bdf /@legal{Resolution dup -13 mul dopage}bdf /@manualfeed{statusdict /manualfeed true put}bdf /@copies{/#copies exch def} bdf /@FontMatrix[1 0 0 -1 0 0]def /@FontBBox[0 0 1 1]def /dmystr(ZZf@@)def /newname{dmystr cvn}bdf /df{/fontname exch def dmystr 2 fontname cvx(@@@)cvs putinterval newname 7 dict def newname load begin /FontType 3 def /FontMatrix @FontMatrix def /FontBBox @FontBBox def /BitMaps 256 array def /BuildChar{ CharBuilder}def /Encoding TeXEncoding def end fontname{/foo setfont}2 array copy cvx def fontname load 0 dmystr 5 string copy cvn cvx put}bdf /dfe{ newname newname load definefont setfont}bdf /ch-image{ch-data 0 get}bdf /ch-width{ch-data 1 get}bdf /ch-height{ch-data 2 get}bdf /ch-xoff{ch-data 3 get}bdf /ch-yoff{ch-data 4 get}bdf /ch-tfmw{ch-data 5 get}bdf /CharBuilder{ save 3 1 roll exch /BitMaps get exch get /ch-data exch def ch-data null ne{ ch-tfmw 0 ch-xoff neg ch-yoff neg ch-width ch-xoff sub ch-height ch-yoff sub setcachedevice ch-width ch-height true[1 0 0 1 ch-xoff ch-yoff]{ch-image} imagemask}if restore}bdf /dc{/ch-code exch def dup 0 get length 1 lt{pop[<00> 1 1 0 0 8.00]}if /ch-data exch def newname load /BitMaps get ch-code ch-data put}bdf /bop{gsave /SaveImage save def 0 0 moveto}bdf /eop{clear SaveImage restore showpage grestore}bdf /@start{/Resolution exch def /TeXEncoding 256 array def 0 1 255{TeXEncoding exch 1 string dup 0 3 index put cvn put}for}bdf /p{show}bdf /RuleMatrix[1 0 0 -1 0 -1]def /BlackDots 8 string def /v{gsave currentpoint translate false RuleMatrix{BlackDots}imagemask grestore}bdf /a{ moveto}bdf /delta 0 def /tail{dup /delta exch def 0 rmoveto}bdf /b{exch p tail }bdf /c{p delta 4 sub tail}bdf /d{p delta 3 sub tail}bdf /e{p delta 2 sub tail }bdf /f{p delta 1 sub tail}bdf /g{p delta 0 rmoveto}bdf /h{p delta 1 add tail} bdf /i{p delta 2 add tail}bdf /j{p delta 3 add tail}bdf /k{p delta 4 add tail} bdf /l{p -4 0 rmoveto}bdf /m{p -3 0 rmoveto}bdf /n{p -2 0 rmoveto}bdf /o{p -1 0 rmoveto}bdf /q{p 1 0 rmoveto}bdf /r{p 2 0 rmoveto}bdf /s{p 3 0 rmoveto}bdf /t{p 4 0 rmoveto}bdf /w{0 rmoveto}bdf /x{0 exch rmoveto}bdf /y{3 -1 roll p moveto}bdf /bos{/section save def}bdf /eos{clear section restore}bdf /SDict 200 dict def SDict begin /@SpecialDefaults{/hs 8.5 Inch def /vs 11 Inch def /ho 0 def /vo 0 def /hsc 1 def /vsc 1 def /ang 0 def /CLIP false def /BBcalc false def}bdf /@hsize{/hs exch def /CLIP true def}bdf /@vsize{/vs exch def /CLIP true def}bdf /@hoffset{/ho exch def}bdf /@voffset{/vo exch def}bdf /@hscale{@scaleunit div /hsc exch def}bdf /@vscale{@scaleunit div /vsc exch def}bdf /@angle{/ang exch def}bdf /@scaleunit 100 def /@rwi{10 div /rwi exch def}bdf /@llx{/llx exch def}bdf /@lly{/lly exch def}bdf /@urx{/urx exch def} bdf /@ury{/ury exch def /BBcalc true def}bdf /@setclipper{BBcalc{rwi urx llx sub div dup scale llx neg lly neg translate}{hsc vsc scale}ifelse CLIP{ newpath 0 0 moveto hs 0 rlineto 0 vs rlineto hs neg 0 rlineto closepath clip}{ initclip}ifelse}bdf end /@MacSetUp{userdict /md known{userdict /md get type /dicttype eq{md begin /letter{}def /note{}def /legal{}def /od{txpose 1 0 mtx defaultmatrix dtransform exch atan/pa exch def newpath clippath mark{ transform{itransform moveto}}{transform{itransform lineto}}{6 -2 roll transform 6 -2 roll transform 6 -2 roll transform{itransform 6 2 roll itransform 6 2 roll itransform 6 2 roll curveto}}{{closepath}}pathforall newpath counttomark array astore /gc xdf pop ct 39 0 put 10 fz 0 fs 2 F/|______Courier fnt invertflag{PaintBlack}if}def /txpose{pxs pys scale ppr aload pop por{noflips{pop exch neg exch translate pop 1 -1 scale}if xflip yflip and{pop exch neg exch translate 180 rotate 1 -1 scale ppr 3 get ppr 1 get neg sub neg ppr 2 get ppr 0 get neg sub neg translate}if xflip yflip not and{pop exch neg exch translate pop 180 rotate ppr 3 get ppr 1 get neg sub neg 0 translate}if yflip xflip not and{ppr 1 get neg ppr 0 get neg translate}if}{ noflips{translate pop pop 270 rotate 1 -1 scale}if xflip yflip and{translate pop pop 90 rotate 1 -1 scale ppr 3 get ppr 1 get neg sub neg ppr 2 get ppr 0 get neg sub neg translate}if xflip yflip not and{translate pop pop 90 rotate ppr 3 get ppr 1 get neg sub neg 0 translate}if yflip xflip not and{translate pop pop 270 rotate ppr 2 get ppr 0 get neg sub neg 0 exch translate}if}ifelse scaleby96{ppr aload pop 4 -1 roll add 2 div 3 1 roll add 2 div 2 copy translate .96 dup scale neg exch neg exch translate}if}def /cp{pop pop showpage pm restore}def end}if}if}def /psf$TeXscale{65536 div}def /startTexFig {/psf$SavedState save def userdict maxlength dict begin Resolution 72 div dup neg scale currentpoint translate /psf$ury exch psf$TeXscale def /psf$urx exch psf$TeXscale def /psf$lly exch psf$TeXscale def /psf$llx exch psf$TeXscale def /psf$y exch psf$TeXscale def /psf$x exch psf$TeXscale def currentpoint /psf$cy exch def /psf$cx exch def /psf$sx psf$x psf$urx psf$llx sub div def /psf$sy psf$y psf$ury psf$lly sub div def psf$sx psf$sy scale psf$cx psf$sx div psf$llx sub psf$cy psf$sy div psf$ury sub translate /showpage{}def /erasepage{ }def /copypage{}def @MacSetUp}def /doclip{psf$llx psf$lly psf$urx psf$ury currentpoint 6 2 roll newpath 4 copy 4 2 roll moveto 6 -1 roll exch lineto exch lineto exch lineto closepath clip newpath moveto}def /endTexFig{end psf$SavedState restore}def /@beginspecial{SDict begin /SpecialSave save def gsave Resolution 72 div dup neg scale currentpoint translate @SpecialDefaults} bdf /@setspecial{ho vo translate @setclipper ang rotate /showpage{}def newpath }bdf /@endspecial{grestore clear SpecialSave restore end}bdf /@defspecial{ SDict begin}bdf /@fedspecial{end}bdf /li{lineto}bdf /rl{rlineto}bdf /rc{ rcurveto}bdf /np{/SaveX currentpoint /SaveY exch def def newpath}bdf /st{ stroke SaveX SaveY moveto}bdf /fil{fill SaveX SaveY moveto}bdf /ellipse{ /endangle exch def /startangle exch def /yrad exch def /xrad exch def /savematrix matrix currentmatrix def translate xrad yrad scale 0 0 1 startangle endangle arc savematrix setmatrix}bdf end %%EndDocument TeXDict begin @defspecial /PsFragDict 20 dict def PsFragDict begin /PsFragCheckShow { PsFragNewShow { /s exch def s (\\tex) anchorsearch { pop pop false } { pop /showit true def PsFragNoShowStrings { s eq {/showit false def} if} forall showit } ifelse } { pop true } ifelse } bind def /PsFragMoveShow { exch stringwidth pop 0 rmoveto {pop} repeat } bind def /PsFragNoShowStrings [] def /PsFragNewShow true def end /show { PsFragDict begin dup PsFragCheckShow {show} {0 PsFragMoveShow} ifelse end} bind def /ashow { PsFragDict begin dup PsFragCheckShow {ashow} {2 PsFragMoveShow} ifelse end} bind def /kshow { PsFragDict begin dup PsFragCheckShow {kshow} {1 PsFragMoveShow} ifelse end} bind def /widthshow { PsFragDict begin dup PsFragCheckShow {widthshow} {3 PsFragMoveShow} ifelse end} bind def /awidthshow { PsFragDict begin dup PsFragCheckShow {awidthshow} {5 PsFragMoveShow} ifelse end} bind def @fedspecial end TeXDict begin 300 @start /fa df[< 70F8F8F870>5 5 -6 0 16]46 dc[35 35 -3 0 41]65 dc[30 34 -4 0 38]66 dc[<0003FC 00001FFF00007E03C001F0006003E00030078000180F0000081F0000041E0000043E0000023C00 00027C0000027C00000278000000F8000000F8000000F8000000F8000000F8000000F8000000F8 000000F8000000780000027C0000027C0000023C0000063E0000061E0000061F00000E0F00001E 0780001E03E0003E01F000CE007E0386001FFF060003F802>31 36 -4 1 39]67 dc[33 34 -4 0 41]68 dc[31 34 -4 0 37]69 dc[28 34 -4 0 35] 70 dc[33 34 -4 0 41]72 dc[<07E000183800201C0040 0E00F80F00FC0700FC0780FC078078078030078000078000078000078000078000078000078000 078000078000078000078000078000078000078000078000078000078000078000078000078000 078000078000078000078003FFF803FFF8>21 35 -3 1 28]74 dc[35 34 -4 0 42]75 dc[27 34 -4 0 34]76 dc[41 34 -4 0 49]77 dc[33 34 -4 0 41]78 dc[29 34 -4 0 37]80 dc[<0000003F00FFFC00F080FFFC01E040078003E020078003E020078007C020078007C0000780 07C000078007C0000780078000078007800007800780000780078000078007000007800F000007 800E000007801C0000078078000007FFF0000007803E00000780070000078003C000078003E000 078001E000078001F000078001F000078001F000078001F000078001E000078003E000078003C0 00078007800007801F0000FFFFFC0000FFFFE00000>35 35 -4 1 40]82 dc[<80FE00C7FF80CF 01E0F80070E00030E00038C0001880001C80001C80001C80001C00001C00003C00003800007800 01F8001FF001FFE007FFC01FFF003FF8003F00007C0000780000F00000E00008E00008E00008E0 00186000187000383000783800F81E079807FF1801F808>22 36 -4 1 30]83 dc[<00FFFFC000 00FFFFC0000001E000000001E000000001E000000001E000000001E000000001E000000001E000 000001E000000001E000000001E000000001E000000001E000000001E000000001E000000001E0 00000001E000000001E000000001E000000001E000000001E000008001E000808001E000808001 E000808001E00080C001E00180C001E001804001E001006001E001006001E003007801E00F007F FFFFFF007FFFFFFF00>33 34 -3 0 39]84 dc[<00002000000000700000000070000000007000 000000F800000000F800000001E400000001E400000003E600000003C200000003C20000000781 00000007810000000F808000000F008000000F008000001E004000001E004000003E002000003C 002000003C0020000078001000007800100000F000080000F000080001F0000C0001E000040001 E000040003C000020003C000020007C000010007800003000F800007C0FFF8001FF8FFF8001FF8 >37 35 -2 1 41]86 dc[<00010000100000000300001800000003800038000000038000380000 000780003C00000007C0007C00000007C0007C0000000F40007A0000000F2000F20000000F2000 F20000001E2000F10000001E1001E10000001E1001E10000003C1001E08000003C0803C0800000 3C0803C0800000780803C04000007804078040000078040780400000F0040780200000F0020F00 200000F0020F00200001E0020F00100001E0011E00100001E0011E00100003E0011E00080003C0 00BE00080003C000BC00080007C000BC000C000780007C000400078000780004000F8000780006 000F8000F8000F00FFF80FFF807FE0FFF80FFF807FE0>51 35 -2 1 55]87 dc[25 34 -4 0 33]90 dc[27 26 -1 0 31]97 dc[<003F0001C0C00300300E00081C00081C00 04380004780002700002700002F00000F00000F00000F00000F00000F000007000027000027800 023800061C00061C000E0E001E03002E01C0C6003F02>23 26 -2 0 29]99 dc[25 26 -2 0 31]100 dc[23 26 -2 0 28 ]101 dc[21 26 -2 0 27]102 dc[25 26 -2 0 31]104 dc[12 26 -1 0 15]105 dc[26 26 -2 0 32]107 dc[ 20 26 -2 0 26]108 dc[31 26 -2 0 37]109 dc[ 25 26 -2 0 31]110 dc[<007F800001C0E000070038000E001C001C000E003C000F0038000700 7800078078000780F00003C0F00003C0F00003C0F00003C0F00003C0F00003C0F00003C0700003 807000038078000780380007003C000F001C000E000E001C000700380001C0E000007F8000>26 26 -2 0 32]111 dc[22 26 -2 0 28]112 dc[26 26 -2 0 30]114 dc[<83F000DC0C00E00600C00700C00300800380 800380800380000780000780000F0000FF000FFE001FFC003FF8007F8000F80000F00000E00100 E00100E00100600300600300300700181B0007E100>17 26 -2 0 23]115 dc[<03FFF000003F 0000001E0000001E0000001E0000001E0000001E0000001E0000001E0000001E0000001E000000 1E0000001E0000001E0000001E0000001E0000001E0000001E0000801E0080801E0080801E0080 C01E0180401E0100601E0100701E07007FFFFF00>25 26 -1 0 29]116 dc[<003F000000E080 0001C060000380200007801000070010000F0008000F0008000F0008000F0008000F0008000F00 08000F0008000F0008000F0008000F0008000F0008000F0008000F0008000F0008000F0008000F 0008000F0008000F0008000F001C00FFF0FF80>25 26 -2 0 31]117 dc[<00040000000E0000 000E0000000E0000001F0000001F0000003C8000003C8000007CC000007840000078400000F020 0000F0200001F0100001E0100001E0100003C0080003C0080007C0040007800400078004000F00 02000F0002001F0003001F000780FFC00FE0>27 26 -1 0 31]118 dc[<001000200000180060 0000380070000038007000003C00F000007C00F800007C00F80000FA01EC0000F201E40000F201 E40001F103C20001E103C20001E103C20003C087810003C087810003C087810007804F00800780 4F008007807F00800F003E00400F003E00400F003E00401E003C00601E003C00603F007C00F0FF C1FF81FC>38 26 -1 0 42]119 dc[<00FFE000000F0000000F0000000F0000000F0000000F00 00000F0000000F0000000F0000000F0000000F0000001F8000001E8000003E4000007C40000078 200000F8300001F0100001E0080003E0080007C00400078004000F8002001F0003001F000780FF C00FF0>28 26 -1 0 31]121 dc[<300C781EF81F781E300C>16 5 -6 -29 28]127 dc dfe /fb df[55 58 -2 58 60]88 dc[48 58 -2 58 53]89 dc[<1E000000006300000000E180000000F0C0000000F060000000606000000000700000000030 000000003800000000380000000018000000001C000000001C000000001C000000001E00000000 0E000000000E000000000E000000000F000000000F000000000700000000070000000007800000 0007800000000780000000078000000003C000000003C000000003C000000003C000000003E000 000003E000000001E000000001E000000001F000000001F000000001F000000001F000000000F0 00000000F800000000F800000000F800000000F80000000078000000007C000000007C00000000 7C000000007C000000003C000000003E000000003E000000003E000000003E000000001E000000 001F000000001F000000001F000000001F000000000F000000000F000000000F800000000F8000 0000078000000007800000000780000000078000000003C000000003C000000003C000000003C0 00000001C000000001C000000001E000000001E000000000E000000000E000000000E000000000 F00000000070000000007000000000700000000070000000003800000000380000000038000000 0018000000001C600000000CF00000000CF00000000C7000000006600000000380>36 92 -2 92 23]90 dc dfe /fc df[<7FFFF07FFFF8007FFFF07FFFF8007FFFF07FFFF80001FE0003FC0000 00FC0001F8000000FC0001F8000000FC0001F8000000FC0001F8000000FC0001F8000000FC0001 F8000000FC0001F8000000FC0001F8000000FC0001F8000000FC0001F8000000FC0001F8000000 FC0001F8000000FC0001F8000000FC0001F8000000FC0001F8000000FC0001F8000000FC0001F8 000000FC0001F8000000FC0001F8000000FC0001F8000000FC0001F8000000FC0001F8000000FC 0001F8000000FC0001F8000000FC0001F8000000FC0001F8000000FC0001F8000000FC0001F800 0000FC0001F8000000FC0001F80000FFFFFFFFFFFC00FFFFFFFFFFFC00FFFFFFFFFFFC0000FC00 01F8000000FC0001F8000000FC0001F8000000FC0001F8000000FC0001F8000000FC0001F80000 00FC0001F8000000FC0001F8000000FC0001F8000000FC0001F8000000FC0001F8000000FC0001 F8000000FC0001F8000000FE0003F80000007E0007FC03F0007E0007FC07F8003F0007FC07F800 3F8007FE07F8001F8007FE07F80007E003FF07F80003F000FF83F00000FC03C7C0E000003FFF81 FFC0000007FC007F00>53 61 -1 0 50]11 dc[<6000700038001C000C000E0007000300030003 800180018001C000C000C000C000C01CC07FC0FFC0FFC0FFC0FF80FF807F001C00>10 26 -7 -34 24]39 dc[22 5 -1 -16 29]45 dc[<000000FFC0 0000000007FFF8000000003FFFFE00000000FFC01F80000003FE0003E0000007F80000F000001F E000007800003FC000003C00007F8000001E0000FF0000000E0001FE000000070003FC00000003 8003F8000000038007F800000001800FF000000001C00FF000000000C01FE000000000C01FE000 000000E03FE000000000603FC000000000603FC000000000607FC000000000607FC00000000060 7FC00000000000FF800000000000FF800000000000FF800000000000FF800000000000FF800000 000000FF800000000000FF800000000000FF800000000000FF800000000000FF800000000000FF 800000000000FF800000000000FF8000000000007FC000000000607FC000000000607FC0000000 00603FC000000000603FC000000000E03FE000000000E01FE000000000E01FE000000001E00FF0 00000001E00FF000000001E007F800000003E003F800000003E003FC00000007E001FE0000000F E000FF0000001FE0007F8000001FE0003FC000003FE0001FE00000F7E00007F80001E7E00003FE 0007C3E00000FFC01F01E000003FFFFE00E0000007FFF800E0000000FFC00060>51 61 -5 1 62 ]67 dc[<000000FFC0000000000007FFF800600000003FFFFE00E0000000FFC01F81E0000003FE 0003C3E0000007F80000E7E000001FE000007FE000003FC000003FE000007F8000003FE00000FF 0000001FE00001FE0000001FE00003FC0000001FE00003FC0000001FE00007F80000001FE0000F F00000001FE0000FF00000001FE0001FE00000001FE0001FE00000001FE0003FE00000001FE000 3FC00000001FE0003FC00000001FE0007FC00000007FF0007FC00000FFFFFF807FC00000FFFFFF 80FF800000FFFFFF80FF80000000000000FF80000000000000FF80000000000000FF8000000000 0000FF80000000000000FF80000000000000FF80000000000000FF80000000000000FF80000000 000000FF80000000000000FF80000000000000FF800000000000007FC00000000060007FC00000 000060007FC00000000060003FC00000000060003FC000000000E0003FE000000000E0001FE000 000000E0001FE000000001E0000FF000000001E0000FF000000001E00007F800000003E00003F8 00000003E00003FC00000007E00001FE0000000FE00000FF0000001FE000007F8000001FE00000 3FC000003FE000001FE00000F7E0000007F80001E7E0000003FE0007C3E0000000FFC01F01E000 00003FFFFE00E000000007FFF800E000000000FFC0006000>57 61 -5 1 68]71 dc[37 61 -5 1 48]83 dc[< 001FFFFFFFF800001FFFFFFFF800001FFFFFFFF800000003FFC00000000000FF000000000000FF 000000000000FF000000000000FF000000000000FF000000000000FF000000000000FF00000000 0000FF000000000000FF000000000000FF000000000000FF000000000000FF000000000000FF00 0000000000FF000000000000FF000000000000FF000000000000FF000000000000FF0000000000 00FF000000000000FF000000000000FF000000000000FF000000000000FF000000000000FF0000 00000000FF000000000000FF000000000000FF000000000000FF000000000000FF000000000000 FF000000000000FF000000000000FF000000000000FF000000000000FF000000000000FF000000 C00000FF000006C00000FF000006C00000FF000006C00000FF000006E00000FF00000E600000FF 00000C600000FF00000C600000FF00000C600000FF00000C600000FF00000C700000FF00001C70 0000FF00001C780000FF00003C780000FF00003C7C0000FF00007C3F0000FF0001F83FE001FF80 07F83FFFFFFFFFFFF83FFFFFFFFFFFF83FFFFFFFFFFFF8>55 59 -3 0 62]84 dc[<0000001FF0 000000000001FFFE000000000007FFFF80000000001FF00FC0000000007F8001F000000000FE00 007800000001FC00003C00000003F800001E00000007F000000E0000000FF00000070000000FE0 0000038000001FE00000038000001FC0000001C000003FC0000001C000003FC0000000C000003F 80000000C000007F80000000E000007F800000006000007F800000006000007F80000000600000 7F800000006000007F800000006000007F800000006000007F800000006000007F800000006000 007F800000006000007F800000006000007F800000006000007F800000006000007F8000000060 00007F800000006000007F800000006000007F800000006000007F800000006000007F80000000 6000007F800000006000007F800000006000007F800000006000007F800000006000007F800000 006000007F800000006000007F800000006000007F800000006000007F800000006000007F8000 00006000007F800000006000007F800000006000007F800000006000007F800000006000007F80 0000006000007F800000006000007F800000006000007F800000006000007F800000006000007F 80000000F000007F80000001F80000FFC0000007FE00FFFFFFC000FFFFF0FFFFFFC000FFFFF0FF FFFFC000FFFFF0>60 60 -2 1 65]85 dc[<007F800F8003FFE01FE00FE0703FF01FC03C7E383F 800C7C187F000EF80CFF0007F80CFE0003F80CFE0003F80CFE0001F80CFE0001F80CFE0001F80C FF0001F80C7F0001F8007F0001F8003F8001F8001FC001F8001FE001F80007F001F80003F801F8 0000FF01F800003FF9F8000007FFF80000001FF800000001F800000001F800000001F800000001 F8000F0001F8001F8001F8003FC001F8003FC003F0003FC003F0003FC007E0003F8007E0001E00 0FC0000E001F800007C07E000001FFF80000003FC00000>38 40 -4 1 43]97 dc[<00000FE000 0001807FFC000001C0F03F000001E1C00FC00001E38003E00001F70001F00001FE0001F80001FC 0000FC0001FC00007E0001F800007E0001F800003F0001F800003F0001F800003F8001F800003F 8001F800001F8001F800001FC001F800001FC001F800001FC001F800001FC001F800001FC001F8 00001FC001F800001FC001F800001FC001F800001FC001F800001F8001F800001F8001F800003F 8001F800003F8001F800003F0001F800007F0001F800007E0001FC0000FC0001FE0000FC0001FF 0001F80001FB8003F00001F9C007C00001F8F01F800001F83FFE000001F80FF0000001F8000000 0001F80000000001F80000000001F80000000001F80000000001F80000000001F80000000001F8 0000000001F80000000001F80000000001F80000000001F80000000001F80000000001F8000000 0001F80000000001F80000000001F80000000007F800000000FFF800000000FFF800000000FFF8 0000000001F800000000>42 61 -2 1 48]98 dc[<0003FC00001FFF00007E03C000F800F003F0 003807E0001C0FC0000C0FC0000E1F8000063F8000073F0000037F0000037F0000007F0000007E 000000FE000000FE000000FE000000FE000000FE000000FE000000FE000000FE000000FE000000 FE0000007E0000007F0000007F0000003F0000783F8000FC1F8001FE1F8001FE0FC001FE07E001 FE03E000FE01F0003C00F80038007E01F0001FFFC00003FE00>32 40 -3 1 38]99 dc[<0003FC 07E000001FFF07FFC0007E03C7FFC000F800E7FFC003F00077F80007E0003FE0000FC0001FE000 0FC0000FE0001F80000FE0003F800007E0003F000007E0007F000007E0007F000007E0007E0000 07E0007E000007E000FE000007E000FE000007E000FE000007E000FE000007E000FE000007E000 FE000007E000FE000007E000FE000007E000FE000007E0007E000007E0007F000007E0007F0000 07E0003F000007E0003F000007E0001F800007E0001F800007E0000FC0000FE00007E0001FE000 03E0001FE00001F0003FE00000FC00F7E000003F03C7E000000FFF87E0000001FC07E000000000 07E00000000007E00000000007E00000000007E00000000007E00000000007E00000000007E000 00000007E00000000007E00000000007E00000000007E00000000007E00000000007E000000000 07E00000000007E00000000007E00000000007E0000000001FE000000003FFE000000003FFE000 000003FFE00000000007E000>42 61 -3 1 48]100 dc[<0001FE0000000FFF8000003F01E000 00FC00700001F0003C0003E0000C0007E0000E000FC00007001F800003001F800003803F000001 803F000001807F000000007F000000007E00000000FE00000000FE00000000FE00000000FE0000 0000FE00000000FE00000000FFFFFFFF80FFFFFFFF80FE00001F80FE00001F807E00001F807F00 001F807F00001F803F00001F003F00001F003F80003F001F80003E000FC0007E0007C0007C0007 E000FC0003F001F80000F803F000007E07C000001FFF00000003FC0000>33 40 -2 1 38]101 dc[43 60 -2 0 48]104 dc[19 58 -1 0 23]105 dc[ 20 60 -1 0 23]108 dc[<0001FE0000000FFFC000003F03F00000F8007C0001F0003E0003E000 1F0007C0000F800F800007C01F800007E01F000003E03F000003F03F000003F07F000003F87E00 0001F87E000001F8FE000001FCFE000001FCFE000001FCFE000001FCFE000001FCFE000001FCFE 000001FCFE000001FCFE000001FC7E000001F87E000001F87E000001F83F000003F03F000003F0 3F000003F01F000003E00F800007C00F800007C007C0000F8003E0001F0001F0003E0000F8007C 00003F03F000000FFFC0000001FE0000>38 40 -2 1 43]111 dc[29 38 -2 0 34]114 dc[27 40 -3 1 34]115 dc[<0003F000000FFC00003F0E00007E0700007C030000FC030000FC 038001F8018001F8018001F8018001F8018001F8018001F8018001F8018001F8018001F8018001 F8018001F8000001F8000001F8000001F8000001F8000001F8000001F8000001F8000001F80000 01F8000001F8000001F8000001F8000001F8000001F8000001F8000001F8000001F80000FFFFFF 00FFFFFF001FFFFF0007F8000003F8000001F8000000F8000000F8000000780000007800000038 00000038000000380000003800000018000000180000001800000018000000180000>25 54 -2 1 33]116 dc[<0001FE03F000000FFF83FFE0001F81E3FFE0007E0073FFE0007C003BFC0000FC 001FF00000F8000FF00001F8000FF00001F80007F00001F80007F00001F80007F00001F80003F0 0001F80003F00001F80003F00001F80003F00001F80003F00001F80003F00001F80003F00001F8 0003F00001F80003F00001F80003F00001F80003F00001F80003F00001F80003F00001F80003F0 0001F80003F00001F80003F00001F80003F00001F80003F00001F80003F00001F80003F00001F8 0003F00001F80003F00001F80003F00007F8000FF000FFF801FFF000FFF801FFF000FFF801FFF0 0001F80003F000>43 39 -2 1 48]117 dc[<00006000030000000000F000078000000000F000 078000000000F000078000000001F8000FC000000001F8000FC000000001F8000FC000000003FC 001FE000000003FC001F6000000003FC001F6000000007EE003F3000000007E6003E3000000007 E6003E300000000FC3007E180000000FC3007C180000000FC3007C180000001F8180FC0C000000 1F8180F80C0000001F8180F80C0000003F00C1F8060000003F00C1F0060000003F00C1F0060000 007E0063F0030000007E0063E0030000007E0063E003000000FC0037E001800000FC0037C00180 0001FC0037C001C00001F8001FC000C00001F8001F8000C00003F8001F8000E00003F0001F8000 E00003F0001F0000F00007F0003F0001F8000FF8007FC003FE00FFFF87FFF81FFF80FFFF87FFF8 1FFF80FFFF87FFF81FFF80>57 38 -2 1 62]119 dc[42 37 -1 0 45]120 dc[31 37 -2 0 38]122 dc dfe /fd df[<7FFFFFF07FFFFF F07FFFFFF0003FE000003FE000003FE000003FE000003FE000003FE000003FE000003FE000003F E000003FE000003FE000003FE000003FE000003FE000003FE000003FE000003FE000003FE00000 3FE000003FE000003FE000003FE000003FE000003FE000003FE000003FE000003FE000003FE000 003FE000003FE000003FE000003FE000003FE000003FE000003FE000E03FE000FFBFE000FFFFE0 001FFFE000007FE000000FE0000003E0000001E000>28 46 -6 0 41]49 dc[32 46 -4 0 41]50 dc[<001FFC000001FF FF800007FFFFE0001FE01FF8003F000FFC007F0007FE007FC003FF00FFE003FF80FFE001FF80FF E001FFC0FFE001FFC0FFE001FFC0FFE001FFC07FC001FFC03F8001FFC00E0001FFC0000001FF80 000001FF80000003FF00000003FF00000007FE0000000FF80000001FF000001FFF8000001FFC00 00001FFE000000007F800000003FE00000001FF00000000FF80000000FF80001800FFC0007E007 FC000FF007FE001FF807FE001FF807FE001FF807FE001FF807FE001FF807FE001FF007FE000FE0 07FC0007800FF80003C00FF00001F01FE000007FFF8000000FFC0000>34 46 -3 0 41]51 dc[< 000FFFFFF0000FFFFFF0000FFFFFF000000FF80000000FF80000000FF80000000FF80000000FF8 0000000FF80000000FF80000000FF80000000FF800FFFFFFFFF0FFFFFFFFF0FFFFFFFFF0F00007 F800780007F8003C0007F8001E0007F8000F0007F8000F0007F800078007F80003C007F80001E0 07F80000F007F800007007F800007807F800003C07F800001E07F800000F07F800000707F80000 0787F8000003C7F8000001E7F8000000F7F800000077F80000007FF80000003FF80000001FF800 00000FF800000007F800000007F800000003F800000001F800000000F8000000007800>36 46 -2 0 41]52 dc[<003FE00001FFFE0007FFFF800FC07FE01E001FF03C000FF87C0007FC7F0007 FCFF8003FEFF8003FEFFC003FFFFC003FFFFC003FFFF8003FF7F8003FF1E0003FF000003FF0000 03FF000003FE000003FE000003FE0E0007FC0F0007F80F800FF00FF01FE00FFFFFC00F7FFF000F 0FF8000F0000000F0000000F0000000F0000000F0000000F0000000F0000000FFF00000FFFF000 0FFFFC000FFFFF000FFFFF800FFFFFC00FFFFFE00FFFFFF00FFFFFF80FC003F80C000038>32 46 -4 0 41]53 dc[<000003FF80000000003FFFF800000001FFFFFE00000007FF003F8000001FF8 0003E000007FE00001F00000FFC00000780001FF0000003C0003FF0000001E0007FE0000000E00 0FFC0000000F001FF800000007001FF800000007803FF800000003803FF000000003803FF00000 0003807FF000000003807FF000000000007FE00000000000FFE00000000000FFE00000000000FF E00000000000FFE00000000000FFE00000000000FFE00000000000FFE00000000000FFE0000000 0000FFE00000000000FFE00000000000FFE000000000007FE000000000007FF000000007807FF0 00000007803FF000000007803FF00000000F803FF80000000F801FF80000000F801FF80000001F 800FFC0000001F8007FE0000003F8003FE0000007F8001FF000000FF8000FFC00001FF80007FE0 0003FF80001FF8000FFF800007FF007F1F800001FFFFFC0F8000003FFFF00780000003FF800380 >49 49 -5 0 60]67 dc[49 49 -2 0 54]69 dc[26 49 -2 0 31]73 dc[<00000FFE0000000000FFFFE000 000007FFFFFC0000001FFC07FF0000003FE000FF800000FFC0007FE00001FF80003FF00003FF00 001FF80007FE00000FFC000FFC000007FE000FFC000007FE001FF8000003FF001FF8000003FF00 3FF0000001FF803FF0000001FF807FF0000001FFC07FF0000001FFC07FE0000000FFC07FE00000 00FFC0FFE0000000FFE0FFE0000000FFE0FFE0000000FFE0FFE0000000FFE0FFE0000000FFE0FF E0000000FFE0FFE0000000FFE0FFE0000000FFE0FFE0000000FFE0FFE0000000FFE0FFE0000000 FFE07FE0000000FFC07FE0000000FFC07FE0000000FFC03FF0000001FF803FF0000001FF803FF0 000001FF801FF0000001FF001FF8000003FF000FF8000003FE0007FC000007FC0007FC000007FC 0003FE00000FF80001FF00001FF00000FF80003FE000003FE000FF8000001FFC07FF00000007FF FFFC00000000FFFFE0000000000FFE000000>51 49 -5 0 62]79 dc[59 49 -2 0 62] 82 dc[35 49 -5 0 46]83 dc[<007FFFFFFF8000007FFFFFFF80 00007FFFFFFF800000000FFC00000000000FFC00000000000FFC00000000000FFC00000000000F FC00000000000FFC00000000000FFC00000000000FFC00000000000FFC00000000000FFC000000 00000FFC00000000000FFC00000000000FFC00000000000FFC00000000000FFC00000000000FFC 00000000000FFC00000000000FFC00000000000FFC00000000000FFC00000000000FFC00000000 000FFC00000000000FFC00000000000FFC00000000000FFC00000000000FFC00000000000FFC00 000000000FFC000000E0000FFC0001C0E0000FFC0001C0E0000FFC0001C0E0000FFC0001C07000 0FFC00038070000FFC00038070000FFC00038070000FFC00038078000FFC00078078000FFC0007 807C000FFC000F807E000FFC001F807F000FFC003F803FE00FFC01FF003FFFFFFFFFFF003FFFFF FFFFFF003FFFFFFFFFFF00>50 48 -3 0 57]84 dc[<000000FFF000000000000FFFFE00000000 003FFFFF8000000000FFC00FE000000003FE0001F800000007FC00007C0000000FF800003E0000 001FF000001E0000003FE000000F0000003FE000000F0000007FE00000078000007FC000000780 00007FC0000003800000FFC0000003C00000FFC0000003C00000FFC0000003C00000FFC0000003 C00000FFC0000003C00000FFC0000003C00000FFC0000003C00000FFC0000003C00000FFC00000 03C00000FFC0000003C00000FFC0000003C00000FFC0000003C00000FFC0000003C00000FFC000 0003C00000FFC0000003C00000FFC0000003C00000FFC0000003C00000FFC0000003C00000FFC0 000003C00000FFC0000003C00000FFC0000003C00000FFC0000003C00000FFC0000003C00000FF C0000003C00000FFC0000003C00000FFC0000003C00000FFC0000003C00000FFC0000003C00000 FFC0000003C00000FFC0000003C00000FFC0000003C00000FFC0000003C00000FFC0000007E000 FFFFFFC003FFFFC0FFFFFFC003FFFFC0FFFFFFC003FFFFC0>58 49 -2 0 63]85 dc[<00FF800F F807FFF03FF81FFFF87FF83FF03EFF007FC00FFE00FF8007FE00FF8003FE00FF0001FE00FF0001 FE00FF0001FE00FF8001FE007F8001FE007FC001FE003FE001FE001FF001FE0007FE01FE0001FF F1FE00003FFFFE000001FFFE00000001FE00000001FE00010001FE0007C001FE000FE001FE001F F001FE001FF003FC001FF007FC001FF007F8001FE01FF0000FFFFFC00003FFFF0000007FF80000 >37 32 -2 0 40]97 dc[<07001FE00007807FFE0007C1FFFF8007E7E07FC007FF801FE007FE00 0FF007FC0007F807FC0003FC07F80003FC07F80003FE07F80001FE07F80001FF07F80001FF07F8 0001FF07F80001FF07F80001FF07F80001FF07F80001FF07F80001FF07F80001FF07F80001FF07 F80001FE07F80003FE07F80003FE07F80003FC07FC0007F807FE0007F807FF000FF007FFE03FE0 07F9FFFF8007F87FFE0007F80FF00007F800000007F800000007F800000007F800000007F80000 0007F800000007F800000007F800000007F800000007F800000007F800000007F800000007F800 00000FF8000000FFF8000000FFF8000000FFF800000001F8000000>40 50 -2 0 46]98 dc[<00 07FC00007FFF8001FFFFE003FF01F007F800780FF0003C1FE0001E3FE0000E3FC0000E7FC00000 7FC00000FF800000FF800000FF800000FF800000FF800000FF800000FF800000FF800000FF8000 00FF8000007F8000407FC001F03FC003F83FC007FC1FE007FC0FF007FC07F807FC03FC03FC01FF FFF8007FFFE00007FF00>31 32 -3 0 37]99 dc[<000FF01FFF007FFE1FFF01FFFF9FFF07FC07 DFF00FF001FFE01FE000FFE01FE0007FE03FC0003FE07FC0001FE07FC0001FE07F80001FE0FF80 001FE0FF80001FE0FF80001FE0FF80001FE0FF80001FE0FF80001FE0FF80001FE0FF80001FE0FF 80001FE0FF80001FE07F80001FE07FC0001FE03FC0001FE03FC0001FE01FE0003FE01FF0007FE0 0FF800FFE003FE03FFE001FFFFDFE0007FFF1FE0000FF81FE00000001FE00000001FE00000001F E00000001FE00000001FE00000001FE00000001FE00000001FE00000001FE00000001FE0000000 1FE00000001FE00000001FE00000003FE0000003FFE0000003FFE0000003FFE000000007E0>40 50 -3 0 46]100 dc[<0003FF0000003FFFE00000FFFFF80003FE00FC0007F8001E000FF0000F 001FE00007801FC00003803FC00003803FC00000007F800000007F80000000FF80000000FF8000 0000FF80000000FFFFFFFF80FFFFFFFF80FFFFFFFF80FF80003F80FF80003F807F80003F807F80 003F007FC0003F003FC0003F003FC0007E001FE0007E000FE000FC0007F801F80003FC07F00000 FFFFE000003FFF80000007FC0000>33 32 -2 0 38]101 dc[<7FFFF0007FFFF0007FFFF00003 FC000003FC000003FC000003FC000003FC000003FC000003FC000003FC000003FC000003FC0000 03FC000003FC000003FC000003FC000003FC000003FC000003FC000003FC000003FC000003FC00 0003FC000003FC000003FC000003FC000003FC000003FC0000FFFFF800FFFFF800FFFFF80003FC 000003FC000003FC000003FC000003FC000003FC000003FC000003FC01C003FC07F003FC0FF803 FE0FF801FE0FF801FF0FF800FF0FF8007FC7F0001FFFF00007FFC00000FF00>29 50 -2 0 25] 102 dc[<001FFF800000FFFFF00007FFFFFE001FF801FF803FC0003FC07F00000FE07E000007E0 FE000007F0FC000003F0FC000003F0FC000003F0FE000007F07E00000FF03F00007FE01FFFFFFF E007FFFFFFE007FFFFFFC007FFFFFF800FFFFFFE000FFFFFF8001FFFFFC0001F800000001F0000 00001E000000001E000000000E000000000E1FF000000EFFFE000007FFFF800007F83FC0000FE0 0FE0001FE00FF0001FC007F0003FC007F8003FC007F8003FC007F8003FC007F8003FC007F8003F C007F8003FC007F8001FC007F0601FE00FF1F80FE00FE1F807F83FF1F803FFFFFFF800FFFE3FF0 001FF007E0>37 47 -2 15 41]103 dc[41 50 -3 0 46]104 dc[17 51 -3 0 23]105 dc[40 50 -2 0 44]107 dc[18 50 -3 0 23]108 dc[64 32 -3 0 71]109 dc[41 32 -3 0 46]110 dc[<0007FE0000003FFFC00001FFFFF8 0003FE07FC0007F801FE000FE0007F001FE0007F803FC0003FC03FC0003FC07F80001FE07F8000 1FE07F80001FE0FF80001FF0FF80001FF0FF80001FF0FF80001FF0FF80001FF0FF80001FF0FF80 001FF0FF80001FF07F80001FE07F80001FE07F80001FE03FC0003FC03FC0003FC01FC0003F800F E0007F0007F000FE0003FC03FC0000FFFFF000003FFFC0000007FE0000>36 32 -2 0 41]111 dc[40 46 -2 14 46]112 dc[29 32 -2 0 34]114 dc[26 32 -3 0 33]115 dc[<000FE0007FF801FFFC03FE1E03FC0E07FC0F07F80707 F80707F80707F80707F80707F80707F80707F80007F80007F80007F80007F80007F80007F80007 F80007F80007F80007F80007F80007F80007F80007F80007F800FFFFFEFFFFFEFFFFFE1FF80007 F80003F80001F80000F80000F800007800007800007800003800003800003800003800003800> 24 46 -2 0 32]116 dc[<000FFC0FFF80007FFF0FFF8001FFFFCFFF8003FE03EFF80003FC00FF F00007F8007FF00007F8003FF00007F8001FF00007F8001FF00007F8000FF00007F8000FF00007 F8000FF00007F8000FF00007F8000FF00007F8000FF00007F8000FF00007F8000FF00007F8000F F00007F8000FF00007F8000FF00007F8000FF00007F8000FF00007F8000FF00007F8000FF00007 F8000FF00007F8000FF00007F8000FF0000FF8001FF000FFF801FFF000FFF801FFF000FFF801FF F00001F80003F000>41 32 -3 0 46]117 dc[39 32 -2 0 44]120 dc dfe /fe df[<7FFF1FFFC07FFF1FFFC07FFF1FFFC007F001FC0007F001FC0007F001FC0007F001FC0007F0 01FC0007F001FC0007F001FC0007F001FC0007F001FC0007F001FC0007F001FC0007F001FC0007 F001FC0007F001FC0007F001FC0007F001FC0007F001FC0007F001FC0007F001FC0007F001FC00 07F001FC00FFFFFFFC00FFFFFFFC00FFFFFFFC0007F000000007F000000007F000000007F00000 0007F000F00007F001F80007F003FC0007F003FC0007F003FC0003F803FC0003FC01FC0000FE00 F800007F80F000001FFFC0000001FF0000>34 42 -1 0 38]12 dc[<00030007001E003C007800 F800F001E003E007C007C00F800F801F801F003F003F003E003E007E007E007E007C00FC00FC00 FC00FC00FC00FC00FC00FC00FC00FC00FC00FC00FC00FC007C007E007E007E003E003E003F003F 001F001F800F800F8007C007C003E001E000F000F80078003C001E00070003>16 60 -6 15 27] 40 dc[16 60 -4 15 27]41 dc[<1C007F00FF80FF80FF80FF80FF807F001C000000 000000000000000000000000000000001C007F00FF80FF80FF80FF80FF807F001C00>9 27 -5 0 19]58 dc[47 41 -2 0 52]65 dc[<00003FF800000003FFFF00 00000FFFFFC000003FF007F00000FF8000F80001FE00003C0007FC00001E0007F800000F000FF0 000007001FE0000007803FE0000003803FC0000003807FC0000003807FC0000003807FC0000000 00FF8000000000FF8000000000FF8000000000FF8000000000FF8000000000FF8000000000FF80 00000000FF8000000000FF8000000000FF8000000000FF80000000007FC0000003807FC0000003 807FC0000003803FC0000007803FE0000007801FE000000F800FF000000F8007F800001F8007FC 00003F8001FE00007F8000FF8001FF80003FF007FF80000FFFFF8F800003FFFE078000003FF001 80>41 41 -4 0 50]67 dc[39 41 -3 0 45]69 dc[36 41 -3 0 43]70 dc[<00007FF003000003FFFE0F00001FFFFFBF00007FF007FF00 00FF8001FF0003FE0001FF0007FC0000FF000FF80000FF000FF00000FF001FE00000FF003FE000 00FF003FC00000FF007FC00000FF007FC00000FF007FC001FFFFF8FF8001FFFFF8FF8001FFFFF8 FF8000000000FF8000000000FF8000000000FF8000000000FF8000000000FF8000000000FF8000 000000FF8000000000FF80000000007FC0000007007FC0000007007FC0000007003FC000000F00 3FE000000F001FE000001F000FF000001F000FF800003F0007FC00007F0003FE0000FF0000FF80 01FF00007FF00FFF00001FFFFF1F000003FFFC0F0000007FE00300>45 41 -4 0 54]71 dc[22 41 -2 0 26]73 dc[58 41 -3 0 65 ]77 dc[48 41 -3 0 52]82 dc[29 41 -4 0 38]83 dc[<007FFFFFE000007FFFFFE000007FFFFFE00000003FC0000000003FC0000000 003FC0000000003FC0000000003FC0000000003FC0000000003FC0000000003FC0000000003FC0 000000003FC0000000003FC0000000003FC0000000003FC0000000003FC0000000003FC0000000 003FC0000000003FC0000000003FC0000000003FC0000000003FC0000000003FC0000000003FC0 0000E0003FC000E0E0003FC000E0E0003FC000E0E0003FC000E0E0003FC000E0F0003FC001E0F0 003FC001E070003FC001C078003FC003C078003FC003C07E003FC007C07F803FC03FC07FFFFFFF FFC07FFFFFFFFFC07FFFFFFFFFC0>43 40 -2 0 48]84 dc[<00001FF800000001FFFF00000007 FFFFC000001FF007E000003FC000F800007F8000780000FF00003C0000FE00001E0001FE00000E 0001FC00000E0003FC00000F0003FC0000070003FC0000070003FC0000070003FC0000070003FC 0000070003FC0000070003FC0000070003FC0000070003FC0000070003FC0000070003FC000007 0003FC0000070003FC0000070003FC0000070003FC0000070003FC0000070003FC0000070003FC 0000070003FC0000070003FC0000070003FC0000070003FC0000070003FC0000070003FC000007 0003FC0000070003FC0000070003FC00000700FFFFF001FFFCFFFFF001FFFCFFFFF001FFFC>46 41 -3 0 53]85 dc[<000001C0000000000003E0000000000003E0000000000007F00000000000 07F000000000000FF800000000000FF800000000000FF800000000001FFC00000000001FFC0000 0000003FFE00000000003FCE00000000007FCF00000000007F870000000000FF878000000000FF 038000000000FF038000000001FF01C000000001FE01C000000003FE01E000000003FC00E00000 0007FC00F000000007F8007000000007F800700000000FF000380000000FF000380000001FF000 1C0000001FE0001C0000003FE0001E0000003FC0000E0000007FC0000F0000007F800007000000 7F800007000000FF000003800000FF000003800001FF000003C00001FE000001C00003FE000001 E000FFFFF0003FFF80FFFFF0003FFF80FFFFF0003FFF80>49 41 -1 0 52]86 dc[<01FC03FC0F FF0FFC3F83DFFC7F00FFC0FF007F80FE007F80FE003F80FE003F80FE003F807F003F807F803F80 3F803F801FE03F8007FC3F8000FFFF80000FFF8000003F8000003F8000003F800F803F801FC03F 801FC07F001FC07F001FC0FE000F81FC0007FFF00001FF8000>30 27 -2 0 33]97 dc[<0E01FC 00000F0FFF80000F9E07E0000FF803F8000FF001FC000FF000FE000FE000FE000FE000FF000FE0 007F000FE0007F800FE0007F800FE0007F800FE0007F800FE0007F800FE0007F800FE0007F800F E0007F800FE0007F800FE0007F000FE0007F000FE000FE000FE000FE000FF001FC000FF803F800 0FFE07E0000FE7FF80000FE1FE00000FE00000000FE00000000FE00000000FE00000000FE00000 000FE00000000FE00000000FE00000000FE00000000FE00000000FE00000000FE0000000FFE000 0000FFE0000000FFE0000000>33 42 -2 0 38]98 dc[<001FE00000FFFC0003F01F000FE00780 1FC003C03FC001C03F8001C07F8000007F000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF0000007F0000007F801F003F803F803F803F801FC03F800FE0 3F8003F01F0000FFFE00001FF800>26 27 -2 0 31]99 dc[<003FC3FF8000FFF3FF8003F03FFF 800FE01FF8001FC00FF8003F8007F8003F8003F8007F0003F8007F0003F800FF0003F800FF0003 F800FF0003F800FF0003F800FF0003F800FF0003F800FF0003F800FF0003F800FF0003F8007F00 03F8007F8003F8003F8003F8003F8003F8001FC007F8000FE00FF80003F03FF80000FFFBF80000 1FE3F800000003F800000003F800000003F800000003F800000003F800000003F800000003F800 000003F800000003F800000003F800000003F800000003F80000003FF80000003FF80000003FF8 00>33 42 -2 0 38]100 dc[<001FF00000FFFE0003F81F800FE003C01FC001C03F8001E03F80 00E07F8000007F000000FF000000FF000000FF000000FF000000FFFFFFE0FFFFFFE0FF0007E0FF 0007E0FF0007E07F0007E07F000FC03F800FC03F800FC01FC01F800FE03F0003F07E0001FFF800 003FE000>27 27 -2 0 32]101 dc[<7FFF807FFF807FFF8007F00007F00007F00007F00007F0 0007F00007F00007F00007F00007F00007F00007F00007F00007F00007F00007F00007F00007F0 0007F00007F00007F000FFFFC0FFFFC0FFFFC007F00007F00007F00007F00007F00007F00007F0 0007F03E07F07F03F87F03F87F01FC7F00FE3E003FFC0007F0>24 42 -2 0 21]102 dc[<007F F00003FFFE000FC01F803F0007E07E0003F0FC0001F8F80000F8F80000F8F80000F8F80001F87C 0001F87E0007F81FFFFFF007FFFFF00FFFFFE01FFFFFC03FFFFF003FFFF8003E0000003C000000 3C0000003800000018FF80001FFFE0000FC1F8001F80FC003F80FE003F007E007F007F007F007F 007F007F007F007F007F007F007F007F003F007E103F80FE7C1F80FC7C0FC1FE7C03FFE7FC00FF 81F0>30 40 -2 13 34]103 dc[33 42 -3 0 38]104 dc[15 43 -3 0 20]105 dc[31 42 -2 0 36]107 dc[15 42 -3 0 20]108 dc[53 27 -3 0 60]109 dc[33 27 -3 0 38]110 dc[<003FE00001FFFC0007F07F000FC01F801F 800FC03F800FE03F800FE07F0007F07F0007F0FF0007F8FF0007F8FF0007F8FF0007F8FF0007F8 FF0007F8FF0007F8FF0007F87F0007F07F0007F07F0007F03F0007E03F800FE01F800FC00FC01F 8003F07E0001FFFC00003FE000>29 27 -2 0 34]111 dc[33 39 -2 12 38]112 dc[<0000 3FFF8000003FFF8000003FFF80000003F800000003F800000003F800000003F800000003F80000 0003F800000003F800000003F800000003F800003FC3F80000FFF3F80003F07FF8000FE01FF800 1FC00FF8003FC007F8003F8003F8007F8003F8007F8003F800FF0003F800FF0003F800FF0003F8 00FF0003F800FF0003F800FF0003F800FF0003F800FF0003F800FF0003F8007F8003F8007F8003 F8003F8007F8003FC007F8001FE00FF8000FE01FF80003F83CF80000FFF07800001FC03800>33 39 -2 12 36]113 dc[24 27 -2 0 28]114 dc[22 27 -2 0 27]115 dc[ <001F8000FFE001F8F003F87007F03807F03807F03807F03807F03807F03807F03807F00007F0 0007F00007F00007F00007F00007F00007F00007F00007F00007F00007F00007F000FFFFF0FFFF F01FFFF007F00003F00003F00001F00000F00000F00000F000007000007000007000007000>21 38 -1 0 27]116 dc[<003FC3FF8001FFF3FF8003F03BFF8007E01FF8000FE00FF8000FE007F8 000FE007F8000FE003F8000FE003F8000FE003F8000FE003F8000FE003F8000FE003F8000FE003 F8000FE003F8000FE003F8000FE003F8000FE003F8000FE003F8000FE003F8000FE003F8000FE0 03F8000FE003F8000FE003F800FFE03FF800FFE03FF800FFE03FF800>33 27 -3 0 38]117 dc[ <0001C000000003E000000003E000000007F000000007F00000000FF80000000FF80000000FF8 0000001FDC0000001FDC0000003FDE0000003F8E0000007F8F0000007F070000007F07000000FE 03800000FE03800001FC01C00001FC01C00003FC01E00003F800E00007F800F00007F000700007 F0007000FFFE03FF80FFFE03FF80FFFE03FF80>33 27 -1 0 36]118 dc[<00078003C0000007 8003C000000FC007E000000FC007E000000FC007E000001FE00FF000001FE00FF000003FF01FF8 00003FF01FB800003FF01FB800007F783F3C00007F383F1C0000FF383F1E0000FE1C7E0E0000FE 1C7E0E0001FE1EFC0F0001FC0EFC070001FC0EFC070003F807F8038003F807F8038007F807F803 C007F003F001C007F003F001C00FE007E000E0FFFE7FFC0FFEFFFE7FFC0FFEFFFE7FFC0FFE>47 27 -1 0 50]119 dc[33 27 -1 0 36]120 dc[ <0FC00000003FE00000007C78000000FE3C000000FE1E000000FE0E000000FE0F0000007C0700 00003807800000000380000000038000000001C000000001C000000003E000000003E000000007 F000000007F00000000FF80000000FF80000000FF80000001FDC0000001FDC0000003FDE000000 3F8E0000007F8F0000007F070000007F07000000FE03800000FE03800001FC01C00001FC01C000 03FC01E00003F800E00007F800F00007F000700007F0007000FFFE03FF80FFFE03FF80FFFE03FF 80>33 39 -1 12 36]121 dc dfe /ff df[<78FCFCFCFC78>6 6 -5 0 17]46 dc[<7FFFE07F FFE001F80000F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000 F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000 F00000F00000F00000F00000F00000F00000F000F0F000FEF0000FF00001F000007000001000> 19 40 -5 0 30]49 dc[<007F000003FFC0000F01F0001800F80030007C0040003E0040003F00 F8001F00FC001F00FC001F80FC001F8078001F8030001F8000001F8000001F8000001F0000001F 0000003E0000003C00000078000000F0000001E00000FF0000000700000001C0000000E0000000 F0000000780000007C0000007C000C007E001E003E003E003E003E003E003E007E001C007C0010 007C000C00F8000701F00003FFC000007F0000>25 41 -2 1 30]51 dc[40 42 -2 0 45]65 dc[40 41 -2 0 46]68 dc[<00 FFFFFE0000FFFFFE000000FE000000007C000000007C000000007C000000007C000000007C0000 00007C000000007C000000007C000000007C000000007C000000007C000000007C000000007C00 0000007C000000007C000000007C000000007C000000007C000000007C000000007C000000007C 000000007C000000007C000000007C000080007C000480007C000480007C000480007C00048000 7C0004C0007C000CC0007C000C40007C000840007C000860007C001870007C00387C007C00F87F FFFFFFF87FFFFFFFF8>38 41 -2 0 43]84 dc[<00000C00000000000C00000000000C00000000 001E00000000001E00000000003F00000000003F00000000003F00000000007C80000000007C80 00000000FCC000000000F84000000000F84000000001F02000000001F02000000001F020000000 03E01000000003E01000000007E00800000007C00800000007C0080000000F80040000000F8004 0000001F80060000001F00020000001F00020000003F00010000003E00010000003E0001000000 7C00008000007C0000800000FC0000C00000F80000400000F80000400001F00000200001F00000 200001F00000200003E00000100003E00000380007F000007E00FFFF0003FFC0FFFF0003FFC0> 42 42 -1 1 45]86 dc[<0407E00006181C0007200E000740078007C003C0078001C0078001E0 078001F0078000F0078000F0078000F8078000F8078000F8078000F8078000F8078000F8078000 F8078000F0078000F0078001E0078001E007C003C007A0038007B00700078C1C000783F0000780 000007800000078000000780000007800000078000000780000007800000078000000780000007 800000078000000F800000FF800000FF80000007800000>29 42 -1 0 33]98 dc[<007F0001C0 C00780200F00101E00083C00043C00047C0000780000F80000F80000F80000F80000F80000F800 00F80000F800007800007C00103C00383C007C1E007C0F003C07800801C070007F80>22 26 -2 0 27]99 dc[<007F0001C0C00700200E00101E00083C00043C00047C0000780000F80000F80000 F80000F80000F80000FFFFFCF8003CF8003C78003C78003C3C00383C00781C00700E00F00700E0 03C380007E00>22 26 -2 0 27]101 dc[13 41 -1 0 17]105 dc[14 42 -1 0 17]108 dc[30 26 -1 0 33]110 dc[<007F000001C1C000070070000E0038001E003C003C001E003C001E 0078000F0078000F00F8000F80F8000F80F8000F80F8000F80F8000F80F8000F80F8000F80F800 0F8078000F0078000F003C001E003C001E001C001C000E0038000700700001C1C000007F0000> 25 26 -2 0 30]111 dc[20 26 -1 0 23]114 dc[<83F800C40700F80180F001C0E000C0C0 00E0C000E0C000E08001E08001E00007C0003FC003FF800FFF003FFE007FF0007E0000F80000F0 0040E00040E000406000C06000C03001C01C06C007F840>19 26 -2 0 24]115 dc dfe /fg df [<600C701C701C701C701C701CF01EF01EF01EF01EF01EF01EF01E701C>15 14 -5 -16 26]34 dc[<1800C03C03F03C03F03E07381E07381E07381F07380F07380F87380787380783F007C3F003 C0C003C00003E00001E00001F00000F00000F00000F800007800007800007C00003C00183E003C 1E007E1E007E1F00E70F00E70F00E70F80E70780E707C0E703C0E703C07E03E07E01E03C01E018 00C0>21 39 -2 4 26]37 dc[7 15 -9 -15 26]39 dc[ <0038007800F801E003C007800F000E001C001C0038003800700070007000E000E000E000E000 E000E000E000E000E000E000700070007000380038001C001C000E000F00078003C001E000F000 780038>13 40 -8 5 26]40 dc[<6000F00078003C001E000F000780038001C001C000E000E000 7000700070003800380038003800380038003800380038003800700070007000E000E001C001C0 038007800F001E003C007800F0006000>13 40 -4 5 26]41 dc[<00E00000E00000E00000E000 40E040F0E1E0F8E3E07EEFC01FFF0007FC0003F80007FC001FFF007EEFC0F8E3E0F0E1E040E040 00E00000E00000E00000E000>19 21 -3 -5 26]42 dc[<003000007800007800007800007800 0078000078000078000078007FFFF0FFFFF8FFFFF87FFFF0007800007800007800007800007800 007800007800007800003000>21 22 -2 -4 26]43 dc[8 13 -9 7 26]44 dc[<7FFFC0FFFFE0FFFFE07FFFC0>19 4 -3 -13 26]45 dc[<3078FCFC7830>6 6 -10 0 26]46 dc[<600000F00000F00000F800007800007C00003C00003E00001E00001E00001F 00000F00000F800007800007C00003C00003C00003E00001E00001F00000F00000F80000780000 7800007C00003C00003E00001E00001F00000F00000F00000F800007800007C00003C00003E000 01E00001E00000C0>19 39 -3 4 26]47 dc[<01F00007FC000FFE001F1F001C07003C07803803 807803C07001C07001C0F001E0E000E0E000E0E000E0E000E0E000E0E000E0E000E0E000E0E000 E07001C07001C07001C03803803803801C07001F1F000FFE0007FC0001F000>19 30 -3 0 26] 48 dc[<7FFF7FFF7FFF01C001C001C001C001C001C001C001C001C001C001C001C001C001C001 C001C001C001C071C0FDC07FC00FC007C003C001C001C000C0>16 30 -5 0 26]49 dc[<7FFFE0 FFFFE07FFFE03C00E01E00E00F000007800003C00001E00000F000007C00003C00000E00000F00 0007800003800001C00001C00000E00000E06000E0F000E0F000E0E000E07001C07803C03C0F80 1FFF000FFC0003F000>19 30 -3 0 26]50 dc[<01FC000FFF003FFFC07E03E07000F0E00070F0 0078F000386000380000380000380000780000700000F00003E001FFC001FF0001FF0000078000 03C00001C00000E00000E03C00E03C00E03C01C01E03C01FFF8007FF0001FC00>21 30 -2 0 26 ]51 dc[<003FF8007FFC003FF8000380000380000380000380000380000380FFFFFEFFFFFEFFFF FEF003807803803803803C03801E03800E03800F038007838003838003C38001C38000E38000F3 80007380003B80003B80001F80000F80>23 30 -1 0 26]52 dc[<03F0000FFC003FFF007C0F80 700380E001C0F001C0F000E06000E00000E00000E00000E00001C03001C07803C07E07807FFF00 7FFE0071F8007000007000007000007000007000007000007000007000007FFFC07FFFC03FFFC0 >19 30 -3 0 26]53 dc[<01F00007FC000FFF001E0F803C03803801C07001C07000E07000E0F0 00E0E000E0F000E0F000E0F001C0F803C0FE0780FFFF00E7FE00E1F80070000070000070000038 00003C00C01E01E00F01E00781E003FFC001FF80007E00>19 30 -3 0 26]54 dc[<0380000380 0003800003800003800003800003800003800001C00001C00001C00001C00000E00000E00000E0 00007000007000003800003800001C00001C00000E00000F000007800003C0E001C0E000E0FFFF F0FFFFF8FFFFF8E00000>21 31 -2 0 26]55 dc[<01FC0007FF001FFFC03E03E07800F0700070 F00078E00038E00038E00038E000387000707800F03C01E01F8FC007FF0003FE000FFF801E03C0 3800E07800F07000707000707000707800F03C01E01F07C01FFFC007FF0001FC00>21 30 -2 0 26]56 dc[<0FC0003FF0007FFC00F03E00F00F00F007006003800003800001C00001C00001C003 F0E00FFCE01FFFE03C0FE07803E07001E0E001E0E000E0E000E0E001E0E001C0E001C07001C070 03803807803E0F001FFE0007FC0001F000>19 30 -3 0 26]57 dc[<3078FCFC78300000000000 000000003078FCFC7830>6 21 -10 0 26]58 dc[7 28 -9 7 26]59 dc[<7FFFF0FFFFF8FFFFF87FFFF0000000000000 0000000000007FFFF0FFFFF8FFFFF87FFFF0>21 12 -2 -9 26]61 dc[<600000F80000FC0000 7E00003F80000FC00007E00003F80000FC00007E00003F80000FC00007E00007E0000FC0003F80 007E0000FC0003F80007E0000FC0003F80007E0000FC0000F80000600000>19 26 -3 -2 26] 62 dc[<003F0001FFE003FFF007C0F80F00381E0F003C3FC0387FE07070E070E07070E070E1C0 38E1C038E1C038E1C038E1C038E1C038E1C038E1C03870E07870E0787070F8387FF03C3FF01E0F 700F00E007C1E003FFC001FF80003E00>21 30 -2 0 26]64 dc[<7F01FCFF83FE7F01FC1C0070 0E00E00E00E00E00E00E00E00FFFE007FFC007FFC00701C00701C0038380038380038380038380 01C70001C70001C70001C70000C60000C60000EE0000EE0000EE00006C00007C00007C00003800 >23 30 -1 0 26]65 dc[<007C0001FF8007FFC00F83E01E00F01C007038003838003870003870 0038700000E00000E00000E00000E00000E00000E00000E00000E0000070000070003870003838 00383800781C00781E00F80F83F807FFF801FF38007C38>21 30 -2 0 26]67 dc[<7FFE00FFFF 007FFFC01C07C01C01E01C00F01C00701C00781C00381C00381C003C1C001C1C001C1C001C1C00 1C1C001C1C001C1C001C1C001C1C003C1C00381C00381C00781C00701C00F01C01E01C07C07FFF 80FFFF007FFE00>22 30 -1 0 26]68 dc[<7FE000FFE0007FE0000E00000E00000E00000E0000 0E00000E00000E00000E00000E03800E03800E03800FFF800FFF800FFF800E03800E03800E0380 0E00000E00000E00000E001C0E001C0E001C0E001C7FFFFCFFFFFC7FFFFC>22 30 -1 0 26]70 dc[17 30 -4 0 26]73 dc[<7FFFFCFFFFFC7FFFFC0E001C0E00 1C0E001C0E001C0E001C0E00000E00000E00000E00000E00000E00000E00000E00000E00000E00 000E00000E00000E00000E00000E00000E00000E00000E00000E00007FE000FFF0007FE000>22 30 -1 0 26]76 dc[23 30 -1 0 26]78 dc[19 30 -3 0 26]83 dc[<03FF8003FF8003FF800038000038000038000038000038 000038000038000038000038000038000038000038000038000038000038000038000038000038 00003800003800E0380EE0380EE0380EE0380EFFFFFEFFFFFE7FFFFE>23 30 -1 0 26]84 dc[< 0701C00F83E00F83E00D83600D83600D83600DC7600DC7600DC7601CC6701CC6701CEE701CEE70 1CEE701CEE701CEE701C7C70387C3838003838003838003838003838003838003838003878003C 70001CFE00FEFF01FEFE00FE>23 30 -1 0 26]87 dc[<7F01FCFF83FE7F01FC0E00E00E00E007 01C00703C003838003878001C70001CF0000EE0000FE00007C00007C0000780000780000780000 FC0000FC0001EE0001CE0003C7000387000783800703800F01C07F87F87F87F87F87F8>23 30 -1 0 26]88 dc[<01FF0001FF0001FF0000380000380000380000380000380000380000380000 3800003800003800007C00007C0000EE0000EE0001C70001C70003C7800383800783C00701C007 01C00E00E00E00E01C0070FF01FEFF01FEFF01FE>23 30 -1 0 26]89 dc[13 39 -10 4 26] 91 dc[13 39 -2 4 26]93 dc[<7FFFC0FFFFE0FFFFE07FFFC0>19 4 -3 5 26]95 dc[<07 F0FC1FFDFC3FFFFC780F80700780E00380E00380E003807003807803803F83801FFF8007FF8000 7F80000380000380300700780F007FFE003FFC001FF000>22 21 -3 0 26]97 dc[<063E000EFF 800FFFC00FC1E00F80F00F00780F00380E001C0E001C0E001C0E001C0E001C0E001C0E001C0E00 380F00380F80700FC1F00FFFE00EFF800E3E000E00000E00000E00000E00000E00000E0000FE00 00FE0000FE0000>22 30 -1 0 26]98 dc[<00FE0003FFC00FFFE01F01F03C0070780070700000 700000E00000E00000E00000E00000E000007000007000007800003C00C01F01E00FFFE003FFC0 00FF80>20 21 -3 0 26]99 dc[<01F1FC07FDFC1FFFFC3E0FC03807C07003C07003C0E001C0E0 01C0E001C0E001C0E001C0E001C0E001C07001C07803C03C07C01E0FC00FFFC007FDC001F1C000 01C00001C00001C00001C00001C00001C0001FC0001FC0001FC0>22 30 -2 0 26]100 dc[<00 FE0003FFC00FFFE01F01F03C0070780070700000700000E00000FFFFF0FFFFF0FFFFF0E00070E0 00707000E07800E03C01C01E07C00FFF8007FF0001F800>20 21 -3 0 26]101 dc[<3FFF807F FFC03FFF8000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000 E00000E00000E00000E000FFFFF0FFFFF07FFFF000E00000E00000E00000E00000F03000787800 3FF8001FF00007E0>21 30 -1 0 26]102 dc[<01FF0007FFC01FFFF03E00F878003C70001CE0 000EE0000EE0000EE0000E70001C78007C3FFFF81FFFE01FFF801C000038000038000039F8001F FE001FFF001E07801C03803801C03801C03801C03801C03801C01C03801E078C0FFFFE07FFFE01 F87C>23 33 -1 12 26]103 dc[23 30 -1 0 26]104 dc[<7F FF80FFFFC07FFF8000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000 E00000E00000E00000E00000E0007FE0007FE0007FE00000000000000000000000000000000000 000000C00001E00001E00000C000>18 31 -4 0 26]105 dc[<1FC07FF0FFF8F038601C001C00 0E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E 000E000E000E0FFE0FFE0FFE000000000000000000000000000C001E001E000C>15 42 -2 11 26]106 dc[24 30 -1 0 26]107 dc[19 30 -3 0 26]108 dc[<7F1F1F00FF9F9F807F1F1F001C1C1C001C1C1C001C1C1C00 1C1C1C001C1C1C001C1C1C001C1C1C001C1C1C001C1C1C001C1C1C001C1C1C001C1C1C001E1E1C 001E1E1C001F1F1C007FFFF800FFFBF8007CE0E000>25 21 0 0 26]109 dc[23 21 -1 0 26]110 dc[<01F00007FC001FFF003E 0F803C07807803C07001C0F001E0E000E0E000E0E000E0E000E0E000E0E000E07001C07803C03C 07803E0F801FFF0007FC0001F000>19 21 -3 0 26]111 dc[22 32 -1 11 26]112 dc[<000FFE000FFE000FFE0000E00000E00000E00000E000 00E00000E00000E00000E001F0E007FCE00FFFE01E0FE03C03E07803E07001E0E001E0E000E0E0 00E0E000E0E000E0E000E0E000E07001E07801E03C03E01E07E00FFFE007FEE001F8E0>23 32 -2 11 26]113 dc[<7FFF00FFFF007FFF00038000038000038000038000038000038000038000 03800003800003800003C00003C00003E00003F01803FC3C7FBFFCFF8FF87F83F0>22 21 -2 0 26]114 dc[18 21 -4 0 26] 115 dc[<001F00007FC000FFE000E0E001C07001C07001C07001C07001C00001C00001C00001C0 0001C00001C00001C00001C00001C00001C000FFFFE0FFFFE07FFFE001C00001C00001C00001C0 0001C00001C00000C000>20 28 -1 0 26]116 dc[<00FCFE03FFFE07FFFE0F03E00E01E00E00 E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E0FE0F E0FE0FE0FE0FE0>23 21 -1 0 26]117 dc[<003800007C00007C0000EE0000EE0000EE0001C7 0001C70001C7000383800383800383800701C00701C00701C00E00E00E00E00E00E07F83FCFFC7 FE7F83FC>23 21 -1 0 26]118 dc[<03838007C7C007C7C006C6C00EC6E00EEEE00EEEE00EEE E00E6CE00E6CE01C7C701C7C701C38701C00701C00701C0070380038380038FF83FEFFC7FEFF83 FE>23 21 -1 0 26]119 dc[<7FC7FCFFC7FE7FC7FC0F01C00783C003838001C70001EE0000EE 00007C00003800007800007C0000FE0001EF0003C7000383800703C07FC7F87FCFFC7FC7F8>23 21 -1 0 26]120 dc[<1E00003F80007FC00071E00078E0003070000070000070000038000038 00003800003C00003C00003C00006E0000660000E60000E70000E70001C70001C38003C3800383 800381C00781C00701C00700E00E00E00E00E07FC3FCFFC7FE7FC3FC>23 32 -1 11 26]121 dc [21 21 -2 0 26]122 dc[<0007 E0001FE0003FE000780000F00000E00000E00000E00000E00000E00000E00000E00000E00000E0 0000E00000E00001E00003C000FF8000FF0000FF800003C00001E00000E00000E00000E00000E0 0000E00000E00000E00000E00000E00000E00000E00000F000007800003FE0001FE00007E0>19 39 -3 4 26]123 dc[<60F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0 F0F0F0F0F0F0F0F0F060>4 39 -11 4 26]124 dc[<7C0000FF0000FF800003C00001E00000E0 0000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000F000007800003F E0001FE0003FE000780000F00000E00000E00000E00000E00000E00000E00000E00000E00000E0 0000E00000E00001E00003C000FF8000FF00007C0000>19 39 -3 4 26]125 dc dfe /fh df[< 7FF0FFF0007FF0FFF0000F801F00000F801F00000F801F00000F801F00000F801F00000F801F00 000F801F00000F801F00000F801F00000F801F00000F801F00000F801F00000F801F00000F801F 00000F801F00000F801F00000F801F00000F801F0000FFFFFFFC00FFFFFFFC000F801F00000F80 1F00000F801F00000F801F00000F801F00000F801F00000F803F03C00F803F07E007C03F87E003 E03F87E001F81FE3E0007FFDFFC0000FF83F00>35 35 -1 0 33]11 dc[<7FF0FFE07FF0FFE00F 801F000F801F000F801F000F801F000F801F000F801F000F801F000F801F000F801F000F801F00 0F801F000F801F000F801F000F801F000F801F000F801F000F801F000F801F00FFFFFF00FFFFFF 000F8000000F8000000F8000000F8000000F800C000F801E000F803F000F803F0007C03F0003E0 1F0001F80E00007FFC00000FF000>27 35 -1 0 31]12 dc[14 4 -1 -9 19]45 dc[<387CFEFEFE7C38>7 7 -4 0 16]46 dc[21 49 -3 12 28]47 dc[<0003FE0000001FFFC00000FF00F0 0001F800380003F0000C0007C00006000F800003001F800003003F000003803F000001807F0000 01807E000001807E00000000FE00000000FE00000000FE00000000FE00000000FE00000000FE00 000000FE00000000FE000000007E000001807E000001807F000001803F000003803F000003801F 800007800F8000078007C0000F8003E0001F8001F8003F8000FF01E380001FFF81800003FE0080 >33 34 -3 0 40]67 dc[37 34 -2 0 43]68 dc[32 34 -2 0 37]69 dc[19 34 -1 0 21]73 dc[29 34 -2 0 34]76 dc[48 34 -2 0 53]77 dc[39 34 -2 0 44]78 dc[<0007FC0000003FFF800000FC07E00003F001F8 0007E000FC000FC0007E001F80003F003F80003F803F00001F807F00001FC07F00001FC07E0000 0FC0FE00000FE0FE00000FE0FE00000FE0FE00000FE0FE00000FE0FE00000FE0FE00000FE0FE00 000FE0FE00000FE07E00000FC07E00000FC07F00001FC03F00001F803F00001F801F80003F001F 80003F000FC0007E0007E000FC0003F001F80000FC07E000003FFF80000007FC0000>35 34 -3 0 42]79 dc[32 34 -2 0 38]80 dc[<000000 1E000000007F000000007F80000000FFC0000000FFC0000001FFC0000001FFE0000001E0E00000 01C02000000380200007FF8020003FFF800000FF07E00003F607F80007E606FC000FC70C7E001F 83F83F003F81F03F803F00001F807F00001FC07F00001FC07E00000FC0FE00000FE0FE00000FE0 FE00000FE0FE00000FE0FE00000FE0FE00000FE0FE00000FE0FE00000FE0FE00000FE07E00000F C07E00000FC07F00001FC03F00001F803F00001F801F80003F001F80003F000FC0007E0007E000 FC0003F001F80000FC07E000003FFF80000007FC0000>35 44 -3 10 42]81 dc[<80FF80C7FF E0FF00F8FC003CF0003CE0001EE0001EC0001FC0001FC0001F00003F00003F00007F0003FF003F FE03FFFE0FFFFC1FFFF83FFFF07FFFC07FFF00FFE000FF0000FC0000FC000CF8000CF8000C7800 1C78001C7C003C3C007C1F03FC07FF8C01FC04>24 34 -3 0 31]83 dc[<0001FF0000000FFFE0 00003F80F800007E001C0000FC000E0001F800060003F800030003F000030007F000018007F000 018007F000018007F000018007F000018007F000018007F000018007F000018007F000018007F0 00018007F000018007F000018007F000018007F000018007F000018007F000018007F000018007 F000018007F000018007F000018007F000018007F000018007F000018007F0000180FFFF803FFC FFFF803FFC>38 34 -2 0 43]85 dc[<0000380000000038000000007C000000007C00000000FE 00000000FE00000000FE00000001FF00000001FF00000003FD80000003F980000007F9C0000007 F0C0000007F0C000000FF06000000FE06000001FE03000001FC03000003FC03800003F80180000 3F801800007F800C00007F000C0000FF00060000FE00060001FE00070001FC00030001FC000300 03F800018003F800018007F80000C007F00000C0FFFF800FFEFFFF800FFE>39 34 -1 0 42]86 dc[<07E03F1FF87F7E0CF87E02F0FC01F0FC01F0FC01F0FC01F07E01F03F01F01FC1F003FDF000 3FF00001F00001F01E01F03F01F03F01E03F03E03F07C01FFF8007FC00>24 22 -2 0 27]97 dc [<180FC0001C3FF8001EE07C001FC03E001F801F001F001F801F000F801F000FC01F000FC01F00 0FC01F000FC01F000FC01F000FC01F000FC01F000FC01F000F801F000F801F001F001F801E001F F07C001F3FF8001F0FE0001F0000001F0000001F0000001F0000001F0000001F0000001F000000 1F0000001F0000001F0000001F000000FF000000FF000000>26 35 -2 0 31]98 dc[<00FE0007 FF800FC0E01F00603E00307E00007E00007C0000FC0000FC0000FC0000FC0000FC0000FC00007C 00007C01E07E03F03E03F01F03F00F83F007FFE000FF80>20 22 -2 0 25]99 dc[<01FC3FC007 FF3FC00F83BE001E00FE003E007E007C003E007C003E00FC003E00FC003E00FC003E00FC003E00 FC003E00FC003E00FC003E00FC003E007C003E007E003E003E003E001F007E000F81FE0007FFBE 0001FC3E0000003E0000003E0000003E0000003E0000003E0000003E0000003E0000003E000000 3E0000003E0000003E000001FE000001FE00>26 35 -2 0 31]100 dc[<00FF0003FFC00FC070 1F00303E00187E00007C00007C0000FC0000FC0000FC0000FFFFF8FFFFF8FC00F8FC00F87C00F8 7C00F03E01F01E01E00F87C007FF8000FE00>21 22 -2 0 26]101 dc[<7FF8007FF8000F8000 0F80000F80000F80000F80000F80000F80000F80000F80000F80000F80000F80000F80000F8000 0F80000F80000F80000F8000FFFC00FFFC000F80000F80000F80000F80000F80000F80000F83C0 0F87E007C7E003C7E001E3E000FFC0003F80>19 35 -1 0 17]102 dc[<01FF000FFFE03F01F8 7C007C78003CF0001EF0001EF0001EF0001E70003E3800FC1FFFFC0FFFF81FFFF03FFF80380000 30000030000013FC001FFF001F0F803E07C03C03C07C03E07C03E07C03E07C03E07C03E03C03C0 3E07CF1F0F8F0FFF7F03FC1E>24 33 -2 11 28]103 dc[26 35 -2 0 31]104 dc[11 36 -2 0 16]105 dc[26 35 -2 0 30]107 dc[11 35 -2 0 16]108 dc[43 22 -2 0 48]109 dc[26 22 -2 0 31]110 dc[<00FE00 07FFC00F83E01F01F03E00F87C007C7C007CFC007EFC007EFC007EFC007EFC007EFC007EFC007E 7C007C7C007C7C007C3E00F81E00F00F83E007FFC000FE00>23 22 -2 0 28]111 dc[26 32 -2 10 31]112 dc[19 22 -2 0 23]114 dc[17 22 -2 0 22]115 dc[<00F80003FE0007C3000F83000F81800F81800F 81800F81800F81800F80000F80000F80000F80000F80000F80000F80000F80000F80000F80000F 8000FFFF00FFFF003F80000F8000078000078000038000038000018000018000018000018000> 17 32 -1 0 22]116 dc[<01FC3FC007FF3FC00F81BE001F00FE001F007E001F003E001F003E00 1F003E001F003E001F003E001F003E001F003E001F003E001F003E001F003E001F003E001F003E 001F003E001F003E001F003E00FF01FE00FF01FE00>26 22 -2 0 31]117 dc[<000E0000000E 0000001F0000001F0000003F8000003F8000007FC000007CC000007CC00000F8600000F8600001 F0300001F0300003E0180003E0180007E01C0007C00C000FC00E000F8006000F800600FFE01FE0 FFE01FE0>27 22 -1 0 30]118 dc[<001800C000003800E000003C01E000007C01F000007E03 F000007E03F00000FE03D80000FB07D80001FB079C0001F38F8C0001F18F0C0003E18F060003E0 DF060007E0DE070007C0DE030007C07E03000F807C01800F807C01800F807801801F007800C0FF E7FF07F8FFE7FF07F8>37 22 -1 0 40]119 dc[<1F0000007F80000069C00000FC600000FC30 0000FC3800007818000000180000000C0000000C0000000E0000000E0000001F0000001F000000 3F8000003F8000007FC000007CC000007CC00000F8600000F8600001F0300001F0300003E01800 03E0180007E01C0007C00C000FC00E000F8006000F800600FFE01FE0FFE01FE0>27 32 -1 10 30]121 dc[20 22 -2 0 25]122 dc dfe /fi df[<3C07C00000620C300000F31E180000F19E0C0000718E06000001C007 000000C003000000E003000000E003800000E00380000060038000007001C000007001C0000070 01C000007001C000003801C000003800E000003800E000003800E000003800E000001C00E00000 1C007000001C007000001C007000001C007000001C007000000E003800000E003800000E003800 000E00380000FFFFFFC00007001C000007001C000007001C000007001C000007001C000003800E 000003800E000003800E000001800E000001C0660C0000C0F71E0000E0F31E000030718E00000F C0F8>39 45 2 10 30]11 dc[<3C00000062000000F3000000F18000007180000001C0000001C0 000000C0000000E0000000E0000000E003C000E0062000700E2000700E1000700E1000700E1000 7007080038070000380700003807000038038000380380001C0380001C0380001C01C0001C01C0 001C01C0000E01C0000E00E0000E00E000FFFFE0000E0000000700000007000000070000000700 00000700000003800000038000000380380001803C0001C03C0000E01C0000301800000FE0>30 45 2 10 27]12 dc[<3C000000006200000000F100000000F180000000718000000000C0000000 00C000000000E000000000E000000000E0000000007000F0000070018800007003880000700384 0000700384000038038400003801C200003801C000003801C000003801C000001C00E000001C00 E000001C00E000001C00E000001C007000000E007000000E007000000E007000000E003800000E 00380000FFFFF80000070038000007001C000007001C000007001C000003801C000003800E0000 03800E000003800E000001800E000001C037000000C07F000000607F000000303F0000000FF380 >33 45 2 10 29]13 dc[<804020100804040202021D3F3F1E0C>8 15 -11 -20 15]39 dc[<80 4020100808040402021E1E1E1E0E>7 15 -3 10 15]44 dc[13 3 -4 -9 17] 45 dc[5 5 -6 0 15]46 dc[<1F000030E000607000E03800E01C00E01C00E00E 00E00F00E00700E00780E00780F00380F003C0F003C0F003C07801E07801E07801E07801E03C00 F03C00F03C00F01C00F01E00701E00700E00700F007007007003007003807001C07000E0600030 C0000F80>20 34 -6 1 25]48 dc[16 33 -6 0 25]49 dc[<801E00807F0040FF8063FFC05F80C020006010002008003004 001002000001000000C0000020000018000006000003000001C00700E00880F008407808403808 203C08203C04101E04101E04101E02101E02201E01001C00801C008018006038001060000FC0> 23 34 -4 1 25]50 dc[<0FC000303000600800C00600C00200C00100C00180C00080C000C0C0 00C06000C06001C03001C01803C00C07C0061F80033F0000FE0000FC0001FE0003F18007E0C007 C06007003007001007001806001803000C03000C010008008018004010003060000FC0>22 34 -5 1 25]56 dc[<3F000041C000806000E03000F01800F00C00600E0000070000070000038000 03C00003C001F1E00309E00605E00E02F00E01F01C00F01E00F01E00F81E00781E00781E00780F 00380F00380F003807003807803803803801C03800E030007030003860000FC0>21 34 -5 1 25 ]57 dc[9 21 -6 0 15]58 dc[30 35 -3 0 36]65 dc[32 34 -3 0 34 ]66 dc[<00FE0000000381C0000006003000001C00080000180004000038000200007000010000 7000008000F000008000E000004000E000004000E000002000E000002000E000000000F0000000 00F000000000F000000000F000000000F0000000007800000000780000000078000000003C0000 08003C000004001E000004000E000004000F000004000700000E000380000E0001C0000E0000E0 000E000070001F000038002700000E006300000380810000007F0080>33 36 -7 1 35]67 dc[< FFFFF000000F801C00000780070000078001C000078000E000078000700003C000380003C0003C 0003C0001C0003C0000E0001E0000F0001E000070001E000078001E000078000F00003C000F000 03C000F00003C000F00003C000780001E000780001E000780001E000780001E0003C0001E0003C 0001E0003C0001E0003C0001C0001E0001C0001E0001C0001E000380001E000380000F00070000 0F000E00000F003C0000FFFFF000>35 34 -3 0 37]68 dc[32 34 -3 0 32]70 dc[<00FE0000000381C1000006002300001C0013800018000F 800038000780007000078000700003C000F00003C000E00003C000E00003C000E00001E000E000 01E000E00001E000F0003FFC00F000000000F000000000F000000000F000000000780000000078 0000000078000000003C000008003C000004001E000004000E000004000F000004000700000E00 0380000E0001C0000E0000E0000E000070001F000038002700000E006300000380810000007F00 80>33 36 -7 1 38]71 dc[38 34 -3 0 36]72 dc[21 34 -3 0 19]73 dc[38 34 -3 0 37]75 dc[46 34 -3 0 44]77 dc[< FFC00080001E000080000C0001C000040001C000040001C000040003C000020003E000020003E0 00020007A000020007A000010007900001000F100001000F100001001F100000801E080000801E 080000803E080000803C080000403C04000040780400004078040000407804000020F002000020 F002000020F002000021E002000011E001000011E001000013C001000013C00100000FC0008000 0F800180000F8001E000FF000FFC>38 34 -3 0 36]78 dc[32 34 -3 0 33]80 dc[<81FC0000C6070000C80180007000C00070006000600030 00600038002000180020001C0020001C0020001C0000001E0000001E0000001E0000003C000000 7C000003FC00001FF800007FF00000FFE00001FF000001F8000003E0000003C0000003C0000003 C0010003C0010001C0018001C0018000C0018000E00180006001C0003001C0001802C0000E0C40 0001F020>27 36 -3 1 27]83 dc[29 34 -9 0 35]84 dc[<01000000018000000380000003C0000003C0000003E0000003D0000003D0000003 C8000003C8000003C4000003C2000003C2000007C1000007810000078080000780400007804000 07802000078020000780100007800800078008000F8004000F8004000F0002000F0003000F0001 000F0000800F0000800F0000400F0000600F0000601F800078FFF001FF>32 35 -10 1 36]86 dc[<0C00020000000C00030000000E00030000000E00038000000F00038000000F0003C000000F 8003E000000FC003E000000F4003D000000F2003D000000F2003C800000F1003C800000F1003C4 00000F0803C400000F0807C200000F0407C200000F04078100000F02078100000F02078080000F 010780C0000F01078040000F00878020000F00C78020000F00478010000F00278010000F002780 08001F00178008001F00178004001E000F8004001E000F8002001E00078002001E00078001001E 00078001801F0007C003C0FFF03FF80FF8>45 35 -10 1 49]87 dc[<0F0780308C40305C4070 3C20701C20F01C20F00E10F00E00F00E00F00E007807007807007807003807003C03801C03800E 03800E03800705C00185C000F8C0>20 21 -5 0 25]97 dc[<1F0031C060E06070E038E038E03C E01EE01EE01E700F700F700F700F380F380738073C061E0E1D0C1CF81C000E000E000E000E0007 000700070007000380038003803F8003C0>16 35 -5 0 22]98 dc[<0FC000183000300C007002 00700100F00100F00000F00000F00000F000007800007800007800003800003C00001C07800E07 8007038003018001C100007E00>17 21 -5 0 22]99 dc[<0F0780308C40305C40703C20701C20 F01C20F00E10F00E00F00E00F00E007807007807007807003807003C03801C03800E03800E0380 0705C00185C000F9C00001C00000E00000E00000E00000E0000070000070000070000070000038 0000380000380003F800003C>22 35 -5 0 25]100 dc[<0F80306070186004E002E002E000E0 00E000E000F000F000FFE0F018780438023C021C020E02038400F8>15 21 -6 0 22]101 dc[< 3C0000620000F30000F1800071800001C00001C00000C00000E00000E00000E00000E000007000 007000007000007000007000003800003800003800003800003800001C00001C00001C00001C00 001C00000E00000E00000E0000FFF0000E00000700000700000700000700000700000380000380 00038000018600018F0000CF00004700003E>24 45 2 10 15]102 dc[<3F800060E000F03000 F01800701C00000E00000E00000E0000070000070001E700061700060B800E07800E03801E0380 1E01C01E01C01E01C01E01C00F00E00F00E00F00E00700E007807003807001C07001C07000E0B8 0030B8001F18>21 31 -2 10 22]103 dc[<6003C0E00620700610700E10700E08700708380704 3803803803803803801C01C01C01C01C01C01C01C00E00E00E00E00F00E00F00E007C0C0072180 071F0007000003800003800003800003800001C00001C00001C00001C00000E00000E00000E000 0FE00000F000>22 35 -3 0 25]104 dc[<1C00320071007080708070803840380038001C001C 001C000E000E008700870087004300430023001C000000000000000000000000000000000001C0 01C001E000C0>12 33 -5 0 15]105 dc[<600F00E01880701880703840703840703840381C20 381C003838003838001C70001FC0001E00001D80000E40000E20600E10F00E10F0070C70070210 0701E007000003800003800003800003800001C00001C00001C00001C00000E00000E00000E000 0FE00000F000>20 35 -3 0 22]107 dc[<38006400E200E200E200E200710070007000700038 003800380038001C001C001C001C000E000E000E000E0007000700070007000380038003800380 01C001C001C01FC001E0>11 35 -4 0 12]108 dc[<3003001E00700700310038038030803803 807080380380704038038038401C01C038201C01C01C001C01C01C001C01C01C000E00E00E000E 00E00E000E00E00E000E00E00E0087007007008700700700878078070087807807004760660600 2610C10C001C0F80F800>36 21 -5 0 40]109 dc[<3003C0700620380610380E10380E083807 081C07041C03801C03801C03800E01C00E01C00E01C00E01C08700E08700E08780E08780E04740 C02631C01C0F00>23 21 -5 0 27]110 dc[<07C000187000301800700C00700E00700700F007 80F00380F003C0F003C07801E07801E07801E03801E03C01E01C01E00E01C00701C003818001C3 00007E00>19 21 -5 0 25]111 dc[23 31 -1 10 25] 112 dc[<3000007000003800003800003800003800001C00001C00001C00001C00000E00000E00 000E00000E00008700008701808703C08783C04741C02620801C1F00>19 21 -5 0 21]114 dc[ <1FC000203000400800E00400F00600F00600700700000700000F00003E0003FE0007FC000FF0 000F00000C00000C03000C038004018002008001830000FC00>17 21 -3 0 20]115 dc[<1E00 3100708070407020702038103800380038001C001C001C001C000E000E000E000E0007000700FF F80700038003800380038001C001C001C001C000C0>13 31 -4 0 16]116 dc[<07C3C00C2620 1C1E201C0E10180E101C0E101C07081C07001C07001C07000E03800E03800E03800703808701C0 8701C08381C04381C04380E02300E01E0060>22 21 -5 0 26]117 dc[<03C0000C30001C0800 1C08001C04001C02001C02001C01001C01001C01000E00800E00800E00800700808700C08700C0 8381C04383C04387C02307C01E0380>19 21 -5 0 22]118 dc[<03E0F00006138C000C0F0200 1C0F01001C0701001C0700801C0700801C0700401C0700401C0700400E0380200E0380200E0380 20070380208701C0308701C0308381C0704381C0F04380E1F02300E1F01E0060E0>29 21 -5 0 32]119 dc[<383C00446200E2C100F1C080F1C04061C04000E02000E00000E00000E000007000 0070000070000070002038002038602038F0103CF008347004621003C1E0>20 21 -3 0 22] 120 dc[<3E000043800080C000E06000F03000F03800601C00001C00000E00000E0003CE000C3E 001C0F001C07001C07001C07001C03801C03801C03801C03800E01C00E01C00E01C00701C08700 E08700E08380E04380E04380702300701E0030>21 31 -5 10 24]121 dc[<80700040F80061FC 003F06001003000801000400800200000100000080000040000020000010000008000004000802 00080100041F8007F8C003F06001E020>19 21 -3 0 20]122 dc[<7070F878F87C787C3038> 14 5 -13 -29 25]127 dc dfe /fj df[30 2 -4 -11 39]0 dc[<70F8 F8F870>5 5 -4 -10 14]1 dc[<03F0000FFC001FFE003FFF007FFF807FFF80FFFFC0FFFFC0FF FFC0FFFFC0FFFFC0FFFFC0FFFFC0FFFFC07FFF807FFF803FFF001FFE000FFC0003F000>18 20 -3 -2 25]15 dc[30 39 -4 7 39]20 dc[<03F00003F8000FFE000FFC001807003F8F003001 807E03802000C0F80080400061F00040400033E0004080001FC0006080001F80002080000F8000 2080001F00002080003E00002080003F000020C0007F0000204000F98000404001F0C000402003 E0600080380FC03001801E3F801C030007FE000FFE0003F80001F800>43 21 -3 0 50]49 dc[< 0007FC00001F1F00003C0780007803C000F001E003E001E0078001E01F0001E0FC0001E0000003 C0000003C00000078000000F0000000F0000001E0000001E0000001E0201E00E0206000F041800 0708200001F0200000004000000080000000800001F08000070C80000F0280001E0280003E0040 007C004000F8002001F0001803E0000607800001FC0000>31 35 -3 0 36]61 dc[<000F003800 7000E001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C00380 07001E00F0001E000700038001C001C001C001C001C001C001C001C001C001C001C001C001C001 C001C001C001C000E000700038000F>16 49 -4 12 25]102 dc[16 49 -4 12 25]103 dc dfe /fk df[<80000000800000008000000080 000000400000004000000040000000400000002000000020000000207C0000218380001201C000 1400E000140070001400380008003C0008001C0008001E0008001E0004000F0004000F0004000F 0004000F0002000F0002000F0002000E0002000E00010FDC00010838000107FC0001000E000080 0700008003000080038000400380004001C0002001C0002001C0001001C0000801C00004018000 0201800001830000007C00>26 45 -2 10 28]12 dc[<1803001C03801C03800E07000E070006 070007070003070003060001060001820001820000820000820080C3008041004041003041003F FFFF1FFFFF07FFFF>24 21 -2 0 28]25 dc[<70F8F8F870>5 5 -4 0 14]58 dc[<4020101008 080404040474FCFCF870>6 15 -4 10 14]59 dc[<0000001800000078000001E0000007800000 1E00000078000003E000000F8000003C000000F0000003C000000F0000003C000000F0000000F0 0000003C0000000F00000003C0000000F00000003C0000000F80000003E0000000780000001E00 00000780000001E00000007800000018>29 28 -4 2 38]60 dc[17 49 -3 12 24]61 dc[<07E0001C1C00380200 300180700040700040F00000F00000F00000F000007800007800007800003C00003C00001C03C0 0E03C00701C00380C000E080003F00>18 21 -2 0 21]99 dc[<0F01C018C620302620701E1070 0E10F00E10F00708F00700F00700F007007803807803807803803803803C01C01C01C00E01C006 01C00302E001C4E00078E00000E000007000007000007000007000003800003800003800003800 001C00001C00001C0001FC00001E>23 35 -2 0 25]100 dc[<3C00000062000000F1000000F1 80000070C0000000C0000000E0000000E0000000E0000000600000007000000070000000700000 007000000038000000380000003800000038000000380000001C0000001C0000001C0000001C00 00001C0000000E0000000E0000000E0000000E0000000E0000000E000000FFF800000700000007 0000000700000007000000038000000380000003800000038000000180000001C3000001C78000 00C7800000638000001E00>25 45 -2 10 24]102 dc[<1E003100308070407040384038203800 1C001C000E000E000E0007008700838083804380438023001E0000000000000000000000000000 000000000000C001E000E000E0>12 34 -2 0 17]105 dc[<3E0000630000F18000F0C00070E0 00007000007000007000003800003800003800003800001C00001C00001C00001C00000E00000E 00000E00000E00000700000700000700000700010380010380010380008380004380002300001E 000000000000000000000000000000000000000000000000000000000000C00001E00001E00000 E0>19 44 1 10 20]106 dc[<3000C003C07001C006203800E006103800E00E083800E00E0838 00E007081C007007041C007007001C007003801C007003800E003801C00E003801C00E003801C0 0E003801C087001C00E087801C00E087801E00E087401D00E047201880C046183061803C07E01F 00>39 21 -2 0 43]109 dc[<3000F000700188003801840038038200380382003801C2001C01 C1001C01C0001C00E0001C00E0000E0070000E0070000E0070000E007000870038008700380087 8038008740380047203000461860003C07C000>25 21 -2 0 29]110 dc[<0FE0003018004004 00E00200F00300F00300700380000380000780003F0001FF0003FE0007F8000700000600000603 00060380020180030080008100007E00>17 21 -2 0 23]115 dc[<01F03E000708E1000C04C0 C01C03C0401C01C0201C01C0101C01C0101C01C0081C01C0081C01C0080E00E0040E00E0040E00 E0040700E00487007006838070068380700E4380701E4380383E2300383C1E001818>32 21 -2 0 35]119 dc[<3C1F00423080E17040F0E020F0E01060E0100070080070000070000070000038 00003800003800003800201C00201C18201C3C101A3C081A1C06310C01E0F0>22 21 -2 0 28] 120 dc[<80780040FC0061FE003F830010018008008004004002000001000000C0000020000010 00000800000400000200080100080080060FC007F86003F02000E010>20 21 -2 0 23]122 dc dfe /fl df[<7FE3FF800700780007007000070070000700700007007000070070000700700007 007000070070000700700007007000070070000700700007007000070070000700700007007000 0700700007007000FFFFFFC0070070000700700007007000070070000700700007007000070070 0007007000070070000380F0780180F87800C07C7800706E30001F83E0>29 35 0 0 28]11 dc[ <7FE1FF8007003800070038000700380007003800070038000700380007003800070038000700 380007003800070038000700380007003800070038000700380007003800070038000700380007 007800FFFFF8000700000007000000070000000700000007000000070000000700000007003000 07007800038078000180380000C0100000702000001FC000>25 35 0 0 27]12 dc[<7FF3FF80 070038000700380007003800070038000700380007003800070038000700380007003800070038 00070038000700380007003800070038000700380007003800070038000700380007003800FFFF F80007003800070038000700380007003800070038000700380007003800070038000700380003 8078000180780000C0780000703800001FD800>25 35 0 0 27]13 dc[<7FF1FFCFFE07001C00 E007001C00E007001C00E007001C00E007001C00E007001C00E007001C00E007001C00E007001C 00E007001C00E007001C00E007001C00E007001C00E007001C00E007001C00E007001C00E00700 1C00E007001C00E007001C01E0FFFFFFFFE007001C000007001C000007001C000007001C000007 001C000007001C000007001C000007001C00C007003C01E003803E01E001801E00E000E00B0040 007031C080000FC07F00>39 35 0 0 41]14 dc[<70F8F8F87000000000002020202020207070 70707070707070707070F8F8F8F8F8F8F870>5 36 -4 0 14]33 dc[<40202010100810080804 08040402040204020402743AFC7EFC7EF87C7038>15 15 -2 -20 24]34 dc[<40201010080804 04040474FCFCF870>6 15 -4 -20 14]39 dc[<00200040008001000300060004000C000C0018 0018003000300030007000600060006000E000E000E000E000E000E000E000E000E000E000E000 E000E000E0006000600060007000300030003000180018000C000C000400060003000100008000 400020>11 50 -4 13 19]40 dc[<800040002000100018000C00040006000600030003000180 0180018001C000C000C000C000E000E000E000E000E000E000E000E000E000E000E000E000E000 E000C000C000C001C0018001800180030003000600060004000C0018001000200040008000>11 50 -3 13 19]41 dc[<0001800000018000000180000001800000018000000180000001800000 0180000001800000018000000180000001800000018000000180000001800000018000FFFFFFFE FFFFFFFE0001800000018000000180000001800000018000000180000001800000018000000180 0000018000000180000001800000018000000180000001800000018000>31 34 -3 5 38]43 dc [<4020101008080404040474FCFCF870>6 15 -4 10 14]44 dc[11 2 -1 -10 16] 45 dc[<70F8F8F870>5 5 -4 0 14]46 dc[<01F000071C000C06001C07003803803803807803 C07001C07001C07001C0F001E0F001E0F001E0F001E0F001E0F001E0F001E0F001E0F001E0F001 E0F001E0F001E0F001E0F001E07001C07001C07001C07001C03803803803801803000C0600071C 0001F000>19 34 -2 1 24]48 dc[15 33 -4 0 24]49 dc[19 33 -2 0 24]50 dc[<03F0000C1C00100F002007804007804003C0F003C0F803E0F803E07003E020 03E00003E00003C00003C0000780000780000F00001C0003F000003800000E00000F0000070000 07800007803807C07807C07803C07807C04007C02007801007000C1E0003F800>19 34 -2 1 24 ]51 dc[<01FFF0001F00000E00000E00000E00000E00000E00000E00000E00FFFFF8800E00400E 00200E00200E00100E00100E00080E00040E00040E00020E00020E00010E00008E00008E00004E 00004E00002E00001E00001E00000E00000E00000600000200>21 33 -1 0 24]52 dc[<03F000 0C1C001006002007004003804003C08001C0E001C0F001E0F001E07001E00001E00001E00001E0 0001E00001C00001C0100380180380140700130E0010F800100000100000100000100000100000 10000013E0001FF8001FFE001FFF001E0700100080>19 34 -2 1 24]53 dc[<01F000070C000C 06001C03001803803801C03801C07001E07001E07001E0F001E0F001E0F001E0F001E0F001E0F0 01C0F801C0F80380F40300F40600F30C00F0F8007000007000007800003800003800001801801C 03C00E03C00601C003008001C100007E00>19 34 -2 1 24]54 dc[<01800003C00003C00003C0 0003C00003C00003C00003C00003C00001C00001C00001C00001C00000C00000C00000E0000060 00006000006000002000003000001000000800000800000400800200800200800100C001004000 807FFFC07FFFC07FFFE0600000400000>19 35 -3 1 24]55 dc[<03F0000E0E00180300300080 6000C0600040C00060C00060C00060C00060C000E06000E06001C03007C0100F80083F80067F00 03FC0003F8000FF8001FC4003F02003E01007801807000C06000C06000C06000C02000C0200180 100180080300060E0001F800>19 34 -2 1 24]56 dc[<0FC000103000201800700C0078060078 07003003000003800003800001C00001C00001C003E1E00619E00C05E01805E03803E07003E070 01E0F001E0F001E0F001E0F001E0F001E0F001C0F001C0F001C07003807003803803801807000C 0600060C0001F000>19 34 -2 1 24]57 dc[<70F8F8F870000000000000000000000070F8F8F8 70>5 21 -4 0 14]58 dc[<4040201010100808080878F8F8F870000000000000000000000070 F8F8F870>5 31 -4 10 14]59 dc[31 12 -3 -6 38]61 dc[32 35 -2 0 37]65 dc[29 34 -2 0 35]66 dc[<0007E00000381C0000E0020001C0010003 800080070000400E0000401E0000201C0000203C0000103C0000107C0000107800001078000000 F8000000F8000000F8000000F8000000F8000000F8000000F8000000F800000078000010780000 107C0000103C0000303C0000301C0000301E0000700E000070070000F0038000F001C0017000E0 0630003818300007E010>28 36 -3 1 35]67 dc[31 34 -2 0 37]68 dc[29 34 -2 0 33] 69 dc[27 34 -2 0 32]70 dc[<0007F00000 3C0C0800E0031801C000B8038000B8070000780F0000781E0000781E0000783C0000783C000078 7C00007878000078780000F8F8001FFFF8000000F8000000F8000000F8000000F8000000F80000 00F800000078000008780000087C0000083C0000183C0000181E0000181E0000380F0000380700 0078038000F801C001B800E00218003C0C180007F008>32 36 -3 1 38]71 dc[32 34 -2 0 37]72 dc[14 34 -2 0 18]73 dc[<07C000187000203800401C00F01E 00F80E00F80F00F80F00700F00000F00000F00000F00000F00000F00000F00000F00000F00000F 00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F 00000F00000F00001F0003FFF0>20 35 -2 1 25]74 dc[ 33 34 -2 0 38]75 dc[25 34 -2 0 30]76 dc[40 34 -2 0 45]77 dc[32 34 -2 0 37]78 dc[<000FE00000783C0000E00E0003C00780078003C00F 0001E00F0001E01E0000F03E0000F83C0000787C00007C7C00007C7800003CF800003EF800003E F800003EF800003EF800003EF800003EF800003EF800003EF800003E7800003C7800003C7C0000 7C7C00007C3C0000783C0000781E0000F00E0000E00F0001E0078003C003C0078000E00E000078 3C00000FE000>31 36 -3 1 38]79 dc[27 34 -2 0 33]80 dc[<0000007C00FFFC01E2000FC003C100078007C08007800FC08007800F808007 800F800007800F800007800F800007800F000007800F000007800F000007800F000007800E0000 07801E000007801C00000780380000078070000007FFE0000007803C000007800E000007800780 00078007C000078003C000078003E000078003E000078003E000078003E000078003E000078003 C000078007C000078007800007800E00000F803C0000FFFFE00000>33 35 -2 1 36]82 dc[<81 FC00C60700C80180F000C0E000C0C00060C000608000708000708000708000700000700000F000 00F00001E00007E0003FC003FF800FFF001FFE003FF0007F0000780000F00000F00000E00020E0 0020E00020E00060E000606000607000E03001E01802600C0C6003F020>20 36 -3 1 27]83 dc [<03FFFF00000FC000000780000007800000078000000780000007800000078000000780000007 800000078000000780000007800000078000000780000007800000078000000780000007800000 07800000078000000780000007800080078004800780048007800480078004C007800C40078008 400780084007800860078018780780787FFFFFF8>30 34 -2 0 35]84 dc[<0003F000001C0800 003006000060010000E0008001C0008003C0004003C00040038000400780002007800020078000 200780002007800020078000200780002007800020078000200780002007800020078000200780 002007800020078000200780002007800020078000200780002007800020078000200780002007 800020078000700FC000F8FFFC07FF>32 35 -2 1 37]85 dc[<0000C000000000C000000000C0 00000001E000000001E000000003F000000003D000000003D0000000078800000007880000000F 8C0000000F040000000F040000001F020000001E020000001E020000003C010000003C01000000 7C0180000078008000007800800000F000400000F000400000F000400001E000200001E0002000 03E000300003C000100003C0001000078000080007800008000780000C000F00000C001F80001F 00FFF0007FC0>34 35 -1 1 37]86 dc[<00020000800000030001800000070001C00000070001 C00000070001C000000F8003E000000F8003E000000F8003E000001E40079000001E4007900000 1E40079000003C200F0800003C200F0800003C200F0800007C101E04000078101E04000078101E 040000F8183E060000F0083C020000F0083C020000F0083C020001E00478010001E00478010001 E00478010003C002F0008003C002F0008003C002F00080078001E00040078001E00040078001E0 00400F0003C000200F0003C000200F0003C000701F8007E000F8FFF03FFC03FE>47 35 -1 1 50 ]87 dc[<003FFF00000003E000000001E000000001E000000001E000000001E000000001E00000 0001E000000001E000000001E000000001E000000001E000000001E000000001E000000003E000 000003D000000007D800000007880000000F840000001F040000001E020000003E010000003C01 0000007C00800000F800C00000F000400001F000200001E000200003E000100007C00018000780 0008000F80000C001F80001F00FFF0007FC0>34 34 -1 0 37]89 dc[24 34 -3 0 30]90 dc[7 49 -5 12 14]91 dc[<381C7C3EFC7EFC7EB85C8040804080408040402040202010201010080804>15 15 -6 -20 24]92 dc[7 49 -1 12 14]93 dc[<0FC1E03C23907817 08F00F08F00708F00708F007087007007807003C07001E070007C70000FF000007000007000007 001807003C0E003C0C001838000FE000>21 21 -2 0 24]97 dc[<083F000C41C00C80600F0070 0E00380E003C0E001C0E001E0E001E0E001E0E001E0E001E0E001E0E001E0E001C0E003C0E0038 0F00300E80600E61C00E1F000E00000E00000E00000E00000E00000E00000E00000E00000E0000 0E00000E00001E0000FE00000E0000>23 35 -1 0 27]98 dc[<01F8000706000C01001C008038 0040780040700000F00000F00000F00000F00000F00000F00000F000007000007800003803001C 07800C078007030001FE00>18 21 -2 0 22]99 dc[<01F0FE070CF00C02E01801E03800E07800 E07000E0F000E0F000E0F000E0F000E0F000E0F000E0F000E07000E07800E03800E01C01E00C02 E00704E001F8E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000 E00001E0000FE00000E0>23 35 -2 0 27]100 dc[<00FC000703000E00801C00403800207800 20700000F00000F00000F00000F00000F00000FFFFE0F000E07000E07801E03801C01C01C00C03 8007070001FC00>19 21 -1 0 22]101 dc[<7FF8078007000700070007000700070007000700 0700070007000700070007000700070007000700FFF80700070007000700070007000700070007 00030F038F018F00C6003C>16 35 0 0 15]102 dc[<03FE000E03803800E0600030600030C000 18C00018C000184000186000303800F00FFFE00FFFC01FFE0018000018000010000010000019F0 000F1C000E0E001C07001C07003C07803C07803C07803C07801C07001C07000E0E18071E1801F1 98000070>21 33 -1 11 24]103 dc[24 35 -1 0 27]104 dc[10 34 -1 0 14]105 dc[<3E006180F180F0C060E000E000E000E000E000E000 E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E001E00FE0 01E00000000000000000000000000000000001C003E003E003E001C0>11 44 2 10 15]106 dc[ 23 35 -1 0 26]107 dc[ 11 35 -1 0 14 ]108 dc[39 21 -1 0 42 ]109 dc[24 21 -1 0 27]110 dc[<01FC000707000E03801C01C03800E07800F0700070F00078F00078F00078F00078F00078F0 0078F000787000707000703800E01800C00C018007070001FC00>21 21 -1 0 24]111 dc[23 31 -1 10 27]112 dc[<000FFE0000E00000E00000E000 00E00000E00000E00000E00000E00000E001F0E0070CE00C02E01C01E03801E07800E07000E0F0 00E0F000E0F000E0F000E0F000E0F000E0F000E07800E07800E03801E01C01600E026007046001 F820>23 31 -2 10 26]113 dc[16 21 -1 0 19]114 dc[<8FC0D030E018C008C00C 800C800C801C003C01F80FF03FE07F80F000E008C008C008C018601830780F88>14 21 -2 0 19 ]115 dc[<01F0030807080E040E040E040E040E040E040E000E000E000E000E000E000E000E00 0E000E000E00FFF83E001E000E000600060006000200020002000200>14 31 -1 0 19]116 dc[ <00FC7F0382780601700E00F00E00F00E00700E00700E00700E00700E00700E00700E00700E00 700E00700E00700E00700E00700E00701E00F0FE07F00E0070>24 21 -1 0 27]117 dc[<0010 0000380000380000380000740000740000E20000E20000E20001C10001C1000380800380800380 800700400700400E00200E00200E00301E0078FFC1FE>23 21 -1 0 26]118 dc[<0060060000 6006000060060000F00F0000F00F0000F00D0001C81C8001C81C8001C818800384384003843840 038430400702702007027020070260200E01E0100E01E0100E01C0181C01C0181E01E03CFF8FF8 FF>32 21 -1 0 35]119 dc[23 21 -1 0 26]120 dc[<3C0000430000F18000F08000F040000040000020000020000020000010 0000100000380000380000380000740000740000E20000E20000E20001C10001C1000380800380 800380800700400700400E00200E00200E00301E0078FFC1FE>23 31 -1 10 26]121 dc[18 21 -1 0 22]122 dc[23 1 0 -12 24]123 dc[48 1 0 -12 49]124 dc[<7070F8F8F8F8F8F87070>13 5 -5 -29 24]127 dc dfe /fm df[17 3 -2 -11 22]45 dc[<70F8F8F8 70>5 5 -8 0 22]46 dc[<00FC0003FF000FFFC01F03C03E3C003C7E0078FF0071E780F1C380E3 C3C0E381C0E381C0E381C0E381C0E381C0E3C3C0F1C3C071E7C078FFC03C7F803E3F801F0F800F FF0003FE0000F800>18 25 -2 0 22]64 dc[<0F83E03FE7E07FFFE0F83E00F01E00E00E00E00E 00F00E007E0E001FFE0003FE00000E00000E00301E00783C007FFC007FF8001FE000>19 18 -2 0 22]97 dc[<03F00FFC1FFE3E0F78077007F000E000E000E000E000F0007000780C3C1E1FFE0F FE03F8>16 18 -3 0 22]99 dc[<07C7E01FF7F03FFFE07C3F00781F00F00F00F00700E00700E0 0700E00700E00700F00700F00700780F003C1F003FFF000FF70003C70000070000070000070000 0700003F00007F00003F00>20 25 -1 0 22]100 dc[<03F00FFC1FFE3C0F78077007E000E000 FFFFFFFFFFFFE0077007780E3C1E1FFC0FF803E0>16 18 -3 0 22]101 dc[<03F8000FFE003F FF807C07C0F001E0E000E0E000E0E000E0F001E07803C03FFFC01FFF001FFC003800003800003B E0001FF8001FFC001E3C003C1E00380E00380E00380E003C1E001E3CC01FFFE00FFFE003E3C0> 19 28 -1 10 22]103 dc[<7FFFFFFF7FFF01C001C001C001C001C001C001C001C001C001C001 C001C07FC07FC07FC00000000000000000018003C003C00180>16 26 -3 0 22]105 dc[17 25 -2 0 22]108 dc[<7FC7F0FFE7F87FC7F00E03800E03800E03800E03800E03800E03800E03800E03 800E03800F03800F03800F87807FFF80FEFF007E3C00>21 18 0 0 22]110 dc[<03E0000FF800 1FFC003C1E00780F00700700F00780E00380E00380E00380E00380E00380700700780F003C1E00 1FFC000FF80003E000>17 18 -2 0 22]111 dc[<7FC000FFE0007FC0000E00000E00000E0000 0E00000E00000E00000E3C000EFF000FFFC00F83C00F01E00F00E00E00F00E00700E00700E0070 0E00700E00F00E00F00F01E00F83E07FFFC0FEFF807E3E00>20 27 0 9 22]112 dc[19 18 -1 0 22]114 dc[15 18 -3 0 22]115 dc[<00F80003FE0003 FF00078780070780070380070380070100070000070000070000070000070000070000070000FF FF00FFFF007FFF00070000070000070000070000030000>17 23 -1 0 22]116 dc[<00E00001 F00001F00003B80003B80003B800071C00071C00071C00071C000E0E000E0E000E0E001E0F001C 07007F1FC0FF1FE07F1FC0>19 18 -1 0 22]118 dc[<0F1E000F1E000F1E001DB7001DB7001D B7001DB70019B30019F30019F30038E380380380380380380380380380FF1FE0FFBFE0FF1FE0> 19 18 -1 0 22]119 dc[<3C00003F00007F80007BC00079C00001C00000E00000E00000E00000 F00000F00000F00001B80001B800039800039C00039C00071C00071C00070E000E0E000E0E000E 07001C07007F1FC0FF9FE07F1FC0>19 27 -1 9 22]121 dc dfe /fn df[<0180018001800180 4182F18F399C0FF003C003C00FF0399CF18F41820180018001800180>16 18 -2 -1 21]3 dc dfe /fo df[<804020101008080868F8F060>5 12 -4 -17 12]39 dc[<004000800100020006 000C000C0018001800300030007000600060006000E000E000E000E000E000E000E000E000E000 E000E000E000600060006000700030003000180018000C000C0006000200010000800040>10 42 -3 11 16]40 dc[<800040002000100018000C000C000600060003000300038001800180018001 C001C001C001C001C001C001C001C001C001C001C001C001800180018003800300030006000600 0C000C0018001000200040008000>10 42 -2 11 16]41 dc[<804020201010101070F0F060>4 12 -4 8 12]44 dc[<60F0F060>4 4 -4 0 12]46 dc[13 28 -4 0 21]49 dc[<07E01830201C401CF00EF80FF80FF80F700F000F000F000E001C00 1C003007E0006000300018001C001C381E781E780E781E201C201C183007E0>16 29 -2 1 21] 51 dc[<01FFC0001C00001C00001C00001C00001C00001C00001C00FFFFC0C01C00401C00201C 00301C00101C00081C000C1C00041C00021C00031C00011C00009C0000DC00005C00003C00003C 00001C00000C00000C00>18 28 -1 0 21]52 dc[<07C018702038401C401E800EF00FF00FF00F 600F000F000F000F000E200E301C2818243023E02000200020002000200020003FC03FF03FF830 0C>16 29 -2 1 21]53 dc[<07E01C10300C60046002C003C003C003C003C007600F601E307E18 FC07F807F01FE03FB03E08780C70066006600660062006200C10080C3003E0>16 29 -2 1 21] 56 dc[28 29 -1 0 31]65 dc[24 28 -2 0 29]66 dc[<001FC00000E03000 01800800070004000E0002001C0001001C00010038000080780000807800008070000080F00000 00F0000000F0000000F0000000F0000000F0000000F0000000F000000070000080780000807800 0080380001801C0001801C0003800E000380070007800180198000E06180001F8080>25 30 -2 1 30]67 dc[12 28 -1 0 15]73 dc[21 28 -2 0 26]76 dc[33 28 -2 0 38]77 dc[26 28 -2 0 31]78 dc[<003F800000E0E0000380380007001C000E000E001C0007003C 00078038000380780003C0780003C0700001C0F00001E0F00001E0F00001E0F00001E0F00001E0 F00001E0F00001E0F00001E0700001C0780003C0780003C0380003803C0007801C0007000E000E 0007001C000380380000E0E000003F8000>27 30 -2 1 32]79 dc[<03FFFC00001F8000000F00 00000F0000000F0000000F0000000F0000000F0000000F0000000F0000000F0000000F0000000F 0000000F0000000F0000000F0000000F0000000F0000000F0000800F0020800F0020800F0020C0 0F0020400F0040400F0040600F00C0700F01C07FFFFFC0>27 28 -1 0 30]84 dc[<001F000000 70C00000C02000018010000380100007800800070008000F0004000F0004000F0004000F000400 0F0004000F0004000F0004000F0004000F0004000F0004000F0004000F0004000F0004000F0004 000F0004000F0004000F0004000F0004000F0004000F0004000F000E00FFF07FC0>26 29 -2 1 31]85 dc[<001800180000180018000018001800003C003C00003C003C00003C003C00003E007C 00007A007A00007A007A00007900FA0000F100F10000F100F10000F100F10001E081E08001E081 E08001E081E08003E043C04003C043C04003C043C04003C0278040078027802007802780200780 1F00200F001F00100F001F00100F001F00101E001E00181F001F003CFFE0FFE0FF>40 29 -1 1 43]87 dc[<007FF800000780000007800000078000000780000007800000078000000780000007 8000000780000007800000078000000FC000000F4000001F2000001E2000003C1000007C180000 78080000F8040000F0040001F0020003E0020003C0010007C00180078000800F8001E0FFF007FC >30 28 0 0 31]89 dc[<1F8700304E80603C40E01C40E01C40E01C40601C00701C00381C000F 1C0001FC00001C00001C00301C00781C007838003070001FC000>18 18 -2 0 21]97 dc[<10F8 001906001E03001C01801C01C01C00C01C00E01C00E01C00E01C00E01C00E01C00E01C00C01C01 C01C01801E03001D86001C7C001C00001C00001C00001C00001C00001C00001C00001C00001C00 001C0000FC0000>19 29 -1 0 23]98 dc[<07C00C301808300470046000E000E000E000E000E0 00E00060007030307818780C3007E0>14 18 -2 0 18]99 dc[<07C7E00C3700180F0030070070 0700600700E00700E00700E00700E00700E00700E00700600700700700300700180F000C170003 E700000700000700000700000700000700000700000700000700000700000700003F00>19 29 -2 0 23]100 dc[<03E00C181804300270026000E000E000E000E000FFFEE0066006700E300C18 180C3003E0>15 18 -1 0 18]101 dc[<7FE00E000E000E000E000E000E000E000E000E000E00 0E000E000E000E000E000E00FFE00E000E000E000E000E000E000E0C061E071E018C00F8>15 29 0 0 13]102 dc[<07F8001C0E00300300600180C000C0C000C0C000C06001C03003801FFF801F FF001FF80018000030000010000013C0000C30001C3800181800381C00381C00381C00381C0018 18001C38800C38C003C4C0000380>18 28 -1 9 21]103 dc[20 29 -1 0 23]104 dc[9 29 -1 0 12]105 dc[19 29 -1 0 22]107 dc[9 29 -1 0 12]108 dc[33 18 -1 0 36]109 dc[20 18 -1 0 23]110 dc[<03F0000E1C0018060030030070038060 0180E001C0E001C0E001C0E001C0E001C0E001C06001807003803003001806000E1C0003F000> 18 18 -1 0 21]111 dc[19 26 -1 8 23]112 dc[13 18 -1 0 16]114 dc[<8FC0D060E010C0 18C0188018803800F80FF03FE07F80F800E010C010C010403030701F90>13 18 -1 0 16]115 dc[<03C00E200C101C101C101C101C101C101C001C001C001C001C001C001C001C001C00FFE03C 001C000C000C000400040004000400>12 26 -1 0 16]116 dc[<03E3F00E1B800C07801C0780 1C03801C03801C03801C03801C03801C03801C03801C03801C03801C03801C03801C03801C0380 FC1F80>20 18 -1 0 23]117 dc[<00400000E00000E00000E00001D00001D00003D800038800 0388000704000704000704000E02000E02001C01001C01003C0380FF07E0>19 18 -1 0 22] 118 dc[<008020000180300001C0700001C0700003C0680003A0E80003A0E8000720C4000711C4 000711C4000E1182000E0B82000E0B82001C0B01001C0701001C0701803C0F0380FF3FCFE0>27 18 -1 0 30]119 dc[21 18 0 0 22]120 dc[<3C0000 660000F30000F10000F0800000800000800000400000400000E00000E00000E00001D00001D000 03D8000388000388000704000704000704000E02000E02001C01001C01003C0380FF07E0>19 26 -1 8 22]121 dc dfe /fp df[20 2 -3 -7 27]0 dc dfe /fq df[<800000 80000080000080000040000040000043E000441800280C00300600300300300300100180100180 100180100180080180080100083E00083F000401800400800400C00200C001006000804000C0C0 003080000F00>19 29 -1 6 20]12 dc[<7800C600E3006300018001800180018000C000C000C0 00C0006000600060086004300430022001C0000000000000000000000000001000380018>13 29 0 6 14]106 dc[<300F00300880181880181840180C40180C000C0C000C06000C06008E060046 020047020044C600383C00>18 14 -1 0 21]110 dc[<81C043E03C3010080808040002000180 00400020101018780FCC0784>14 14 -1 0 16]122 dc dfe /fr df[<07C01C703018701C600C 600CE00EE00EE00EE00EE00EE00EE00EE00EE00E600C600C701C3018183007C0>15 21 -1 0 18 ]48 dc[<7FF0070007000700070007000700070007000700070007000700070007000700070007 00FF0007000300>12 21 -2 0 18]49 dc[13 21 -2 0 18]50 dc[<0FE030304018C0 0CE00EE00E000E000E000C0018003007E0006000380018001C701C701C601830300FE0>15 21 -1 0 18]51 dc[<03FE00700070007000700070FFFEC070407020701070187008700470027001 7001F000F0007000300030>15 21 -1 0 18]52 dc[<1F0020C040608030E038E0384038003800 380030207030E02F80200020002000200024003FC03FE02030>13 21 -2 0 18]53 dc[<07C018 303018300C600E600EE00EE00EE00EF00CF018EC30E3E0E00060007000301C181C080C060801F0 >15 21 -1 0 18]54 dc[<04000E000E000E000E000E0006000600020003000100010000800080 004080208010C0087FF87FFC7FFE4000>15 22 -2 0 18]55 dc[22 10 -2 -3 27]61 dc dfe /fs df[<04000400 0400C460E4E03F800E003F80E4E0C460040004000400>11 13 -2 -1 17]3 dc dfe /ft df[< FFC00C000C000C000C000C000C000C000C000C000C000C000C000C000C000C00EC001C000C00> 10 19 -3 0 17]49 dc[12 19 -2 0 17]50 dc[<1FC06070E038F018F01C601C001C00180038 00700FC000E00030003870387038703830700FC0>14 19 -1 0 17]51 dc dfe /fu df[<7800 CC0046000300030003000300018001800180018000C008C008C004C00380000000000000000000 0000200020>11 23 0 5 13]106 dc dfe /fv df[<1F00318060C04040C060C060C060C060C0 60C060C060C060404060C031801F00>11 16 -1 0 15]48 dc dfe end %%EndProlog %%BeginSetup %%Feature: *Resolution 300 TeXDict begin @letter %%EndSetup %%Page: 1 1 bop 192 243 a fc(Sc)n(h)n(w)n(arz-Christo\013el)29 b(T)-7 b(o)r(olb)r(o)n (x)31 b(User's)d(Guide)830 391 y ff(V)-5 b(ersion)19 b(1.3)749 508 y(T)-5 b (obin)20 b(A.)g(Driscoll)1203 486 y fn(\003)0 801 y fd(1)83 b(In)n(tro)r(duct\ ion)0 911 y fl(The)24 b(Sc)o(h)o(w)o(arz-Christo\013el)f(T)l(o)q(olb)q(o)o (x)i(\(SC)e(T)l(o)q(olb)q(o)o(x\))i(is)f(a)g(collection)e(of)i(\014les)f(for) h(the)f(in)o(teractiv)o(e)0 971 y(computation)15 b(and)h(visualization)f(of)i (Sc)o(h)o(w)o(arz-Christo\013el)e(conformal)g(maps)g(in)g(MA)l(TLAB)1766 953 y fr(1)1801 971 y fl(v)o(ersion)0 1031 y(4.)21 b(The)14 b(to)q(olb)q(o)o(x)g (is)g(a)g(descendan)o(t)g(of)g(SCP)l(A)o(CK,)f(a)h(F)l(ortran)h(pac)o(k)m(age) f(dev)o(elop)q(ed)f(b)o(y)g(L.)h(N.)f(T)l(refethen)0 1091 y(in)h(the)f(early) g(1980's)i([16)q(].)20 b(Ho)o(w)o(ev)o(er,)12 b(the)h(SC)i(T)l(o)q(olb)q(o)o (x)g(has)f(b)q(een)g(written)f(en)o(tirely)f(in)h(the)h(MA)l(TLAB)0 1151 y (language,)i(requires)e(no)i(programming)d(b)o(y)i(the)g(user,)g(and)h(has)g (man)o(y)d(capabilities)h(not)i(in)f(SCP)l(A)o(CK.)0 1296 y fe(The)22 b(probl\ em)0 1388 y fl(The)14 b(Sc)o(h)o(w)o(arz-Christo\013el)g(form)o(ula)e(is)i (a)g(recip)q(e)g(for)g(a)g(conformal)f(map)g fk(f)20 b fl(from)13 b(the)h(upp) q(er)g(half-plane)0 1448 y(to)j(the)f(in)o(terior)f(of)h(a)h(p)q(olygon)g(in) f(the)g(complex)f(plane.)21 b(The)16 b(\\p)q(olygon")i(ma)o(y)d(ha)o(v)o(e)g (slits)h(or)h(v)o(ertices)0 1509 y(at)22 b(in\014nit)o(y)l(,)e(and)i(can)g (b)q(e)f(c)o(haracterized)f(b)o(y)h(t)o(w)o(o)g fk(n)p fl(-v)o(ectors:)31 b fk (w)q fl(,)22 b(whic)o(h)f(con)o(tains)g(the)g(v)o(ertices)e(in)0 1569 y(p)q (ositiv)o(ely-orien)o(ted)h(order,)k(and)f fk(\014)s fl(,)g(whic)o(h)e(descri\ b)q(es)h(the)g(corresp)q(onding)i fi(turning)g(angles)t fl(.)41 b(The)0 1629 y (pre-images)14 b(of)h(the)f(v)o(ertices,)f(or)j fi(pr)n(evertic)n(es)t fl(,)e (are)h(real)g(and)g(denoted)g(b)o(y)f(the)h(v)o(ector)f fk(x)p fl(.)20 b(They) 15 b(satisfy)710 1739 y fk(x)738 1746 y fr(1)771 1739 y fk(<)f(x)851 1746 y fr (2)884 1739 y fk(<)g fj(\001)8 b(\001)g(\001)14 b fk(<)g(x)1088 1746 y fq(n) 1125 1739 y fl(=)g fj(1)p fk(:)0 1849 y fl(Figure)i(1)g(illustrates)g(these)g (de\014nitions.)73 1909 y(If)23 b(v)o(ertex)e fk(w)318 1916 y fq(j)359 1909 y fl(is)i(\014nite,)g fk(\014)589 1916 y fq(j)607 1909 y fk(\031)h fl(is)f(the) g(exterior)f(turning)h(angle)g(of)g(the)f(p)q(olygon)i(at)g fk(w)1752 1916 y fq(j)1770 1909 y fl(,)g(with)f(a)0 1969 y(min)o(us)17 b(sign)h(for)h(left)e (\(coun)o(terclo)q(c)o(kwise\))f(turns.)28 b(If)18 b fk(w)1061 1976 y fq(j) 1097 1969 y fl(is)g(in\014nite,)f fk(\014)1357 1976 y fq(j)1375 1969 y fk(\ \031)j fl(is)e(equal)g(to)g fj(\000)p fl(2)p fk(\031)i fl(plus)e(the)0 2030 y (exterior)c(angle)h(at)h(the)f(in)o(tersection)f(of)h(the)g(t)o(w)o(o)g(semi-\ in\014nite)e(p)q(olygon)j(sides)f(as)h(they)f(are)g(extended)0 2090 y(a)o(w)o (a)o(y)h(from)f(in\014nit)o(y)l(.)20 b(This)c(is)g(consisten)o(t)g(with)g(the) g(in)o(terpretation)f(of)h(\\turn.")22 b(See)16 b(Figure)g(1)g(for)h(an)0 2150 y(example.)j(Note)c(that)h(if)f fk(w)515 2157 y fq(j)549 2150 y fl(is)h(\014n\ ite,)e(then)h fj(\000)p fl(1)f fk(<)f(\014)1006 2157 y fq(j)1038 2150 y fj (\024)g fl(1,)j(with)f(equalit)o(y)f(at)i(the)f(end)g(of)h(a)g(slit,)e(and)0 2210 y(if)j fk(w)82 2217 y fq(j)119 2210 y fl(=)g fj(1)p fl(,)h(then)g fj(\ \000)p fl(3)g fj(\024)f fk(\014)539 2217 y fq(j)575 2210 y fj(\024)g(\000)p fl (1.)29 b(F)l(urthermore,)18 b(the)g(p)q(ositiv)o(e)h(orien)o(tation)f(implies) f(that)i(if)f(the)0 2270 y(target)f(region)f(is)g(the)g(p)q(olygon's)h(in)o (terior,)e(then)h(necessarily)866 2352 y fq(n)847 2365 y fb(X)846 2456 y fq (j)r fr(=1)916 2406 y fk(\014)944 2413 y fq(j)975 2406 y fl(=)e fj(\000)p fl (2)p fk(:)0 2501 y 780 2 v 56 2531 a fs(\003)75 2546 y fo(Cen)o(ter)g(for)e (Applied)g(Mathematics,)g(Cornell)g(Univ)o(ersit)o(y)m(,)g(Ithaca,)h(NY)g(148\ 53)e(\()p fm(driscoll@na-net.orn)o(l.go)o(v)p fo(\).)56 2581 y ft(1)75 2596 y fo(MA)m(TLAB)j(is)f(a)h(registered)i(trademark)d(of)g(The)h(MathW)m(orks,)f (Inc.)963 2795 y fl(1)g eop %%Page: 2 2 bop 0 958 a SDict /PsFragDict get begin /PsFragNoShowStrings [] def /PsFragNewShow true def end SDict /PsFragDict get begin /PsFragNoShowStrings [PsFragNoShowStrings aload pop (w5)] def end SDict /PsFragDict get begin /PsFragNoShowStrings [PsFragNoShowStrings aload pop (b5)] def end SDict /PsFragDict get begin /PsFragNoShowStrings [PsFragNoShowStrings aload pop (w6)] def end SDict /PsFragDict get begin /PsFragNoShowStrings [PsFragNoShowStrings aload pop (b6)] def end SDict /PsFragDict get begin /PsFragNoShowStrings [PsFragNoShowStrings aload pop (w13)] def end SDict /PsFragDict get begin /PsFragNoShowStrings [PsFragNoShowStrings aload pop (b1)] def end SDict /PsFragDict get begin /PsFragNoShowStrings [PsFragNoShowStrings aload pop (b3)] def end SDict /PsFragDict get begin /PsFragNoShowStrings [PsFragNoShowStrings aload pop (b2)] def end SDict /PsFragDict get begin /PsFragNoShowStrings [PsFragNoShowStrings aload pop (w2)] def end SDict /PsFragDict get begin /PsFragNoShowStrings [PsFragNoShowStrings aload pop (w4)] def end SDict /PsFragDict get begin /PsFragNoShowStrings [PsFragNoShowStrings aload pop (b4)] def end SDict /PsFragDict get begin /PsFragNoShowStrings [PsFragNoShowStrings aload pop (f)] def end SDict /PsFragDict get begin /PsFragNoShowStrings [PsFragNoShowStrings aload pop (x1)] def end SDict /PsFragDict get begin /PsFragNoShowStrings [PsFragNoShowStrings aload pop (x2)] def end SDict /PsFragDict get begin /PsFragNoShowStrings [PsFragNoShowStrings aload pop (x3)] def end SDict /PsFragDict get begin /PsFragNoShowStrings [PsFragNoShowStrings aload pop (x4)] def end SDict /PsFragDict get begin /PsFragNoShowStrings [PsFragNoShowStrings aload pop (x5)] def end SDict /PsFragDict get begin /PsFragNoShowStrings [PsFragNoShowStrings aload pop (x6)] def end @beginspecial 0.000000 @llx 39.000000 @lly 436.000000 @urx 269.000000 @ury 4360.000000 @rwi @setspecial %%BeginDocument: fig1.ps /MathWorks 120 dict begin /bdef {bind def} bind def /ldef {load def} bind def /xdef {exch def} bdef /xstore {exch store} bdef /c /clip ldef /cc /concat ldef /cp /closepath ldef /gr /grestore ldef /gs /gsave ldef /mt /moveto ldef /np /newpath ldef /cm /currentmatrix ldef /sm /setmatrix ldef /rc {rectclip} bdef /rf {rectfill} bdef /rm /rmoveto ldef /rl /rlineto ldef /s /show ldef /sc /setrgbcolor ldef /w /setlinewidth ldef /cap /setlinecap ldef /pgsv () def /bpage {/pgsv save def} bdef /epage {pgsv restore} bdef /bplot /gsave ldef /eplot {stroke grestore} bdef /portraitMode 0 def /landscapeMode 1 def /dpi2point 0 def /FontSize 0 def /FMS { /FontSize xstore %save size off stack findfont [FontSize 0 0 FontSize neg 0 0] makefont setfont }bdef /csm { 1 dpi2point div -1 dpi2point div scale neg translate landscapeMode eq {90 rotate} if } bdef /SO { [] 0 setdash } bdef /DO { [.5 dpi2point mul 4 dpi2point mul] 0 setdash } bdef /DA { [6 dpi2point mul] 0 setdash } bdef /DD { [.5 dpi2point mul 4 dpi2point mul 6 dpi2point mul 4 dpi2point mul] 0 setdash } bdef /L { lineto stroke } bdef /MP { 3 1 roll moveto 1 sub {rlineto} repeat } bdef /AP { {rlineto} repeat } bdef /PP { closepath fill } bdef /DP { closepath stroke } bdef /MR { 4 -2 roll moveto dup 0 exch rlineto exch 0 rlineto neg 0 exch rlineto closepath } bdef /FR { MR stroke } bdef /PR { MR fill } bdef /L1i { { currentfile picstr readhexstring pop } image } bdef /tMatrix matrix def /MakeOval { newpath tMatrix currentmatrix pop translate scale 0 0 1 0 360 arc tMatrix setmatrix } bdef /FO { MakeOval stroke } bdef /PO { MakeOval fill } bdef /PD { 2 copy moveto lineto stroke } bdef currentdict end def MathWorks begin 0 cap 1 setlinejoin end MathWorks begin bpage bplot /dpi2point 12 def portraitMode 0000 3888 csm 0 653 5233 2758 MR c np 76 dict begin %Colortable dictionary /c0 { 0 0 0 sc} bdef /c1 { 1 1 1 sc} bdef /c2 { 1 0 0 sc} bdef /c3 { 0 1 0 sc} bdef /c4 { 0 0 1 sc} bdef /c5 { 1 1 0 sc} bdef /c6 { 1 0 1 sc} bdef /c7 { 0 1 1 sc} bdef /Helvetica 144 FMS c1 0 0 5185 3888 PR 6 w gs 2851 777 2334 2334 MR c np 12 w c0 0 1346 3569 1495 2 MP stroke 897 0 3569 2841 2 MP stroke 0 -898 4466 2841 2 MP stroke 0 898 4466 1943 2 MP stroke 719 0 4466 2841 2 MP stroke 1495 1495 2074 0 2 MP stroke 6 w gr c0 50 w 1 cap 3569 1495 PD 3569 2841 PD 4466 2841 PD 4466 1944 PD 4466 2841 PD gs 2851 777 2334 2334 MR c np gr 3641 1427 mt (w5) s 3641 1665 mt (b5) s 3313 2773 mt (w6) s 3337 3011 mt (b6) s 4334 3011 mt (w13) s 4386 3199 mt (b1) s 4386 3379 mt (b3) s 4386 1876 mt (b2) s 4374 1687 mt (w2) s 4731 835 mt (w4) s 4755 1090 mt (b4) s 6 w gs 2333 1685 518 518 MR c np 517 0 2333 1944 2 MP stroke -52 51 52 52 2798 1892 3 MP stroke gr 2572 1901 mt (f) s gs 0 0 2333 3888 MR c np gr 50 w 111 2332 PD 666 2332 PD 805 2332 PD 1110 2332 PD 1721 2332 PD gs 0 0 2333 3888 MR c np 12 w 2332 0 0 2332 2 MP stroke gr 6 w 35 2544 mt (x1) s 514 2544 mt (x2) s 805 2544 mt (x3) s 1110 2544 mt (x4) s 1645 2544 mt (x5) s 2124 2544 mt (x6) s gs 0 0 0 0 MR c np end eplot epage end showpage %%EndDocument @endspecial 1264 279 a fk(w)1299 286 y fr(5)1333 279 y fl(=)1389 259 y fr (3)1389 267 y 18 2 v 1389 296 a(2)1412 279 y fk(i)1264 350 y(\014)1292 357 y fr(5)1325 350 y fl(=)1382 330 y fr(1)1382 338 y 18 2 v 1382 367 a(4)1062 746 y fk(w)1097 753 y fr(6)1131 746 y fl(=)14 b(0)1028 817 y fk(\014)1056 824 y fr (6)1089 817 y fl(=)g fj(\000)1185 797 y fr(1)1185 805 y 18 2 v 1185 834 a(2) 1436 828 y fk(w)1471 835 y fr(1)1491 828 y fk(;)8 b(w)1548 835 y fr(3)1581 828 y fl(=)14 b(1)1419 894 y fk(\014)1447 901 y fr(1)1466 894 y fk(;)8 b(\014) 1516 901 y fr(3)1549 894 y fl(=)14 b fj(\000)1645 874 y fr(1)1645 882 y 18 2 v 1645 911 a(2)1547 423 y fk(\014)1575 430 y fr(2)1608 423 y fl(=)g(1)1547 357 y fk(w)1582 364 y fr(2)1615 357 y fl(=)g(1)e(+)f fk(i)1614 82 y(w)1649 89 y fr (4)1683 82 y fl(=)i fj(1)1610 150 y fk(\014)1638 157 y fr(4)1671 150 y fl(=)h fj(\000)1767 130 y fr(7)1767 138 y 18 2 v 1767 167 a(4)884 431 y fk(f)8 655 y (x)36 662 y fr(1)200 655 y fk(x)228 662 y fr(2)278 655 y fk(x)306 662 y fr (3)362 655 y fk(x)390 662 y fr(4)570 655 y fk(x)598 662 y fr(5)701 655 y fk (x)729 662 y fr(6)763 655 y fl(=)f fj(1)611 1060 y fl(Figure)j(1:)21 b(An)16 b (example)e(with)i fk(n)e fl(=)g(6.)73 1191 y(The)i fi(Schwarz-Christo\013el)j (formula)h fl(for)c fk(f)22 b fl(is)590 1328 y fk(f)5 b fl(\()p fk(z)r fl(\)) 14 b(=)g fk(f)5 b fl(\()p fk(z)819 1335 y fr(0)839 1328 y fl(\))11 b(+)g fk (c)947 1270 y fb(Z)989 1283 y fq(z)970 1364 y(z)986 1369 y fv(0)1017 1274 y fq (n)p fp(\000)p fr(1)1024 1287 y fb(Y)1020 1378 y fq(j)r fr(=1)1083 1328 y fl (\()p fk(s)g fj(\000)g fk(x)1214 1335 y fq(j)1232 1328 y fl(\))1251 1308 y fq (\014)1271 1313 y fu(j)1298 1328 y fk(ds:)0 1471 y fl(The)i(main)e(di\016cult) o(y)f(with)j(this)f(form)o(ula)g(is)g(that)h(except)e(in)i(sp)q(ecial)f(cases\ ,)h(the)f(prev)o(ertices)f fk(x)1776 1478 y fq(j)1806 1471 y fl(cannot)0 1531 y(b)q(e)16 b(computed)g(analytically)l(.)k(Three)c(of)g(them,)f(including)g (the)h(already)g(\014xed)g fk(x)1518 1538 y fq(n)1541 1531 y fl(,)g(ma)o(y)f (b)q(e)i(b)q(e)f(c)o(hosen)0 1591 y(arbitrarily)f(\(b)o(y)h(the)g(Riemann)f (Mapping)h(Theorem\).)k(The)d(remaining)d fk(n)e fj(\000)e fl(3)17 b(are)f (then)h(determined)0 1652 y(uniquely)i(and)h(can)h(b)q(e)f(obtained)g(b)o(y)g (solving)g(a)g(system)f(of)h(nonlinear)g(equations.)33 b(This)20 b(is)g(kno)o (wn)0 1712 y(as)i(the)g fi(Schwarz-Christo\013el)h(p)n(ar)n(ameter)e(pr)n(obl\ em)t fl(,)h(and)g(its)g(n)o(umerical)c(solution)k(requires)f(careful)0 1772 y (treatmen)o(t)f(of)j(the)e(in)o(tegration)h(in)g(the)g(form)o(ula.)37 b(Once) 22 b(the)f(parameter)g(problem)g(is)h(solv)o(ed,)g(the)0 1832 y(m)o(ultiplic) o(ativ)o(e)13 b(constan)o(t)j fk(c)h fl(can)f(b)q(e)g(found)h(and)g fk(f)22 b fl(and)16 b(its)g(in)o(v)o(erse)f(can)h(b)q(e)h(computed)e(n)o(umerically)-5 b (.)73 1892 y(The)13 b(Sc)o(h)o(w)o(arz-Christo\013el)f(map)f(can)i(b)q(e)f (mo)q(di\014ed)g(to)g(\014t)h(some)e(other)i(situations.)20 b(F)l(or)13 b(exa\ mple,)e(if)0 1953 y(the)k(fundamen)o(tal)e(domain)h(is)h(the)f(unit)h(disk)f (rather)h(than)g(the)g(upp)q(er)g(half-plane,)g(the)f(prev)o(ertices)f fk(z) 1932 1960 y fq(j)0 2013 y fl(lie)h(coun)o(terclo)q(c)o(kwise)g(on)i(the)f(uni\ t)g(circle)e(and)j(the)f(resulting)g(form)o(ula)f(is)h(iden)o(tical,)e(except) h(that)i(the)0 2073 y(pro)q(duct)h(has)h fk(n)f fl(terms)e(rather)i(than)g fk (n)12 b fj(\000)f fl(1.)23 b(Another)16 b(instance)h(is)f(the)h(exterior)e (map,)h(in)g(whic)o(h)g(the)0 2133 y(fundamen)o(tal)11 b(domain)g(is)h(the)h (unit)f(disk)f(and)i(the)f(target)h(region)f(is)h(the)f(exterior)f(of)i(a)f (p)q(olygon.)21 b(In)12 b(this)0 2193 y(case)j(the)f(in)o(tegrand)g(has)i(an) f(additional)f(singularit)o(y)g(in)g(the)h(in)o(terior)e(of)i(the)f(disk.)20 b (If)14 b(this)h(singularit)o(y)0 2254 y(is)22 b(\014xed)g(at)g(the)g(origin,) h(only)f(one)g(prev)o(ertex)e(ma)o(y)h(b)q(e)h(c)o(hosen)g(arbitrarily)l(.)37 b(Other)22 b(v)m(ariations)h(of)0 2314 y(the)d(form)o(ula)e(map)h(from)g(the) g(bi-in\014nite)g(strip)h(0)g fj(\024)g(=)p fk(z)i fj(\024)d fl(1)h(or)h(a)f (rectangle,)g(in)f(whic)o(h)g(cases)h(the)0 2374 y(in)o(tegrand)f(in)o(v)o (olv)o(es)d(h)o(yp)q(erb)q(olic)i(sines.)29 b(These)19 b(t)o(w)o(o)f(v)m(aria\ tions)i(are)e(particularly)g(imp)q(ortan)o(t)g(when)0 2434 y(the)e(target)h (region)f(is)g(highly)g(elongated)g(in)g(one)g(direction.)0 2578 y fe(T)-6 b (o)r(olb)r(o)n(x)24 b(features)73 2670 y fj(\017)g fl(Graphical)16 b(input)g (of)h(p)q(olygons)963 2795 y(2)g eop %%Page: 3 3 bop 73 42 a fj(\017)24 b fl(Solution)19 b(of)h(the)f(parameter)f(problem)f (for)j(half-plane,)f(disk,)g(strip,)g(rectangle,)g(and)h(exterior)122 102 y (mapping)73 203 y fj(\017)k fl(Computation)16 b(of)h(forw)o(ard)f(and)h(in)o (v)o(erse)e(maps)73 305 y fj(\017)24 b fl(Adaptiv)o(e)15 b(plotting)h(of)h (images)e(of)h(orthogonal)i(grids)73 407 y fj(\017)24 b fl(Command-line)14 b (and)j(graphical)f(user)g(in)o(terfaces)0 551 y fe(Requirem)o(e)o(n)n(ts)0 644 y fh(Platform)0 736 y fl(The)f(SC)g(T)l(o)q(olb)q(o)o(x)g(w)o(as)g(dev)o(elop) q(ed)f(on)h(color)g(Sun)g(SP)l(AR)o(Cstations)g(running)g(MA)l(TLAB)e(v)o(ers\ ion)h(4.1.)0 796 y(It)e(will)e(not)j(run)f(under)g(an)o(y)g(previous)f(MA)l (TLAB)g(v)o(ersion)h(on)g(this)g(arc)o(hitecture.)18 b(I)12 b(ha)o(v)o(e)f (also)h(used)g(the)0 856 y(to)q(olb)q(o)o(x)17 b(with)g(MA)l(TLAB)f(4.0)g(for) h(MS-Windo)o(ws,)g(and)g(ha)o(v)o(e)f(encoun)o(tered)g(only)g(minor)f(di\013e\ rences,)0 917 y(whic)o(h)h(are)g(explained)f(throughout)j(this)e(guide.)73 977 y(Little)g(is)h(kno)o(wn)g(ab)q(out)h(the)f(p)q(erformance)f(of)h(the)g(to)q (olb)q(o)o(x)h(on)f(other)g(platforms.)23 b(I)16 b(exp)q(ect)h(that)0 1037 y (the)12 b(to)q(olb)q(o)o(x)h(will)f(run)g(with)g(few)h(problems,)e(but)i(y)o (ou)f(ma)o(y)f(con)o(tact)h(me)f(if)h(y)o(ou)g(exp)q(erience)e(di\016culties.) 73 1097 y(A)16 b(mouse)f(is)h(highly)g(recommended.)0 1227 y fh(NESOL)-6 b (VE)0 1319 y fl(The)12 b(Sc)o(h)o(w)o(arz-Christo\013el)f(parameter)g(problem) g(leads)h(to)g(a)g(set)g(of)h(nonlinear)e(equations)i(to)f(b)q(e)g(solv)o(ed.) 0 1380 y(F)l(or)j(this)f(it)g(uses)h(the)f(pac)o(k)m(age)g(NESOL)-5 b(VE,)14 b (part)h(of)g(the)f(NONLINPK)f(pac)o(k)m(age)i(written)f(b)o(y)g(Ric)o(hard)0 1440 y(Behrens.)28 b(NESOL)-5 b(VE)18 b(is)h(in)f(the)g(public)g(domain)g(and) h(is)g(included)e(in)i(the)f(distribution)g(of)h(the)g(SC)0 1500 y(T)l(o)q (olb)q(o)o(x.)73 1560 y(The)g(original)g(v)o(ersion)f(of)h(the)f(SC)i(T)l(o)q (olb)q(o)o(x)f(used,)h(if)e(a)o(v)m(ailable,)g(the)h(function)f(FSOL)-5 b(VE) 19 b(in)f(the)0 1620 y(Optimization)11 b(T)l(o)q(olb)q(o)o(x)k(a)o(v)m(ailabl\ e)e(from)g(MathW)l(orks.)21 b(Ho)o(w)o(ev)o(er,)11 b(the)j(algorithm)e(used)i (b)o(y)f(FSOL)-5 b(VE)0 1681 y(\(sp)q(eci\014cally)l(,)19 b(the)h(necessit)o (y)f(of)h(\014nite-di\013erence)f(Jacobians\))i(causes)f(it)g(to)h(b)q(e)f (m)o(uc)o(h)e(slo)o(w)o(er)h(than)0 1741 y(NESOL)-5 b(VE)16 b(for)g(most)g (problems)f(arising)h(in)g(the)g(SC)h(T)l(o)q(olb)q(o)o(x,)g(so)f(its)g(use)h (has)g(b)q(een)f(discon)o(tin)o(ued.)0 1871 y fh(User)0 1963 y fl(F)l(ull)f (use)h(of)g(the)g(SC)g(T)l(o)q(olb)q(o)o(x)h(requires)e(some)f(understanding) j(of)f(MA)l(TLAB)f(fundamen)o(tals)g(suc)o(h)g(as)0 2023 y(v)o(ectors,)20 b (matrices,)f(and)h(functions.)33 b(A)20 b(w)o(orking)g(kno)o(wledge)g(of)g (ho)o(w)h(the)e fg(hold)p fl(,)h fg(axis)p fl(,)f(and)h fg(plot)0 2083 y fl (commands)d(w)o(ork)h(in)g(v)o(ersion)g(4)h(is)f(helpful)f(when)i(plotting)f (results.)28 b(The)18 b(tutorial)h(that)g(is)f(shipp)q(ed)0 2144 y(with)e(MA) l(TLAB)f(should)i(b)q(e)f(more)f(than)i(su\016cien)o(t.)73 2204 y(The)e(graph\ ical)h(user)f(in)o(terface)f(should)i(b)q(e)f(accessible)f(to)i(MA)l(TLAB)e (no)o(vices)g(and)i(exp)q(erts)f(alik)o(e.)0 2370 y fd(2)83 b(Obtaining)27 b (and)g(installing)g(the)g(SC)g(T)-7 b(o)r(olb)r(o)n(x)0 2480 y fl(The)14 b (latest)g(v)o(ersion)g(of)g(the)g(SC)h(T)l(o)q(olb)q(o)o(x)g(is)f(a)o(v)m(ail\ able)g(b)o(y)g(anon)o(ymous)g(ftp)g(at)h fg(ftp.cs.co)o(rne)o(ll)o(.ed)o(u)0 2540 y fl(in)c(the)g(directory)f fg(pub/drisco)o(ll)o(/SC)o(-To)o(olb)o(ox)o fl(.)17 b(There)11 b(is)g(a)g(shar)h(\()p fg(*.sh)p fl(\))e(\014le)g(as)i(w)o (ell)e(as)i(a)f(P)o(ostscript)0 2600 y(cop)o(y)16 b(of)g(the)g(latest)g(v)o (ersion)g(of)h(this)f(guide.)963 2795 y(3)g eop %%Page: 4 4 bop 73 42 a fl(In)26 b(Unix)f(a)h(shar)h(\014le)e(is)h(unpac)o(k)o(ed)f(b)o (y)g(en)o(tering)g fg(sh)g fi(\014lename)t fl(;)32 b(the)26 b(\014les)f fg (unshar.zip)d fl(and)0 102 y fg(unshar-15.)o(hqx)o fl(,)14 b(also)j(at)g(the) f(ftp)h(site,)f(are)h(for)f(unpac)o(king)h(the)f(shar)i(\014le)e(on)h(DOS)g (and)g(Macin)o(tosh)0 162 y(systems,)g(resp)q(ectiv)o(ely)l(.)25 b(Under)18 b (Unix,)f(the)i(to)q(olb)q(o)o(x)g(is)f(automatically)f(unpac)o(k)o(ed)g(in)o (to)h(a)h(sub)q(direc-)0 222 y(tory)i fg(sc)f fl(of)h(the)f(curren)o(t)g(dire\ ctory)l(.)33 b(Y)l(ou)21 b(ma)o(y)e(rename)g(this)i(sub)q(directory)f(and)h (put)g(it)f(wherev)o(er)0 282 y(y)o(ou)f(lik)o(e|the)d(most)i(natural)h(place) f(is)g(in)h(y)o(our)f(p)q(ersonal)i(MA)l(TLAB)d(directory)l(.)28 b(When)18 b (y)o(ou)h(w)o(an)o(t)0 342 y(to)f(use)g(the)g(SC)g(T)l(o)q(olb)q(o)o(x,)h(y)o (ou)f(m)o(ust)f(\014rst)h(use)g(MA)l(TLAB's)f fg(cd)g fl(command)f(to)i(c)o (hange)g(to)g(the)g(to)q(ol-)0 403 y(b)q(o)o(x)k(sub)q(directory)l(,)g(or)f (add)h(it)f(to)h(the)f(searc)o(h)g(path)h(using)f fg(path)p fl(.)35 b(Put)22 b (the)f fg(path)f fl(command)f(in)o(to)0 463 y(y)o(our)c fg(startup.m)e fl(\ \014le)i(if)g(y)o(ou)g(w)o(an)o(t)h(to)g(ha)o(v)o(e)f(access)g(to)h(the)g(to) q(olb)q(o)o(x)g(b)o(y)f(default)h(in)f(ev)o(ery)f(MA)l(TLAB)0 523 y(session.) 73 583 y(As)g(w)o(as)h(men)o(tioned)c(in)j(the)g(In)o(tro)q(duction,)g(the)g (SC)g(T)l(o)q(olb)q(o)o(x)h(uses)f(the)g(pac)o(k)m(age)g(NESOL)-5 b(VE)14 b (from)0 643 y(Ric)o(hard)i(Behrens')g(NONLINPK.)f(The)i(necessary)f(\014les)h (are)g(automatically)e(unpac)o(k)o(ed)h(in)o(to)g(the)h(SC)0 704 y(T)l(o)q (olb)q(o)o(x)j(directory)l(.)29 b(If)18 b(y)o(ou)h(already)g(ha)o(v)o(e)g(a)g (cop)o(y)g(of)g(NESOL)-5 b(VE)19 b(on)g(y)o(our)g(MA)l(TLAB)f(path,)i(y)o(ou) 0 764 y(ma)o(y)15 b(wish)h(to)h(delete)e(all)g(the)h(\014les)g(whose)h(names) e(start)i(with)f fg(ne)g fl(in)g(the)g(SC)g(T)l(o)q(olb)q(o)o(x)i(directory)l (.)73 824 y(All)d(the)h(\014les)f(listed)h(ab)q(o)o(v)o(e)g(are)g(also)g(a)o (v)m(ailable)g(at)g(MathW)l(orks')g(ftp)h(site,)e fg(ftp.mathw)o(ork)o(s.c)o (om)o fl(.)0 884 y(The)d(to)q(olb)q(o)o(x)g(and)h(P)o(ostscript)e(\014les)h (are)f(in)h(the)f(directory)g fg(pub/contri)o(b/)o(mis)o(c)p fl(,)e(and)j(sha\ r)h(\014le)e(utilities)0 944 y(can)16 b(b)q(e)h(found)g(in)f fg(pub/contr)o (ib/)o(to)o(ols)o fl(.)j(A)c(cop)o(y)h(of)h(NONLINPK)e(is)h(in)g fg(pub/contr) o(ib/)o(opt)o(im)o fl(.)0 1111 y fd(3)83 b(Using)27 b(the)g(SC)g(T)-7 b(o)r (olb)r(o)n(x)0 1220 y fl(The)13 b(Sc)o(h)o(w)o(arz-Christo\013el)g(T)l(o)q (olb)q(o)o(x)h(impleme)o(n)o(ts)c(\014v)o(e)j(v)m(ariations)h(of)f(the)g(Sc)o (h)o(w)o(arz-Christo\013el)g(trans-)0 1280 y(formation:)24 b(mapping)17 b(a)h (half)g(plane,)f(disk,)h(strip,)f(or)i(rectangle)e(to)h(the)g(in)o(terior)e (of)i(a)g(\(p)q(ossibly)h(un-)0 1341 y(b)q(ounded\))g(p)q(olygon,)h(and)f(map\ ping)e(a)i(disk)f(to)g(the)h(exterior)e(of)h(a)h(p)q(olygon.)29 b(Eac)o(h)18 b (v)m(ariation)h(has)g(a)0 1401 y(mo)q(dule)12 b(of)h(functions)g(giv)o(en)f (the)h(pre\014xes)g fg(hp)p fl(,)f fg(d)p fl(,)h fg(st)p fl(,)f fg(r)p fl(,)h (and)h fg(de)p fl(,)e(resp)q(ectiv)o(ely)l(.)18 b(The)13 b(ma)s(jor)f(functio\ ns)0 1461 y(comprising)j(a)i(mo)q(dule)e(ha)o(v)o(e)g(the)h(follo)o(wing)g (su\016xes:)124 1552 y fg(param)48 b fl(Solv)o(es)15 b(the)h(parameter)f(prob\ lem)g(\(supplies)h(data)h(needed)e(b)o(y)h(the)g(other)h(routines\).)149 1613 y fg(disp)49 b fl(Displa)o(ys)16 b(the)g(results)g(in)g(a)g(con)o(v)o(enien)o (t)e(format.)175 1673 y fg(map)49 b fl(Computes)15 b(the)h(forw)o(ard)h(map.) 98 1733 y fg(invmap)48 b fl(Computes)15 b(the)h(in)o(v)o(erse)f(map.)149 1793 y fg(plot)49 b fl(Plots)16 b(the)g(image)f(of)i(an)f(orthogonal)i(grid.)0 1885 y(F)l(or)d(example,)e(y)o(ou)h(w)o(ould)h(use)g fg(hpparam)e fl(to)i(solv)o (e)f(the)h(half-plane)g(parameter)e(problem)h(and)h fg(hpplot)0 1946 y fl(to) k(get)g(a)h(quic)o(k)d(visualization)h(of)h(the)g(result.)29 b(The)19 b(funct\ ions)g(are)g(designed)g(to)g(ha)o(v)o(e)f(iden)o(tical,)g(or)0 2006 y(at)g (least)g(parallel,)f(calling)g(sequences)g(and)i(return)e(v)m(alues.)27 b(In) 17 b(addition,)h(eac)o(h)g(mo)q(dule)e(has)j(sev)o(eral)0 2066 y(utilit)o(y) 11 b(\014les)i(with)g(the)g(same)f(pre\014x.)20 b(These)13 b(are)h(not)f(t)o (ypically)e(called)i(in)o(teractiv)o(ely)-5 b(.)18 b(Routines)13 b(whic)o(h)0 2126 y(ha)o(v)o(e)i(a)i(pre\014x)f fg(sc)f fl(are)i(general-purp)q(ose)g(and) g(are)f(used)g(b)o(y)g(all)g(the)g(mo)q(dules,)f(or)h(the)g(user.)73 2186 y (The)22 b(function)g fg(drawpoly)d fl(pro)o(vides)i(a)h(con)o(v)o(enien)o(t)e (w)o(a)o(y)i(to)g(input)g(p)q(olygons,)i(using)e(a)g(mouse.)0 2247 y(Alternat\ iv)o(ely)l(,)h fg(scangle)e fl(can)j(b)q(e)g(used)g(to)h(compute)d(turning)j (angles)f(giv)o(en)f(the)h(\014nite)f(v)o(ertices.)0 2307 y fg(plotpoly)13 b fl(can)k(b)q(e)f(used)h(to)f(plot)g(a)h(p)q(olygon)g(giv)o(en)f(its)g(v)o(ert\ ices)e(and)j(turning)f(angles.)73 2367 y(Some)d(additional)g(routines)h(are)f (describ)q(ed)g(at)h(the)f(end)h(of)g(this)f(section.)20 b(T)l(o)14 b(see)f (a)h(men)o(u)e(of)i(online)0 2427 y(demonstrations,)i(t)o(yp)q(e)f fg(scdemo) f fl(at)j(the)f(prompt.)73 2487 y(Man)o(y)i(routines)g(tak)o(e)f(one)h(or)g (more)f(optional)h(argumen)o(ts,)f(whic)o(h)h(app)q(ear)h(inside)e(braces)h (in)f(the)0 2548 y(argumen)o(t)22 b(lists.)42 b(An)23 b(empt)o(y)e(matrix)g fg ([])i fl(supplied)g(as)g(an)h(optional)g(argumen)o(t)e(is)h(equiv)m(alen)o (t)f(to)0 2608 y(omission)12 b(of)i(that)f(argumen)o(t.)19 b(This)14 b(lets)e (y)o(ou)h(supply)g(a)h(v)m(alue)f(for)g(just)g(the)g(third)g(optional)h(argum\ en)o(t,)0 2668 y(for)j(example.)963 2795 y(4)g eop %%Page: 5 5 bop 0 42 a fe(Graphical)22 b(input)h(of)g(p)r(olygons)16 134 y fg([w,beta])g (=)i(drawpoly)p fj(f)p fg(\(f)o(ig,)o(axl)o(im\))o fj(g)73 224 y fl(When)d (called,)g fg(drawpoly)d fl(\014rst)j(adds)h(some)d(sp)q(ecial)i(con)o(trols) g(to)g(the)f(b)q(ottom)h(of)g(the)g(curren)o(t)0 284 y(\014gure,)16 b(then)g (w)o(aits)h(for)f(input.)21 b(Use)16 b(the)g(mouse)g(to)g(mo)o(v)o(e)e(the)i (p)q(oin)o(ter)g(in)o(to)g(the)g(\014gure)h(windo)o(w)f(and)0 344 y(the)21 b (p)q(oin)o(ter)g(will)f(b)q(ecome)g(a)i(crosshair.)36 b(Mo)o(v)o(e)21 b(to)g (the)g(place)g(the)g(\014rst)g(v)o(ertex)f(will)g(go)i(and)g(clic)o(k)0 404 y (the)17 b(left)f(mouse)g(button.)23 b(If)17 b(the)f(cursor)i(w)o(as)f(inside) f(the)h(axes)g(b)q(o)o(x,)g(the)f(v)o(ertex)g(will)f(b)q(e)i(dra)o(wn,)g(and) 0 464 y(y)o(ou)i(can)g(mo)o(v)o(e)e(the)i(mouse)f(to)h(place)g(the)g(next)f (v)o(ertex.)29 b(\(Clic)o(ks)17 b(outside)i(the)g(b)q(o)o(x)g(are)h(for)f(in\ \014nite)0 525 y(v)o(ertices,)f(as)i(explained)e(b)q(elo)o(w.\))31 b(As)19 b (y)o(ou)h(mo)o(v)o(e,)d(a)j(dashed)g(line)f(will)f(follo)o(w)h(to)h(preview)e (the)i(next)0 585 y(p)q(olygon)f(edge.)25 b(Clic)o(k)16 b(the)h(left)g(button) h(again,)g(and)g(the)g(v)o(ertex)e(and)i(a)g(solid)f(p)q(olygon)i(edge)e(will) g(b)q(e)0 645 y(dra)o(wn.)35 b(Figure)20 b(2)i(sho)o(ws)f(a)g(snapshot)i(of)e (p)q(olygon)g(dra)o(wing)h(using)f(some)e(of)i(the)g(to)q(ols)h(describ)q(ed) 0 705 y(b)q(elo)o(w.)f(Con)o(tin)o(ue)15 b(adding)i(v)o(ertices)d(with)i(the) f(left)g(mouse)g(button)i(un)o(til)e(y)o(ou)h(wish)g(to)g(place)f(the)h(last) 0 765 y(v)o(ertex.)23 b(F)l(or)18 b(this)f(y)o(ou)g(m)o(ust)f(use)i(a)g(di\ \013eren)o(t)e(mouse)h(button,)h(or)f(double-clic)o(k.)23 b(Then)18 b(the)f (p)q(olygon)0 826 y(will)e(b)q(e)i(closed)e(and)i(the)f(function)g(will)f(ter\ minate.)267 2217 y @beginspecial 0.000000 @llx 0.000000 @lly 340.000000 @urx 307.000000 @ury 3400.000000 @rwi @setspecial %%BeginDocument: drawpoly.ps /buffer 512 string def /byte 1 string def /color_packet 3 string def /pixels 768 string def /DirectClassPacket % % Get a DirectClass packet. % % Parameters: % red. % green. % blue. % length: number of pixels minus one of this color (optional). % currentfile color_packet readhexstring pop pop compression 0 gt { /number_pixels 3 def } { currentfile byte readhexstring pop 0 get /number_pixels exch 1 add 3 mul def } ifelse 0 3 number_pixels 1 sub { pixels exch color_packet putinterval } for pixels 0 number_pixels getinterval } bind def /DirectClassImage % % Display a DirectClass image. % systemdict /colorimage known { columns rows 8 [ columns 0 0 rows neg 0 rows ] { DirectClassPacket } false 3 colorimage } { % % No colorimage operator; convert to grayscale. % columns rows 8 [ columns 0 0 rows neg 0 rows ] { GrayDirectClassPacket } image } ifelse } bind def /GrayDirectClassPacket % % Get a DirectClass packet; convert to grayscale. % % Parameters: % red % green % blue % length: number of pixels minus one of this color (optional). % currentfile color_packet readhexstring pop pop color_packet 0 get 0.299 mul color_packet 1 get 0.587 mul add color_packet 2 get 0.114 mul add cvi /gray_packet exch def compression 0 gt { /number_pixels 1 def } { currentfile byte readhexstring pop 0 get /number_pixels exch 1 add def } ifelse 0 1 number_pixels 1 sub { pixels exch gray_packet put } for pixels 0 number_pixels getinterval } bind def /GrayPseudoClassPacket % % Get a PseudoClass packet; convert to grayscale. % % Parameters: % index: index into the colormap. % length: number of pixels minus one of this color (optional). % currentfile byte readhexstring pop 0 get /offset exch 3 mul def /color_packet colormap offset 3 getinterval def color_packet 0 get 0.299 mul color_packet 1 get 0.587 mul add color_packet 2 get 0.114 mul add cvi /gray_packet exch def compression 0 gt { /number_pixels 1 def } { currentfile byte readhexstring pop 0 get /number_pixels exch 1 add def } ifelse 0 1 number_pixels 1 sub { pixels exch gray_packet put } for pixels 0 number_pixels getinterval } bind def /PseudoClassPacket % % Get a PseudoClass packet. % % Parameters: % index: index into the colormap. % length: number of pixels minus one of this color (optional). % currentfile byte readhexstring pop 0 get /offset exch 3 mul def /color_packet colormap offset 3 getinterval def compression 0 gt { /number_pixels 3 def } { currentfile byte readhexstring pop 0 get /number_pixels exch 1 add 3 mul def } ifelse 0 3 number_pixels 1 sub { pixels exch color_packet putinterval } for pixels 0 number_pixels getinterval } bind def /PseudoClassImage % % Display a PseudoClass image. % % Parameters: % class: 0-PseudoClass or 1-Grayscale. % currentfile buffer readline pop token pop /class exch def pop class 0 gt { /grays columns string def columns rows 8 [ columns 0 0 rows neg 0 rows ] { currentfile grays readhexstring pop } image } { % % Parameters: % colors: number of colors in the colormap. % colormap: red, green, blue color packets. % currentfile buffer readline pop token pop /colors exch def pop /colors colors 3 mul def /colormap colors string def currentfile colormap readhexstring pop pop systemdict /colorimage known { columns rows 8 [ columns 0 0 rows neg 0 rows ] { PseudoClassPacket } false 3 colorimage } { % % No colorimage operator; convert to grayscale. % columns rows 8 [ columns 0 0 rows neg 0 rows ] { GrayPseudoClassPacket } image } ifelse } ifelse } bind def /DisplayImage % % Display a DirectClass or PseudoClass image. % % Parameters: % x & y translation. % x & y scale. % image label. % image columns & rows. % class: 0-DirectClass or 1-PseudoClass. % compression: 0-RunlengthEncodedCompression or 1-NoCompression. % hex color packets. % gsave currentfile buffer readline pop token pop /x exch def token pop /y exch def pop x y translate currentfile buffer readline pop token pop /x exch def token pop /y exch def pop /NewCenturySchlbk-Roman findfont 24 scalefont setfont currentfile buffer readline pop 0 y 12 add moveto buffer show pop x y scale currentfile buffer readline pop token pop /columns exch def token pop /rows exch def pop currentfile buffer readline pop token pop /class exch def pop currentfile buffer readline pop token pop /compression exch def pop class 0 gt { PseudoClassImage } { DirectClassImage } ifelse grestore } bind def userdict begin DisplayImage 0 0 340 307 426 384 1 0 0 8 000000 8c8c8c cccccc d8d8d8 ffffff 000000 000000 000000 00ff00ff00ff00ff00ff000004ff04a3000504ff04a3000504ff04a3000504ff04a30005 04ff04a3000504ff04a3000504ff04a3000504ff04a3000504ff04a3000504ff04a30005 04ff04a3000504ff04a3000504ff04a3000504ff04a3000504ff04a300050452000004ff 044f00050451000104ff044f0005045000000400000004ff044f0005044f000004010000 04ff044f0005044e00000402000004ff044f0005044d00000403000004ff044f0005044d 00000403000004ff044f0005044d0006040300ff044a00050452000004030000043e0000 043f0000043e0000043e0000044900050452000004030000043e0000043f0000043e0000 043e0000044900050452000004030000043e0000043f0000043e0000043e000004490005 0457000004ff0000044900050457000004ff00000449000504570000049f0000045e0000 0449000504570000049e0002045d00000449000504570000044200090403000904030009 0403000904030009040300090403000604010001045d00000449000504570000049e0002 045d0000044900050457000004a10000045c0000044900050457000004a20000045b0000 044900050457000004a30000045a0000044900050457000004a400000459000004490005 0457000004a5000004580000044900050457000004a60000045700000449000504570000 04a7000004560000044900050457000004a8000004550000044900050457000004a90000 04540000044900050457000004aa000004530000044900050457000004ab000004520000 044900050457000004ac000004510000044900050457000004ad00000450000004490005 0457000004ae0000044f0000044900050457000004af0000044e000004490005044d0003 0405000004b00000044d000004490005044c0000040300000404000004b10000044c0000 04490005044c0000040300000404000004b20000044b0000044900050451000004040000 04b30000044a000004490005045100000404000004b400000449000004490005044e0002 0405000004b500000448000004490005045100000404000004b600000447000004490005 045100000404000304b400000443000304490005044c0000040300000404000004b80000 0445000004490005044c0000040300000404000004b900000444000004490005044d0003 0405000004ba000004430000044900050457000004bb0000044200000449000504570000 04bc000004410000044900050457000004bd000004400000044900050457000004be0000 043f0000044900050457000004bf0000043e0000044900050457000004c00000043d0000 044900050457000004c10000043c0000044900050457000004c20000043b000004490005 0457000004c30000043a0000044900050457000004c40000043900000449000504570000 04c5000004380000044900050457000004c6000004370000044900050457000004c70000 04360000044900050457000004c8000004350000044900050457000004c9000004340000 044900050457000004ca000004330000044900050457000004cb00000432000004490005 0457000004cc000004310000044900050457000004cd0000043000000449000504570000 04ce0000042f0000044900050457000004cf0000042e000004490005044d000304050000 04d00000042d000004490005044c0000040300000404000004d10000042c000004490005 044c0000040300000404000004d20000042b000004490005045100000404000004d30000 042a000004490005045000000405000004d400000429000004490005044f000004060000 04d500000428000004490005044e00000407000004d600000427000004490005044d0000 0408000304d400000423000304490005044c00000409000004d800000425000004490005 044c00000409000004d900000424000004490005044c00050404000004da000004230000 044900050457000004db000004220000044900050457000004dc00000421000004490005 0457000004dd000004200000044900050457000004de0000041f00000449000504570000 04df0000041e0000044900050457000004e00000041d0000044900050457000004e10000 04000000041a0000044900050457000004e2000204190000044900050457000004e10003 04190000044900050457000004e2000204190000044900050457000004e30000041a0000 044900050457000004e30000041a0000044900050457000004e30000041a000004490005 0457000004e30000041a0000044900050457000004e30000041a00000449000504570000 04e30000041a0000044900050457000004e30000041a0000044900050457000004e30000 041a0000044900050457000004e30000041a0000044900050457000004e30000041a0000 044900050457000004e30000041a000004490005044f00000406000004e30000041a0000 04490005044d00020406000004e30000041a000004490005044f00000406000004e30000 041a000004490005044f00000406000004e30000041a000004490005044f000004060000 04e30000041a000004490005044f00000406000004e30000041a000004490005044f0000 0406000004e30000041a000004490005044f00000406000304e000000417000304490005 044f00000406000004e30000041a000004490005044f00000406000004e30000041a0000 04490005044f00000406000004e30000041a0000044900050457000004e30000041a0000 044900050457000004e30000041a0000044900050457000004e30000041a000004490005 0457000004e30000041a0000044900050457000004e30000041a00000449000504570000 04e30000041a0000044900050457000004e30000041a0000044900050457000004e30000 041a0000044900050457000004e30000041a0000044900050457000004e30000041a0000 044900050457000004e30000041a0000044900050457000004e30000041a000004490005 0457000004e30000041a0000044900050457000004e30000041a00000449000504570000 04e30000041a0000044900050457000004e30000041a0000044900050457000004e30000 041a0000044900050457000004e30000041a0000044900050457000004e30000041a0000 044900050457000004e30000041a0000044900050457000004e30000041a000004490005 044d00030405000004e30000041a000004490005044c0000040300000404000004e30000 041a000004490005044c0000040300000404000004e30000041a000004490005044c0000 040300000404000004e30000041a000004490005044c0000040300000404000004e30000 041a000004490005044c0000040300000404000004e30000041a000004490005044c0000 040300000404000004e30000041a000004490005044c0000040300000404000304e00000 0417000304490005044c0000040300000404000004e30000041a000004490005044c0000 040300000404000004e30000041a000004490005044d00030405000004e30000041a0000 044900050457000004e30000041a0000044900050457000004e30000041a000004490005 0457000004e30000041a0000044900050457000004e30000041a00000449000504570000 04e30000041a0000044900050457000004e30000041a0000044900050457000004e30000 041a0000044900050457000004e30000041a0000044900050457000004e30000041a0000 044900050457000004e30000041a0000044900050457000004e30000041a000004490005 0457000004e30000041a0000044900050457000004e30000041a00000449000504570000 04e30000041a0000044900050457000004e30000041a0000044900050457000004e30000 041a0000044900050457000004e30000041a0000044900050457000004e30000041a0000 044900050457000004e30000041a0000044900050457000004e30000041a000004490005 0457000004e30000041a000004490005044f00000406000004e30000041a000004490005 044d00020406000004e30000041a000004490005044f00000406000004e30000041a0000 04490005044f00000406000004e30000041a000004490005044f00000406000004e30000 041a000004490005044f000004060000047f000004620000041a00000449000504430006 0404000004060000047e000204610000041a000004490005044f000004060003047a0003 046100000417000304490005044f000004060000047e000204610000041a000004490005 044f000004060000047e000004630000041a000004490005044f000004060000047e0000 04630000041a00000449000504570000047d000004640000041a00000449000504570000 047d000004640000041a00000449000504570000047d000004640000041a000004490005 04570000047c000004650000041a00000449000504570000047c000004650000041a0000 0449000504570000047b000004660000041a00000449000504570000047b000004660000 041a00000449000504570000047a000004660002041900000449000504570000047a0000 04650003041900000449000504570000047a000004660002041900000449000504570000 0479000004660000041c000004490005045700000479000004650000041d000004490005 045700000478000004650000041e000004490005045700000478000004640000041f0000 044900050457000004780000046300000420000004490005045700000477000004630000 042100000449000504570000047700000462000004220000044900050457000004760000 046200000423000004490005045700000476000004610000042400000449000504570000 047600000460000004250000044900050457000004750000046000000426000004490005 044d00030405000004750000045f00000427000004490005044c00000403000004040000 04740000045f00000428000004490005044c0000040300000404000004740000045e0000 0429000004490005045100000404000004730000045e0000042a00000449000504500000 0405000004730000045d0000042b000004490005044f00000406000004730000045c0000 042c00000449000504430006040300000407000004720000045c0000042d000004490005 044d000004080003046f0000045b0000042b000304490005044c00000409000004710000 045b0000042f000004490005044c00000409000004710000045a00000430000004490005 044c00050404000004710000045900000431000004490005045700000470000004590000 0432000004490005045700000470000004580000043300000449000504570000046f0000 04580000043400000449000504570000046f000004570000043500000449000504570000 046f000004560000043600000449000504570000046e0000045600000437000004490005 04570000046e000004550000043800000449000504570000046d00000455000004390000 0449000504570000046d000004540000043a00000449000504570000046c000004540000 043b00000449000504570000046c000004530000043c00000449000504570000046c0000 04520000043d00000449000504570000046b000004520000043e00000449000504570000 046b000004510000043f00000449000504570000046a0000045100000440000004490005 04570000046a000004500000044100000449000504570000046a0000044f000004420000 044900050457000004690000044f000004430000044900050457000004690000044e0000 04440000044900050457000004680000044e000004450000044900050457000004680000 044d00000446000004490005044d00030405000004670000044d00000447000004490005 044c0000040300000404000004670000044c00000448000004490005044c000004030000 0404000004670000044b00000449000004490005045100000404000004660000044b0000 044a000004490005045100000404000004660000044a0000044b000004490005044e0002 0405000004650000044a0000044c00000449000504430006040600000404000004650000 04490000044d00000449000504510000040400030462000004480000044b000304490005 044c000004030000040400000464000004480000044f000004490005044c000004030000 0404000004640000044700000450000004490005044d0003040500000463000004470000 045100000449000504570000046300000446000004520000044900050457000004630000 044500000453000004490005045700000462000004450000045400000449000504570000 046200000444000004550000044900050457000004610000044400000456000004490005 045700000461000004430000045700000449000504570000046000000443000004580000 044900050457000004600000044200000459000004490005045700000460000004410000 045a00000449000504570000045f000004410000045b00000449000504570000041e0000 043e0001043e000004000000045c00000449000504570000041d0002043c0002043d0002 045d00000449000504570000041c0084045d00000449000504570000041d0002043c0002 043d0002045d0000044900050457000004ff0000044900050457000004ff000004490005 0457000004ff0000044900050457000004ff0000044900050457000004ff000004490005 0457000004ff0000044900050457000004ff000004490005045100000404000004ff0000 04490005045000010404000004ff000004490005044f0000040000000404000004ff0000 04490005044e0000040100000404000004ff000004490005044d00000402000004040000 043e0000043f0000043e0000043e000004490005044c00000403000004040000043e0000 043f0000043e0000043e00000449000504430006040100000403000004040000043e0000 043f0000043e0000043e000004490005044c0006040300ff0001044900050451000004ff 045000050451000004ff045000050451000004ff0450000504ff04a30005045a0000043a 0003043b0003043b00030440000004460005045900010439000004030000043900000403 00000439000004030000043e000104460005045800000400000004390000040300000439 0000040300000439000004030000043d000004000000044600050457000004010000043e 00000439000004030000043e0000043c000004010000044600050456000004020000043d 0000043a000004030000043d0000043c000004020000044600050455000004030000043c 0000043b000004030000043c0000043c00000403000004460005044c0006040100000403 00000430000604030000043c000004030000043b0000043d000004030000044600050455 000604390000043d000004030000043a0000043e000604450005045a000004390000043e 000004030000043900000444000004460005045a000004390000043e0000040300000439 00000444000004460005045a000004390005043a0003043a0005043f00000446000504ff 04a3000504ff04a3000504ff04a3000504ff04a3000504ff04a3000504ff04a3000504ff 04a3000504ff04a3000504ff04a3000504ff04a3000504ff04a3000504ff04a3000504ff 04a3000504ff04a3000504ff04a3000504ff04a3000504ff04a3000504ff04a3000504ff 04a3000504ff04a3000501ff01a202000005010002ff02a00100020000050100020004ff 049f0100020000050100020004ff049f0100020000050100020004ff049f010002000005 0100020004ff049f0100020000050100020004ff049f0100020000050100020004010282 040802830407028204020100020000050100020004010200048001000408020004810100 040702000480010004020100020000050100020004010200048001000408020004810100 040702000480010004020100020000050100020004010200048001000408020004810100 040702000480010004020100020000050100020004010200048001000408020004810100 040702000480010004020100020000050100020004010200048001000408020004810100 040702000480010004020100020000050100020004010200048001000408020004810100 04070200048001000402010002000005010002000401020004230002043c000004060000 04130100040802000415000204200000042c000004180100040702000415000204200000 04140000041d000004100100040201000200000501000200040102000400020a04150001 04020001041d0000041b00000406000004130100040802000400010a0407000104020001 041a000004020000042c000004180100040702000400010a0407000104020001041a0000 040200000414000004190000040200000410010004020100020000050100020004010200 0400020901000415000004040000041d0000042300000413010004080200040001090200 0407000004040000041a0000043000000418010004070200040001090200040700000404 0000041a0000041800000419000004020000041001000402010002000005010002000401 020004000201040601010415000004070000040000020403000304020000040000020405 000204020003040700020400000004010000040000010400000004020002040000000413 010004080200040001010006020104060000040600000401000004030000040200030402 000004000002040100020401000004000005040200030407000304020000040000020403 000204000000040100000402000304110100040702000400010100060201040600000406 000004010000040300000402000304020000040000020401000204010000040000050402 000304060000040200030402000004000002040300020400000004000002040100000400 0002040c0100040201000200000501000200040102000400020104060101041600010405 000104010001040100010401000104010001040100010405000004020001040100010405 000104010001040100010402000004010001040100010413010004080200040001010006 020104060000040600000401000004030000040100010401000104010001040100010401 000004020000040500000401000104010001040500010401000104010001040100010401 000104010001040100000401000104010001041001000407020004000101000602010406 000004060000040100000403000004010001040100010401000104010001040100000402 000004050000040100010401000104050000040100010401000104010001040100010401 000104010001040100000402000104010001040b01000402010002000005010002000401 020004000201040601010418000104030000040300000406000004010000040300000405 000004020000040300000405000004030000040100000403000004010000040300000413 010004080200040001010006020104060000040600000401000004030000040600000401 0000040300000401000004020000040400000402000004030000040a0000040100000403 000004010000040300000401000004010000040300000410010004070200040001010006 020104060000040600000401000004030000040600000401000004030000040100000402 000004040000040200000403000004050000040100000403000004010000040300000401 000004030000040100000402000004030000040b01000402010002000005010002000401 02000400020104060101041a000104010000040300000402000404010000040300000405 000004020000040300000405000004030000040100000403000004010000040300000413 010004080200040001010006020104060000040200000402000004010000040300000402 000404010000040300000401000004020000040300000403000504060004040100000403 000004010000040300000401000004010005041001000407020004000101000602010406 000004020000040200000401000004030000040200040401000004030000040100000402 000004030000040300050405000004010005040100000403000004010000040300000401 00000402000004030000040b010004020100020000050100020004010200040002010406 0101041b0000040100000403000004010001040200000401000004030000040500000402 000004030000040500000403000004010000040300000401000004030000041301000408 020004000101000602010406000004030000040100000401000004030000040100010402 0000040100000403000004010000040200000402000004040000040a0001040200000401 000004030000040100000403000004010000040100000415010004070200040001010006 020104060000040300000401000004010000040300000401000104020000040100000403 000004010000040200000402000004040000040a00000401000004060000040300000401 000004030000040100000402000004030000040b01000402010002000005010002000401 020004000201040601010415000004040000040100000403000004010000040300000401 000004030000040500000402000004030000040500000403000004010000040300000401 000004030000041301000408020004000101000602010407000004030001040200000403 00000401000004030000040100000403000004010000040200000401000004050000040a 000004030000040100000403000004010000040300000401000004010000041501000407 020004000101000602010407000004030001040200000403000004010000040300000401 00000403000004010000040200000401000004050000040a000004010000040600000403 00000401000004030000040100000402000004030000040b010004020100020000050100 020004010200040002010406010104150001040200010401000004030000040100010401 000104010001040100010405000004020001040100010405000104010001040100000403 000004010001040100010413010004080200040001010006020104070001040200010402 000104010001040100010401000104010000040300000401000004020000040000000406 000104010001040500010401000104010000040300000401000104010001040100000401 000104010001041001000407020004000101000602010407000104020001040200010401 000104010001040100010401000004030000040100000402000004000000040600010401 000104050000040100010401000104010000040300000401000104010001040100000402 000004030000040b01000402010002000005010002000401020004000201010804170002 040300000403000004020002040000010400000004000002040700010401000304070002 040000000401000004030000040200020400000004130100040802000400010102080409 000204010000040200020400000004020002040000010400000004030000040200010400 000004000005040200030407000204000001040000000403000004020002040000000401 000004020003041101000407020004000101020804090002040100000402000204000000 040200020400000104000000040300000402000104000000040000050402000304060000 0402000304020000040300000402000204000000040200010400000004030000040b0100 04020100020000050100020004010200040002000109042e0000041f0000042301000408 020004000100020904580000041b010004070200040001000209045b0000041701000402 0100020000050100020004010200043a0000041a0001040100010423010004080200045f 000104010001041b01000407020004620001040100010417010004020100020000050100 020004010200043a0000041b0003042401000408020004600003041c0100040702000463 000304180100040201000200000501000200040102000480010004080200048101000407 020004800100040201000200000501000200040102000480010004080200048101000407 020004800100040201000200000501000200040102000480010004080200048101000407 020004800100040201000200000501000200040102000480010004080200048101000407 020004800100040201000200000501000200040102000480010004080200048101000407 020004800100040201000200000501000200040102000480010004080200048101000407 020004800100040201000200000501000200040102000181040802000182040702000181 04020100020000050100020004ff049f0100020000050100020004ff049f010002000005 0100020004ff049f0100020000050100020004ff049f0100020000050100020004ff049f 0100020000050100020004ff049f0100020000050100020004ff049f0100020000050100 02000411013d044d013d044d013d04370100020000050100020004110100030a0201030e 0205030c0201030a02000411000004050000040300000404000304250100030a02010303 020503170201030a0200041400000403000004040001042b0100030a0201030902050311 0201030a0200040c00000405000004010003041c01000200000501000200041101000308 02020100030e020004030100030c020303080200040f0002040400000402000204030000 040300000424010003080202010003030200040301000317020303080200041800000404 000004000000042b010003080202010003090200040301000311020303080200040a0002 040400000401000004030000041b0100020000050100020004110100030602030101030e 020004030100030c02050306020004110000040400000404000004030000042901000306 0203010103030200040301000317020503060200040c0000040000020402000004020000 0403000004010000042b010003060203010103090200040301000311020503060200040c 0000040400000401000004030000041b0100020000050100020004110100030402030401 0101030e020004030100030c020104010203030402000411000004040000040400000403 00000429010003040203040101010303020004030100031702010401020303040200040c 00010401000104010000040200000402000004020000042b010003040203040101010309 020004030100031102010401020303040200040c0000040400000401000004030000041b 01000200000501000200041101000302020304030101030e020004030100030c02010403 020303020200041100000403000004050000040300000400000204250100030202030403 01010303020004030100031702010403020303020200040c000004030000040100000401 00000402000004030000042b010003020203040301010309020004030100031102010403 020303020200040c00000403000004030003041c01000200000501000200041101000300 020304050101030e020004030100030c0201040502030300020004110000040300000405 000004030001040200000424010003000203040501010303020004030100031702010405 020303000200040c00000403000004010000040100000402000004030000042b01000300 0203040501010309020004030100031102010405020303000200040c0000040300000402 000004030000041b0100020000050100020004110100020204070101030e020004030100 030c02010407010202000411000004030000040500000403000004030000042401000202 04070101030302000403010003170201040701020200040c000004030000040100000401 000004020006042a0100020204070101030902000403010003110201040701020200040c 0000040300000402000004030000041b0100020000050100020004110100030001030405 0101030e020004030100030c020104050103030002000411000004020000040600000403 000004030000042401000300010304050101030302000403010003170201040501030300 0200040c000004030000040100000400000004080000042b010003000103040501010309 020004030100031102010405010303000200040c0000040200000403000004030000041b 01000200000501000200041101000302010304030101030e020004030100030c02010403 010303020200041100000402000004060000040300000403000004240100030201030403 01010303020004030100031702010403010303020200040c000104010001040100000400 000004080000042b01000302010304030101030902000403010003110201040301030302 0200040c0000040200000403000004030000041b01000200000501000200041101000304 010304010101030e020004030100030c0201040101030304020004110000040200000406 000004040003042501000304010304010101030302000403010003170201040101030304 0200040c000004000002040200000400000004080000042b010003040103040101010309 020004030100031102010401010303040200040c00000402000004040003041c01000200 0005010002000411010003060105030e020004030100030c0201010303060200044d0100 03060105030302000403010003170201010303060200040c0000043f0100030601050309 020004030100031102010103030602000437010002000005010002000411010003080103 030e020004030100030c0200010203080200044d01000308010303030200040301000317 0200010203080200040c0000043f01000308010303090200040301000311020001020308 020004370100020000050100020004110100030a0101030e02000104030c02000100030a 0200044d0100030a0101030302000104031702000100030a0200040c0000043f0100030a 0101030902000104031102000100030a020004370100020000050100020004110100023c 044d0100023c044d0100023c04370100020000050100020004ff049f0100020000050100 020004ff049f0100020000050100020004ff049f0100020000050100020004ff049f0100 020000050100020004ff049f01000200000501ff01a20200000502ff02a300ff00ff00ff 00ff00ff0000 end %%EndDocument @endspecial 356 2372 a(Figure)h(2:)22 b(Snapshot)17 b(of)g(dra)o(wing)g(a)f (p)q(olygon)h(using)g fg(drawpoly)p fl(.)73 2502 y(The)h(returned)g(v)o(ector) g fg(w)g fl(con)o(tains)g(the)g(p)q(olygon)h(v)o(ertices,)e(as)i(complex)d (n)o(um)o(b)q(ers,)h(in)h(the)g(order)0 2562 y(they)12 b(w)o(ere)g(en)o(tered\ .)19 b(The)12 b(v)o(ector)g fg(beta)f fl(giv)o(es)h(the)g(turning)h(angles.) 20 b(If)12 b(a)h(prop)q(er)h(p)q(olygon)f(w)o(as)g(en)o(tered)0 2622 y(in)j (coun)o(terclo)q(c)o(kwise)e(order,)i(then)g fg(sum\(beta\))d fl(should)k(equ\ al)f fj(\000)p fl(2)g(\(up)h(to)f(rounding)h(errors\).)963 2795 y(5)g eop %%Page: 6 6 bop 73 42 a fl(If)18 b(in)o(teger)f fg(fig)f fl(is)i(supplied,)f(it)h(is)g (the)f(\014gure)h(used)g(for)h(dra)o(wing;)f(otherwise)g(the)g(curren)o(t)f (\014gure)0 102 y(is)g(used.)24 b(By)16 b(default)h(the)g(axes)g(limits)d(are) j(reset)g(to)g(predetermined)e(v)m(alues,)h(but)i(if)e(a)i(v)o(ector)e fg(axl\ im)0 162 y fl(is)g(giv)o(en,)f(it)h(is)g(used)g(for)h(the)f(axes)g(limits.)73 222 y fi(Note)e(to)f(MS-Windows)h(users:)22 b fl(T)l(o)12 b(use)f fg(drawpoly) p fl(,)e(y)o(ou)j(m)o(ust)e(\014rst)h(select)g fh(Enable)h(bac)n(kground)0 282 y(pro)r(cess)18 b fl(from)g(the)g fh(Options)h fl(men)o(u)d(of)j(the)g(comman\ d)d(windo)o(w.)29 b(This)19 b(m)o(ust)e(b)q(e)i(done)g(eac)o(h)f(time)0 342 y (y)o(ou)c(start)g(MA)l(TLAB.)e(Also,)i(the)f(preview)g(line)f(w)o(orks)i(di\ \013eren)o(tly:)19 b(it)13 b(app)q(ears)i(only)e(when)h(y)o(ou)g(press)0 403 y (and)i(hold)f(the)g(mouse)f(button,)i(and)g(will)e(follo)o(w)g(as)i(y)o(ou)f (then)g(drag)h(the)f(mouse.)20 b(Release)14 b(the)h(button)0 463 y(to)i(place) e(the)h(v)o(ertex.)0 593 y fh(Snapping)j(to)g(a)g(grid)0 685 y fl(Y)l(ou)f (can)f(easily)g(place)g(some)g(or)h(all)f(of)h(y)o(our)f(v)o(ertices)f(exactl\ y)g(on)i(a)g(discrete)f(grid.)25 b(This)18 b(feature)f(is)0 745 y(con)o(troll\ ed)i(b)o(y)g(the)g(c)o(hec)o(kb)q(o)o(x)582 727 y fr(2)620 745 y fl(lab)q(ele\ d)g fg(Snap)24 b(to)h(grid)p fl(.)k(When)20 b(this)f(b)q(o)o(x)h(is)f(activ)m (ated,)h(a)g(grid)g(of)0 805 y(dotted)15 b(lines)f(is)g(dra)o(wn)h(to)g(indic\ ate)f(the)h(allo)o(w)o(able)e(v)o(ertex)g(sites.)21 b(By)14 b(default,)g(the) g(grid)h(is)g(spaced)g(b)o(y)0 866 y(1)p fk(=)p fl(16)k(of)f(the)g(axes)g(dim\ ensions)e(in)i(eac)o(h)f(direction;)g(y)o(ou)h(can)g(v)m(ary)g(that)g(fractio\ n)g(b)q(et)o(w)o(een)e(1)p fk(=)p fl(4)j(and)0 926 y(1)p fk(=)p fl(32)g(with) f(the)g(slider)429 908 y fr(3)465 926 y fl(underneath)g(the)g(c)o(hec)o(kb)q (o)o(x.)25 b(As)17 b(y)o(ou)h(mo)o(v)o(e)e(the)h(p)q(oin)o(ter,)h(the)f(previ\ ew)g(line)0 986 y(will)e(no)o(w)i(end)g(only)f(on)h(a)g(grid)f(p)q(oin)o(t.) 22 b(Y)l(ou)17 b(ma)o(y)e(con)o(tin)o(ue)g(to)i(place)f(v)o(ertices)f(as)i (b)q(efore.)22 b(When)16 b(the)0 1046 y(c)o(hec)o(kb)q(o)o(x)f(is)h(deactiv)m (ated,)f(the)h(grid)g(lines)g(will)f(b)q(e)h(erased)g(and)h(the)f(restriction) g(remo)o(v)o(ed.)0 1176 y fh(Quan)n(tizing)j(lengths)f(and)h(angles)0 1269 y fl(Y)l(ou)d(can)g(also)g(restrict)f(some)f(or)i(all)g(of)g(the)f(side)g(lengt\ hs)h(and)h(turning)e(angles)i(of)f(the)f(p)q(olygon)i(to)f(b)q(e)0 1329 y(m)o (ultiples)d(of)k(a)g(\014xed)e(amoun)o(t.)21 b(This)16 b(can)h(b)q(e)f(useful) g(for)h(dra)o(wing)f(parts)h(of)g(regular)f(p)q(olygons.)23 b(Tw)o(o)0 1389 y (c)o(hec)o(kb)q(o)o(xes)15 b(in)g(the)h(\014gure)h(windo)o(w)f(con)o(trol)g (these)g(mo)q(des.)73 1449 y(When)22 b(side)f(lengths)g(are)h(quan)o(tized,)f (the)g(preview)f(line)h(will)f(end)h(only)h(at)f(p)q(oin)o(ts)h(whic)o(h)f (giv)o(e)0 1509 y(the)d(resulting)g(side)g(a)g(length)g(that)h(is)f(an)h(in)o (teger)e(m)o(ultiple)e(of)k(a)g(fraction)f(of)g(the)g(axes)h(width.)27 b(The) 0 1569 y(initial)16 b(v)m(alue)g(of)i(that)f(fraction)g(is)g(1)p fk(=)p fl (8)h(and)f(can)g(b)q(e)h(v)m(aried)e(b)q(et)o(w)o(een)g(1)p fk(=)p fl(3)i(and) g(1)p fk(=)p fl(20)g(with)f(the)g(slider)0 1630 y(underneath)i(the)f(c)o(hec) o(kb)q(o)o(x.)27 b(When)19 b(angles)g(are)g(quan)o(tized,)f(the)g(angle)h(b)q (et)o(w)o(een)f(the)g(preview)g(line)0 1690 y(and)i(the)f(most)g(recen)o(t)f (side)h(is)g(restricted)g(to)g(in)o(teger)g(m)o(ultiples)d(of)k fk(\031)r(=m) p fl(,)f(where)g fk(m)h fl(is)f(initially)e(12)0 1750 y(and)h(is)g(slider-adj\ ustable)g(from)e(2)j(to)f(24.)27 b(The)17 b(angle)h(quan)o(tization)g(feature) f(is)h(particularly)f(handy)0 1810 y(for)g(dra)o(wing)f(slits.)73 1870 y(The) f(quan)o(tization)g(mo)q(des)g(can)g(b)q(e)g(used)h(indep)q(enden)o(tly)d(or) j(sim)o(ultaneously)l(.)i(The)d(quan)o(tization)0 1931 y(and)22 b(grid)g(mo)q (des)f(are)h(m)o(utually)d(exclusiv)o(e,)i(and)h(activ)m(ating)g(one)g(automa\ tically)e(deactiv)m(ates)h(the)0 1991 y(other\(s\).)0 2121 y fh(In\014nite)d (v)n(ertices)0 2213 y fl(T)l(o)13 b(put)g(a)g(v)o(ertex)f(at)h(in\014nit)o (y)l(,)e(clic)o(k)g(the)h(mouse)g(outside)h(the)f(axes)h(b)q(o)o(x)g(at)g(the) g(prop)q(er)g(exit)f(angle.)20 b(The)0 2273 y(mouse)15 b(p)q(oin)o(ter)h(will) f(c)o(hange)h(to)h(a)g(cross.)k(No)o(w)16 b(clic)o(k)e(again)j(outside)g(the) e(axes)i(b)q(o)o(x)f(where)g(y)o(ou)g(w)o(an)o(t)0 2333 y(the)i(edge)g(from)f (in\014nit)o(y)g(to)i(return.)26 b(No)19 b(preview)e(line)g(will)g(follo)o (w)h(b)q(et)o(w)o(een)f(these)h(clic)o(ks,)e(since)i(no)0 2394 y(edge)c(actua\ lly)f(exists.)20 b(The)14 b(p)q(oin)o(ter)g(will)f(then)g(rev)o(ert)g(to)h (a)h(crosshair.)21 b(\(The)14 b fg(Snap)24 b(to)h(grid)12 b fl(feature)0 2440 y 780 2 v 56 2471 a ft(2)75 2486 y fo(A)i(c)o(hec)o(kb)q(o)o(x)g(toggles)g (b)q(et)o(w)o(een)h(t)o(w)o(o)f(states)h(eac)o(h)f(time)f(y)o(ou)g(clic)o(k)h (the)g(mouse)f(on)h(it.)56 2521 y ft(3)75 2536 y fo(A)f(slider's)h(v)n(alue)e (can)i(b)q(e)g(c)o(hanged)g(b)o(y)f(pressing)h(and)f(holding)g(a)g(mouse)f (button)i(on)f(the)h(slider's)f(bar,)h(mo)o(ving)c(the)0 2585 y(mouse)k(left) h(or)g(righ)o(t,)f(and)h(releasing)g(the)g(mouse)f(button.)21 b(Ordinarily)14 b(a)h(slider)g(tak)o(es)g(on)g(con)o(tin)o(uous)g(v)n(alues,)f(but)h(in)0 2635 y fm(drawpoly)d fo(all)h(v)n(alues)g(are)i(rounded)f(to)g(in)o(tegers.)963 2795 y fl(6)g eop %%Page: 7 7 bop 0 42 a fl(still)15 b(has)h(e\013ect)g(on)g(clic)o(ks)e(outside)i(the)g (axes)g(b)q(o)o(x,)g(ev)o(en)e(though)j(the)f(grid)g(is)g(not)g(dra)o(wn)g (outside)g(the)0 102 y(b)q(o)o(x.\))73 162 y(No)o(w)c(mo)o(v)o(e)e(to)i(place) g(the)f(next)h(\(\014nite,)g(please!\))19 b(v)o(ertex.)f(If)12 b(y)o(ou)g(mo) o(v)o(e)d(the)j(mouse)f(to)i(a)f(p)q(oin)o(t)g(suc)o(h)0 222 y(that)18 b(the) g(resulting)f(edge)h(w)o(ould)g(in)o(tersect)e(the)i(previous)g(edge)g(at)g (a)g fi(\014nite)h fl(p)q(oin)o(t)f(outside)g(the)g(axes)0 282 y(b)q(o)o(x,)e (the)g(preview)g(line)f(represen)o(ts)h(the)g(pro)s(jection)g(of)h(the)f(curr\ en)o(t)f(p)q(oin)o(t)i(on)o(to)g(the)f(edge)g(returning)0 342 y(from)k(in\014\ nit)o(y)g(with)h(a)h(turn)f(of)g fj(\000)p fl(1.)37 b(Also,)21 b(the)g(length\ -quan)o(tization)g(mo)q(de)f(will)g(b)q(e)i(temp)q(orarily)0 403 y(disabled,) 15 b(but)i(the)f(other)g(sp)q(ecial)g(mo)q(des)g(will)f(w)o(ork)h(as)h(exp)q (ected.)16 492 y fg([wn,betan,i)o(dx)o(])23 b(=)i(modpoly\(w,)o(bet)o(a\))73 582 y fl(Use)13 b fg(modpoly)e fl(to)i(graphically)g(c)o(hange)g(an)h(existin\ g)e(p)q(olygon.)21 b fg(modpoly)11 b fl(dra)o(ws)j(the)f(p)q(olygon)h(with)0 642 y(large)j(dots)g(at)h(the)e(v)o(ertices.)22 b(T)l(o)17 b(mo)o(v)o(e)e(a)i (v)o(ertex,)e(p)q(osition)j(the)e(cursor)h(o)o(v)o(er)f(it)h(and)g(press)g (and)h(hold)0 702 y(the)e(left)f(mouse)h(button.)21 b(The)c(dot)f(c)o(hanges) h(color,)f(and)g(adjacen)o(t)g(sides)g(b)q(ecome)f(dashed.)22 b(Drag)17 b(the) 0 763 y(v)o(ertex)e(to)h(its)g(new)h(lo)q(cation)f(and)h(release)e(the)h(mous\ e.)73 823 y(The)h(button)g(mark)o(ed)e fg(Add)g fl(allo)o(ws)i(y)o(ou)f(to)h (add)g(a)g(single)f(v)o(ertex.)21 b(Clic)o(k)15 b(on)i(this)f(button)h(and)g (the)0 883 y(cursor)e(c)o(hanges)f(to)g(a)h(crosshair.)21 b(If)14 b(y)o(ou)g (then)g(clic)o(k)e(on)j(a)f(side)g(of)g(the)g(p)q(olygon,)h(a)g(new)f(v)o(ert\ ex)f(will)g(b)q(e)0 943 y(added)k(to)g(that)f(side.)22 b(On)16 b(a)h(\014nite) f(side,)g(the)g(new)g(v)o(ertex)f(app)q(ears)j(at)e(the)h(midp)q(oin)o(t;)d (on)j(an)g(in\014nite)0 1003 y(one,)e(the)h(v)o(ertex)d(app)q(ears)k(at)f(a)g (\\reasonable")h(distance)e(from)f(its)h(\014nite)g(neigh)o(b)q(or.)21 b(Once) 15 b(the)h(v)o(ertex)0 1064 y(has)j(b)q(een)f(added,)h(the)f(cursor)g(rev)o (erts)f(to)i(a)f(circle)f(and)h(the)g(default)g(mo)q(de)g(is)g(resumed.)25 b (T)l(o)19 b(cancel)0 1124 y(the)d(addition)g(b)q(efore)h(clic)o(king)d(on)j (a)f(side,)g(press)g fg(Add)f fl(again.)73 1184 y(The)21 b fg(Delete)e fl(but\ ton)j(w)o(orks)f(similarly)l(.)33 b(The)21 b(cursor)g(c)o(hanges)h(to)f(a)h (\015eur,)f(and)h(clic)o(king)d(on)j(a)0 1244 y(v)o(ertex)15 b(deletes)g(it.) 21 b(The)16 b(default)g(mo)q(de)f(then)h(resumes.)k(Y)l(ou)c(cannot)h(delete) e(in\014nite)g(v)o(ertices.)73 1304 y(As)h(y)o(ou)f(adjust)i(a)f(neigh)o(b)q (or)g(of)g(an)g(in\014nite)f(v)o(ertex,)f(the)i(p)q(oin)o(t)g(at)g(whic)o(h)f (the)g(in\014nite)g(side)g(lea)o(v)o(es)0 1365 y(the)i(axes)g(b)q(o)o(x)g(mo) o(v)o(es)e(as)i(w)o(ell,)e(so)j(as)f(to)h(k)o(eep)d(the)i(turning)g(angle)g (at)g(in\014nit)o(y)f(constan)o(t.)24 b(T)l(o)17 b(c)o(hange)0 1425 y(the)f (angle)g(at)h(in\014nit)o(y)l(,)d(\014rst)i(add)h(a)f(v)o(ertex)f(to)h(the)g (in\014nite)f(edge,)h(mo)o(v)o(e)e(it,)h(and)i(then)f(delete)e(it.)21 b(Y)l (ou)0 1485 y(cannot)15 b(mo)o(v)o(e)c(or)k(delete)d(an)j(in\014nite)e(v)o(ert\ ex,)f(and)j(\014nite)e(v)o(ertices)f(cannot)j(b)q(e)f(mo)o(v)o(ed)e(to)i(in\ \014nit)o(y)l(.)19 b(Y)l(ou)0 1545 y(also)j(cannot)f(delete)f(a)i(\014nite)e (v)o(ertex)g(that)i(is)e(doubly)i(adjacen)o(t)f(to)g(in\014nit)o(y)l(.)35 b (\(The)21 b(other)g(to)q(olb)q(o)o(x)0 1605 y(routines)16 b(cannot)h(deal)f (with)g(adjacen)o(t)g(in\014nite)g(v)o(ertices)e(an)o(yw)o(a)o(y)l(.\))73 1666 y(The)i(optional)f(output)h fg(idx)f fl(helps)g(y)o(ou)g(k)o(eep)f(trac)o(k)h (of)g(the)h(c)o(hanges)f(that)h(w)o(ere)e(made.)20 b(It)15 b(has)h(the)0 1726 y(same)f(length)g(as)i fg(wn)p fl(,)e(and)h(eac)o(h)f(n)o(umeric)e(en)o(try)i (of)h fg(idx)f fl(is)h(the)f(index)g(that)i(the)e(corresp)q(onding)i(en)o(try) 0 1786 y(of)h fg(wn)e fl(had)i(in)f(the)g(original)g(v)o(ector)f fg(w)p fl (.)24 b(En)o(tries)17 b(of)h fg(idx)e fl(corresp)q(onding)i(to)g(added)f(v)o (ertices)f(ha)o(v)o(e)g(the)0 1846 y(v)m(alue)g fg(NaN)f fl(\(not)i(a)f(n)o (um)o(b)q(er\).)73 1906 y(When)d(y)o(ou)h(are)f(\014nished)g(making)f(c)o(han\ ges,)i(clic)o(k)d(on)j fg(Done)p fl(.)19 b(Keep)12 b(in)h(mind)f(that)i fg (modpoly)d fl(mak)o(es)0 1966 y(no)k(attempt)f(to)h(ensure)g(that)h(the)e(c)o (hanges)h(y)o(ou)g(mak)o(e)e(result)i(in)f(a)i(true)f(p)q(olygon.)21 b(One)15 b(w)o(a)o(y)g(to)g(cause)0 2027 y(trouble)g(is)h(to)f(mak)o(e)f(the)h(sides)h (of)f(an)i(in\014nite)d(v)o(ertex)g(meet)g(at)h(a)h(\014nite)f(p)q(oin)o(t)h (outside)f(the)h(axes)f(b)q(o)o(x.)0 2087 y(Ev)o(en)g(though)h(suc)o(h)f(a)h (p)q(olygon)h(could)e(b)q(e)g(legal)g(if)g(the)g(in)o(tersection)f(p)q(oin)o (t)i(w)o(ere)e(used)i(as)g(the)f(v)o(ertex,)0 2147 y(the)h(to)q(olb)q(o)o(x)h (routines)f(will)g(exp)q(ect)f(an)i(in\014nite)e(v)o(ertex)g(and)i(will)e(b)q (e)h(hop)q(elessly)g(confused.)0 2291 y fe(Solving)23 b(the)f(parameter)e(pro\ blem)0 2384 y fg([z,c,qdat])i(=)j(hpparam\(w,b)o(et)o(a)p fj(f)p fg(,z)o(0,o) o(pt)o(ion)o(s)p fj(g)p fg(\))0 2444 y([z,c,qdat])d(=)j(dparam\(w,be)o(ta)o fj (f)p fg(,z0)o(,op)o(ti)o(ons)o fj(g)p fg(\))0 2504 y([z,c,qdat])d(=)j(stparam\ \(w,b)o(et)o(a)p fj(f)p fg(,e)o(nds)o(,z)o(0,o)o(pti)o(on)o(s)p fj(g)p fg(\)) 0 2564 y([z,c,L,qda)o(t])d(=)j(rparam\(w,be)o(ta)p fj(f)p fg(,)o(cor)o(ne)o (rs,)o(z0,)o(op)o(tio)o(ns)p fj(g)p fg(\))0 2625 y([z,c,qdat])d(=)j(deparam\(\ w,b)o(et)o(a)p fj(f)p fg(,z)o(0,o)o(pt)o(ion)o(s)p fj(g)p fg(\))963 2795 y fl (7)g eop %%Page: 8 8 bop 73 42 a fl(\(Again,)20 b(braces)f(indicate)f(optional)i(argumen)o(ts.\)) 30 b(The)19 b(input)g(parameters)g fg(w)g fl(and)g fg(beta)f fl(de\014ne)0 102 y(the)f(p)q(olygon)g(as)h(describ)q(ed)e(ab)q(o)o(v)o(e.)23 b(The)16 b(option\ al)i(argumen)o(t)d fg(z0)h fl(is)h(for)g(supplying)g(an)g(initial)e(guess)0 162 y(for)j(the)f(prev)o(ertices,)f(and)i(the)f(meaning)g(of)g(the)h fg(optio\ ns)d fl(v)o(ector)i(is)g(a)o(v)m(ailable)g(in)g fg(scparmopt)p fl(.)22 b(The) 0 222 y(common)16 b(output)j(parameters)e(are)h(the)g(prev)o(ertices)e fg(z)p fl(,)i(the)f(m)o(ultiplicativ)n(e)e(constan)o(t)j fg(c)p fl(,)g(and)h fg(qdat) p fl(,)0 282 y(whic)o(h)e(is)h(a)g(matrix)e(of)i(quadrature)h(data,)f(whic)o (h)f(is)h(useful)f(to)i(sa)o(v)o(e)e(when)h(man)o(y)e(calls)i(to)g(mapping)0 342 y(routines)e(will)f(b)q(e)i(made.)73 403 y(The)d(strip)h(and)f(rectangle) g(mo)q(dules)g(eac)o(h)f(ha)o(v)o(e)h(one)g(additional)h(input)f(argumen)o (t.)19 b(F)l(or)c(the)f(strip,)0 463 y(the)20 b(argumen)o(t)e fg(ends)g fl (is)i(a)g(2-v)o(ector)g(whose)g(en)o(tries)f(are)h(the)f(indices)g(of)h(the)f (v)o(ertices)f(that)i(are)g(the)0 523 y(images)c(of)h(the)f(ends)h(of)g(the)g (strip)g(\(left)e(end)i(is)g(the)f(\014rst)h(en)o(try\).)22 b(F)l(or)17 b(the) g(rectangle,)f(the)g(argumen)o(t)0 583 y fg(corners)f fl(is)j(a)g(4-v)o(ector) f(whose)h(elemen)o(ts)d(are)j(the)f(indices)g(of)h(the)f(v)o(ertices)f(that)i (are)g(the)f(images)g(of)0 643 y(the)k(corners)g(of)h(the)f(rectangle,)h(in)f (coun)o(terclo)q(c)o(kwise)e(order.)37 b(The)21 b(\014rst)h(t)o(w)o(o)f(en)o (tries)f(of)i fg(corners)0 704 y fl(should)c(corresp)q(ond)h(to)g(a)f fi(long) 23 b fl(edge)18 b(of)g(the)g(rectangle.)25 b(If)18 b(either)f(of)h(these)f (argumen)o(ts)g(is)h(omitted,)0 764 y(the)e(user)g(will)f(b)q(e)i(ask)o(ed)f (to)g(select)f(the)h(appropriate)h(v)o(ertices)e(with)h(the)g(mouse.)73 824 y (The)e(rectangle)f(map)h(also)g(has)h(another)f(output)h(argumen)o(t,)e fg (L)p fl(,)g(whic)o(h)g(is)h(a)g(parameter)f(asso)q(ciated)0 884 y(with)19 b (the)h(conformal)f(mo)q(dulus)g(of)h(the)f(rectangle.)31 b(It)19 b(is)h(requi\ red)e(b)o(y)h(the)h(other)f(functions)h(in)f(the)0 944 y(rectangle)d(mo)q(dul\ e.)73 1005 y fi(Note)t fl(:)k(Because)13 b(of)g(the)g(w)o(a)o(y)g(the)g(param\ eter)f(problems)g(are)h(p)q(osed,)h(certain)f(restrictions)g(apply)g(to)0 1065 y(the)i(v)o(ertices.)k(F)l(or)c(the)g(half-plane)g(and)g(disk)g(mo)q(dules,)f (the)h(\014rst,)g(second,)g(and)g(next-to-last)h(v)o(ertices)0 1125 y(m)o(ust) j(b)q(e)i(\014nite.)33 b(F)l(or)21 b(the)f(strip,)h(the)g(t)o(w)o(o)f(v)o(ert\ ices)f(after)h(and)h(the)g(one)f(b)q(efore)h(the)f(left-end)g(strip)0 1185 y (image)c(m)o(ust)g(b)q(e)h(\014nite.)24 b(F)l(or)18 b(the)f(rectangle,)f(the) h(t)o(w)o(o)g(v)o(ertices)f(after)h(the)g(image)f(of)i(the)f(\014rst)g(corner) 0 1245 y(ma)o(y)f(not)i(b)q(e)g(in\014nite.)23 b(If)17 b(y)o(ou)h(encoun)o (ter)f(these)g(restrictions,)f(use)i fg(scfix)e fl(to)h(remedy)f(the)h(proble\ m.)0 1306 y(T)o(yp)q(e)f fg(help)24 b(scfix)15 b fl(for)h(syn)o(tax.)0 1450 y fe(F)-6 b(orw)n(ard)25 b(map)0 1542 y fg(hpmap\(zp,w)o(,be)o(ta)o(,z,)o(c)p fj (f)p fg(,q)o(da)o(t|t)o(ol)p fj(g)p fg(\))0 1602 y(dmap\(zp,w,)o(bet)o(a,)o (z,c)o fj(f)p fg(,qd)o(at)o(|to)o(l)p fj(g)p fg(\))0 1663 y(stmap\(zp,w)o(,be) o(ta)o(,z,)o(c)p fj(f)p fg(,q)o(da)o(t|t)o(ol)p fj(g)p fg(\))0 1723 y(rmap\(z\ p,w,)o(bet)o(a,)o(z,c)o(,L)p fj(f)p fg(,)o(qd)o(at|)o(tol)o fj(g)p fg(\))0 1783 y(demap\(zp,w)o(,be)o(ta)o(,z,)o(c)p fj(f)p fg(,q)o(da)o(t|t)o(ol)p fj (g)p fg(\))73 1873 y fl(\(The)14 b fg(|)g fl(represen)o(ts)f(\\or."\))22 b (The)14 b(p)q(oin)o(ts)g(to)g(b)q(e)g(mapp)q(ed)g(are)g(in)f(v)o(ector)h fg (zp)p fl(;)f(the)h(other)g(parameters)0 1933 y(ha)o(v)o(e)i(b)q(een)i(describ) q(ed)e(ab)q(o)o(v)o(e.)24 b(The)18 b(optional)f(argumen)o(t)f(ma)o(y)g(either) g(b)q(e)i fg(qdat)d fl(as)j(describ)q(ed)f(ab)q(o)o(v)o(e)0 1993 y(or)g(a)g (scalar)g(tolerance)f(for)h(the)f(desired)g(accuracy)l(.)23 b(If)16 b(the)g (mapping)g(function)h(is)f(to)h(b)q(e)g(called)e(man)o(y)0 2053 y(times,)f fg (qdat)h fl(should)h(b)q(e)h(supplied)e(rather)i(than)g(recomputed)d(automatic\ ally)h(for)h(eac)o(h)g(call.)0 2198 y fe(In)n(v)n(erse)23 b(map)0 2290 y fg (hpinvmap\(w)o(p,w)o(,b)o(eta)o(,z,)o(c)p fj(f)p fg(,)o(qda)o(t,z)o(0,o)o(pt) o(ion)o(s)p fj(g)p fg(\))0 2350 y(dinvmap\(wp)o(,w,)o(be)o(ta,)o(z,c)o fj(f)p fg(,q)o(dat)o(,z0)o(,op)o(ti)o(ons)o fj(g)p fg(\))0 2411 y(stinvmap\(w)o(p,w) o(,b)o(eta)o(,z,)o(c)p fj(f)p fg(,)o(qda)o(t,z)o(0,o)o(pt)o(ion)o(s)p fj(g)p fg(\))0 2471 y(rinvmap\(wp)o(,w,)o(be)o(ta,)o(z,c)o(,L)p fj(f)o fg(,qd)o(at,) o(z0,)o(op)o(tio)o(ns)p fj(g)p fg(\))0 2531 y(deinvmap\(w)o(p,w)o(,b)o(eta)o (,z,)o(c)p fj(f)p fg(,)o(qda)o(t,z)o(0,o)o(pt)o(ion)o(s)p fj(g)p fg(\))73 2621 y fl(The)18 b(p)q(oin)o(ts)h(whose)g(pre-images)e(are)i(to)f(b)q(e)h(found)g (are)f(in)g fg(wp)p fl(.)27 b(As)18 b(with)g(the)g(forw)o(ard)h(map,)e(the) 963 2795 y(8)g eop %%Page: 9 9 bop 0 42 a fl(argumen)o(t)18 b fg(qdat)g fl(is)h(not)h(required)e(but)h(is)h (recomme)o(nded)c(if)j(man)o(y)f(calls)h(are)g(made.)29 b(The)20 b(optional)0 102 y(parameter)14 b fg(z0)h fl(allo)o(ws)h(man)o(ual)e(o)o(v)o(erride)g(of)i (the)g(starting)g(p)q(oin)o(ts)g(of)g(the)f(computations)g(and)h(is)g(ordi-)0 162 y(narily)g(un)o(used.)21 b(The)16 b(meaning)f(of)i fg(options)c fl(is)j (do)q(cumen)o(ted)f(in)h fg(scimapopt)p fl(.)0 306 y fe(Graphical)22 b(output) 0 399 y fg([h,re,im])g(=)k(hpplot\(w,)o(bet)o(a,)o(z,c)o fj(f)p fg(,re)o(|n)o (1,i)o(m|n)o(2,)o(opt)o(ion)o(s)p fj(g)p fg(\))0 459 y([h,r,theta)o(])d(=)i (dplot\(w,be)o(ta)o(,z,)o(c)p fj(f)p fg(,r)o(|n)o(1,t)o(het)o(a|)o(n2,)o(opt) o(ion)o(s)p fj(g)p fg(\))0 519 y([h,re,im])d(=)k(stplot\(w,)o(bet)o(a,)o(z,c) o fj(f)p fg(,re)o(|n)o(1,i)o(m|n)o(2,)o(opt)o(ion)o(s)p fj(g)p fg(\))0 579 y ([h,re,im])c(=)k(rplot\(w,b)o(eta)o(,z)o(,c,)o(L)p fj(f)p fg(,r)o(e|)o(n1,)o (im|)o(n2)o(,op)o(tio)o(ns)p fj(g)o fg(\))0 639 y([h,r,theta)o(])d(=)i(deplot\ \(w,b)o(et)o(a,z)o(,c)p fj(f)p fg(,)o(r|)o(n1,)o(the)o(ta)o(|n2)o(,op)o(tio)o (ns)o fj(g)p fg(\))73 729 y fl(Eac)o(h)14 b(of)h(these)e(functions)i(plots)f (the)g(image)f(of)h(a)h(standard)g(orthogonal)h(grid)e(in)g(the)f(fundamen)o (tal)0 789 y(domain.)20 b(The)15 b(grid)g(is)f(cartesian)h(for)g(the)g(half-p\ lane,)f(strip,)h(and)g(rectangle,)f(and)i(p)q(olar)f(for)g(the)g(disk.)0 850 y (With)j(none)g(of)h(the)e(optional)i(argumen)o(ts,)e(ten)h(ev)o(enly)e(spaced) j(curv)o(es)e(in)h(eac)o(h)f(direction)g(are)h(used.)0 910 y(With)g(v)o(ector\ s)g fg(re)g fl(and)h fg(im)f fl(\(resp.)g fg(r)g fl(and)h fg(theta)p fl(\))e (sp)q(eci\014ed,)h(the)h(real)f(and)h(imaginary)e(parts)j(\(resp.)0 970 y(rad\ ii)d(and)i(argumen)o(ts\))e(of)h(the)g(curv)o(es)f(in)g(the)h(grid)g(are)g (supplied)f(b)o(y)h(the)f(user.)27 b(If)17 b(in)o(tegers)g fg(n1)g fl(and)0 1030 y fg(n2)d fl(are)g(giv)o(en,)g(the)g(appropriate)h(n)o(um)o(b)q(ers)e (of)i(curv)o(es)e(in)h(eac)o(h)g(direction)g(are)g(mapp)q(ed.)20 b(The)15 b fg (options)0 1090 y fl(argumen)o(t)g(is)h(describ)q(ed)g(in)g fg(scplotopt)o fl (.)73 1150 y(The)h(resulting)f(curv)o(es)g(should)h(b)q(e)g(smo)q(oth)g(and)g (in)o(tersect)e(at)i(righ)o(t)g(angles.)23 b(Ho)o(w)o(ev)o(er,)14 b(adaptiv)o (e)0 1211 y(re\014nemen)o(t)j(is)i(done)h(based)g(on)g(the)f(region)h(inside) e(the)h(axes)h(b)q(o)o(x)g(at)f(the)h(time)d(of)j(the)f(call)f(\(or)i(the)0 1271 y(region)c(resulting)f(from)g(autoscaling\),)h(so)g(if)f(particular)h (regions)g(are)f(of)h(in)o(terest,)f(set)g(the)h(axes)g(limits)0 1331 y(via)g fg(axis)f fl(and)i(issue)f(a)g fg(hold)24 b(on)16 b fl(command)e fi(b)n(efor) n(e)20 b fl(in)o(v)o(oking)15 b fi(xx)6 b fg(plot)p fl(.)73 1391 y(If)21 b (output)h(argumen)o(ts)f(are)h(supplied,)f(the)h(\014rst)f(will)g(b)q(e)g(ret\ urned)h(as)g(a)g(v)o(ector)e(of)i(handles)g(to)0 1451 y(the)g(curv)o(es)e(dra) o(wn,)k(and)e(the)f(last)h(t)o(w)o(o)g(will)f(b)q(e)h(giv)o(en)f(the)g(approp\ riate)h fg(var1)f fl(and)h fg(var2)e fl(v)m(alues,)0 1512 y(as)g(describ)q (ed)e(ab)q(o)o(v)o(e,)h(for)h(the)e(curv)o(es)g(dra)o(wn.)30 b(Ha)o(ving)19 b (the)f(handles)i(to)f(the)g(curv)o(es)f(allo)o(ws)h(to)g(y)o(ou)0 1572 y(c)o (hange)c(their)f(c)o(haracteristics)g(\(via)g fg(set)p fl(\))g(and)i(reco)o (v)o(er)d(the)i(co)q(ordinates)h(of)f(all)f(the)h(p)q(oin)o(ts)g(that)h(w)o (ere)0 1632 y(plotted)g(\(via)g fg(get\(h\(j\),')o(xda)o(ta)o('\))d fl(and)k fg(get\(h\(j\),)o('yd)o(ata)o('\))p fl(\))o(.)0 1776 y fe(Mo)r(di\014cation) 22 b(of)i(the)e(fundamen)n(tal)e(domain)0 1869 y fl(Three)d(routines)g(let)f (y)o(ou)h(alter)f(the)h(fundamen)o(tal)e(domain)h(of)i(an)f(in)o(terior)f(map) g(b)o(y)g(using)i(a)f(M\177)-24 b(obius)0 1929 y(transformation)16 b(to)h(mo) q(dify)e(the)h(solution)g(to)h(the)f(parameter)f(problem.)73 1989 y(The)f(fun\ ctions)g fg(hp2disk)d fl(and)j fg(disk2hp)d fl(allo)o(w)j(y)o(ou)f(to)i(in)o (terc)o(hange)d(solutions)i(for)h(the)e(half-plane)0 2049 y(and)21 b(disk)e (in)o(terior)g(mapping)h(problems.)31 b(The)20 b(function)g fg(dfixwc)e fl (lets)i(y)o(ou)g(sp)q(ecify)f(the)h(conformal)0 2110 y(cen)o(ter)f(\(image)g (of)i(zero\))f(of)h(a)g(disk)f(map.)33 b(A)20 b(graphical)g(implem)o(en)o(tat\ ion)e(of)i(this)h(function)f(is)g(the)0 2170 y(routine)14 b fg(ptsource)p fl (,)e(so)j(named)e(b)q(ecause)i(the)f(resulting)g(plot)g(is)g(suggestiv)o(e)g (of)h(an)g(electrostatic)e(p)q(oin)o(t)0 2230 y(c)o(harge.)0 2374 y fe(Applic\ ation:)29 b(F)-6 b(ab)r(er)23 b(p)r(olynomials)16 2467 y fg(F)j(=)f(faber\(m,\ w)o(,be)o(ta,)o(z,c)o(\))73 2556 y fl(This)c(function)f(uses)g(the)g(Sc)o(h)o (w)o(arz-Christo\013el)g(exterior)g(map)f(to)i(compute)e(the)h(co)q(e\016cien) o(ts)f(of)0 2617 y(F)l(ab)q(er)14 b(p)q(olynomials)f(for)h(a)g(p)q(olygon.)22 b(Argumen)o(t)12 b fg(m)h fl(is)h(the)f(degree)h(of)g(the)g(highest-degree)f (p)q(olynomial)963 2795 y(9)g eop %%Page: 10 10 bop 653 714 a @beginspecial 0.000000 @llx 0.000000 @lly 162.000000 @urx 166.000000 @ury 1545.000000 @rwi @setspecial %%BeginDocument: menu13.ps /buffer 512 string def /byte 1 string def /color_packet 3 string def /pixels 768 string def /DirectClassPacket % % Get a DirectClass packet. % % Parameters: % red. % green. % blue. % length: number of pixels minus one of this color (optional). % currentfile color_packet readhexstring pop pop compression 0 gt { /number_pixels 3 def } { currentfile byte readhexstring pop 0 get /number_pixels exch 1 add 3 mul def } ifelse 0 3 number_pixels 1 sub { pixels exch color_packet putinterval } for pixels 0 number_pixels getinterval } bind def /DirectClassImage % % Display a DirectClass image. % systemdict /colorimage known { columns rows 8 [ columns 0 0 rows neg 0 rows ] { DirectClassPacket } false 3 colorimage } { % % No colorimage operator; convert to grayscale. % columns rows 8 [ columns 0 0 rows neg 0 rows ] { GrayDirectClassPacket } image } ifelse } bind def /GrayDirectClassPacket % % Get a DirectClass packet; convert to grayscale. % % Parameters: % red % green % blue % length: number of pixels minus one of this color (optional). % currentfile color_packet readhexstring pop pop color_packet 0 get 0.299 mul color_packet 1 get 0.587 mul add color_packet 2 get 0.114 mul add cvi /gray_packet exch def compression 0 gt { /number_pixels 1 def } { currentfile byte readhexstring pop 0 get /number_pixels exch 1 add def } ifelse 0 1 number_pixels 1 sub { pixels exch gray_packet put } for pixels 0 number_pixels getinterval } bind def /GrayPseudoClassPacket % % Get a PseudoClass packet; convert to grayscale. % % Parameters: % index: index into the colormap. % length: number of pixels minus one of this color (optional). % currentfile byte readhexstring pop 0 get /offset exch 3 mul def /color_packet colormap offset 3 getinterval def color_packet 0 get 0.299 mul color_packet 1 get 0.587 mul add color_packet 2 get 0.114 mul add cvi /gray_packet exch def compression 0 gt { /number_pixels 1 def } { currentfile byte readhexstring pop 0 get /number_pixels exch 1 add def } ifelse 0 1 number_pixels 1 sub { pixels exch gray_packet put } for pixels 0 number_pixels getinterval } bind def /PseudoClassPacket % % Get a PseudoClass packet. % % Parameters: % index: index into the colormap. % length: number of pixels minus one of this color (optional). % currentfile byte readhexstring pop 0 get /offset exch 3 mul def /color_packet colormap offset 3 getinterval def compression 0 gt { /number_pixels 3 def } { currentfile byte readhexstring pop 0 get /number_pixels exch 1 add 3 mul def } ifelse 0 3 number_pixels 1 sub { pixels exch color_packet putinterval } for pixels 0 number_pixels getinterval } bind def /PseudoClassImage % % Display a PseudoClass image. % % Parameters: % class: 0-PseudoClass or 1-Grayscale. % currentfile buffer readline pop token pop /class exch def pop class 0 gt { /grays columns string def columns rows 8 [ columns 0 0 rows neg 0 rows ] { currentfile grays readhexstring pop } image } { % % Parameters: % colors: number of colors in the colormap. % colormap: red, green, blue color packets. % currentfile buffer readline pop token pop /colors exch def pop /colors colors 3 mul def /colormap colors string def currentfile colormap readhexstring pop pop systemdict /colorimage known { columns rows 8 [ columns 0 0 rows neg 0 rows ] { PseudoClassPacket } false 3 colorimage } { % % No colorimage operator; convert to grayscale. % columns rows 8 [ columns 0 0 rows neg 0 rows ] { GrayPseudoClassPacket } image } ifelse } ifelse } bind def /DisplayImage % % Display a DirectClass or PseudoClass image. % % Parameters: % x & y translation. % x & y scale. % image label. % image columns & rows. % class: 0-DirectClass or 1-PseudoClass. % compression: 0-RunlengthEncodedCompression or 1-NoCompression. % hex color packets. % gsave currentfile buffer readline pop token pop /x exch def token pop /y exch def pop x y translate currentfile buffer readline pop token pop /x exch def token pop /y exch def pop /NewCenturySchlbk-Roman findfont 24 scalefont setfont currentfile buffer readline pop 0 y 12 add moveto buffer show pop x y scale currentfile buffer readline pop token pop /columns exch def token pop /rows exch def pop currentfile buffer readline pop token pop /class exch def pop currentfile buffer readline pop token pop /compression exch def pop class 0 gt { PseudoClassImage } { DirectClassImage } ifelse grestore } bind def userdict begin DisplayImage 0 0 162 166 203 208 1 0 0 32 000000 0f0f0f 161616 4d4d4d 545454 727272 797979 868686 8c8c8c 969696 b2b2b2 b6b6b6 bebebe c9c9c9 cccccc d8d8d8 e5e5e5 ffffff 000000 000000 000000 000000 000000 000000 000000 000000 000000 000000 000000 000000 000000 000000 0acb0e800a490e00117e08000a490e00117e08000a490e0011040002110b0000112c0002 11030000110b0000111600011100000111070000110208000a490e001102000111020001 11090000112a00011102000111010000110b000011090000110a00001101000011090000 110208000a490e00110200001104000011090000112a0000110400001101000011160000 110a00001101000011090000110208000a490e0011020000110800031102000011000002 110100001102000011020000110100031102000011000007110700001108000011000002 110200001100000111000000110200031101000211020003110100051101000311020000 110208000a490e0011030001110500011101000111010001110100011100000011020000 110200001100000111010001110100011106000011070000110800011101000111010001 110200001101000011030000110100001102000111010001110100001101000011010001 1101000111010000110208000a490e001105000111030000110600001103000011000000 110200001102000011050000110100001106000011080000110800001103000011010000 110300001101000011060000110200001103000011010000110100001101000011030000 11010000110208000a490e00110700011101000011060000110300001101000011010000 110100001102000411010000110500001103000311010000110800001103000011010000 110300001102000311020000110200001103000011010000110100001101000511010000 110208000a490e0011080000110100001106000011030000110100001101000011010000 11010001110200001101000011040000110a000011080000110300001101000011030000 110500011101000011020000110300001101000011010000110100001106000011020800 0a490e001102000011040000110100001103000011010000110300001101000011000000 110000001100000011010000110300001101000011030000110c00001104000011010000 110300001101000011030000110600001101000011020000110300001101000011010000 1101000011060000110208000a490e001102000111020001110100011101000111010000 11030000110200001102000011020001110100011101000011020000110d000111020001 110100001103000011010000110300001101000011030000110100001102000111010001 1101000011010000110100011101000111010000110208000a490e001104000211040003 1102000011030000110200001102000011030002110000011100000011020005110a0002 110300001103000011010000110300001102000311030001110100031102000011010000 1102000311020000110208000a490e00117e08000a490e00117e08000a490e00117e0800 0a490e00117e08000a490e00117e08000a490e00087f0a490ec80a010ec708000a010e01 11c408010a0002000e0111c40801020000000e011114000511280000117f080100010e01 11140000110300011123000011020000117f080100010e01111400001104000011230000 1183080100010e0111140000110400001101000011000001110100031102000011000002 1103000311020000110000041101000011020003110300031170080100010e0111140000 110300011101000111020001110100011101000111010001110100011101000111010001 110200001102000011010001110100011101000011030000116f080100010e0111140005 110200001103000011030000110100001103000011010000110300001101000011030000 110200001101000011030000110100001174080100010e01111400001107000011030000 110300001101000011030000110100051101000011030000110200001101000511020003 1170080100010e0111140000110700001103000011030000110100001103000011010000 11060000110300001102000011010000110a0001116f080100010e011114000011070000 110300001103000011010000110300001101000011060000110300001102000011010000 110b0000116f080100010e01111400001107000011030001110100011101000111010001 110100011101000111010000110300001102000011010001110100011101000011030000 1101000011010000110100001166080100010e0111140000110700001104000311020000 110000021103000311020000110400011100000011020003110300031102000011010000 110100001166080100010e01112a00001198080100010e01112a00001198080100010e01 112a00001198080100010e0111c4080100010e0111c4080100010e0108c600010e0008c7 00010ec7080000010e0011c6080000010e0011c6080000010e0011c6080000010e001115 0004114b0000115e080000010e00111500001103000111490000115e080000010e001115 00001104000011490000115e080000010e00111500001105000011010000110000011101 000311010000110200001102000011040000110000021103000311010000110200001102 000011040000110000021103000311020000110000001104000011010002110000001102 000311020000110000021140080000010e00111500001105000011010001110200011101 000111000000110200001102000011040001110100011101000111010001110000001102 000011020000110400011101000111010001110100011101000011000001110300001100 00011101000111010001110100011101000111010001113f080000010e00111500001105 000011010000110800001100000011020000110200001104000011030000110100001103 000011000000110200001102000011040000110300001101000011030000110100001101 000011020000110100001103000011010000110300001101000011030000113f08000001 0e0011150000110500001101000011040004110100001101000011010000110500001103 000011010005110100001101000011010000110500001103000011010000110300001101 00001101000011020000110100001103000011010000110300001101000011030000113f 080000010e00111500001105000011010000110300011102000011010000110100001101 000011050000110300001101000011060000110100001101000011050000110300001101 000011030000110100001102000011010000110100001103000011010000110300001101 000011030000113f080000010e0011150000110400001102000011030000110300001101 000011000000110000001100000011050000110300001101000011060000110000001100 000011000000110500001103000011010000110300001101000011020000110000001102 00001103000011010000110300001101000011030000113f080000010e00111500001103 000111020000110300011101000111020000110200001106000011030000110100011101 000111020000110200001106000111010001110100011101000111010000110300011102 00011101000111010001110100011101000011030000113f080000010e00111500041104 000011040002110000011101000011020000110600001103000011020003110300001102 000011060000110000021103000311020000110300001104000211000000110200031102 000011030000113f080000010e00115600001113000011080000114f080000010e001156 0000111200011103000111010001114f080000010e001156000011110001110500031150 080000010e0011c6080000010e0011c6080000010e0011c6080000010e0011c608000001 0e0011c6080000010e0011c6080000010e001132000011020000118e080000010e001115 000011080000110e000011040000111c00001171080000010e00111600001106000011a6 080000010e00111500001100000011040000110000001102000011000000110400001100 000011000000110400001100000011040000110400001100000011000000110400001100 000011020000110000001104000011020000110600001100000011020000110000001100 00001153080000010e00112200001102000011020000110200001102000011040000110a 000011020000110200001102000011040000110600001102000011020000110200001102 0000110200001152080000010e001115000011080000110600001106000011040000110c 000011060000110600001108000011060000110600001157080000010e00111800001102 00001104000011060000110600001104000011020000110a000011060000110400001102 00001106000011060000110600001152080000010e001115000011020000110000001102 000011060000110600001104000011020000110800001106000011060000110200001104 000011060000110600001157080000010e00112200001106000011060000111400001106 00001110000011060000110600001152080000010e001115000011080000110200001102 000011020000110200001104000011040000110600001102000011020000110200001102 00001104000011020000110200001102000011020000110200001157080000010e00111a 00001108000011000000110400001104000011060000110a000011040000110000001108 00001104000011000000110000001102000011000000110800001152080000010e001143 00001181080000010e00113a0000111c000011040000110200001162080000010e001139 0000110800001112000011060000110000001163080000010e0011c6080000010e0011c6 080000010e0011c6080000010e0011c6080000010e0011c6080000010e0011c608000001 0e0011150000111b0000110a0000111a0002110100001165080000010e0011150000111b 0000110a000011090000110e000011010000110100001165080000010e0011150000111b 0000110a000011090000110e0000110400001165080000010e0011150000110700031103 000311030002110000001106000211000000110200031101000211020003110500021100 00001101000011020003115e080000010e00111500001106000111010001110100011101 000111010001110100011105000111010001110100011101000111010000110200011101 00011105000011010000110100001101000111010001115d080000010e00111500001106 000011030000110600001101000011030000110500001103000011060000110100001107 00001105000011010000110100001101000011030000115d080000010e00111500001106 000011030000110200041101000011030000110500001103000011020004110100001103 000411050000110100001101000011010005115d080000010e0011150000110600001103 000011010001110200001101000011030000110500001103000011010001110200001101 00001102000111020000110500001101000011010000110100001162080000010e001115 000011060000110300001101000011030000110100001103000011050000110300001101 000011030000110100001102000011030000110500001101000011010000110100001162 080000010e00111500001106000111010001110100011101000111010001110100011105 000111010001110100011101000111010000110200011101000111050000110100001101 000011010001110100011101000011010000110100001154080000010e00111500051102 000311030002110000011101000211000000110600021100000011020002110000011101 000111010002110000011104000011010000110100001102000311020000110100001101 00001154080000010e0011c6080000010e0011c6080000010e0011c6080000010e0011c6 080000010e0011c6080000010e0011c6080000010e0011c6080000010e0011c608000001 0e0011c6080000010e001118000011420000110200001164080000010e00111500001104 000011220000111c00001167080000010e00114a0000110e000011040000116408000001 0e0011150000110800001100000011080000110200001100000011080000110000001100 000011020000110000001102000011000000110200001100000011060000110000001100 00001106000011000000115d080000010e00111600001106000011020000110200001106 000011020000110600001102000011020000110200001102000011020000110200001106 0000110400001102000011020000115c080000010e001119000011080000110600001106 0000110a000011060000110a000011080000110400001161080000010e00111a00001104 000011000000110600001102000011000000110000001106000011080000110000001102 000011040000110000001106000011040000110200001100000011000000115c08000001 0e00111b0000110200001102000011020000111600001102000011020000110600001102 000011080000110400001161080000010e00111e0000110a000011020000110a00001106 00001106000011020000110a0000110400001164080000010e0011150000110400001102 000011020000110400001104000011020000110600001102000011020000110200001106 00001102000011080000110400001102000011020000110400001153080000010e001118 000011060000110200001102000011060000110000001108000011060000110200001102 000011020000110200001104000011040000110200001100000011060000115608000001 0e0011c6080000010e0011c6080000010e0011c6080000010e0011c6080000010e0011c6 080000010e0011c6080000010e0008c700010ec7080000010e0011c6080000010e0011c6 080000010e0011c6080000010e0011180000110c0000119e080000010e00111500001104 00001150000011280000110600001125080000010e001126000011910e01110a08000001 0e0011150000110800001100000011060000110800001100000011060000110000001100 000011040000110000001102000011000000110200001100000011060000110200001104 000011000000110200001104000011000000110200001100000011080000110600001102 000011000000110200001100000011000000110200001102000011000000110600001102 000011060e031108080000010e0011160000110600001102000011020000110600001102 000011020000110600001102000011020000110200001102000011020000110200001102 000011020000110200001102000011020000110600001102000011020000110600001102 000011020000110400001102000011020000110200001104000011020000110200001102 00001102000011050e051106080000010e0011190000110800001104000011060000110a 0000110e000011080000110c0000110600001102000011060000110c0000110600001106 0000110600001106000011100e0111010e031104080000010e00111a0000110200001106 000011020000110600001100000011000000110a00001102000011000000110000001108 000011000000110200001102000011020000110200001100000011000000110600001100 000011000000110a00001106000011080000110600001104000011000000110000001102 0000110200001102000011050e01110308021103080000010e00111b0000110600001108 000011020000110a000011060000110600001104000011020000110c0000110600001102 000011060000110c000011060000110600001106000011180e0111010803110408000001 0e00111e0000110600001102000011160000110600001106000011060000110200001102 0000111e0000110600001108000011060000110400001106000011020000110200001105 0e0108031106080000010e00111500001104000011020000110200001106000011040000 1102000011060000110200001102000011020000110200001104000011020000110c0000 110200001102000011020000110200001102000011080000110200001106000011020000 110200001102000011020000110200001102000011100e0008021108080000010e001118 0000110600001100000011020000110400001104000011000000110a0000110400001100 000011000000110800001102000011000000110200001102000011020000110000001104 00001102000011000000110c000011000000110000001102000011040000110000001106 0000110800001100000011020000110200001102000011050e000800110a080000010e00 113d00001187080000010e00118200001142080000010e00113d00001187080000010e00 11c6080000010e0011c6080000010e0011c6080000010e0011c6080000010e0011c60800 00010e0011c6080000010e001116000011000000111800001192080000010e0011150000 110400001102000011440000115f080000010e001132000011340000115c080000010e00 111500001108000011020000110000001106000011080000110000001110000011020000 110000001104000011000000110200001106000011000000110000001102000011000000 1155080000010e00111c0000110400001106000011020000110200001102000011020000 110000001104000011040000110400001102000011060000110600001104000011020000 1158080000010e001115000011080000110e0000110c000011020000110a000011060000 1106000011060000115f080000010e00111c000011060000110000001102000011060000 110200001100000011000000110c00001104000011000000110000001102000011000000 110800001104000011040000110000001154080000010e00111500001108000011060000 1106000011040000110a0000110a0000110a00001102000011060000110a000011530800 00010e00112a000011060000110600001102000011000000110600001110000011060000 11040000115c080000010e00111500001104000011020000110600001102000011020000 110400001102000011040000110c00001102000011020000110600001102000011020000 110a00001153080000010e001116000011000000110a0000110000001102000011000000 1100000011020000110200001100000011000000110c0000110400001100000011040000 110000001104000011000000110000001106000011020000110000001154080000010e00 113f00001185080000010e00112a0000111200001186080000010e00113d000011870800 00010e0011c6080000010e0011c6080000010e0011c6080000010e0011c6080000010e00 11c6080000010e0011c6080000010e0011160000110000001100000011020000111e0000 11060000117e080000010e001115000011040000110c0000112200001177080000010e00 111e000011260000117e080000010e001115000011040000110600001100000011020000 110800001104000011000000110600001108000011040000110200001104000011000000 1104000011060000110000001155080000010e00111a0000110200001102000011020000 110a00001102000011020000110200001102000011020000110800001102000011020000 1102000011020000110200001102000011020000110200001154080000010e0011150000 11000000110000001106000011060000110600001106000011060000110a000011140000 110600001159080000010e00111e000011060000110e0000110600001106000011080000 110200001102000011020000110000001100000011060000110200001100000011000000 1154080000010e0011150000110a000011060000110600001106000011060000110a0000 110c000011060000110600001159080000010e00111e000011060000110e000011060000 110600001108000011020000110200001106000011060000115c080000010e0011150000 110a00001102000011020000110600001102000011020000110600001102000011060000 110c000011020000110200001102000011020000110200001155080000010e00111e0000 110200001100000011040000110600001100000011000000110600001102000011000000 110000001108000011020000110200001102000011000000110000001102000011000000 1100000011020000110000001156080000010e0011c6080000010e001132000011020000 112c000011020000115c080000010e001133000011000000112e000011000000115d0800 00010e0011c6080000010e0011c6080000010e0011c6080000010e0011c6080000010e00 11c6080000010e0011c6080000010e00111600001100000011000000110a0000119e0800 00010e001115000011040000111400001193080000010e0011c6080000010e0011150000 110400001102000011000000110600001100000011000000110200001108000011000000 110400001100000011020000110600001100000011020000110000001104000011000000 1163080000010e00111a00001102000011020000110200001102000011020000110e0000 110200001102000011060000110200001102000011020000110200001102000011620800 00010e001115000011000000110000001108000011040000110600001106000011060000 1106000011060000111000001161080000010e00111e00001106000011060000110a0000 110000001108000011060000110600001106000011000000110000001162080000010e00 11150000110c00001104000011060000110a000011020000110600001106000011730800 00010e00111e00001106000011060000110e000011060000110600001106000011060000 1166080000010e0011150000110800001102000011040000110600001106000011060000 110200001102000011020000110200001104000011020000110200001102000011610800 00010e001120000011000000110200001106000011020000110600001100000011040000 110000001104000011000000110000001108000011000000110400001100000011620800 00010e0011c6080000010e0011c6080000010e0011c6080000010e0011c6080000010e00 11c6080000010e0011c6080000010e0008c700cb end %%EndDocument @endspecial 687 870 a fl(Figure)15 b(3:)22 b(Main)16 b(GUI)g(men)o(u.)0 1004 y(sough)o(t.)28 b(The)19 b(other)f(input)h(argumen)o(ts)e(refer)h(to)g(the)h (solution)f(of)h(the)f(exterior)f(mapping)h(problem.)0 1064 y(The)13 b(output) g(is)g(in)g(the)f(form)g(of)h(an)h(upp)q(er)f(triangular)g(matrix;)f(en)o(tri\ es)g fg(F\(1:j+1,j+)o(1\))d fl(are)k(the)g(co)q(e\016-)0 1124 y(cien)o(ts)g (of)i(the)f fk(j)s fl(th)h(degree)f(F)l(ab)q(er)h(p)q(olynomial,)e(with)h(hig\ h)h(order)f(co)q(e\016cien)o(t)f(\014rst)i(\(as)g(in)f(MA)l(TLAB's)0 1184 y fg (polyval)p fl(\).)19 b(The)d(p)q(olynomials)f(are)h(normalized)f(so)i(that)f (the)g(leading)g(co)q(e\016cien)o(ts)f(are)h(real.)0 1329 y fe(Graphical)22 b (user)h(in)n(terface)f(\(GUI\))0 1421 y fl(The)14 b(graphical)g(user)g(in)o (terface)f(is)h(designed)g(to)g(let)f(y)o(ou)h(use)g(all)g(the)g(ma)s(jor)f (functions)h(of)g(the)g(mo)q(dules)0 1481 y(without)j(using)f(the)g(command)e (line.)73 1542 y(T)l(o)f(start)g(using)g(the)f(GUI,)f(create)h(the)g(men)o (u)f(system)g(b)o(y)g(in)o(v)o(oking)h fg(scgui)p fl(.)18 b(The)12 b(curren)o (t)g(\014gure,)h(or)0 1602 y(a)h(new)h(one)f(if)f(none)i(exists,)e(will)g(b)q (e)h(cleared)f(and)i(giv)o(en)e(a)i(new)f(men)o(u)e(called)h fh(Sc)n(h)n(w)n (arz-Christo\013el)p fl(.)0 1662 y(T)l(o)19 b(see)f(the)h(a)o(v)m(ailable)f (men)o(u)f(items,)f(press)j(and)h(hold)e(the)h(left)f(mouse)f(button)i(on)h (this)e(text.)28 b(On)19 b(a)0 1722 y(Sun)d(w)o(orkstation,)g(the)g(men)o(u)e (should)i(lo)q(ok)g(something)f(lik)o(e)f(Figure)i(2.)21 b(The)16 b(items)e (a)o(v)m(ailable)h(on)h(the)0 1782 y(men)o(u)e(are:)98 1864 y fh(Prop)r(ertie\ s...)363 b fl(P)o(op-up)17 b(windo)o(w)f(with)g(con)o(trols)g(for)h(GUI)f(fun\ ctions.)98 1924 y fh(Dra)n(w)k(new)f(p)r(olygon)207 b fl(Clear)16 b(the)g(\ \014gure)g(and)h(input)f(a)h(p)q(olygon)g(using)g fg(drawpoly)p fl(.)98 1984 y fh(Mo)r(dify)h(p)r(olygon)279 b fl(Mo)q(dify)16 b(the)g(curren)o(t)f(p)q(olyg\ on)i(using)g fg(modpoly)p fl(.)98 2045 y fh(Load/Sa)n(v)n(e)i(data)g(\014le)p fk(:)8 b(:)g(:)134 b fl(Use)15 b(a)i(\014le)f(with)g(v)m(ariables)g fg(w)p fl (,)f fg(beta)p fl(,)g fg(z)p fl(,)g fg(c)p fl(,)g fg(maptype)p fl(.)98 2105 y fh(Solv)n(e)j(parameter)f(problem)48 b fl(Solv)o(e)15 b(a)i(particular)e(v)m (ariation)i(of)g(the)f(parameter)f(problem.)98 2165 y fh(Displa)n(y)j(results) 305 b fl(In)o(v)o(ok)o(e)14 b fi(xx)6 b fg(disp)p fl(.)98 2225 y fh(Plot)18 b (grid)h(image)284 b fl(In)o(v)o(ok)o(e)14 b fi(xx)6 b fg(plot)p fl(.)98 2285 y fh(P)n(oin)n(t)19 b(source)363 b fl(In)o(v)o(ok)o(e)14 b fg(ptsource)f fl(on) k(curren)o(t)e(p)q(olygon.)0 2380 y(T)l(o)g(select)e(an)i(item,)d(drag)k(the) e(mouse)f(p)q(oin)o(ter)h(to)h(it)f(and)h(release)f(the)g(button.)21 b(\(The) 15 b fh(Solv)n(e)p fk(:)8 b(:)g(:)21 b fl(men)o(u)0 2441 y(has)15 b(a)f(subme\ n)o(u)f(to)i(select)e(from.\))19 b(Man)o(y)14 b(items)e(are)i(grey)o(ed)g(out) g(at)h(\014rst,)f(indicating)g(their)f(functions)0 2501 y(are)20 b(curren)o (tly)e(una)o(v)m(ailable.)31 b(When)19 b fg(scgui)f fl(is)h(\014rst)h(called,) f(most)g(items)f(are)i(una)o(v)m(ailable)f(b)q(ecause)0 2561 y(their)13 b(op) q(erations)h(are)g(meaningless.)19 b(Once)13 b(a)h(p)q(olygon)g(has)g(b)q(een) g(input,)f(the)g fh(Mo)r(dify)g fl(and)h fh(Solv)n(e)p fk(:)8 b(:)g(:)0 2621 y fl(options)17 b(b)q(ecome)f(enabled,)g(and)h(once)f(a)i(solution)f(has)g(b)q (een)g(computed,)e(the)h(other)h(c)o(hoices)e(b)q(ecome)951 2795 y(10)g eop %%Page: 11 11 bop 0 42 a fl(activ)o(e.)73 102 y(It)20 b(is)h(p)q(ossible)g(to)g(mo)q(dify) e(and)i(retriev)o(e)e(the)h(p)q(olygon)i(and)f(solution)g(data)h(using)f fg (scgget)d fl(and)0 162 y fg(scgset)p fl(.)g(These)12 b(functions)g(w)o(ork)g (somewhat)f(lik)o(e)g(MA)l(TLAB's)g(built-in)g fg(get)g fl(and)h fg(set)p fl (.)19 b(The)12 b(syn)o(taxes)0 222 y(are)320 324 y fj(f)p fg([value1,)p fk (:)7 b(:)h(:)d fg(])p fj(g)25 b fg(=)h(scgget\(fi)o(gh)p fj(f)o fg(,'p)o(rop) o(ert)o(y1)o(')p fk(:)8 b(:)f(:)f fj(g)p fg(\))113 b fl(or)526 384 y fg([w,be\ ta,z,c)o(,ma)o(pty)o(pe)o(])23 b(=)i(scgget\(fig)o(h\))0 486 y fl(and)198 587 y fg(scgset\(fig)o(h,')o(pr)o(ope)o(rty)o(1')o(,va)o(lue)o(1)p fj(f)p fg(,)o ('pr)o(ope)o(rty)o(2')o(,va)o(lue)o(2)p fk(:)7 b(:)h(:)d fj(g)p fg(\))114 b fl (or)719 648 y fg(scgset\(fi)o(gh,)o('cl)o(ea)o(r'\))0 749 y fl(In)16 b(eac)o (h)g(case)g fg(figh)f fl(is)h(a)g(\014gure)h(handle)f(\(equiv)m(alen)o(tly)l (,)d(\014gure)k(n)o(um)o(b)q(er\).)i(The)e(v)m(alid)f(prop)q(erties)g(are)175 843 y fg(vertices)47 b fl(P)o(olygon)16 b(v)o(ertices)226 904 y fg(angles)48 b fl(P)o(olygon)16 b(turning)h(angles)98 964 y fg(prevertice)o(s)47 b fl(Obtain\ ed)16 b(from)f fg(xxparam)175 1024 y(constant)47 b fl(Multiplicativ)o(e)13 b (constan)o(t)k(of)f(the)g(map)201 1084 y fg(maptype)47 b fl(One)16 b(of)g(the) g(follo)o(wing:)528 1149 y fg('hp2p')47 b fl(half-plane)17 b(to)f(p)q(olygon) 541 1209 y fg('d2p')60 b fl(disk)16 b(to)h(p)q(olygon)528 1269 y fg('d2ep')47 b fl(disk)16 b(to)h(exterior)e(p)q(olygon)0 1361 y(Only)h(the)h(\014rst)g(thr\ ee)f(c)o(haracters)h(of)g(the)g(prop)q(ert)o(y)g(name)f(need)g(b)q(e)h(sp)q (eci\014ed.)23 b(The)17 b(second)g(form)f(of)0 1421 y fg(scgget)d fl(returns) h(all)g(of)h(the)g(a)o(v)m(ailable)f(prop)q(erties)h(in)f(the)g(giv)o(en)g (order.)21 b(The)15 b(second)g(form)e(of)i fg(scgset)0 1482 y fl(destro)o(ys) h(all)g(data)h(relating)f(to)h(the)f(curren)o(t)f(p)q(olygon.)73 1542 y(While) 21 b(y)o(ou)g(ma)o(y)f(set)h(prop)q(erties)h(b)o(y)f(hand,)h(the)g(men)o(us)e (will)g(not)i(b)q(e)f(enabled)g(or)h(disabled)f(in)0 1602 y(accordance.)g(If) 16 b(y)o(ou)g(w)o(an)o(t)g(to)h(activ)m(ate)f(all)g(the)g(men)o(us,)e(en)o (ter)h fg(scgenable\()o(1:2)o(,'o)o(n'\))o fl(.)0 1768 y fd(4)83 b(Remarks)0 1892 y fe(Cro)n(wding)0 1985 y fl(By)11 b(far)h(the)f(most)g(troublesome)g (asp)q(ect)h(of)g(n)o(umerical)d(Sc)o(h)o(w)o(arz-Christo\013el)i(mapping)g (is)g(the)h fi(cr)n(owding)0 2045 y(phenomenon)t fl(.)43 b(Elongated)23 b(p)q (olygons)i(ha)o(v)o(e)d(prev)o(ertices)f(whic)o(h)h(are)h(spaced)g(exp)q(onen) o(tially)e(close)0 2105 y(in)g(the)h(half-plane)g(or)g(disk,)g(b)q(ecoming)f (indistinguishable)g(in)g(MA)l(TLAB)g(when)g(the)h(lo)q(cal)g(asp)q(ect)0 2165 y(ratio)e(exceeds)e(ab)q(out)j(20.)33 b(Ev)o(en)19 b(for)h(lesser)f(asp)q(ect) h(ratios,)h(the)e(parameter)f(problem)h(can)g(b)q(ecome)0 2225 y(exceedingly) 12 b(di\016cult)g(to)j(solv)o(e)e(n)o(umerically)-5 b(.)18 b(If)13 b(one)h (of)h(the)e(parameter)g(problem)f(solv)o(ers)i(rep)q(eatedly)0 2286 y(issues) i(the)g(message)g fg(Warning:)23 b(Severe)g(crowding)p fl(,)13 b(the)j(soluti\ on)g(will)f(probably)i(not)g(b)q(e)f(found.)73 2346 y(If)f(y)o(ou)g(exp)q(eri\ ence)f(this)h(problem,)e(there)i(are)g(a)h(few)f(options.)22 b(The)15 b(most) f(e\013ectiv)o(e,)f(when)j(appro-)0 2406 y(priate,)c(is)g(to)h(c)o(ho)q(ose)g (a)f(b)q(etter)g(fundamen)o(tal)f(domain.)19 b(Maps)13 b(for)g(regions)f(elon\ gated)h(in)f(one)g(direction)0 2466 y(are)g(b)q(est)h(suited)f(to)h(the)f(rec\ tangle)g(and)h(strip)f(v)m(ariations.)21 b(\(If)12 b(y)o(ou)g(ha)o(v)o(e)g (a)g(m)o(ultiply)e(elongated)i(region,)0 2526 y(the)i(to)q(olb)q(o)o(x)h(can'\ t)f(help,)g(but)g(see)g([10].\))20 b(Occasionally)14 b(the)g(map)f(from)g(the) h(disk)g(can)h(b)q(e)f(found)h(when)0 2587 y(the)i(half-plane)h(problem)e(fai\ ls)h(to)g(con)o(v)o(erge,)g(and)h(vice)e(v)o(ersa.)24 b(Sometimes)15 b(the)i (di\016cult)o(y)e(is)j(a)f(p)q(o)q(or)0 2647 y(starting)e(guess)g(for)g(the)f (solution)h(of)g(the)f(nonlinear)g(equations.)21 b(In)14 b(these)g(cases)h (con)o(tin)o(uation)f(can)h(b)q(e)951 2795 y(11)g eop %%Page: 12 12 bop 0 42 a fl(e\013ectiv)o(e:)18 b(Solv)o(e)c(for)h(an)g(easier)f(v)m(ariati\ on)h(of)g(the)f(geometry)l(,)f(then)h(use)h(that)g(solution)g(as)g(the)f(star\ ting)0 102 y(guess)k(for)g(the)f(original)g(problem.)23 b(Con)o(tin)o(uation) 18 b(is)f(a)o(v)m(ailable)f(on)i(the)f(GUI)g(men)o(u,)e(or)j(y)o(ou)f(can)h (use)0 162 y fg(modpoly)c fl(man)o(ually)l(.)73 222 y(Note)22 b(that)h(the)f (cro)o(wding)h(problem)e(can)h(o)q(ccur)h(for)g(exterior)e(maps)h(as)h(w)o (ell.)39 b(The)22 b(canonical)0 282 y(example)14 b(is)i(the)g(map)f(to)i(the) f(exterior)f(of)i(a)f(long,)h(thin,)e(U-shap)q(ed)i(region.)0 426 y fe(Confor\ mal)k(cen)n(ter)0 518 y fl(Unlik)o(e)f(SCP)l(A)o(CK,)i(the)g(SC)h(T)l(o)q(olb) q(o)o(x)g(do)q(es)g(not)g(let)e(y)o(ou)i(directly)d(sp)q(ecify)i(the)g(confor\ mal)f(cen)o(ter)0 578 y(\(image)14 b(of)i(zero\))f(when)g(solving)g(the)g(par\ ameter)f(problem)g(for)i(the)f(disk,)f(since)h(three)g(prev)o(ertices)e(are)0 638 y(\014xed)j(rather)g(than)g(just)h(one.)k(Instead,)16 b(y)o(ou)g(can)g (solv)o(e)f(the)h(parameter)f(problem)f(using)j fg(dparam)c fl(and)0 699 y (then)j(use)g fg(dfixwc)e fl(to)j(\014nd)g(a)f(map)g(with)g(an)o(y)g(giv)o (en)f(conformal)g(cen)o(ter.)0 842 y fe(V)-6 b(ertex)22 b(ordering)0 934 y fl (The)g(v)o(ertices)e(in)h fg(w)g fl(m)o(ust)g(b)q(e)h(ordered)f(with)h(a)g (p)q(ositiv)o(e)f(orien)o(tation)g(with)h(resp)q(ect)f(to)h(the)g(target)0 995 y(region.)i(This)17 b(means)f(a)h(coun)o(terclo)q(c)o(kwise)f(sense)h(for)g (in)o(teriors)f(and)i(a)f(clo)q(c)o(kwise)f(one)h(for)g(exteriors.)0 1055 y (Use)f fg(flipud)e fl(to)i(rev)o(erse)f(the)h(ordering)h(and)f fg(scangle)e fl (to)j(up)q(date)g(the)f(turning)g(angles.)73 1115 y(As)e(a)g(con)o(v)o(enienc\ e,)d(the)j(GUI)f(will)g(automatically)f(rev)o(erse)g(the)i(v)o(ertex)e(orderi\ ng)i(when)g(y)o(ou)f(select)0 1175 y(a)24 b(parameter)e(problem)g(solution,)j (if)e(all)g(the)g(v)o(ertices)e(are)j(\014nite)f(and)h(seem)d(to)j(ha)o(v)o (e)f(the)g(wrong)0 1235 y(orien)o(tation.)0 1379 y fe(F)-6 b(urther)24 b(read\ ing)0 1471 y fl(F)l(or)d(more)e(on)i(the)f(basic)h(Sc)o(h)o(w)o(arz-Christo\ \013el)f(transformation,)h(see)f([1,)g(6,)g(14)q(].)34 b(The)20 b(theory)g (and)0 1531 y(implem)o(en)o(tati)o(on)12 b(of)j(man)o(y)e(v)m(ariations)i(of) f(the)g(transformation)h(can)f(b)q(e)h(found)g(in)f([2)o(,)g(3)q(,)g(4,)g(5,) g(8)q(,)f(9)q(,)h(10,)0 1592 y(11)q(,)k(12,)g(13)q(,)g(15,)g(19)q(].)26 b(A) 18 b(brief)g(surv)o(ey)f(of)h(v)m(ariations)h(and)g(applications)f(w)o(as)h (done)f(a)h(few)f(y)o(ears)g(ago)0 1652 y(b)o(y)e(T)l(refethen)f([18)q(].)73 1712 y(The)h(SC)g(T)l(o)q(olb)q(o)o(x)h(implem)o(en)n(ts)c(and)k(extends)e (the)h(metho)q(ds)f(describ)q(ed)g(b)o(y)g(T)l(refethen)g(in)h(his)f(ap-)0 1772 y(p)q(endix)g(to)h([14].)21 b(F)l(or)16 b(more)e(on)i(the)f(design)h(of) g(SCP)l(A)o(CK,)f(whic)o(h)g(is)g(n)o(umerically)d(similar,)h(see)j([7,)f(16,) 0 1832 y(17)q(].)20 b(A)14 b(pap)q(er)g(sp)q(eci\014cally)f(on)i(the)f(to)q (olb)q(o)o(x)h(will)e(app)q(ear)i(in)f(the)g fi(A)o(CM)h(T)l(r)n(ansactions)h (on)g(Mathemat-)0 1892 y(ic)n(al)i(Softwar)n(e.)0 2036 y fe(Suggestions)23 b (and)h(bug)g(rep)r(orts)0 2128 y fl(Remem)n(b)q(er:)e(An)o(ything)17 b(free)g (comes)f(with)i(no)h(guaran)o(tee!)26 b(I)18 b(ha)o(v)o(e)f(tried)g(to)h(mak) o(e)e(the)i(SC)g(T)l(o)q(olb)q(o)o(x)0 2188 y(robust,)j(but)g(I)f(do)g(not)h (explicitly)c(or)k(implici)o(tly)c(w)o(arran)o(t)j(its)g(accuracy)g(or)g(reli\ abilit)o(y)l(.)31 b(Also,)20 b(The)0 2249 y(MathW)l(orks,)c(Inc.)e(is)i(not)g (in)f(an)o(y)h(w)o(a)o(y)f(resp)q(onsible)h(for)g(the)f(SC)h(T)l(o)q(olb)q (o)o(x's)h(design)f(or)g(main)o(tenance.)73 2309 y(I)25 b(w)o(elcome)e(compla\ in)o(ts,)i(suggestions,)j(inquiries,)e(and)g(bug)f(rep)q(orts)h(related)f(to) g(an)o(y)h(asp)q(ect)0 2369 y(of)c(the)g(SC)g(T)l(o)q(olb)q(o)o(x.)39 b(I)21 b (can)i(b)q(e)f(reac)o(hed)f(on)h(the)g(In)o(ternet)e(as)j fg(driscoll@)o(cam) o(.c)o(orn)o(ell)o(.ed)o(u)c fl(or)0 2429 y fg(driscoll@n)o(a-n)o(et)o(.or)o (nl.)o(gov)o fl(.)35 b(F)l(eel)20 b(free)h(to)h(rep)q(ort)g(b)q(eha)o(vior)f (di\013ering)h(from)e(the)i(do)q(cumen)o(ta-)0 2489 y(tion,)g(mak)o(e)e(sugge\ stions)j(concerning)e(the)g(graphical)g(user)h(in)o(terface,)f(or)g(describ)q (e)g(an)h(in)o(teresting)0 2550 y(application)16 b(y)o(ou)g(ha)o(v)o(e)g(foun\ d)g(for)h(the)f(to)q(olb)q(o)o(x.)73 2610 y(Y)l(ou)23 b(are)g(free)f(to)h(c)o (hange)g(or)g(add)g(to)g(the)g(to)q(olb)q(o)o(x's)g(co)q(de.)41 b(Ho)o(w)o (ev)o(er,)22 b(I)h(request)f(that)h(when)0 2670 y(distributing)16 b(the)g(to) q(olb)q(o)o(x)h(to)g(others,)g(y)o(ou)f(pac)o(k)m(age)h(an)f(unmo)q(di\014ed) g(v)o(ersion)g(separately)g(from)f(y)o(our)951 2795 y(12)g eop %%Page: 13 13 bop 0 42 a fl(alterations.)24 b(If)16 b(y)o(ou)h(ha)o(v)o(e)f(co)q(de)h(that) h(y)o(ou)e(think)h(w)o(ould)g(b)q(ene\014t)g(others,)g(please)f(send)h(it)g (to)g(me)e(and)0 102 y(I)h(will)f(consider)h(including)f(it)h(in)g(future)g (v)o(ersions)g(of)g(the)g(to)q(olb)q(o)o(x.)0 246 y fe(Ac)n(kno)n(wledgme)o (n)n(ts)0 338 y fl(This)d(material)f(is)h(based)h(up)q(on)g(w)o(ork)g(supp)q (orted)g(b)o(y)f(a)h(National)f(Science)f(F)l(oundation)i(Graduate)g(Re-)0 399 y(searc)o(h)i(F)l(ello)o(wship,)f(b)o(y)g(NSF)h(Gran)o(t)h(DMS-9116110,)i(and) e(b)o(y)f(DOE)g(gran)o(t)h(DE-F)o(G02-9YER25199.)0 459 y(\(An)o(y)j(opinions,) h(\014ndings,)h(conclusions)f(or)g(recomme)o(ndations)e(expressed)h(in)g(this) g(publication)h(b)o(y)0 519 y(the)16 b(author)h(do)g(not)g(necessarily)e(re\ \015ect)g(the)h(views)g(of)g(the)g(National)g(Science)f(F)l(oundation.\))73 579 y(I)h(w)o(ould)g(lik)o(e)e(to)j(thank)f(Nic)o(k)f(T)l(refethen)g(for)i (leading)f(me)e(to)j(this)f(pro)s(ject,)f(guiding)h(and)h(encour-)0 639 y(agi\ ng)g(me)e(throughout)i(its)f(dev)o(elopmen)o(t,)d(and)k(serving)f(as)h(c)o (hief)e(program)h(tester.)951 2795 y(13)g eop %%Page: 14 14 bop 0 50 a fd(5)83 b(Examples)0 174 y fe(Simpl)o(e)19 b(in)n(terior)j(maps)0 266 y fl(First,)15 b(explore)h(the)g(half-plane)g(map)f(on)o(to)i(the)f(in)o (terior)f(of)i(an)f(L-shap)q(ed)i(region.)0 368 y fg(>>)25 b(w=[i;-1+i;)o(-1) o(-i;)o(1-i)o(;1;)o(0])o(;)48 b(%)26 b(define)d(vertices)0 428 y(>>)i(beta=sc\ ang)o(le)o(\(w\))o(;)253 b(%)26 b(compute)d(turning)g(angles)0 488 y(>>)i([x,\ c]=hppa)o(ra)o(m\(w)o(,be)o(ta\))o(;)99 b(%)26 b(solve)d(parameter)g(problem) 0 548 y(>>)i(hpdisp\(w,b)o(et)o(a,x)o(,c\))256 669 y(w)410 b(beta)383 b(x)26 729 y(---------)o(---)o(--)o(---)o(---)o(---)o(--)o(---)o(---)o(---)o(--)o (---)o(---)o(--)o(---)o(---)o(---)o(--)o(-)205 789 y(0)25 b(+)179 b(1i)128 b (-0.50000)d(-1.0000000)o(000)o(00e)o(+0)o(0)179 849 y(-1)25 b(-)179 b(1i)128 b (-0.50000)151 b(0.0000000)o(000)o(00e)o(+0)o(0)179 910 y(-1)25 b(-)179 b(1i) 128 b(-0.50000)151 b(6.4641016)o(177)o(86e)o(+0)o(0)205 970 y(1)25 b(+)179 b (1i)128 b(-0.50000)151 b(1.2928203)o(235)o(12e)o(+0)o(1)205 1030 y(1)25 b(+) 179 b(0i)128 b(-0.50000)151 b(1.3928203)o(235)o(20e)o(+0)o(1)205 1090 y(0)25 b (+)179 b(0i)153 b(0.50000)536 b(Inf)51 1211 y(c)26 b(=)f(-11.66582)o(2)e(+)i (2.857208e-)o(15i)0 1331 y(>>)g(hpplot\(w,b)o(et)o(a,x)o(,c,)o(12,)o(8\))558 2270 y @beginspecial 0.000000 @llx 0.000000 @lly 200.000000 @urx 200.000000 @ury 2000.000000 @rwi @setspecial %%BeginDocument: L-hp.ps /MathWorks 120 dict begin /bdef {bind def} bind def /ldef {load def} bind def /xdef {exch def} bdef /xstore {exch store} bdef /c /clip ldef /cc /concat ldef /cp /closepath ldef /gr /grestore ldef /gs /gsave ldef /mt /moveto ldef /np /newpath ldef /cm /currentmatrix ldef /sm /setmatrix ldef /rc {rectclip} bdef /rf {rectfill} bdef /rm /rmoveto ldef /rl /rlineto ldef /s /show ldef /sc /setrgbcolor ldef /w /setlinewidth ldef /cap /setlinecap ldef /pgsv () def /bpage {/pgsv save def} bdef /epage {pgsv restore} bdef /bplot /gsave ldef /eplot {stroke grestore} bdef /portraitMode 0 def /landscapeMode 1 def /dpi2point 0 def /FontSize 0 def /FMS { /FontSize xstore %save size off stack findfont [FontSize 0 0 FontSize neg 0 0] makefont setfont }bdef /csm { 1 dpi2point div -1 dpi2point div scale neg translate landscapeMode eq {90 rotate} if } bdef /SO { [] 0 setdash } bdef /DO { [.5 dpi2point mul 4 dpi2point mul] 0 setdash } bdef /DA { [6 dpi2point mul] 0 setdash } bdef /DD { [.5 dpi2point mul 4 dpi2point mul 6 dpi2point mul 4 dpi2point mul] 0 setdash } bdef /L { lineto stroke } bdef /MP { 3 1 roll moveto 1 sub {rlineto} repeat } bdef /AP { {rlineto} repeat } bdef /PP { closepath fill } bdef /DP { closepath stroke } bdef /MR { 4 -2 roll moveto dup 0 exch rlineto exch 0 rlineto neg 0 exch rlineto closepath } bdef /FR { MR stroke } bdef /PR { MR fill } bdef /L1i { { currentfile picstr readhexstring pop } image } bdef /tMatrix matrix def /MakeOval { newpath tMatrix currentmatrix pop translate scale 0 0 1 0 360 arc tMatrix setmatrix } bdef /FO { MakeOval stroke } bdef /PO { MakeOval fill } bdef /PD { 2 copy moveto lineto stroke } bdef currentdict end def MathWorks begin 0 cap 1 setlinejoin end MathWorks begin bpage bplot /dpi2point 12 def portraitMode 0000 2376 csm 0 -25 2401 2402 MR c np 76 dict begin %Colortable dictionary /c0 { 0 0 0 sc} bdef /c1 { 1 1 1 sc} bdef /c2 { 1 0 0 sc} bdef /c3 { 0 1 0 sc} bdef /c4 { 0 0 1 sc} bdef /c5 { 1 1 0 sc} bdef /c6 { 1 0 1 sc} bdef /c7 { 0 1 1 sc} bdef /Helvetica 144 FMS c1 0 0 2377 2377 PR 6 w DO 4 w SO 6 w c0 23 2352 mt 2352 2352 L 23 23 mt 2352 23 L 23 2352 mt 23 23 L 2352 2352 mt 2352 23 L 23 2352 mt 23 2352 L 2352 2352 mt 2352 2352 L 23 2352 mt 2352 2352 L 23 2352 mt 23 23 L 23 2352 mt 23 2352 L 23 2352 mt 2352 2352 L 23 23 mt 2352 23 L 23 2352 mt 23 23 L 2352 2352 mt 2352 23 L 23 23 mt 23 23 L 2352 23 mt 2352 23 L gs 23 23 2330 2330 MR c np 12 w 0 2117 129 129 2 MP stroke 2117 0 129 2246 2 MP stroke 0 -1058 2246 2246 2 MP stroke -1058 0 2246 1188 2 MP stroke 0 -1059 1188 1188 2 MP stroke 6 w 1 0 2 -2 9 -5 4 -2 8 -3 15 -4 14 -1 14 1 10 1 11 3 31 12 1 1 2 1 7 3 10 7 11 9 13 11 13 14 14 18 14 23 13 29 11 38 6 49 -2 40 -3 22 -6 24 -9 26 -13 27 -18 28 -23 28 -30 26 -24 16 -13 6 -19 8 -10 4 -21 5 -43 5 1188 720 38 MP stroke 1 0 2 -2 9 -6 4 -2 7 -3 15 -5 14 -3 15 -2 10 0 13 1 35 6 2 0 2 1 8 2 13 5 14 7 17 8 19 12 21 15 24 21 27 29 29 39 32 55 22 49 10 29 11 34 9 39 9 47 7 54 3 67 0 53 -2 31 -2 32 -4 36 -6 40 -10 60 -7 34 -11 50 -6 27 -8 39 -3 20 -8 44 -7 96 858 129 44 MP stroke 2 0 10 -8 11 -7 14 -6 9 -3 6 -2 15 -4 61 -4 4 0 9 0 15 2 18 3 20 4 24 7 28 9 33 14 40 20 49 29 61 42 49 37 28 23 32 25 35 29 40 32 46 35 54 38 65 41 51 26 28 12 40 15 22 7 44 11 96 9 129 752 34 MP stroke 1 0 10 -9 11 -7 14 -8 14 -7 77 -23 4 -1 9 -2 16 -2 19 -2 22 -1 27 -1 32 0 40 3 49 5 61 9 78 14 64 13 36 8 39 8 42 9 46 10 50 9 54 9 57 8 40 4 21 2 41 3 85 2 129 1135 30 MP stroke 2 -1 9 -8 23 -18 86 -48 4 -2 9 -3 16 -7 18 -7 22 -8 27 -9 33 -10 40 -12 51 -13 63 -15 81 -17 66 -12 37 -7 40 -6 43 -7 47 -7 50 -7 53 -6 57 -5 39 -3 20 -2 41 -2 82 -1 129 1431 28 MP stroke 2 -1 9 -9 22 -19 76 -64 4 -3 8 -6 13 -10 17 -13 19 -14 23 -17 29 -21 35 -24 44 -31 55 -38 45 -30 25 -17 28 -18 30 -20 33 -21 37 -23 39 -25 45 -26 49 -29 56 -29 63 -31 48 -19 26 -9 36 -11 19 -5 40 -8 84 -7 129 1786 32 MP stroke 2 -1 9 -9 19 -22 64 -76 3 -4 6 -8 10 -13 13 -17 14 -19 17 -23 21 -29 24 -35 31 -44 38 -55 30 -45 17 -25 18 -28 20 -30 21 -33 23 -37 25 -39 26 -45 29 -49 29 -56 31 -63 19 -48 9 -26 11 -36 5 -19 8 -40 7 -84 589 2246 32 MP stroke 2 -1 8 -9 18 -23 48 -86 2 -4 3 -9 7 -16 7 -18 8 -22 9 -27 10 -33 12 -40 13 -51 15 -63 17 -81 12 -66 7 -37 6 -40 7 -43 7 -47 7 -50 6 -53 5 -57 3 -39 2 -20 2 -41 1 -82 944 2246 28 MP stroke 1 0 9 -10 7 -11 8 -14 7 -14 23 -77 1 -4 2 -9 2 -16 2 -19 1 -22 1 -27 0 -32 -3 -40 -5 -49 -9 -61 -14 -78 -13 -64 -8 -36 -8 -39 -9 -42 -10 -46 -9 -50 -9 -54 -8 -57 -4 -40 -2 -21 -3 -41 -2 -85 1240 2246 30 MP stroke 1 -1 8 -10 7 -11 6 -14 3 -9 2 -6 4 -15 4 -61 0 -4 0 -9 -2 -15 -3 -18 -4 -20 -7 -24 -9 -28 -14 -33 -20 -40 -29 -49 -42 -61 -37 -49 -23 -28 -25 -32 -29 -35 -32 -40 -35 -46 -38 -54 -41 -65 -26 -51 -12 -28 -15 -40 -7 -22 -11 -44 -9 -96 1623 2246 34 MP stroke 1 0 2 -2 6 -9 2 -4 3 -7 5 -15 3 -14 2 -15 0 -10 -1 -13 -6 -35 0 -2 -1 -2 -2 -8 -5 -13 -7 -14 -8 -17 -12 -19 -15 -21 -21 -24 -29 -27 -39 -29 -55 -32 -49 -22 -29 -10 -34 -11 -39 -9 -47 -9 -54 -7 -67 -3 -53 0 -31 2 -32 2 -36 4 -40 6 -60 10 -34 7 -50 11 -27 6 -39 8 -20 3 -44 8 -96 7 2246 1517 44 MP stroke 1 0 2 -2 5 -9 2 -4 3 -8 4 -15 1 -14 -1 -14 -1 -10 -3 -11 -12 -31 -1 -1 -1 -2 -3 -7 -7 -10 -9 -11 -11 -13 -14 -13 -18 -14 -23 -14 -29 -13 -38 -11 -49 -6 -40 2 -22 3 -24 6 -26 9 -27 13 -28 18 -28 23 -26 30 -16 24 -6 13 -8 19 -4 10 -5 21 -5 42 1655 1188 38 MP stroke -43 -3 -8 -1 -11 -1 -15 -3 -24 -5 -40 -11 -45 -16 -32 -15 -43 -23 -36 -25 -21 -18 -24 -21 -24 -28 -26 -36 -23 -45 -18 -58 -7 -44 0 -24 1 -24 3 -25 5 -25 7 -26 9 -25 11 -24 13 -23 31 -44 56 -56 62 -43 63 -32 65 -24 63 -16 63 -10 62 -6 62 -1 62 4 63 8 63 13 64 19 65 26 64 35 60 45 54 54 45 60 35 64 27 64 19 65 13 63 8 63 4 62 -1 62 -5 62 -11 63 -16 63 -23 64 -32 64 -43 62 -56 56 -43 31 -24 13 -24 11 -25 10 -25 7 -25 5 -25 3 -25 1 -24 0 -44 -6 -58 -18 -46 -24 -35 -25 -28 -25 -22 -23 -31 -41 -29 -47 -16 -35 -11 -27 -10 -28 -3 -11 -17 -79 -4 -32 0 -17 -1 -3 1188 1188 83 MP stroke -42 -6 -8 -2 -10 -3 -15 -5 -22 -10 -34 -20 -34 -27 -22 -22 -24 -33 -17 -31 -7 -19 -7 -21 -6 -24 -3 -27 0 -30 4 -32 8 -34 14 -35 19 -34 25 -32 30 -29 33 -26 37 -22 40 -17 41 -13 43 -9 43 -4 44 0 43 4 44 8 43 12 43 16 40 21 39 26 37 29 33 33 29 36 25 39 21 40 17 43 12 43 8 44 4 43 0 44 -4 44 -9 42 -13 41 -17 40 -22 37 -25 34 -30 29 -32 25 -34 20 -34 14 -34 8 -32 4 -30 0 -27 -3 -25 -6 -21 -6 -35 -16 -38 -25 -25 -23 -18 -20 -16 -21 -6 -9 -32 -72 -7 -31 -1 -17 -1 -3 1188 1188 71 MP stroke -41 -9 -7 -3 -10 -4 -13 -8 -19 -13 -16 -15 -10 -11 -11 -13 -11 -18 -11 -24 -10 -32 -4 -26 -1 -15 1 -16 2 -17 3 -18 6 -18 8 -20 10 -19 13 -20 16 -18 17 -18 21 -16 22 -14 25 -12 26 -10 28 -8 28 -4 30 -2 29 1 30 3 30 7 29 9 28 13 27 14 26 18 24 20 22 22 20 24 17 25 15 28 12 28 10 29 6 29 4 30 1 30 -2 29 -4 29 -8 27 -9 26 -13 25 -14 23 -16 20 -17 18 -19 16 -19 12 -20 11 -19 8 -19 5 -18 4 -17 2 -16 1 -29 -3 -34 -8 -26 -11 -20 -12 -19 -14 -5 -4 -3 -3 -25 -29 -12 -19 -6 -12 -6 -16 -4 -14 -2 -17 -1 -3 1188 1188 77 MP stroke 0 0 -3 0 -3 0 -4 -1 -4 0 -26 -11 -2 -1 -4 -2 -9 -6 -11 -9 -15 -16 -12 -16 -6 -12 -6 -14 -6 -17 -4 -22 0 -26 5 -31 7 -23 6 -12 7 -12 8 -12 10 -12 11 -11 12 -11 14 -10 15 -9 16 -8 17 -7 19 -5 19 -4 20 -2 20 0 20 2 21 3 20 6 20 7 19 9 19 10 17 13 17 13 15 16 14 16 12 18 11 18 9 20 7 20 6 20 3 20 2 21 0 20 -2 20 -4 19 -5 18 -6 18 -8 16 -9 15 -11 14 -10 12 -12 11 -12 10 -12 8 -12 7 -12 6 -11 4 -12 3 -21 4 -28 1 -23 -3 -19 -5 -19 -8 -6 -2 -2 -2 -28 -21 -15 -16 -7 -11 -8 -15 -3 -8 -2 -5 -3 -13 0 -4 -1 -3 1188 1188 83 MP stroke 0 0 -3 0 -3 0 -4 -1 -4 -1 -24 -12 -2 -1 -4 -4 -8 -6 -9 -11 -7 -10 -4 -6 -4 -8 -3 -9 -4 -11 -2 -13 -2 -15 1 -18 5 -21 9 -23 15 -24 14 -15 8 -8 9 -7 10 -6 11 -6 11 -5 12 -5 13 -3 13 -3 14 -1 14 0 14 0 15 2 14 4 14 4 14 5 14 7 13 8 12 9 12 10 11 11 10 11 9 13 8 13 6 13 6 14 4 14 4 15 2 14 0 15 0 14 -1 13 -3 14 -3 13 -5 12 -5 11 -6 11 -6 10 -7 9 -8 8 -7 8 -8 6 -16 11 -23 11 -22 6 -19 1 -16 0 -18 -3 -5 -2 -3 0 -21 -10 -8 -4 -6 -5 -9 -8 -9 -9 -9 -14 -4 -7 -2 -6 -4 -12 0 -4 -1 -3 1188 1188 83 MP stroke 0 0 -3 0 -3 0 -3 -1 -4 -1 -8 -4 -15 -10 -1 -1 -1 -1 -4 -3 -6 -8 -7 -10 -5 -11 -2 -6 -3 -8 -1 -8 -1 -10 0 -12 1 -13 4 -14 6 -16 10 -17 15 -16 19 -15 15 -8 9 -3 9 -3 9 -3 10 -1 9 -1 11 -1 10 1 10 1 11 2 10 3 10 3 11 5 9 5 10 6 9 6 8 8 8 8 7 8 7 9 6 10 5 9 4 10 4 11 3 10 2 10 1 11 1 10 -1 10 -1 10 -1 10 -3 9 -3 9 -7 16 -14 21 -16 16 -16 12 -16 7 -15 5 -14 2 -16 0 -4 0 -2 0 -21 -5 -8 -3 -6 -3 -10 -6 -9 -8 -10 -12 -5 -7 -3 -5 -4 -13 0 -3 0 -2 -1 -1 1188 1188 80 MP stroke 0 0 -3 0 -3 0 -3 -1 -4 -2 -4 -2 -3 -1 -4 -3 -10 -9 -1 -1 -1 -1 -3 -4 -5 -7 -5 -11 -3 -10 -1 -6 -1 -7 0 -8 0 -9 2 -10 3 -10 5 -12 7 -12 10 -12 13 -11 16 -9 20 -7 21 -4 23 1 23 6 23 10 20 15 16 19 12 22 7 23 3 23 -2 22 -6 20 -9 18 -11 14 -11 11 -12 8 -12 6 -11 3 -13 3 -4 0 -2 0 -19 -1 -7 -1 -6 -2 -10 -5 -10 -6 -11 -10 -5 -7 -3 -4 -5 -13 0 -3 0 -2 -1 -1 1188 1188 60 MP stroke 0 0 -3 0 -2 0 -4 -2 -4 -1 -4 -3 -3 -1 -3 -3 -9 -10 -1 -1 -1 -1 -2 -4 -4 -7 -3 -11 -2 -10 0 -5 0 -6 1 -7 2 -8 2 -8 4 -8 6 -9 7 -9 9 -9 12 -7 14 -7 15 -4 17 -1 18 2 18 5 16 8 15 12 13 14 9 17 7 17 3 18 0 17 -4 16 -5 15 -8 12 -8 10 -9 8 -9 6 -8 5 -11 3 -4 1 -1 1 -17 1 -6 0 -6 -1 -10 -3 -10 -5 -12 -8 -5 -6 -3 -5 -6 -12 0 -3 0 -2 -1 -1 1188 1188 60 MP stroke 12 w -1059 0 1188 129 2 MP stroke gr 12 w 6 w gs 0 0 0 0 MR c np end eplot epage end showpage %%EndDocument @endspecial 73 2389 a fl(Compare)16 b(this)g(to)h(the)f(co)o(v)o(er)f(of)h ([14].)951 2795 y(14)g eop %%Page: 15 15 bop 73 42 a fl(No)o(w,)16 b(map)f(from)g(the)h(unit)g(disk)g(instead.)0 124 y fg(>>)25 b([z,c]=hp2d)o(is)o(k\(w)o(,be)o(ta,)o(x,)o(c\))151 b(%)25 b(convert) e(to)i(disk)0 245 y(z)g(=)205 365 y(0)g(+)h(1.0000i)51 425 y(-1.0000)77 486 y (0.9533)d(-)j(0.3022i)77 546 y(0.9881)d(-)j(0.1538i)77 606 y(0.9897)d(-)j(0.1\ 429i)77 666 y(1.0000)0 787 y(c)f(=)77 907 y(0.2950)e(-)j(0.4878i)0 1027 y(>>) f(zp=dinvmap)o(\(-)o(.3-)o(.3i)o(,w,)o(be)o(ta,)o(z,c)o(\))e(%)i(inverse)e (image)h(of)h(-.3-.3i)0 1148 y(zp)g(=)77 1268 y(0.8458)e(-)j(0.1672i)0 1388 y (>>)f(abs\(-.3-.3)o(i)d(-)k(dmap\(zp,w)o(,be)o(ta,)o(z,c)o(\)\))c(%)j(check)f (accuracy)0 1509 y(ans)h(=)77 1629 y(5.2972e-15)0 1750 y(>>)g(ptsource\(w)o (,b)o(eta)o(,z,)o(c,-)o(.3)o(-.3)o(i\))74 b(%)25 b(set)f(new)h(conformal)d (center)i(and)g(plot)558 2670 y @beginspecial 0.000000 @llx 0.000000 @lly 200.000000 @urx 200.000000 @ury 2000.000000 @rwi @setspecial %%BeginDocument: L-d.ps /MathWorks 120 dict begin /bdef {bind def} bind def /ldef {load def} bind def /xdef {exch def} bdef /xstore {exch store} bdef /c /clip ldef /cc /concat ldef /cp /closepath ldef /gr /grestore ldef /gs /gsave ldef /mt /moveto ldef /np /newpath ldef /cm /currentmatrix ldef /sm /setmatrix ldef /rc {rectclip} bdef /rf {rectfill} bdef /rm /rmoveto ldef /rl /rlineto ldef /s /show ldef /sc /setrgbcolor ldef /w /setlinewidth ldef /cap /setlinecap ldef /pgsv () def /bpage {/pgsv save def} bdef /epage {pgsv restore} bdef /bplot /gsave ldef /eplot {stroke grestore} bdef /portraitMode 0 def /landscapeMode 1 def /dpi2point 0 def /FontSize 0 def /FMS { /FontSize xstore %save size off stack findfont [FontSize 0 0 FontSize neg 0 0] makefont setfont }bdef /csm { 1 dpi2point div -1 dpi2point div scale neg translate landscapeMode eq {90 rotate} if } bdef /SO { [] 0 setdash } bdef /DO { [.5 dpi2point mul 4 dpi2point mul] 0 setdash } bdef /DA { [6 dpi2point mul] 0 setdash } bdef /DD { [.5 dpi2point mul 4 dpi2point mul 6 dpi2point mul 4 dpi2point mul] 0 setdash } bdef /L { lineto stroke } bdef /MP { 3 1 roll moveto 1 sub {rlineto} repeat } bdef /AP { {rlineto} repeat } bdef /PP { closepath fill } bdef /DP { closepath stroke } bdef /MR { 4 -2 roll moveto dup 0 exch rlineto exch 0 rlineto neg 0 exch rlineto closepath } bdef /FR { MR stroke } bdef /PR { MR fill } bdef /L1i { { currentfile picstr readhexstring pop } image } bdef /tMatrix matrix def /MakeOval { newpath tMatrix currentmatrix pop translate scale 0 0 1 0 360 arc tMatrix setmatrix } bdef /FO { MakeOval stroke } bdef /PO { MakeOval fill } bdef /PD { 2 copy moveto lineto stroke } bdef currentdict end def MathWorks begin 0 cap 1 setlinejoin end MathWorks begin bpage bplot /dpi2point 12 def portraitMode 0000 2376 csm 0 -25 2401 2402 MR c np 76 dict begin %Colortable dictionary /c0 { 0 0 0 sc} bdef /c1 { 1 1 1 sc} bdef /c2 { 1 0 0 sc} bdef /c3 { 0 1 0 sc} bdef /c4 { 0 0 1 sc} bdef /c5 { 1 1 0 sc} bdef /c6 { 1 0 1 sc} bdef /c7 { 0 1 1 sc} bdef /Helvetica 144 FMS c1 0 0 2377 2377 PR 6 w DO 4 w SO 6 w c0 23 2352 mt 2352 2352 L 23 23 mt 2352 23 L 23 2352 mt 23 23 L 2352 2352 mt 2352 23 L 23 2352 mt 23 2352 L 2352 2352 mt 2352 2352 L 23 2352 mt 2352 2352 L 23 2352 mt 23 23 L 23 2352 mt 23 2352 L 23 2352 mt 2352 2352 L 23 23 mt 2352 23 L 23 2352 mt 23 23 L 2352 2352 mt 2352 23 L 23 23 mt 23 23 L 2352 23 mt 2352 23 L gs 23 23 2330 2330 MR c np 12 w -1059 0 1188 129 2 MP stroke 0 2117 129 129 2 MP stroke 2117 0 129 2246 2 MP stroke 0 -1058 2246 2246 2 MP stroke -1058 0 2246 1188 2 MP stroke 0 -1059 1188 1188 2 MP stroke 6 w -6 -6 -6 -8 -4 -8 0 0 -3 -9 -1 -9 -1 -10 1 -9 2 -9 4 -9 4 -8 6 -8 7 -7 8 -6 8 -4 9 -4 10 -2 10 0 9 0 10 2 9 4 9 5 8 5 7 7 5 8 5 9 4 9 2 10 0 9 0 10 -2 10 -4 9 -4 8 -6 8 -7 7 -8 6 -8 4 -9 4 -9 2 -9 1 -10 -1 -9 -1 -9 -3 -8 -4 -8 -6 -6 -6 917 1458 47 MP stroke -11 -13 -10 -15 -8 -15 0 0 -6 -17 -4 -17 -2 -19 1 -18 3 -19 6 -18 9 -17 11 -16 14 -14 15 -12 18 -10 18 -7 20 -5 19 -1 20 1 20 4 19 7 17 10 16 12 14 14 12 16 10 17 7 19 4 20 1 20 -1 19 -5 20 -7 18 -10 18 -12 15 -14 14 -16 11 -17 9 -18 6 -19 3 -18 1 -19 -2 -17 -4 -17 -6 -15 -8 -15 -10 -13 -11 963 1412 47 MP stroke -16 -18 -15 -19 -12 -22 0 0 -10 -23 -8 -25 -4 -27 0 -28 3 -28 8 -28 13 -28 17 -25 20 -22 24 -19 27 -15 28 -11 30 -7 30 -2 30 2 30 6 28 11 27 14 24 18 22 22 18 24 14 27 11 28 6 30 2 30 -2 30 -7 30 -11 28 -15 27 -19 24 -22 20 -25 17 -28 13 -28 8 -28 3 -28 0 -27 -4 -25 -8 -23 -10 -22 -12 -19 -15 -18 -16 1005 1370 47 MP stroke -20 -21 -18 -24 -17 -25 0 0 -15 -29 -12 -31 -9 -35 -3 -37 2 -39 9 -40 16 -39 23 -35 29 -32 33 -25 37 -21 38 -14 40 -9 41 -3 40 3 40 9 38 13 36 20 33 24 29 29 24 33 20 36 13 38 9 40 3 40 -3 41 -9 40 -14 38 -21 37 -25 33 -32 29 -35 23 -39 16 -40 9 -39 2 -37 -3 -35 -9 -31 -12 -29 -15 -25 -17 -24 -18 -21 -20 1044 1331 47 MP stroke -44 -48 -21 -28 0 0 -21 -31 -19 -36 -15 -42 -9 -47 -2 -52 9 -54 21 -52 30 -48 39 -41 44 -33 47 -24 49 -17 51 -10 50 -3 50 3 50 11 48 17 45 23 42 31 37 37 31 42 23 45 17 48 11 50 3 50 -3 50 -10 51 -17 49 -24 47 -33 44 -41 39 -48 30 -52 21 -54 9 -52 -2 -47 -9 -42 -15 -36 -19 -31 -21 -28 -21 -48 -44 1079 1296 45 MP stroke -48 -48 -26 -27 0 0 -27 -32 -27 -38 -25 -47 -19 -57 -7 -44 -2 -23 1 -24 2 -24 5 -24 6 -24 9 -24 10 -23 13 -22 13 -21 15 -19 17 -18 35 -32 57 -38 59 -28 59 -18 60 -10 60 -3 59 4 59 12 57 19 56 28 52 37 45 45 37 52 28 56 19 57 12 59 4 59 -3 60 -10 60 -18 59 -28 59 -38 57 -32 35 -18 17 -19 15 -21 13 -22 13 -23 10 -24 9 -24 6 -24 5 -24 2 -24 1 -23 -2 -44 -7 -57 -19 -47 -25 -38 -27 -32 -27 -27 -26 -48 -48 1109 1266 61 MP stroke -49 -45 -30 -24 0 0 -33 -30 -37 -37 -38 -49 -24 -42 -11 -24 -10 -26 -7 -29 -5 -30 -2 -32 1 -33 4 -33 8 -33 12 -32 14 -30 17 -29 20 -26 21 -24 22 -22 46 -36 72 -41 71 -27 69 -18 68 -9 67 -2 67 4 67 11 68 20 67 31 64 43 55 55 43 64 31 67 20 68 11 67 4 67 -2 67 -9 68 -18 69 -27 71 -41 72 -36 46 -22 22 -24 21 -26 20 -29 17 -30 14 -32 12 -33 8 -33 4 -33 1 -32 -2 -30 -5 -29 -7 -26 -10 -24 -11 -42 -24 -49 -38 -37 -37 -30 -33 -24 -30 -45 -49 1135 1240 65 MP stroke -22 -19 -27 -18 -33 -20 0 0 -39 -24 -47 -33 -54 -46 -39 -44 -19 -27 -18 -31 -16 -35 -13 -40 -9 -43 -2 -46 4 -47 11 -47 17 -45 22 -40 26 -37 28 -32 30 -28 31 -24 31 -20 30 -17 30 -15 58 -24 83 -24 77 -15 74 -7 73 -2 73 4 75 10 77 18 80 31 53 30 26 19 24 20 23 23 20 24 19 26 30 53 31 80 18 77 10 75 4 73 -2 73 -7 74 -15 77 -24 83 -24 58 -15 30 -17 30 -20 31 -24 31 -28 30 -32 28 -37 26 -40 22 -45 17 -47 11 -47 4 -46 -2 -43 -9 -40 -13 -35 -16 -31 -18 -27 -19 -44 -39 -46 -54 -33 -47 -24 -39 -20 -33 -18 -27 -19 -22 1155 1220 75 MP stroke -6 -5 -7 -5 -7 -5 -17 -9 -10 -4 -34 -14 0 0 -44 -17 -55 -23 -45 -23 -25 -14 -28 -17 -29 -21 -32 -26 -32 -33 -33 -41 -30 -51 -23 -61 -12 -69 3 -73 17 -72 31 -64 39 -55 43 -44 44 -35 43 -28 42 -23 40 -18 38 -14 35 -12 35 -10 33 -9 31 -7 60 -10 83 -11 79 -5 77 -1 77 3 80 7 85 14 62 16 32 11 33 14 34 16 33 21 32 25 30 30 25 32 21 33 16 34 14 33 11 32 16 62 14 85 7 80 3 77 -1 77 -5 79 -11 83 -10 60 -7 31 -9 33 -10 35 -12 35 -14 38 -18 40 -23 42 -28 43 -35 44 -44 43 -55 39 -64 31 -72 17 -73 3 -69 -12 -61 -23 -51 -30 -41 -33 -33 -32 -26 -32 -21 -29 -17 -28 -14 -25 -23 -45 -23 -55 -17 -44 -14 -34 -13 -27 -10 -14 -5 -6 1171 1204 91 MP stroke -5 -4 -5 -2 -7 -3 -16 -4 -10 -3 -36 -7 0 0 -46 -8 -61 -12 -52 -12 -30 -8 -34 -10 -39 -13 -45 -18 -52 -24 -60 -35 -44 -34 -23 -21 -23 -25 -23 -28 -20 -32 -18 -36 -15 -40 -10 -41 -6 -44 -1 -44 4 -45 9 -44 13 -42 18 -40 21 -37 24 -32 25 -29 27 -26 53 -40 75 -41 67 -28 58 -20 53 -14 48 -10 44 -9 40 -6 38 -6 35 -4 34 -4 63 -5 87 -6 81 -2 79 -1 80 1 83 4 59 5 32 3 33 4 35 5 37 7 41 9 44 14 47 19 33 19 16 12 15 13 14 14 13 15 12 16 19 33 19 47 14 44 9 41 7 37 5 35 4 33 3 32 5 59 4 83 1 80 -1 79 -2 81 -6 87 -5 63 -4 34 -4 35 -6 38 -6 40 -9 44 -10 48 -14 53 -20 58 -28 67 -41 75 -40 53 -26 27 -29 25 -32 24 -37 21 -40 18 -42 13 -44 9 -45 4 674 512 100 MP stroke -44 -1 -44 -6 -41 -10 -40 -15 -36 -18 -32 -20 -28 -23 -25 -23 -21 -23 -34 -44 -35 -60 -24 -52 -18 -45 -13 -39 -10 -34 -8 -30 -12 -52 -12 -61 -8 -46 -7 -36 -5 -18 -2 -8 -3 -7 -2 -5 -4 -5 1182 1193 26 MP stroke 4 -3 8 -8 10 -10 14 -14 16 -16 19 -19 22 -22 26 -26 28 -28 30 -30 33 -33 34 -34 37 -37 37 -37 870 1505 15 MP stroke 33 -3 34 -8 35 -14 33 -21 31 -26 29 -32 25 -36 21 -40 19 -44 15 -45 13 -48 11 -49 10 -52 9 -52 870 1505 15 MP stroke -2 -72 -2 -35 -1 -17 -4 -34 -2 -24 -6 -47 -4 -33 -8 -60 -11 -79 -9 -67 -9 -59 -7 -52 -6 -46 -6 -42 -6 -39 -5 -36 -5 -33 -6 -31 -10 -57 -15 -76 -16 -67 -16 -61 -18 -57 -18 -54 -20 -51 -21 -50 -22 -49 -24 -48 870 1505 29 MP stroke -52 -2 -55 -6 -56 -11 -58 -15 -58 -20 -56 -23 -56 -26 -53 -27 -52 -29 -51 -28 -49 -28 -49 -28 -48 -26 -48 -25 870 1505 15 MP stroke -43 1 -46 1 -49 3 -51 5 -53 5 -54 7 -56 7 -56 8 -56 7 -57 8 -56 8 -55 8 -55 8 -54 8 870 1505 15 MP stroke -68 68 -15 15 -7 7 -12 12 -9 9 -15 15 -10 10 -19 19 -25 25 -43 43 -56 56 -49 49 -46 46 -44 44 -42 42 -42 42 -41 41 -40 40 -40 40 -40 40 -39 39 -39 39 870 1505 23 MP stroke -1 43 -1 46 -3 49 -5 51 -5 53 -7 54 -7 56 -8 56 -7 56 -8 57 -8 56 -8 55 -8 55 -8 54 870 1505 15 MP stroke 2 52 6 55 11 56 15 58 20 58 23 56 26 56 27 53 29 52 28 51 28 49 28 49 26 48 25 48 870 1505 15 MP stroke 72 2 35 2 17 1 34 4 24 2 47 6 33 4 60 8 79 11 67 9 59 9 52 7 46 6 42 6 39 6 36 5 33 5 31 6 57 10 76 15 67 16 61 16 57 18 54 18 51 20 50 21 49 22 48 24 870 1505 29 MP stroke 3 -33 8 -34 14 -35 21 -33 26 -31 32 -29 36 -25 40 -21 44 -19 45 -15 48 -13 49 -11 52 -10 52 -9 870 1505 15 MP stroke gr gs 0 0 229 229 MR c np end eplot epage end showpage %%EndDocument @endspecial 951 2795 a fl(15)g eop %%Page: 16 16 bop 0 42 a fe(Slits)21 b(and)j(in\014nite)d(v)n(ertices)0 134 y fl(Here)16 b (are)h(a)g(couple)g(of)g(examples)e(that)j(demonstrate)e(the)h(represen)o(tat\ ions)f(and)i(e\013ects)f(of)g(slits)f(and)0 194 y(v)o(ertices)e(and)j(in\014n\ it)o(y)l(.)0 273 y fg(>>)25 b([w,beta])e(=)i(drawpoly;)0 333 y(>>)g([x,c]=hpp\ a)o(ra)o(m\(w)o(,be)o(ta\))o(;)0 393 y(>>)g(axis\([-6.5)d(5.5)i(-3)h(9]\))127 b(%)26 b(set)e(axes)g(limits)g(before)f(plotting)0 453 y(>>)i(hold)f(on)486 b (%)26 b(\(and)e(keep)g(them\))0 513 y(>>)h(hpplot\(w,b)o(et)o(a,x)o(,c,)o([],) o(li)o(nsp)o(ace)o(\(.1)o(,4)o(,12)o(\)\))d(%)j(plot)g(streamlin)o(es)d(only) 558 1429 y @beginspecial 0.000000 @llx 0.000000 @lly 200.000000 @urx 200.000000 @ury 2000.000000 @rwi @setspecial %%BeginDocument: flow-hp.ps /MathWorks 120 dict begin /bdef {bind def} bind def /ldef {load def} bind def /xdef {exch def} bdef /xstore {exch store} bdef /c /clip ldef /cc /concat ldef /cp /closepath ldef /gr /grestore ldef /gs /gsave ldef /mt /moveto ldef /np /newpath ldef /cm /currentmatrix ldef /sm /setmatrix ldef /rc {rectclip} bdef /rf {rectfill} bdef /rm /rmoveto ldef /rl /rlineto ldef /s /show ldef /sc /setrgbcolor ldef /w /setlinewidth ldef /cap /setlinecap ldef /pgsv () def /bpage {/pgsv save def} bdef /epage {pgsv restore} bdef /bplot /gsave ldef /eplot {stroke grestore} bdef /portraitMode 0 def /landscapeMode 1 def /dpi2point 0 def /FontSize 0 def /FMS { /FontSize xstore %save size off stack findfont [FontSize 0 0 FontSize neg 0 0] makefont setfont }bdef /csm { 1 dpi2point div -1 dpi2point div scale neg translate landscapeMode eq {90 rotate} if } bdef /SO { [] 0 setdash } bdef /DO { [.5 dpi2point mul 4 dpi2point mul] 0 setdash } bdef /DA { [6 dpi2point mul] 0 setdash } bdef /DD { [.5 dpi2point mul 4 dpi2point mul 6 dpi2point mul 4 dpi2point mul] 0 setdash } bdef /L { lineto stroke } bdef /MP { 3 1 roll moveto 1 sub {rlineto} repeat } bdef /AP { {rlineto} repeat } bdef /PP { closepath fill } bdef /DP { closepath stroke } bdef /MR { 4 -2 roll moveto dup 0 exch rlineto exch 0 rlineto neg 0 exch rlineto closepath } bdef /FR { MR stroke } bdef /PR { MR fill } bdef /L1i { { currentfile picstr readhexstring pop } image } bdef /tMatrix matrix def /MakeOval { newpath tMatrix currentmatrix pop translate scale 0 0 1 0 360 arc tMatrix setmatrix } bdef /FO { MakeOval stroke } bdef /PO { MakeOval fill } bdef /PD { 2 copy moveto lineto stroke } bdef currentdict end def MathWorks begin 0 cap 1 setlinejoin end MathWorks begin bpage bplot /dpi2point 12 def portraitMode 0000 2376 csm 0 -25 2401 2402 MR c np 76 dict begin %Colortable dictionary /c0 { 0 0 0 sc} bdef /c1 { 1 1 1 sc} bdef /c2 { 1 0 0 sc} bdef /c3 { 0 1 0 sc} bdef /c4 { 0 0 1 sc} bdef /c5 { 1 1 0 sc} bdef /c6 { 1 0 1 sc} bdef /c7 { 0 1 1 sc} bdef /Helvetica 144 FMS c1 0 0 2377 2377 PR 6 w DO 4 w SO 6 w c0 23 2352 mt 2352 2352 L 23 23 mt 2352 23 L 23 2352 mt 23 23 L 2352 2352 mt 2352 23 L 23 2352 mt 23 2352 L 2352 2352 mt 2352 2352 L 23 2352 mt 2352 2352 L 23 2352 mt 23 23 L 23 2352 mt 23 2352 L 23 2352 mt 2352 2352 L 23 23 mt 2352 23 L 23 2352 mt 23 23 L 2352 2352 mt 2352 23 L 23 23 mt 23 23 L 2352 23 mt 2352 23 L gs 23 23 2330 2330 MR c np 12 w -291 -680 896 1867 2 MP stroke 874 195 605 1187 2 MP stroke -583 485 1479 1382 2 MP stroke 1068 0 896 1867 2 MP stroke 413 -276 1964 1867 2 MP stroke 896 0 0 1867 2 MP stroke 6 w 31 -17 31 -17 33 -18 34 -18 36 -18 39 -19 41 -19 45 -18 33 -12 17 -6 18 -5 18 -5 19 -5 20 -4 20 -3 21 -3 21 -2 22 -1 22 0 22 1 23 2 22 3 23 3 24 5 23 7 23 7 23 10 23 11 22 13 21 15 19 17 16 18 14 20 12 19 8 19 7 18 5 16 3 16 4 26 4 30 3 21 2 11 2 5 2 4 2 4 2 3 3 3 5 6 10 7 12 5 26 10 43 13 45 11 47 11 47 10 46 10 46 10 45 9 44 9 43 8 42 9 40 8 39 8 38 7 37 7 35 6 33 6 31 5 29 5 27 4 24 3 21 2 12 0 5 -1 5 0 3 -1 4 -1 2 -2 2 -3 2 -3 1 -4 0 -12 -2 -25 -5 -35 -4 -31 -3 -19 -3 -20 -2 -24 -3 -26 -2 -30 -1 -35 2 -41 4 -31 3 -17 5 -17 6 -18 7 -18 9 -19 11 -18 576 1630 100 MP stroke 13 -18 15 -16 15 -15 17 -13 17 -12 17 -10 17 -9 17 -8 17 -7 16 -6 16 -5 30 -9 43 -10 40 -8 38 -6 35 -5 34 -4 32 -3 31 -3 30 -2 30 -2 28 -2 28 -2 0 1805 24 MP stroke 27 -11 27 -11 28 -10 29 -10 29 -10 29 -9 31 -9 31 -8 32 -7 32 -6 33 -6 34 -4 33 -3 34 -2 34 0 34 2 34 3 32 5 32 6 30 7 29 8 27 9 26 9 24 9 23 9 22 8 20 9 20 7 20 7 18 7 19 6 17 6 18 5 18 5 17 4 17 4 34 8 50 10 49 9 48 8 47 8 46 6 45 7 44 5 43 6 42 4 40 5 39 3 38 3 37 3 35 1 34 1 31 -1 31 -2 28 -4 26 -6 25 -8 22 -12 21 -16 20 -21 21 -27 21 -34 17 -27 9 -14 10 -16 11 -16 11 -17 13 -17 14 -18 16 -18 17 -18 18 -18 20 -18 21 -17 22 -16 24 -16 24 -14 25 -13 25 -12 25 -11 26 -11 25 -9 26 -8 25 -8 25 -7 25 -6 21 1584 87 MP stroke 24 -8 25 -9 24 -8 25 -7 25 -8 25 -7 26 -7 26 -7 26 -6 26 -5 26 -6 27 -4 26 -5 27 -3 27 -3 26 -3 27 -2 26 -1 27 -1 26 -1 25 1 26 0 25 1 24 2 24 2 24 2 23 2 23 3 22 3 21 2 22 3 20 3 21 3 20 3 20 3 19 2 19 3 19 2 18 3 19 2 18 3 17 2 18 2 18 2 17 2 34 3 50 5 49 5 48 4 46 3 45 3 45 2 43 2 42 1 41 0 40 0 39 -1 37 -2 37 -3 35 -5 35 -6 33 -7 32 -9 32 -12 31 -14 32 -17 31 -20 33 -24 35 -26 38 -30 27 -21 15 -11 15 -11 15 -11 16 -11 17 -11 17 -11 17 -11 18 -11 19 -10 19 -11 19 -10 20 -9 20 -10 21 -9 20 -8 21 -8 21 -8 21 -8 11 1386 90 MP stroke 22 -8 23 -7 22 -7 23 -6 22 -7 23 -6 23 -7 23 -6 23 -5 24 -6 23 -5 23 -5 24 -4 23 -5 23 -4 24 -3 23 -4 24 -3 23 -3 23 -2 23 -2 23 -2 23 -2 22 -1 23 -1 22 -1 22 -1 22 0 21 -1 21 0 22 0 20 0 21 0 20 1 20 0 20 1 20 0 19 1 19 0 19 1 19 1 19 0 18 1 18 0 18 1 18 1 18 0 35 1 51 2 50 1 49 0 48 1 46 0 46 -1 45 -1 44 -2 42 -2 42 -3 41 -4 41 -4 39 -6 39 -6 38 -8 38 -9 37 -11 37 -13 37 -14 38 -16 38 -17 40 -20 41 -21 42 -22 45 -24 32 -16 16 -8 16 -8 16 -8 17 -8 17 -8 18 -7 17 -8 18 -8 18 -7 18 -7 19 -8 18 -7 13 1205 87 MP stroke 21 -7 21 -6 21 -7 21 -6 21 -7 21 -6 21 -6 22 -6 21 -6 21 -5 22 -6 21 -5 22 -5 21 -5 22 -5 21 -4 22 -5 21 -4 22 -4 21 -3 21 -4 22 -3 21 -3 21 -3 21 -3 21 -3 21 -2 21 -3 21 -2 20 -2 21 -2 20 -1 20 -2 21 -1 19 -2 20 -1 20 -1 19 -1 20 -1 19 -1 19 -1 19 -1 18 -1 19 -1 18 0 19 -1 18 -1 18 0 18 -1 17 -1 36 -1 51 -2 51 -2 49 -2 49 -2 48 -3 47 -3 46 -4 45 -3 44 -5 44 -5 43 -6 43 -6 42 -7 41 -8 41 -9 41 -10 41 -11 41 -13 41 -13 42 -14 42 -16 43 -17 44 -17 45 -18 46 -19 48 -19 32 -13 17 -6 16 -6 17 -7 17 -6 17 -6 18 -6 14 1041 85 MP stroke 19 -7 20 -6 20 -7 20 -6 20 -6 20 -6 20 -7 20 -5 20 -6 20 -6 20 -6 20 -5 20 -5 21 -6 20 -5 20 -5 20 -4 21 -5 20 -5 20 -4 20 -4 20 -5 21 -4 20 -3 20 -4 20 -4 20 -3 20 -4 20 -3 20 -3 19 -3 20 -3 20 -3 19 -3 20 -2 19 -3 19 -2 19 -2 19 -3 19 -2 19 -2 19 -2 19 -2 18 -2 19 -2 18 -1 18 -2 18 -2 18 -2 18 -1 18 -2 18 -1 17 -2 35 -3 52 -5 51 -4 50 -5 49 -4 48 -5 48 -5 47 -6 46 -6 46 -6 46 -6 44 -7 45 -8 44 -8 43 -9 44 -10 43 -10 43 -11 44 -12 43 -13 44 -13 44 -14 45 -15 46 -15 46 -15 47 -16 48 -16 49 -16 50 -16 3 893 83 MP stroke 19 -7 19 -6 19 -7 19 -6 19 -6 19 -6 19 -6 19 -6 19 -6 20 -6 19 -5 19 -6 19 -6 20 -5 19 -5 19 -6 20 -5 19 -5 19 -5 20 -4 19 -5 19 -5 20 -4 19 -5 19 -4 19 -4 20 -5 19 -4 19 -4 19 -3 19 -4 19 -4 19 -3 19 -4 19 -3 19 -4 19 -3 19 -3 18 -3 19 -3 18 -3 19 -3 18 -3 19 -3 18 -2 18 -3 18 -3 18 -2 18 -3 18 -2 18 -3 18 -2 17 -2 35 -5 53 -7 51 -6 51 -7 50 -7 49 -6 49 -7 48 -6 48 -7 47 -8 47 -7 47 -8 46 -8 45 -9 46 -9 45 -9 45 -10 45 -11 45 -11 45 -11 45 -12 45 -13 46 -13 46 -13 47 -13 47 -14 47 -14 49 -14 48 -15 13 746 83 MP stroke 18 -6 18 -7 19 -6 18 -6 18 -6 19 -6 18 -6 19 -6 18 -6 19 -6 19 -5 18 -6 19 -5 18 -6 19 -5 19 -6 18 -5 19 -5 18 -5 19 -5 19 -5 18 -5 19 -5 19 -4 18 -5 19 -5 18 -4 19 -5 18 -4 19 -4 18 -4 19 -4 18 -5 19 -3 18 -4 19 -4 18 -4 18 -4 18 -3 19 -4 18 -3 18 -4 18 -3 18 -4 18 -3 18 -3 18 -3 17 -4 18 -3 18 -3 18 -3 17 -3 35 -6 52 -8 52 -9 51 -8 50 -8 50 -8 50 -8 49 -8 49 -8 48 -8 48 -9 47 -8 47 -9 47 -9 47 -9 46 -10 46 -10 46 -10 47 -11 46 -11 46 -11 46 -11 46 -12 47 -12 47 -13 47 -12 47 -13 48 -13 49 -13 25 -6 0 608 83 MP stroke 18 -5 18 -5 18 -5 18 -6 18 -5 18 -5 18 -4 18 -5 18 -5 19 -5 18 -4 18 -5 18 -5 18 -4 18 -4 18 -5 18 -4 18 -4 18 -5 17 -4 18 -4 18 -4 18 -4 18 -4 17 -4 18 -3 18 -4 18 -4 17 -4 18 -3 17 -4 18 -3 17 -4 18 -4 34 -6 52 -10 52 -10 51 -10 50 -9 51 -10 49 -9 50 -9 49 -9 49 -9 48 -9 48 -10 48 -9 48 -9 47 -10 48 -10 47 -10 47 -10 46 -11 47 -10 47 -11 47 -11 47 -11 47 -12 47 -11 47 -12 48 -12 48 -12 48 -12 40 -10 0 470 65 MP stroke 52 -12 51 -11 51 -11 51 -11 50 -10 51 -11 50 -10 49 -10 50 -10 49 -10 48 -10 49 -10 48 -10 48 -10 48 -10 48 -10 48 -10 47 -10 48 -11 47 -10 47 -11 47 -11 48 -11 47 -11 47 -11 48 -11 47 -12 48 -11 48 -12 48 -11 9 331 31 MP stroke 48 -11 48 -10 48 -11 48 -10 47 -11 48 -11 48 -10 47 -11 48 -11 47 -11 48 -11 47 -11 48 -11 47 -11 48 -11 48 -11 27 -6 0 197 18 MP stroke gr gs 0 0 229 229 MR c np end eplot epage end showpage %%EndDocument @endspecial 0 1508 a(>>)j(w=[-i;-2i;)o(i;)o(-1+)o(i;I)o(nf])o(;)99 b(%)26 b (new)e(region)0 1568 y(>>)h(beta=scang)o(le)o(\(w\))278 b(%)26 b(compute)d (angles)g(where)h(possible)0 1689 y(beta)g(=)179 1809 y(NaN)103 1869 y(1.0000) 77 1929 y(-0.5000)179 1990 y(NaN)179 2050 y(NaN)0 2170 y(>>)h(beta\([1,4,)o (5])o(\)=[)o(-.5)o(;1;)o(-3)o(])48 b(%)26 b(fill)e(in)h(at)g(Inf)f(and)h(its) f(neighbors)0 2290 y(beta)g(=)77 2411 y(-0.5000)103 2471 y(1.0000)77 2531 y (-0.5000)103 2591 y(1.0000)77 2652 y(-3.0000)951 2795 y fl(16)g eop %%Page: 17 17 bop 0 42 a fg(>>)25 b([z,c]=dpar)o(am)o(\(w,)o(bet)o(a\);)0 102 y(>>)g(axis\ \([-4,1)o(,-)o(3,2)o(]\))0 162 y(>>)g(cla)0 222 y(>>)g(dplot\(w,be)o(ta)o(,z,) o(c,1)o(0,1)o(0,)o(6\))48 b(%)25 b(higher)f(accuracy)e(to)j(avoid)f("jaggies") 558 1174 y @beginspecial 0.000000 @llx 0.000000 @lly 200.000000 @urx 200.000000 @ury 2000.000000 @rwi @setspecial %%BeginDocument: inf-d.ps /MathWorks 120 dict begin /bdef {bind def} bind def /ldef {load def} bind def /xdef {exch def} bdef /xstore {exch store} bdef /c /clip ldef /cc /concat ldef /cp /closepath ldef /gr /grestore ldef /gs /gsave ldef /mt /moveto ldef /np /newpath ldef /cm /currentmatrix ldef /sm /setmatrix ldef /rc {rectclip} bdef /rf {rectfill} bdef /rm /rmoveto ldef /rl /rlineto ldef /s /show ldef /sc /setrgbcolor ldef /w /setlinewidth ldef /cap /setlinecap ldef /pgsv () def /bpage {/pgsv save def} bdef /epage {pgsv restore} bdef /bplot /gsave ldef /eplot {stroke grestore} bdef /portraitMode 0 def /landscapeMode 1 def /dpi2point 0 def /FontSize 0 def /FMS { /FontSize xstore %save size off stack findfont [FontSize 0 0 FontSize neg 0 0] makefont setfont }bdef /csm { 1 dpi2point div -1 dpi2point div scale neg translate landscapeMode eq {90 rotate} if } bdef /SO { [] 0 setdash } bdef /DO { [.5 dpi2point mul 4 dpi2point mul] 0 setdash } bdef /DA { [6 dpi2point mul] 0 setdash } bdef /DD { [.5 dpi2point mul 4 dpi2point mul 6 dpi2point mul 4 dpi2point mul] 0 setdash } bdef /L { lineto stroke } bdef /MP { 3 1 roll moveto 1 sub {rlineto} repeat } bdef /AP { {rlineto} repeat } bdef /PP { closepath fill } bdef /DP { closepath stroke } bdef /MR { 4 -2 roll moveto dup 0 exch rlineto exch 0 rlineto neg 0 exch rlineto closepath } bdef /FR { MR stroke } bdef /PR { MR fill } bdef /L1i { { currentfile picstr readhexstring pop } image } bdef /tMatrix matrix def /MakeOval { newpath tMatrix currentmatrix pop translate scale 0 0 1 0 360 arc tMatrix setmatrix } bdef /FO { MakeOval stroke } bdef /PO { MakeOval fill } bdef /PD { 2 copy moveto lineto stroke } bdef currentdict end def MathWorks begin 0 cap 1 setlinejoin end MathWorks begin bpage bplot /dpi2point 12 def portraitMode 0000 2376 csm 0 -25 2401 2402 MR c np 76 dict begin %Colortable dictionary /c0 { 0 0 0 sc} bdef /c1 { 1 1 1 sc} bdef /c2 { 1 0 0 sc} bdef /c3 { 0 1 0 sc} bdef /c4 { 0 0 1 sc} bdef /c5 { 1 1 0 sc} bdef /c6 { 1 0 1 sc} bdef /c7 { 0 1 1 sc} bdef /Helvetica 144 FMS c1 0 0 2377 2377 PR 6 w DO 4 w SO 6 w c0 23 2352 mt 2352 2352 L 23 23 mt 2352 23 L 23 2352 mt 23 23 L 2352 2352 mt 2352 23 L 23 2352 mt 23 2352 L 2352 2352 mt 2352 2352 L 23 2352 mt 2352 2352 L 23 2352 mt 23 23 L 23 2352 mt 23 2352 L 23 2352 mt 2352 2352 L 23 23 mt 2352 23 L 23 2352 mt 23 23 L 2352 2352 mt 2352 23 L 23 23 mt 23 23 L 2352 23 mt 2352 23 L gs 23 23 2330 2330 MR c np 12 w 0 466 1886 1420 2 MP stroke 0 -1397 1886 1886 2 MP stroke -466 0 1886 489 2 MP stroke 957 0 1420 489 2 MP stroke -491 0 2377 1420 2 MP stroke 6 w 2 7 0 4 0 4 0 4 -1 4 0 4 -2 7 0 0 -4 11 -6 10 -7 8 -8 7 -9 6 -10 4 -9 3 -10 1 -10 0 -9 -1 -9 -3 -8 -3 -8 -5 -7 -5 -6 -6 -5 -7 -4 -7 -4 -8 -2 -8 -2 -8 0 -8 0 -8 2 -8 2 -8 3 -8 5 -7 5 -7 6 -7 7 -5 8 -5 9 -4 9 -2 10 -1 10 0 10 1 10 3 10 5 9 7 8 8 7 9 5 10 3 12 1421 1206 51 MP stroke 3 19 1 10 -1 9 0 10 -2 9 -2 9 -6 18 0 0 -12 24 -16 21 -19 16 -20 13 -21 9 -21 6 -21 2 -20 -1 -19 -3 -17 -6 -16 -7 -14 -9 -13 -10 -11 -11 -10 -12 -8 -12 -7 -13 -5 -14 -3 -13 -3 -14 -1 -14 1 -15 2 -14 3 -14 5 -13 6 -14 8 -13 9 -13 12 -12 13 -11 15 -9 17 -9 18 -6 21 -4 22 0 23 3 24 7 22 11 22 17 18 21 14 24 9 28 1330 1226 51 MP stroke 4 19 1 18 1 13 -1 6 -1 18 -1 6 -1 6 -1 6 -4 17 -2 6 -4 11 -6 16 -8 15 0 0 -9 14 -20 26 -33 30 -35 23 -36 14 -35 8 -33 3 -31 -2 -29 -5 -26 -9 -24 -11 -21 -13 -19 -15 -16 -15 -13 -17 -12 -17 -9 -18 -8 -18 -6 -18 -4 -18 -3 -18 -1 -19 1 -18 2 -18 3 -19 5 -18 7 -19 9 -18 11 -18 13 -18 15 -18 19 -17 21 -16 26 -14 29 -12 33 -8 38 -2 41 3 28 8 15 5 14 7 14 8 14 9 14 10 13 11 12 13 11 14 10 15 9 16 8 17 7 17 4 18 1215 1252 67 MP stroke 5 33 1 26 1 8 -1 22 -1 11 -1 4 -5 28 -2 10 -3 11 -3 10 -10 26 -1 3 -5 9 -9 18 -3 5 -12 19 -17 23 0 0 -18 20 -19 18 -20 15 -19 14 -39 21 -57 21 -52 10 -48 3 -44 -4 -40 -8 -36 -12 -32 -15 -28 -18 -25 -19 -21 -21 -17 -21 -15 -22 -12 -22 -10 -22 -8 -22 -6 -21 -4 -22 -4 -43 6 -64 11 -45 9 -22 10 -23 13 -23 16 -24 19 -24 24 -24 28 -23 34 -23 42 -20 50 -16 60 -8 45 1 24 3 24 6 26 7 25 11 26 13 25 16 24 19 22 22 21 24 19 28 15 29 13 31 9 33 1062 1285 69 MP stroke 7 48 1 13 1 11 0 12 -1 24 -1 13 0 5 -5 35 0 0 -4 19 -1 6 -7 25 -2 6 -6 18 -5 12 -2 5 -8 17 -8 16 -9 16 -16 25 -3 4 -10 14 0 0 -18 23 -3 2 -7 8 -20 20 -6 5 -34 28 0 0 -35 23 -33 18 -33 15 -32 11 -30 9 -29 6 -27 4 -25 3 -25 2 -23 0 -43 -1 -58 -7 -52 -11 -46 -16 -42 -19 -36 -22 -32 -25 -26 -26 -22 -27 -18 -26 -15 -27 -11 -26 -10 -25 -7 -25 -5 -25 -4 -24 -3 -24 -1 -23 1 -24 1 -24 3 -24 4 -24 6 -25 8 -26 9 -26 12 -28 15 -28 18 -30 22 -32 28 -33 34 -34 44 -35 37 -24 20 -11 23 -12 24 -10 27 -10 30 -8 32 -7 35 -5 38 -2 40 2 43 6 45 11 46 17 46 24 45 30 42 38 38 45 33 51 25 56 16 60 848 1330 93 MP stroke 6 40 2 23 1 16 1 15 0 16 0 9 -1 22 -1 17 -1 6 -3 33 -2 12 -5 25 -2 9 -7 28 -1 4 -10 32 0 0 -6 15 -3 8 -4 11 -5 11 -5 11 -10 21 -6 10 -5 11 -12 19 -6 10 -13 19 -6 9 -20 26 -7 8 -14 16 -22 22 -7 7 -30 26 -7 6 -12 10 -11 8 0 0 -20 14 -2 1 -18 11 -5 3 -15 9 -7 4 -19 10 -3 1 -10 5 -12 5 -13 6 -8 3 -42 14 0 0 -58 15 -53 8 -48 4 -44 0 -39 -2 -35 -3 -33 -4 -29 -5 -28 -5 -25 -5 -24 -5 -23 -6 -22 -5 -40 -11 -57 -19 -51 -22 -46 -26 -41 -30 -34 -32 -27 -33 -22 -33 -17 -32 -13 -31 -11 -29 -8 -28 -6 -28 -5 -26 -4 -26 -2 -25 -1 -26 1 -25 1 -25 2 -26 4 -26 5 -27 6 -28 8 -29 10 -31 13 -32 15 -35 20 -37 24 -41 31 -45 25 -32 15 -18 16 -18 1574 1663 100 MP stroke 18 -18 19 -20 23 -20 25 -22 28 -21 32 -23 38 -22 42 -22 50 -20 57 -17 42 -9 22 -3 24 -3 24 -2 25 -1 26 1 27 1 27 3 29 5 29 6 29 7 30 10 30 11 30 13 30 16 30 17 29 20 29 22 27 23 27 26 26 28 24 30 22 32 20 34 18 35 16 36 14 38 11 38 9 39 516 1395 40 MP stroke -7 13 -4 7 -8 16 -3 4 -10 18 -13 21 0 0 -14 21 -5 7 -9 14 -10 13 -5 7 -15 19 -15 18 -5 6 -21 24 -5 6 -17 16 -16 16 -5 5 -23 20 -5 5 -17 14 -11 9 -6 5 -17 13 -17 12 -17 12 -18 11 -17 10 -17 10 -17 10 -6 3 -11 6 -17 8 -6 3 -23 10 -5 2 -17 7 -16 7 -6 2 -27 9 -16 5 -16 5 -16 4 -11 3 -20 5 0 0 -40 7 -5 1 -34 5 -9 1 -27 2 -14 1 -33 2 -6 0 -16 0 -21 -1 -8 0 -14 -1 -12 -1 -14 -1 -19 -2 -31 -4 0 0 -29 -6 -27 -5 -25 -6 -24 -7 -23 -7 -21 -7 -20 -7 -36 -14 -47 -21 -41 -18 -35 -17 -30 -16 -28 -13 -26 -12 -24 -11 -22 -9 -22 -9 -21 -8 -41 -15 -58 -23 -56 -27 -52 -32 -45 -38 -35 -41 -27 -41 -20 -38 -16 -37 -11 -34 -9 -32 -7 -31 -5 -29 -4 -28 -3 -27 -1 -27 1797 1161 100 MP stroke -1 -26 0 -26 1 -27 2 -27 3 -27 3 -28 5 -30 7 -31 8 -33 10 -35 12 -38 16 -42 19 -46 25 -52 19 -40 12 -21 12 -23 14 -24 15 -26 16 -29 20 -31 22 -34 26 -38 31 -42 25 -30 14 -16 15 -17 16 -17 17 -17 19 -18 21 -18 22 -19 24 -18 26 -19 28 -19 31 -18 33 -18 36 -17 38 -16 41 -15 45 -13 47 -12 50 -8 54 -7 56 -2 59 1 61 5 63 10 65 16 44 13 22 8 22 8 22 10 22 9 22 11 22 11 22 12 22 13 22 13 21 14 21 15 21 16 21 16 21 17 20 18 19 19 20 19 19 20 18 21 18 21 17 22 17 22 16 24 15 24 15 24 14 25 13 25 13 26 13 1743 79 MP stroke -20 -11 -2 -1 -17 -9 -18 -11 -14 -8 -30 -18 -7 -5 -20 -14 -25 -17 -10 -7 -16 -13 -14 -11 -15 -12 -21 -17 -32 -29 0 0 -28 -27 -26 -26 -23 -24 -20 -23 -19 -22 -17 -20 -15 -19 -27 -35 -33 -44 -27 -35 -24 -29 -21 -23 -20 -20 -20 -15 -19 -14 -37 -21 -58 -25 -60 -23 -41 -17 -21 -11 -20 -11 -20 -13 -20 -13 -18 -15 -32 -33 -36 -52 -25 -49 -17 -44 -12 -41 -9 -37 -7 -34 -5 -32 -4 -30 -3 -29 -2 -28 -1 -28 -1 -27 1 -27 0 -27 2 -28 2 -28 2 -29 4 -31 5 -32 6 -34 7 -37 9 -41 11 -44 14 -50 18 -57 13 -42 7 -24 8 -24 8 -27 8 -29 8 -32 9 -36 9 -40 9 -47 11 -56 8 -43 5 -24 6 -25 6 -27 8 -30 9 -31 10 -34 12 -36 14 -38 17 -41 18 -39 1540 2377 88 MP stroke -5 -43 0 0 -4 -49 -3 -44 -2 -39 -1 -36 -1 -31 0 -29 0 -26 0 -24 0 -21 0 -19 -1 -34 -3 -40 -6 -30 -7 -23 -9 -19 -12 -14 -12 -12 -15 -10 -15 -8 -17 -7 -36 -13 -40 -12 -22 -6 -23 -7 -23 -8 -24 -10 -25 -11 -25 -14 -24 -17 -22 -19 -20 -22 -16 -22 -14 -22 -11 -22 -9 -21 -8 -20 -12 -37 -12 -50 -9 -43 -6 -39 -4 -36 -4 -33 -2 -31 -2 -30 -1 -28 -1 -28 0 -28 0 -27 0 -28 1 -28 1 -29 2 -29 2 -32 3 -33 4 -35 5 -38 6 -42 7 -46 9 -52 10 -58 8 -44 4 -24 4 -24 3 -27 2 -28 1 -29 -1 -33 -4 -35 -9 -41 -17 -48 -16 -39 -10 -23 -12 -24 -12 -28 -14 -30 -16 -34 -16 -39 -17 -43 -18 -49 -18 -55 1954 2361 83 MP stroke 15 -19 2 -2 17 -21 8 -9 9 -10 4 -5 12 -13 12 -15 3 -3 14 -17 28 -31 0 0 37 -41 33 -36 30 -32 26 -27 23 -24 20 -21 19 -19 29 -31 32 -36 20 -25 8 -13 3 -6 2 -5 2 -5 0 -4 1 -4 -1 -4 0 -3 -2 -3 -1 -3 -2 -2 -3 -3 -3 -2 -3 -2 -3 -2 -8 -3 -13 -5 -15 -4 -35 -6 -41 -7 -22 -4 -24 -4 -27 -5 -28 -6 -31 -8 -33 -13 -35 -19 -22 -17 -10 -10 -9 -11 -15 -22 -16 -33 -11 -30 -8 -28 -5 -25 -5 -23 -6 -40 -7 -53 -4 -45 -3 -40 -2 -37 -2 -33 -1 -32 -1 -30 -1 -29 0 -28 0 -28 0 -27 0 -28 0 -28 1 -29 1 -30 1 -32 1 -33 2 -36 2 -39 3 -42 4 -47 4 -53 5 -59 3 -44 2 -23 1 -24 1 -25 0 -25 -2 -26 -3 -25 -5 -16 -3 -8 -4 -8 -5 -7 -5 -7 -7 -7 -9 -6 -11 -6 -13 -5 -16 -5 1919 1937 100 MP stroke -19 -5 -23 -4 -29 -5 -35 -7 -41 -9 -49 -12 -56 -18 -42 -15 -22 -9 -23 -10 -24 -10 -24 -12 -25 -13 -27 -13 2358 2079 15 MP stroke -63 10 -59 10 -55 9 -52 9 -50 8 -47 9 -44 7 -43 8 -40 7 -38 7 -37 7 -34 7 -34 6 -31 6 -31 6 -29 6 -28 5 -27 5 -25 6 -25 4 -24 5 -23 5 -22 5 -42 8 -57 12 -52 11 -48 11 -44 9 -40 9 -37 8 -34 8 -32 7 -30 7 -28 6 -26 6 -25 5 -24 5 -43 9 -57 12 1495 1191 40 MP stroke -1 -4 1 -6 1 -3 4 -8 8 -14 15 -15 19 -15 25 -14 30 -11 33 -6 36 -3 38 3 39 7 39 13 38 18 35 22 34 26 30 29 26 32 23 34 20 35 16 37 12 36 9 36 6 36 3 35 1 34 -1 33 -4 31 -5 30 -7 29 -8 27 -9 25 -9 24 -11 23 -11 22 -11 20 -12 19 -24 34 -37 44 1495 1191 41 MP stroke 30 1 31 4 35 6 36 9 39 14 39 20 40 27 38 34 35 41 29 47 22 52 14 56 5 56 -2 55 1495 1191 15 MP stroke 19 1 20 1 22 2 24 4 25 5 27 8 29 9 31 13 32 17 34 21 34 26 33 32 32 39 29 44 1495 1191 15 MP stroke 15 1 16 0 18 1 19 1 21 1 22 2 25 3 27 4 29 5 33 7 36 9 39 11 43 15 48 20 1495 1191 15 MP stroke 15 0 16 0 17 -1 19 0 21 -1 22 -2 24 -2 26 -3 29 -3 32 -4 36 -6 39 -6 45 -8 50 -10 1495 1191 15 MP stroke 18 0 20 -2 22 -2 22 -4 25 -5 25 -7 28 -9 28 -11 31 -15 31 -17 34 -21 34 -25 36 -30 37 -37 1495 1191 15 MP stroke 34 -2 36 -7 36 -12 35 -16 33 -19 33 -23 31 -26 29 -30 28 -33 27 -36 23 -41 20 -45 16 -49 10 -53 1495 1191 15 MP stroke 2 -38 8 -40 12 -41 16 -43 19 -44 19 -48 19 -51 16 -54 10 -58 5 -60 -3 -60 -11 -59 -18 -55 -24 -51 1495 1191 15 MP stroke 2 13 1 7 2 3 3 6 2 5 3 4 4 5 4 4 4 4 5 4 5 3 12 6 20 6 22 3 25 -1 25 -6 26 -10 26 -15 25 -20 23 -23 21 -27 17 -30 15 -33 11 -35 7 -36 4 -36 0 -37 -3 -36 -5 -36 -9 -34 -11 -33 -13 -32 -14 -30 -16 -28 -18 -26 -18 -24 -18 -23 -20 -21 -19 -19 -19 -18 -20 -16 -19 -15 -19 -14 -19 -13 -37 -22 -51 -26 1495 1191 47 MP stroke gr gs 0 0 229 229 MR c np end eplot epage end showpage %%EndDocument @endspecial 0 1288 a(>>)h([w,beta])e(=)i(drawpoly;)0 1348 y(>>)g([z,c])f(=)h (dparam\(w,b)o(eta)o(\);)0 1408 y(>>)g(ptsource\(w)o(,b)o(eta)o(,z,)o(c,-)o (.4)o(-.4)o(i\))558 2360 y @beginspecial 0.000000 @llx 0.000000 @lly 200.000000 @urx 200.000000 @ury 2000.000000 @rwi @setspecial %%BeginDocument: piston-d.ps /MathWorks 120 dict begin /bdef {bind def} bind def /ldef {load def} bind def /xdef {exch def} bdef /xstore {exch store} bdef /c /clip ldef /cc /concat ldef /cp /closepath ldef /gr /grestore ldef /gs /gsave ldef /mt /moveto ldef /np /newpath ldef /cm /currentmatrix ldef /sm /setmatrix ldef /rc {rectclip} bdef /rf {rectfill} bdef /rm /rmoveto ldef /rl /rlineto ldef /s /show ldef /sc /setrgbcolor ldef /w /setlinewidth ldef /cap /setlinecap ldef /pgsv () def /bpage {/pgsv save def} bdef /epage {pgsv restore} bdef /bplot /gsave ldef /eplot {stroke grestore} bdef /portraitMode 0 def /landscapeMode 1 def /dpi2point 0 def /FontSize 0 def /FMS { /FontSize xstore %save size off stack findfont [FontSize 0 0 FontSize neg 0 0] makefont setfont }bdef /csm { 1 dpi2point div -1 dpi2point div scale neg translate landscapeMode eq {90 rotate} if } bdef /SO { [] 0 setdash } bdef /DO { [.5 dpi2point mul 4 dpi2point mul] 0 setdash } bdef /DA { [6 dpi2point mul] 0 setdash } bdef /DD { [.5 dpi2point mul 4 dpi2point mul 6 dpi2point mul 4 dpi2point mul] 0 setdash } bdef /L { lineto stroke } bdef /MP { 3 1 roll moveto 1 sub {rlineto} repeat } bdef /AP { {rlineto} repeat } bdef /PP { closepath fill } bdef /DP { closepath stroke } bdef /MR { 4 -2 roll moveto dup 0 exch rlineto exch 0 rlineto neg 0 exch rlineto closepath } bdef /FR { MR stroke } bdef /PR { MR fill } bdef /L1i { { currentfile picstr readhexstring pop } image } bdef /tMatrix matrix def /MakeOval { newpath tMatrix currentmatrix pop translate scale 0 0 1 0 360 arc tMatrix setmatrix } bdef /FO { MakeOval stroke } bdef /PO { MakeOval fill } bdef /PD { 2 copy moveto lineto stroke } bdef currentdict end def MathWorks begin 0 cap 1 setlinejoin end MathWorks begin bpage bplot /dpi2point 12 def portraitMode 0000 2376 csm 0 -25 2401 2402 MR c np 76 dict begin %Colortable dictionary /c0 { 0 0 0 sc} bdef /c1 { 1 1 1 sc} bdef /c2 { 1 0 0 sc} bdef /c3 { 0 1 0 sc} bdef /c4 { 0 0 1 sc} bdef /c5 { 1 1 0 sc} bdef /c6 { 1 0 1 sc} bdef /c7 { 0 1 1 sc} bdef /Helvetica 144 FMS c1 0 0 2377 2377 PR 6 w DO 4 w SO 6 w c0 23 2352 mt 2352 2352 L 23 23 mt 2352 23 L 23 2352 mt 23 23 L 2352 2352 mt 2352 23 L 23 2352 mt 23 2352 L 2352 2352 mt 2352 2352 L 23 2352 mt 2352 2352 L 23 2352 mt 23 23 L 23 2352 mt 23 2352 L 23 2352 mt 2352 2352 L 23 23 mt 2352 23 L 23 2352 mt 23 23 L 2352 2352 mt 2352 23 L 23 23 mt 23 23 L 2352 23 mt 2352 23 L gs 23 23 2330 2330 MR c np 12 w 0 298 1337 1188 2 MP stroke 0 -597 1337 1486 2 MP stroke 0 299 1337 889 2 MP stroke 1040 -1 1337 1188 2 MP stroke 740 0 0 1188 2 MP stroke 0 -896 740 1188 2 MP stroke 895 0 740 292 2 MP stroke -895 0 1635 292 2 MP stroke 0 1791 740 292 2 MP stroke 895 0 740 2083 2 MP stroke -895 0 1635 2083 2 MP stroke 0 -895 740 2083 2 MP stroke -740 0 740 1188 2 MP stroke -1040 0 2377 1188 2 MP stroke 6 w 5 -1 4 -1 5 -1 0 0 5 1 5 1 5 2 4 2 4 4 4 3 3 4 2 5 1 5 1 5 1 5 -1 5 -1 5 -2 4 -3 5 -3 3 -3 4 -5 3 -4 2 -5 1 -5 1 -4 0 -5 0 -5 -1 -4 -2 -4 -3 -4 -2 -3 -4 -3 -3 -2 -4 -2 -5 -1 -4 -1 -4 0 -5 1 -5 1 -4 2 -4 2 -4 3 -4 4 -3 4 -3 4 -3 1111 1459 47 MP stroke 7 -3 3 -2 3 -1 3 -1 4 0 3 -1 7 0 0 0 10 0 11 2 10 4 9 5 8 7 8 8 6 9 4 9 3 10 2 10 0 10 -1 11 -3 10 -4 9 -5 9 -7 8 -7 6 -9 6 -9 4 -10 3 -10 1 -10 0 -9 -2 -9 -3 -9 -4 -7 -5 -7 -6 -6 -6 -5 -7 -4 -8 -3 -8 -2 -8 -1 -8 0 -9 0 -8 2 -9 3 -8 4 -8 5 -8 7 -7 8 -6 7 -5 1127 1490 51 MP stroke 9 -5 5 -3 5 -2 5 -1 6 -2 5 -1 11 -1 0 0 17 0 17 4 16 6 14 8 13 11 11 12 9 14 6 14 5 15 2 16 0 15 -2 16 -4 15 -6 14 -8 14 -10 12 -12 10 -13 9 -15 6 -15 4 -16 1 -15 -1 -14 -4 -14 -5 -12 -7 -10 -8 -9 -9 -8 -10 -7 -10 -5 -11 -4 -11 -2 -11 -2 -12 -1 -11 1 -12 2 -12 3 -12 5 -12 6 -12 9 -11 10 -11 12 -9 1145 1522 51 MP stroke 13 -8 7 -4 7 -4 7 -3 8 -2 8 -2 16 -2 0 0 25 0 24 5 23 9 20 13 17 16 14 17 11 19 8 20 5 20 3 20 0 20 -2 21 -6 20 -7 19 -11 18 -13 17 -17 15 -18 12 -21 9 -22 5 -22 1 -21 -3 -19 -7 -18 -8 -15 -11 -13 -12 -10 -12 -9 -13 -7 -14 -6 -13 -4 -14 -3 -13 -2 -14 -1 -14 0 -14 1 -15 3 -15 4 -15 7 -16 9 -16 12 -17 15 -15 1168 1554 51 MP stroke 7 -7 9 -7 5 -4 4 -2 9 -5 3 -2 4 -2 3 -1 11 -4 4 -1 7 -2 11 -3 12 -1 0 0 11 -1 12 0 12 1 11 2 22 6 29 14 26 19 21 22 16 23 12 24 9 24 6 25 3 25 0 24 -3 25 -5 25 -9 24 -12 23 -17 23 -20 20 -24 17 -19 9 -9 3 -10 3 -20 3 -30 0 -28 -6 -25 -11 -21 -13 -17 -15 -14 -16 -11 -16 -9 -17 -7 -16 -6 -15 -4 -16 -6 -30 -1 -48 4 -35 5 -20 8 -22 13 -23 11 -15 7 -8 1195 1585 59 MP stroke 10 -11 10 -10 8 -7 4 -3 13 -8 4 -3 5 -3 4 -2 15 -6 5 -2 10 -3 16 -4 16 -2 0 0 16 0 16 0 15 2 16 3 14 5 14 5 13 7 25 14 30 27 23 28 18 30 12 29 9 29 6 29 2 28 0 28 -2 28 -6 29 -9 29 -13 29 -17 28 -24 27 -20 17 -10 7 -12 7 -12 6 -13 4 -13 4 -14 3 -14 1 -13 0 -14 0 -13 -2 -13 -3 -12 -4 -11 -5 -11 -5 -19 -12 -23 -19 -19 -21 -14 -20 -10 -20 -9 -18 -11 -36 -9 -50 -3 -50 0 -38 1 -23 4 -27 10 -32 11 -22 8 -12 1231 1616 67 MP stroke 11 -17 10 -13 3 -3 10 -10 6 -5 2 -2 15 -11 7 -4 6 -4 7 -4 20 -9 7 -2 14 -4 22 -5 21 -2 0 0 22 -1 21 2 21 4 20 5 19 7 17 9 17 9 15 11 14 11 12 12 21 24 24 37 17 35 12 35 8 33 5 31 2 32 0 31 -2 31 -5 31 -8 33 -13 34 -17 35 -26 36 -22 23 -13 11 -15 9 -16 9 -17 8 -18 5 -18 4 -19 2 -19 -1 -18 -2 -18 -4 -16 -6 -15 -7 -14 -8 -13 -8 -21 -18 -24 -27 -18 -26 -13 -25 -9 -23 -8 -21 -9 -39 -8 -52 -3 -51 -5 -38 -3 -23 -4 -31 0 -26 2 -16 4 -16 5 -17 8 -18 1277 1646 73 MP stroke 14 -28 3 -5 10 -16 5 -5 1 -2 13 -14 0 0 8 -7 3 -2 14 -11 8 -6 9 -6 9 -5 9 -5 26 -11 3 -1 9 -3 20 -5 6 -2 23 -3 29 -3 0 0 29 1 28 4 27 6 26 9 24 11 22 13 19 15 18 16 15 16 13 16 21 32 22 45 15 42 10 38 6 36 4 34 2 34 0 33 -2 33 -4 34 -7 36 -10 38 -16 42 -24 45 -23 32 -15 15 -17 16 -20 14 -22 12 -25 10 -27 6 -27 2 -27 -2 -26 -6 -24 -9 -20 -11 -18 -12 -16 -13 -13 -13 -22 -26 -22 -35 -15 -32 -11 -28 -7 -25 -6 -23 -7 -42 -6 -54 -4 -51 -3 -22 -4 -12 -2 -6 -7 -14 -15 -29 -12 -31 -4 -21 -2 -25 2 -26 7 -28 1341 1674 81 MP stroke 5 -17 7 -17 2 -6 6 -10 5 -8 4 -7 2 -2 12 -16 7 -9 3 -2 21 -20 0 0 13 -10 4 -3 22 -14 13 -8 13 -7 13 -5 13 -6 35 -11 4 -2 13 -3 26 -5 8 -1 29 -4 38 -1 0 0 37 2 36 6 35 9 34 14 31 18 27 21 23 22 18 23 15 23 12 22 18 41 18 53 10 46 7 42 4 38 3 35 1 35 0 34 -1 35 -3 36 -4 38 -8 41 -11 47 -19 55 -21 41 -14 23 -17 23 -22 24 -29 24 -34 19 -27 10 -14 4 -15 2 -15 1 -15 0 -15 -1 -15 -2 -13 -4 -14 -4 -24 -11 -31 -20 -24 -22 -19 -21 -15 -20 -12 -19 -18 -35 -17 -43 -11 -36 -7 -31 -5 -27 -4 -24 -5 -43 -4 -55 -1 -34 -2 -16 -2 -16 -3 -10 -2 -4 -2 -5 -4 -5 -5 -4 -6 -5 -21 -12 -21 -14 -13 -11 -7 -7 -7 -9 -7 -9 -7 -11 -6 -11 -6 -14 -4 -14 1438 1619 100 MP stroke -3 -16 -2 -16 0 -17 2 -18 4 -17 1437 1703 6 MP stroke 17 -40 13 -21 10 -13 9 -11 10 -11 6 -5 14 -13 11 -10 4 -2 21 -16 8 -5 16 -9 5 -3 18 -10 22 -10 0 0 21 -9 7 -3 33 -11 18 -6 19 -5 17 -4 18 -4 16 -4 28 -4 5 -1 16 -2 0 0 30 -3 10 -1 35 -2 44 0 0 0 45 2 45 6 47 10 47 18 31 17 14 11 13 11 22 25 24 38 15 35 11 31 8 27 10 48 9 59 6 49 3 43 3 40 1 36 0 36 0 35 0 35 -2 37 -2 39 -4 44 -5 50 -11 61 -12 50 -9 29 -12 34 -17 38 -27 44 -25 32 -16 17 -20 16 -22 15 -26 14 -30 10 -32 6 -33 0 -33 -6 -31 -11 -25 -16 -23 -17 -17 -18 -14 -17 -11 -17 -17 -30 -19 -38 -12 -32 -10 -27 -7 -24 -10 -42 -9 -48 -6 -39 -3 -32 -3 -28 -2 -25 -2 -44 -2 -56 -1 -33 0 -16 -2 -15 -1 -8 -2 -4 -1 -3 -3 -2 1335 1489 100 MP stroke -3 -1 -6 0 -7 2 -13 5 -21 7 -22 5 -15 1 -17 0 -20 -2 -22 -4 -24 -10 -26 -14 -26 -19 -25 -27 -22 -32 -16 -39 -9 -44 0 -46 10 -44 1619 1751 20 MP stroke 11 30 20 53 15 35 13 31 14 28 12 26 24 44 33 55 15 23 28 39 37 46 33 36 16 15 28 26 38 30 33 23 15 10 29 16 37 20 33 15 29 11 51 18 60 17 48 12 39 10 33 8 29 8 25 7 42 15 49 22 38 24 31 24 25 24 21 25 18 24 15 25 13 25 12 25 10 26 1098 1426 40 MP stroke 6 -1 8 -2 9 -3 11 -3 14 -2 17 -2 19 1 20 2 22 5 22 8 23 9 22 11 23 13 23 15 1098 1426 15 MP stroke 9 -1 11 0 10 0 12 -1 13 -1 14 -2 16 -1 17 -2 19 -2 20 -2 22 -2 24 -2 25 -2 27 -1 1098 1426 15 MP stroke 12 -1 13 0 14 -2 15 -3 15 -4 16 -4 18 -7 17 -8 19 -9 19 -11 20 -12 20 -14 20 -16 21 -16 1098 1426 15 MP stroke 24 -1 24 -5 24 -8 24 -12 23 -15 21 -17 18 -20 17 -21 14 -22 13 -24 11 -24 10 -24 8 -25 8 -26 1098 1426 15 MP stroke -43 -4 -21 -6 -10 -4 -19 -8 -13 -7 -24 -15 -15 -13 -27 -26 -29 -39 -20 -36 -15 -32 -11 -29 -16 -50 -15 -61 -11 -49 -8 -43 -8 -38 -7 -34 -6 -32 -7 -30 -8 -28 -7 -27 -9 -27 -9 -25 1098 1426 25 MP stroke -24 -1 -27 -3 -27 -5 -28 -8 -28 -11 -28 -12 -27 -15 -26 -16 -25 -16 -25 -17 -23 -18 -24 -16 -23 -17 -23 -15 1098 1426 15 MP stroke -18 0 -20 0 -22 0 -22 0 -24 0 -26 0 -26 0 -28 0 -28 0 -29 1 -29 0 -30 1 -28 1 -28 1 1098 1426 15 MP stroke -24 1 -26 3 -27 5 -28 7 -28 10 -28 13 -28 14 -27 16 -26 17 -25 18 -24 18 -23 19 -22 18 -22 18 1098 1426 15 MP stroke -8 46 -8 19 -5 9 -8 16 -6 11 -12 20 -16 26 -29 46 -33 58 -26 52 -20 48 -15 44 -12 41 -10 38 -7 35 -7 33 -7 31 -6 29 -6 28 -7 27 1098 1426 21 MP stroke gr gs 0 0 229 229 MR c np end eplot epage end showpage %%EndDocument @endspecial 951 2795 a fl(17)g eop %%Page: 18 18 bop 0 42 a fe(Strip)22 b(and)i(rectangle)e(maps)0 134 y fl(Strip)c(and)i(rec\ tangle)e(maps)g(are)h(only)f(sligh)o(tly)g(di\013eren)o(t.)27 b(The)19 b(argu\ men)o(ts)f(whic)o(h)g(sp)q(ecify)g(ends)h(of)0 194 y(the)g(strip)h(or)f(corne\ rs)h(of)g(the)f(rectangle)g(ma)o(y)f(b)q(e)h(omitted,)f(in)h(whic)o(h)g(case) h(they)f(are)g(user-selected)0 254 y(with)d(the)g(mouse.)0 335 y fg(>>)25 b ([w,beta])e(=)i(drawpoly;)0 395 y(>>)g([z,c])f(=)h(stparam\(w,)o(bet)o(a,)o ([1,)o(10])o(\);)0 456 y(>>)g(stplot\(w,b)o(et)o(a,z)o(,c,)o(14,)o(7\))558 1374 y @beginspecial 0.000000 @llx 0.000000 @lly 200.000000 @urx 200.000000 @ury 2000.000000 @rwi @setspecial %%BeginDocument: chan-st.ps /MathWorks 120 dict begin /bdef {bind def} bind def /ldef {load def} bind def /xdef {exch def} bdef /xstore {exch store} bdef /c /clip ldef /cc /concat ldef /cp /closepath ldef /gr /grestore ldef /gs /gsave ldef /mt /moveto ldef /np /newpath ldef /cm /currentmatrix ldef /sm /setmatrix ldef /rc {rectclip} bdef /rf {rectfill} bdef /rm /rmoveto ldef /rl /rlineto ldef /s /show ldef /sc /setrgbcolor ldef /w /setlinewidth ldef /cap /setlinecap ldef /pgsv () def /bpage {/pgsv save def} bdef /epage {pgsv restore} bdef /bplot /gsave ldef /eplot {stroke grestore} bdef /portraitMode 0 def /landscapeMode 1 def /dpi2point 0 def /FontSize 0 def /FMS { /FontSize xstore %save size off stack findfont [FontSize 0 0 FontSize neg 0 0] makefont setfont }bdef /csm { 1 dpi2point div -1 dpi2point div scale neg translate landscapeMode eq {90 rotate} if } bdef /SO { [] 0 setdash } bdef /DO { [.5 dpi2point mul 4 dpi2point mul] 0 setdash } bdef /DA { [6 dpi2point mul] 0 setdash } bdef /DD { [.5 dpi2point mul 4 dpi2point mul 6 dpi2point mul 4 dpi2point mul] 0 setdash } bdef /L { lineto stroke } bdef /MP { 3 1 roll moveto 1 sub {rlineto} repeat } bdef /AP { {rlineto} repeat } bdef /PP { closepath fill } bdef /DP { closepath stroke } bdef /MR { 4 -2 roll moveto dup 0 exch rlineto exch 0 rlineto neg 0 exch rlineto closepath } bdef /FR { MR stroke } bdef /PR { MR fill } bdef /L1i { { currentfile picstr readhexstring pop } image } bdef /tMatrix matrix def /MakeOval { newpath tMatrix currentmatrix pop translate scale 0 0 1 0 360 arc tMatrix setmatrix } bdef /FO { MakeOval stroke } bdef /PO { MakeOval fill } bdef /PD { 2 copy moveto lineto stroke } bdef currentdict end def MathWorks begin 0 cap 1 setlinejoin end MathWorks begin bpage bplot /dpi2point 12 def portraitMode 0000 2376 csm 0 -25 2401 2402 MR c np 76 dict begin %Colortable dictionary /c0 { 0 0 0 sc} bdef /c1 { 1 1 1 sc} bdef /c2 { 1 0 0 sc} bdef /c3 { 0 1 0 sc} bdef /c4 { 0 0 1 sc} bdef /c5 { 1 1 0 sc} bdef /c6 { 1 0 1 sc} bdef /c7 { 0 1 1 sc} bdef /Helvetica 144 FMS c1 0 0 2377 2377 PR 6 w DO 4 w SO 6 w c0 23 2352 mt 2352 2352 L 23 23 mt 2352 23 L 23 2352 mt 23 23 L 2352 2352 mt 2352 23 L 23 2352 mt 23 2352 L 2352 2352 mt 2352 2352 L 23 2352 mt 2352 2352 L 23 2352 mt 23 23 L 23 2352 mt 23 2352 L 23 2352 mt 2352 2352 L 23 23 mt 2352 23 L 23 2352 mt 23 23 L 2352 2352 mt 2352 23 L 23 23 mt 23 23 L 2352 23 mt 2352 23 L gs 23 23 2330 2330 MR c np 12 w 298 0 292 889 2 MP stroke 0 896 590 889 2 MP stroke 747 0 590 1785 2 MP stroke 0 -896 1337 1785 2 MP stroke 149 0 1337 889 2 MP stroke 0 597 1486 889 2 MP stroke 597 0 1486 1486 2 MP stroke -149 -298 2083 1486 2 MP stroke 149 -598 1934 1188 2 MP stroke -597 0 2083 590 2 MP stroke 0 150 1486 590 2 MP stroke -298 0 1486 740 2 MP stroke 0 895 1188 740 2 MP stroke -448 0 1188 1635 2 MP stroke 0 -1045 740 1635 2 MP stroke -740 -212 740 590 2 MP stroke 292 -406 0 1295 2 MP stroke 6 w 9 -34 8 -33 8 -33 6 -33 5 -31 4 -31 3 -30 1 -29 1 -27 -1 -26 0 -25 -1 -23 -1 -22 -1 -22 348 889 15 MP stroke 12 -1 12 0 12 -1 11 0 11 -1 12 -1 10 -2 11 -1 10 -1 10 -1 10 -1 10 -1 9 0 10 0 590 941 15 MP stroke 11 0 11 0 10 0 11 0 11 0 10 0 11 0 11 0 10 0 11 0 11 0 10 0 11 0 11 0 590 1183 15 MP stroke 11 0 11 0 10 0 11 0 10 0 11 -1 11 0 10 0 11 0 11 0 11 0 10 0 11 0 11 0 590 1431 15 MP stroke 2 -2 3 -3 4 -5 5 -5 5 -5 6 -7 7 -7 8 -8 9 -9 10 -10 12 -12 14 -15 18 -19 28 -43 609 1785 15 MP stroke 0 -11 0 -11 0 -10 0 -11 0 -10 0 -11 0 -11 0 -10 0 -11 0 -11 0 -10 0 -11 0 -11 0 -11 946 1785 15 MP stroke -1 -7 -1 -6 -2 -7 -3 -8 -3 -8 -4 -8 -4 -9 -5 -10 -5 -11 -5 -13 -5 -13 -5 -15 -3 -17 -1 -18 1220 1785 15 MP stroke -10 0 -11 0 -10 0 -11 0 -10 0 -11 0 -11 0 -10 0 -11 0 -11 0 -10 -1 -11 0 -11 0 -11 0 1337 1466 15 MP stroke -10 0 -11 0 -11 0 -10 0 -11 0 -11 0 -10 0 -11 0 -11 0 -10 0 -11 0 -10 0 -11 0 -11 0 1337 1218 15 MP stroke -11 0 -11 0 -12 0 -11 -1 -11 -1 -11 0 -11 -1 -10 -1 -11 -1 -10 0 -10 -1 -10 0 -10 -1 -10 0 1337 974 15 MP stroke 0 -11 0 -12 -1 -11 0 -12 -1 -11 -1 -11 0 -11 0 -11 -1 -10 0 -10 0 -10 0 -10 0 -9 0 -10 1421 889 15 MP stroke 23 4 24 0 23 -4 23 -7 22 -11 22 -14 21 -17 20 -20 21 -25 23 -30 16 -25 9 -13 10 -15 10 -16 12 -17 13 -20 15 -22 18 -25 13 -19 8 -11 10 -16 6 -9 8 -14 4 -7 6 -11 2 -6 5 -13 6 -31 1570 1486 29 MP stroke 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1934 1188 15 MP stroke 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -2 0 -6 2 -12 1 -11 5 -19 8 -19 6 -12 10 -14 14 -15 19 -14 1 0 0 -1 3 -1 6 -3 10 -5 11 -3 12 -3 12 -2 12 -2 13 0 26 2 40 9 38 18 34 25 27 29 21 31 15 30 11 28 9 26 8 25 6 22 5 21 5 20 4 18 4 17 4 16 3 15 7 26 9 32 9 22 4 9 3 4 2 2 1 1 2 2 2 1 2 1 4 2 6 2 8 1 7 1 17 1 25 1 25 -1 23 -1 20 -3 11 -3 5 -2 3 -2 3 -3 2 -4 2 -5 3 -11 2 -21 2 -24 1 -26 0 -27 0 -27 1 -28 0 -28 0 -28 0 -28 0 -28 0 -28 0 -28 0 -28 0 -28 0 -28 0 -28 0 -28 0 -28 0 -28 0 -29 0 -28 0 -29 1 -29 1 -30 1316 1569 100 MP stroke 1 -31 3 -35 5 -26 3 -14 5 -16 8 -17 8 -11 5 -5 5 -5 11 -8 17 -9 16 -5 14 -4 27 -4 35 -4 31 -1 30 -1 29 0 29 -1 28 0 29 0 28 0 28 0 29 0 28 1 29 0 30 1 32 1 35 4 26 4 15 4 16 6 11 5 6 3 6 4 5 5 5 5 4 5 8 11 8 17 5 16 3 14 5 26 3 35 1 31 1 30 0 29 1 29 0 28 0 28 0 28 0 29 0 28 0 28 0 28 0 28 0 28 0 28 0 28 0 28 0 28 0 28 0 28 0 28 1 27 0 27 1 26 1 25 3 22 3 13 3 5 3 4 5 3 6 3 7 3 19 5 38 7 30 4 17 2 17 1 18 2 19 1 19 0 20 1 20 0 20 -1 19 -2 19 -3 18 -5 18 -8 19 -11 20 -15 22 -17 24 -21 27 -24 28 -26 32 -30 34 -32 24 -24 35 1069 100 MP stroke 13 -12 22 1081 2 MP stroke 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 -2 3 -5 7 -9 7 -7 12 -11 14 -9 8 -4 11 -4 26 -7 1 0 1 0 4 0 13 -1 22 2 23 5 23 9 23 13 21 15 20 18 17 19 16 21 13 20 12 21 11 20 9 20 9 19 8 17 8 18 7 16 7 15 6 14 13 25 18 31 17 22 8 8 9 7 8 5 8 4 8 2 9 2 8 2 18 1 26 1 26 -1 24 -3 15 -3 7 -2 6 -3 6 -3 5 -3 5 -4 4 -4 4 -5 3 -5 5 -13 5 -23 3 -24 1 -27 1 -27 1 -27 0 -28 0 -28 0 -28 0 -28 0 -28 1 -28 0 -28 0 -28 0 -28 0 -28 0 -28 0 -28 0 -28 0 -28 0 -28 0 -29 1 -28 0 -29 2 -29 3 -31 5 -32 6 -24 5 -11 6 -13 8 -11 9 -11 11 -10 1243 1710 100 MP stroke 12 -8 12 -6 12 -5 23 -7 33 -5 30 -3 30 -2 29 0 28 -1 28 0 29 0 28 0 28 0 28 0 29 1 29 0 29 2 31 3 32 6 24 6 12 5 12 7 11 8 11 9 9 11 8 12 6 12 5 12 6 23 5 33 3 30 2 30 0 28 1 29 0 28 0 28 0 28 0 29 0 28 0 28 0 28 0 28 0 28 0 28 0 28 0 28 0 28 1 28 0 28 0 28 0 27 1 28 1 26 3 26 3 16 2 8 2 7 3 7 4 7 4 6 6 6 6 5 8 6 20 10 38 14 32 8 17 3 18 4 19 2 19 3 21 1 20 1 21 1 22 -1 22 -2 22 -3 23 -5 23 -6 24 -10 26 -11 27 -14 30 -16 32 -19 34 -22 37 -24 26 -17 11 959 87 MP stroke 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 -1 5 -3 10 -4 9 -3 13 -3 20 -1 28 3 0 1 1 0 3 0 9 3 15 5 15 8 15 9 16 11 15 13 14 14 14 15 14 17 12 17 12 17 11 18 11 17 10 18 11 16 9 16 10 16 10 14 9 14 19 24 27 30 25 20 11 8 12 6 10 5 11 3 19 5 29 2 27 0 27 -1 26 -4 16 -5 8 -2 7 -4 7 -3 6 -5 6 -5 6 -5 4 -6 4 -7 7 -14 7 -25 4 -26 2 -27 2 -27 0 -28 1 -28 0 -28 0 -28 0 -28 0 -28 0 -28 0 -28 0 -28 0 -28 0 -28 0 -28 0 -28 0 -28 0 -28 1 -28 0 -28 0 -29 1 -28 2 -29 4 -29 6 -30 7 -20 5 -10 5 -10 7 -9 8 -8 8 -8 9 -7 10 -5 10 -5 20 -7 1178 1714 100 MP stroke 30 -7 29 -3 29 -2 28 -1 28 -1 29 0 28 0 28 0 28 0 28 0 28 1 29 1 29 2 29 3 30 7 20 7 10 5 9 6 9 6 9 8 7 9 7 9 5 10 5 10 7 20 6 29 4 30 1 28 1 29 1 28 0 28 0 28 1 28 0 29 0 28 0 28 0 28 0 28 0 28 0 28 0 28 0 28 0 28 0 28 0 28 0 28 1 28 1 27 2 28 3 27 6 26 6 16 4 8 5 8 6 8 7 8 8 8 20 15 26 15 14 7 16 6 17 6 18 6 19 5 20 4 21 4 22 3 22 2 23 1 23 1 25 -1 25 -2 26 -3 27 -5 28 -6 30 -9 32 -10 33 -12 37 -14 39 -16 34 -14 0 856 82 MP stroke 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 2 0 5 0 10 1 8 1 12 3 36 16 1 1 2 1 6 4 21 16 21 21 11 12 11 14 11 14 11 16 11 16 11 16 11 17 11 17 11 17 12 16 11 17 12 15 12 15 13 13 12 13 13 12 12 10 24 17 33 18 15 6 27 8 35 5 30 1 29 0 28 -2 28 -5 18 -5 9 -3 8 -4 8 -5 8 -5 7 -6 6 -7 6 -7 5 -8 8 -17 8 -27 5 -27 3 -28 1 -28 1 -28 0 -28 1 -28 0 -29 0 -28 0 -28 0 -28 0 -28 0 -28 0 -28 0 -28 0 -28 0 -28 0 -28 0 -28 0 -28 1 -28 0 -28 1 -28 2 -28 4 -28 6 -27 7 -18 4 -8 5 -8 5 -8 6 -7 7 -6 8 -6 8 -5 8 -4 17 -6 28 -7 28 -3 28 -3 28 -1 1061 1709 100 MP stroke 28 0 28 -1 28 0 28 0 28 0 28 1 28 0 28 2 28 2 28 3 27 7 17 6 9 5 8 5 7 5 7 7 6 7 6 7 4 8 5 9 6 17 6 28 4 27 2 28 1 28 0 28 1 28 0 28 0 29 0 28 0 28 0 28 0 28 0 28 0 28 0 28 0 28 0 28 0 28 0 28 0 28 1 28 0 28 1 28 2 28 4 29 6 28 10 29 18 29 29 31 26 20 15 10 17 9 18 8 20 8 20 7 21 6 23 5 23 5 24 4 24 2 26 2 26 2 28 0 28 -1 30 -3 31 -3 33 -5 35 -6 38 -7 39 -9 43 -11 6 758 73 MP stroke 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 1 0 5 3 15 9 33 31 1 0 1 2 4 5 14 18 22 35 16 29 9 16 9 17 9 17 10 18 11 18 11 19 13 18 13 18 14 17 16 16 15 15 17 13 16 11 16 10 17 9 15 7 15 5 28 7 19 3 31 2 37 1 31 -1 30 -1 29 -2 30 -5 20 -5 10 -4 10 -4 10 -6 9 -6 9 -7 8 -8 7 -9 6 -10 9 -20 8 -30 5 -29 3 -29 1 -29 1 -28 0 -28 0 -28 0 -28 0 -29 0 -28 0 -28 1 -28 0 -28 0 -28 0 -28 0 -28 0 -28 0 -28 0 -28 0 -28 0 -28 1 -28 1 -27 2 -28 3 -26 5 -25 5 -16 4 -7 4 -7 4 -6 5 -6 6 -5 6 -5 7 -4 7 -3 16 -6 25 -5 26 -3 27 -2 28 -1 28 -1 28 0 1005 1691 100 MP stroke 28 0 28 0 28 0 28 0 27 1 28 1 27 2 27 3 25 6 15 5 7 4 7 4 6 4 6 5 5 6 4 7 4 6 4 8 5 15 5 25 3 27 2 27 1 28 1 28 0 28 0 28 0 28 0 28 0 28 0 28 0 28 0 28 0 28 0 28 0 28 0 28 0 28 1 28 0 28 0 28 1 29 1 28 1 29 3 29 6 31 9 32 17 36 16 26 11 13 13 14 14 13 17 13 18 12 20 11 21 10 22 9 23 8 24 7 25 6 26 6 26 4 27 4 28 3 29 2 31 2 32 0 33 0 35 -1 37 -1 40 -3 42 -4 35 -3 0 666 73 MP stroke 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 1 1 3 5 9 13 19 38 0 0 1 2 2 6 7 19 13 38 9 31 6 17 6 18 7 20 7 21 10 22 11 22 13 23 15 22 18 22 20 19 21 17 22 15 23 12 22 9 22 7 21 5 20 2 19 1 17 -1 7 0 14 -2 18 -4 16 -3 13 -3 22 -4 31 -2 30 -1 30 -2 32 -4 23 -5 11 -3 12 -4 12 -6 12 -7 11 -9 10 -11 9 -11 6 -12 10 -24 7 -34 4 -31 2 -30 1 -29 0 -29 1 -28 0 -28 0 -28 0 -29 0 -28 0 -28 0 -28 0 -28 0 -28 0 -28 0 -28 0 -28 0 -28 0 -28 0 -28 1 -28 0 -27 1 -28 1 -26 3 -26 3 -23 4 -14 3 -7 3 -5 3 -6 4 -4 5 -4 5 -4 5 -3 7 -2 14 -4 23 -4 26 -3 1114 1670 100 MP stroke 26 -1 28 -1 27 0 28 0 28 0 28 0 28 0 27 0 28 0 27 1 27 1 25 3 24 4 14 4 6 2 5 3 6 4 4 4 4 5 3 5 3 6 3 6 4 14 3 24 3 25 1 27 1 27 0 28 0 28 1 28 0 28 0 28 0 28 0 28 0 28 0 28 0 28 0 28 0 28 0 28 0 28 0 28 0 28 0 29 1 28 0 29 2 29 2 31 4 32 7 36 8 26 5 15 7 15 8 17 9 17 12 18 15 18 18 17 21 17 23 14 24 12 25 11 25 9 26 9 26 7 27 7 28 6 28 5 30 5 30 5 32 4 33 4 34 3 37 3 38 2 41 3 44 1 32 2 0 573 79 MP stroke 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1 2 1 5 2 15 5 40 0 1 0 2 0 6 2 20 1 39 2 32 1 18 1 21 2 22 3 25 4 27 7 30 10 33 17 35 24 34 30 29 33 22 35 16 33 11 32 7 30 4 29 0 28 -2 25 -7 21 -8 9 -5 15 -10 16 -13 11 -9 10 -6 9 -4 9 -2 10 -1 19 -1 30 -1 31 -1 33 -2 38 -5 30 -8 16 -8 12 -6 5 -5 5 -4 5 -6 4 -5 4 -6 6 -11 6 -16 7 -29 4 -37 2 -33 2 -30 0 -30 0 -28 1 -29 0 -28 0 -28 0 -28 0 -29 0 -28 0 -28 0 -28 0 -28 0 -28 0 -28 0 -28 0 -28 0 -28 0 -28 0 -27 0 -28 1 -27 0 -26 2 -25 2 -23 2 -13 1 -6 2 -5 2 -4 2 -3 4 -3 4 -2 5 -2 1179 1646 100 MP stroke 5 -1 13 -2 23 -2 25 -1 26 -1 27 -1 27 0 28 0 28 0 28 0 27 0 28 0 28 0 27 1 26 1 25 1 22 2 13 2 5 2 5 1 4 2 4 3 2 4 2 4 2 5 1 6 2 13 2 22 1 25 1 26 1 28 0 27 0 28 0 28 0 28 0 28 0 28 0 28 0 28 0 28 0 28 0 28 0 28 0 28 0 28 0 28 0 29 0 28 1 28 0 29 1 30 1 31 2 34 4 38 4 29 3 16 4 18 5 20 7 21 10 25 14 26 21 26 26 22 29 17 29 14 28 11 28 10 28 9 27 8 28 7 29 8 29 7 30 7 31 6 32 7 34 7 35 6 37 7 38 7 41 7 44 7 41 7 0 478 83 MP stroke gr gs 0 0 229 229 MR c np end eplot epage end showpage %%EndDocument @endspecial 73 1524 a fl(Note)16 b(that)h(one)f(end)g(of)h(the)f(strip)g(map\ s)g(to)g(a)h(\014nite)e(v)o(ertex,)g(suggesting)i(a)g(source)f(or)g(sink.)0 1626 y fg(>>)25 b([w,beta])e(=)i(drawpoly;)0 1686 y(>>)g([z,c])f(=)h(stparam\ \(w,)o(bet)o(a\))o(;)0 1746 y(>>)g(stplot\(w,b)o(et)o(a,z)o(,c,)o(0,1)o(2\)) 558 2670 y @beginspecial 0.000000 @llx 0.000000 @lly 200.000000 @urx 200.000000 @ury 2000.000000 @rwi @setspecial %%BeginDocument: obst-st.ps /MathWorks 120 dict begin /bdef {bind def} bind def /ldef {load def} bind def /xdef {exch def} bdef /xstore {exch store} bdef /c /clip ldef /cc /concat ldef /cp /closepath ldef /gr /grestore ldef /gs /gsave ldef /mt /moveto ldef /np /newpath ldef /cm /currentmatrix ldef /sm /setmatrix ldef /rc {rectclip} bdef /rf {rectfill} bdef /rm /rmoveto ldef /rl /rlineto ldef /s /show ldef /sc /setrgbcolor ldef /w /setlinewidth ldef /cap /setlinecap ldef /pgsv () def /bpage {/pgsv save def} bdef /epage {pgsv restore} bdef /bplot /gsave ldef /eplot {stroke grestore} bdef /portraitMode 0 def /landscapeMode 1 def /dpi2point 0 def /FontSize 0 def /FMS { /FontSize xstore %save size off stack findfont [FontSize 0 0 FontSize neg 0 0] makefont setfont }bdef /csm { 1 dpi2point div -1 dpi2point div scale neg translate landscapeMode eq {90 rotate} if } bdef /SO { [] 0 setdash } bdef /DO { [.5 dpi2point mul 4 dpi2point mul] 0 setdash } bdef /DA { [6 dpi2point mul] 0 setdash } bdef /DD { [.5 dpi2point mul 4 dpi2point mul 6 dpi2point mul 4 dpi2point mul] 0 setdash } bdef /L { lineto stroke } bdef /MP { 3 1 roll moveto 1 sub {rlineto} repeat } bdef /AP { {rlineto} repeat } bdef /PP { closepath fill } bdef /DP { closepath stroke } bdef /MR { 4 -2 roll moveto dup 0 exch rlineto exch 0 rlineto neg 0 exch rlineto closepath } bdef /FR { MR stroke } bdef /PR { MR fill } bdef /L1i { { currentfile picstr readhexstring pop } image } bdef /tMatrix matrix def /MakeOval { newpath tMatrix currentmatrix pop translate scale 0 0 1 0 360 arc tMatrix setmatrix } bdef /FO { MakeOval stroke } bdef /PO { MakeOval fill } bdef /PD { 2 copy moveto lineto stroke } bdef currentdict end def MathWorks begin 0 cap 1 setlinejoin end MathWorks begin bpage bplot /dpi2point 12 def portraitMode 0000 2376 csm 0 -25 2401 2402 MR c np 76 dict begin %Colortable dictionary /c0 { 0 0 0 sc} bdef /c1 { 1 1 1 sc} bdef /c2 { 1 0 0 sc} bdef /c3 { 0 1 0 sc} bdef /c4 { 0 0 1 sc} bdef /c5 { 1 1 0 sc} bdef /c6 { 1 0 1 sc} bdef /c7 { 0 1 1 sc} bdef /Helvetica 144 FMS c1 0 0 2377 2377 PR 6 w DO 4 w SO 6 w c0 23 2352 mt 2352 2352 L 23 23 mt 2352 23 L 23 2352 mt 23 23 L 2352 2352 mt 2352 23 L 23 2352 mt 23 2352 L 2352 2352 mt 2352 2352 L 23 2352 mt 2352 2352 L 23 2352 mt 23 23 L 23 2352 mt 23 2352 L 23 2352 mt 2352 2352 L 23 23 mt 2352 23 L 23 2352 mt 23 23 L 2352 2352 mt 2352 23 L 23 23 mt 23 23 L 2352 23 mt 2352 23 L gs 23 23 2330 2330 MR c np 12 w -1791 0 2083 531 2 MP stroke -292 -195 292 531 2 MP stroke 769 0 0 1844 2 MP stroke -358 -836 769 1844 2 MP stroke 1075 239 411 1008 2 MP stroke -717 597 1486 1247 2 MP stroke 1314 0 769 1844 2 MP stroke 294 -196 2083 1844 2 MP stroke -294 196 2377 335 2 MP stroke 6 w -27 -14 -67 -35 -59 -29 -53 -25 -46 -19 -41 -12 -41 -4 -43 -2 -43 -1 -43 0 -44 0 -44 0 -43 0 -44 0 -44 0 -44 -1 -45 0 -46 -1 -45 0 -47 -1 -47 -1 -48 -1 -49 0 -50 -1 -51 -1 -51 -1 -53 -1 -54 -2 -55 -1 -57 -1 -58 -1 -59 -2 -61 -1 -62 -1 -64 -1 -64 -1 -64 0 -64 2 -62 2 -59 5 -55 11 -52 20 -56 28 -59 33 -62 37 -52 32 2377 423 47 MP stroke -66 -26 -64 -23 -58 -18 -51 -14 -47 -9 -45 -4 -45 -2 -44 -1 -43 0 -44 0 -43 0 -44 0 -44 -1 -44 0 -44 -1 -45 -1 -45 -1 -46 -1 -46 -1 -47 -2 -48 -1 -49 -2 -49 -2 -51 -2 -52 -2 -52 -2 -54 -2 -55 -3 -57 -3 -58 -2 -59 -3 -61 -3 -63 -2 -64 -2 -64 -2 -66 1 -65 1 -65 5 -63 8 -61 13 -60 19 -62 26 -63 31 -65 35 2361 517 45 MP stroke -46 -13 -68 -16 -61 -12 -55 -8 -51 -6 -48 -2 -46 -1 -44 -1 -44 1 -44 0 -43 0 -44 0 -43 -1 -44 -1 -44 -1 -44 -1 -45 -2 -46 -2 -46 -2 -47 -2 -48 -2 -49 -3 -49 -2 -51 -3 -51 -3 -53 -4 -53 -3 -55 -4 -57 -4 -57 -4 -60 -5 -61 -4 -63 -4 -64 -3 -66 -2 -68 -1 -67 2 -68 5 -67 9 -67 14 -66 20 -67 25 -67 29 -50 25 2377 591 45 MP stroke -32 -5 -71 -9 -65 -5 -58 -4 -53 -1 -49 0 -47 0 -45 1 -44 1 -43 1 -43 0 -43 0 -43 -1 -44 -1 -43 -2 -45 -2 -44 -2 -46 -2 -46 -3 -47 -3 -47 -3 -49 -3 -49 -4 -50 -4 -52 -4 -52 -4 -53 -5 -55 -5 -56 -5 -58 -6 -59 -6 -61 -6 -63 -6 -66 -5 -67 -4 -70 -2 -70 2 -72 4 -72 10 -71 14 -72 20 -71 25 -72 29 2358 683 44 MP stroke -26 -1 -74 -1 -66 1 -60 3 -54 3 -50 3 -47 3 -44 3 -44 1 -43 1 -42 1 -43 -1 -42 -1 -43 -1 -43 -2 -44 -3 -45 -2 -45 -3 -46 -4 -46 -3 -48 -4 -48 -4 -49 -5 -50 -5 -51 -5 -52 -5 -53 -6 -54 -6 -56 -7 -57 -7 -59 -8 -61 -8 -64 -9 -66 -7 -69 -6 -72 -4 -75 0 -76 4 -76 9 -77 14 -77 20 -76 25 -64 26 2377 758 44 MP stroke -28 1 -76 7 -68 9 -59 9 -54 8 -49 7 -46 5 -44 4 -43 3 -41 1 -42 1 -42 -1 -42 -1 -42 -2 -43 -2 -44 -3 -44 -4 -45 -3 -45 -4 -46 -5 -48 -4 -47 -5 -49 -6 -50 -5 -50 -6 -52 -7 -52 -7 -54 -7 -55 -8 -57 -9 -58 -10 -61 -11 -64 -11 -67 -10 -71 -10 -75 -7 -78 -2 -81 2 -83 9 -82 14 -82 21 -80 26 -38 15 2377 844 44 MP stroke -28 6 -27 6 -51 12 -67 17 -59 16 -52 13 -47 11 -44 8 -42 5 -41 4 -40 2 -41 0 -41 -1 -41 -1 -42 -3 -42 -3 -43 -4 -44 -4 -44 -4 -46 -5 -46 -5 -47 -5 -47 -6 -49 -6 -49 -7 -50 -6 -51 -8 -52 -8 -53 -8 -54 -10 -56 -11 -57 -12 -60 -13 -63 -14 -68 -15 -73 -14 -78 -11 -84 -7 -87 1 -59 4 -30 4 -29 4 -30 5 -30 6 -29 6 -29 8 -29 8 -29 8 -28 9 -29 10 2368 939 51 MP stroke -30 10 -29 9 -28 10 -50 20 -66 27 -55 24 -48 19 -44 14 -41 11 -40 6 -39 4 -38 2 -40 0 -39 -1 -41 -2 -41 -3 -42 -4 -42 -4 -43 -5 -45 -5 -45 -6 -45 -6 -47 -6 -47 -6 -48 -7 -49 -8 -50 -7 -50 -8 -51 -9 -53 -10 -53 -11 -54 -12 -56 -14 -58 -16 -62 -18 -67 -20 -74 -21 -54 -12 -29 -5 -29 -5 -30 -4 -31 -3 -31 -2 -32 -1 -32 0 -32 2 -33 2 -32 4 -32 4 -33 6 -31 6 -32 7 -31 8 -31 9 -31 9 -30 10 2368 1034 57 MP stroke -34 15 -32 15 -29 15 -28 15 -49 29 -60 40 -50 32 -43 24 -38 18 -37 11 -36 8 -36 4 -37 1 -38 0 -38 -2 -40 -3 -40 -4 -41 -5 -42 -5 -43 -5 -44 -6 -45 -7 -45 -6 -46 -7 -47 -8 -48 -7 -48 -8 -50 -9 -50 -8 -50 -10 -51 -10 -52 -12 -53 -13 -53 -15 -56 -19 -58 -23 -65 -27 -48 -20 -26 -10 -28 -10 -29 -9 -31 -9 -32 -7 -33 -7 -34 -5 -35 -4 -36 -2 -36 -1 -36 1 -36 3 -36 4 -35 5 -35 6 -35 8 -34 9 -33 9 -33 10 -33 11 2368 1134 59 MP stroke -39 21 -36 21 -33 23 -30 22 -26 23 -24 21 -21 21 -19 19 -33 34 -40 41 -33 29 -32 20 -31 12 -32 6 -33 3 -35 1 -36 -2 -37 -3 -39 -4 -40 -4 -40 -6 -42 -6 -42 -6 -44 -7 -44 -7 -45 -8 -46 -7 -47 -8 -47 -9 -48 -8 -49 -9 -49 -10 -50 -10 -51 -11 -50 -12 -51 -13 -51 -16 -51 -21 -52 -26 -59 -35 -45 -29 -26 -15 -28 -16 -31 -15 -33 -14 -36 -13 -38 -11 -40 -9 -41 -6 -41 -3 -42 -1 -41 1 -42 3 -40 6 -40 7 -38 8 -38 10 -37 11 -36 11 -35 12 2369 1243 61 MP stroke -36 16 -50 28 -45 31 -39 34 -34 35 -28 35 -24 33 -19 30 -16 29 -13 25 -21 43 -25 48 -15 23 -7 9 -7 7 -8 7 -7 5 -8 4 -8 4 -9 3 -9 2 -19 3 -30 1 -33 -2 -34 -3 -36 -4 -38 -5 -39 -6 -40 -6 -41 -7 -42 -8 -44 -7 -44 -8 -44 -9 -46 -8 -46 -9 -48 -9 -47 -9 -49 -10 -49 -10 -49 -10 -50 -11 -49 -12 -49 -13 -47 -16 -46 -19 -44 -28 -45 -43 -36 -40 -22 -24 -27 -26 -33 -26 -38 -26 -42 -22 -47 -18 -50 -14 -51 -9 -51 -4 -51 0 -50 3 -48 7 -46 9 -44 11 -43 12 -41 14 -39 14 -38 15 2373 1360 68 MP stroke -53 16 -72 28 -70 40 -62 53 -48 62 -32 62 -19 56 -12 49 -7 42 -4 36 -2 31 -4 49 -4 51 -4 22 -2 8 -3 7 -4 5 -5 4 -5 3 -6 2 -6 1 -7 1 -17 0 -27 -2 -31 -4 -34 -5 -35 -5 -37 -7 -38 -7 -40 -8 -41 -8 -42 -8 -43 -8 -43 -9 -45 -9 -45 -10 -46 -9 -47 -10 -48 -10 -48 -10 -49 -10 -49 -11 -49 -11 -48 -11 -48 -12 -45 -14 -28 -10 -13 -5 -12 -6 -11 -8 -10 -8 -8 -10 -7 -14 -5 -17 -5 -22 -5 -30 -8 -38 -16 -47 -18 -36 -12 -19 -14 -18 -16 -18 -18 -17 -19 -16 -43 -27 -69 -30 -71 -18 -69 -9 -68 -2 -66 5 -62 11 -56 16 -53 17 -48 19 -46 19 -42 20 -33 17 2377 1491 78 MP stroke gr gs 0 0 229 229 MR c np end eplot epage end showpage %%EndDocument @endspecial 951 2795 a fl(18)g eop %%Page: 19 19 bop 0 42 a fg(>>)25 b([w,beta])e(=)i(drawpoly;)0 102 y(>>)g([z,c,L])e(=)i (rparam\(w,be)o(ta)o(,[1)o(,12)o(,13)o(,2)o(4],)o([],)o([0)o(,1e)o(-6])o(\);) 0 162 y(>>)g(imag\(z\(12\))o(-z)o(\(1\))o(\)/r)o(eal)o(\(z)o(\(12)o(\)-z)o (\(13)o(\)\))0 282 y(ans)g(=)77 403 y(91.4794)151 b(%)25 b(conformal)e(modulu\ s)0 523 y(>>)i(rplot\(w,be)o(ta)o(,z,)o(c,L)o(,4,)o(16)o(\))558 1475 y @beginspecial 0.000000 @llx 0.000000 @lly 200.000000 @urx 200.000000 @ury 2000.000000 @rwi @setspecial %%BeginDocument: spiral-r.ps /MathWorks 120 dict begin /bdef {bind def} bind def /ldef {load def} bind def /xdef {exch def} bdef /xstore {exch store} bdef /c /clip ldef /cc /concat ldef /cp /closepath ldef /gr /grestore ldef /gs /gsave ldef /mt /moveto ldef /np /newpath ldef /cm /currentmatrix ldef /sm /setmatrix ldef /rc {rectclip} bdef /rf {rectfill} bdef /rm /rmoveto ldef /rl /rlineto ldef /s /show ldef /sc /setrgbcolor ldef /w /setlinewidth ldef /cap /setlinecap ldef /pgsv () def /bpage {/pgsv save def} bdef /epage {pgsv restore} bdef /bplot /gsave ldef /eplot {stroke grestore} bdef /portraitMode 0 def /landscapeMode 1 def /dpi2point 0 def /FontSize 0 def /FMS { /FontSize xstore %save size off stack findfont [FontSize 0 0 FontSize neg 0 0] makefont setfont }bdef /csm { 1 dpi2point div -1 dpi2point div scale neg translate landscapeMode eq {90 rotate} if } bdef /SO { [] 0 setdash } bdef /DO { [.5 dpi2point mul 4 dpi2point mul] 0 setdash } bdef /DA { [6 dpi2point mul] 0 setdash } bdef /DD { [.5 dpi2point mul 4 dpi2point mul 6 dpi2point mul 4 dpi2point mul] 0 setdash } bdef /L { lineto stroke } bdef /MP { 3 1 roll moveto 1 sub {rlineto} repeat } bdef /AP { {rlineto} repeat } bdef /PP { closepath fill } bdef /DP { closepath stroke } bdef /MR { 4 -2 roll moveto dup 0 exch rlineto exch 0 rlineto neg 0 exch rlineto closepath } bdef /FR { MR stroke } bdef /PR { MR fill } bdef /L1i { { currentfile picstr readhexstring pop } image } bdef /tMatrix matrix def /MakeOval { newpath tMatrix currentmatrix pop translate scale 0 0 1 0 360 arc tMatrix setmatrix } bdef /FO { MakeOval stroke } bdef /PO { MakeOval fill } bdef /PD { 2 copy moveto lineto stroke } bdef currentdict end def MathWorks begin 0 cap 1 setlinejoin end MathWorks begin bpage bplot /dpi2point 12 def portraitMode 0000 2376 csm 0 -25 2401 2402 MR c np 76 dict begin %Colortable dictionary /c0 { 0 0 0 sc} bdef /c1 { 1 1 1 sc} bdef /c2 { 1 0 0 sc} bdef /c3 { 0 1 0 sc} bdef /c4 { 0 0 1 sc} bdef /c5 { 1 1 0 sc} bdef /c6 { 1 0 1 sc} bdef /c7 { 0 1 1 sc} bdef /Helvetica 144 FMS c1 0 0 2377 2377 PR 6 w DO 4 w SO 6 w c0 23 2352 mt 2352 2352 L 23 23 mt 2352 23 L 23 2352 mt 23 23 L 2352 2352 mt 2352 23 L 23 2352 mt 23 2352 L 2352 2352 mt 2352 2352 L 23 2352 mt 2352 2352 L 23 2352 mt 23 23 L 23 2352 mt 23 2352 L 630 2352 mt 630 2329 L 630 23 mt 630 46 L 543 2513 mt (-2) s 1243 2352 mt 1243 2329 L 1243 23 mt 1243 46 L 1203 2513 mt (0) s 1856 2352 mt 1856 2329 L 1856 23 mt 1856 46 L 1816 2513 mt (2) s 23 2051 mt 46 2051 L 2352 2051 mt 2329 2051 L -132 2104 mt (-3) s 23 1745 mt 46 1745 L 2352 1745 mt 2329 1745 L -132 1798 mt (-2) s 23 1438 mt 46 1438 L 2352 1438 mt 2329 1438 L -132 1491 mt (-1) s 23 1132 mt 46 1132 L 2352 1132 mt 2329 1132 L -84 1185 mt (0) s 23 825 mt 46 825 L 2352 825 mt 2329 825 L -84 878 mt (1) s 23 519 mt 46 519 L 2352 519 mt 2329 519 L -84 572 mt (2) s 23 212 mt 46 212 L 2352 212 mt 2329 212 L -84 265 mt (3) s 23 2352 mt 2352 2352 L 23 23 mt 2352 23 L 23 2352 mt 23 23 L 2352 2352 mt 2352 23 L 23 23 mt 23 23 L 2352 23 mt 2352 23 L gs 23 23 2330 2330 MR c np 12 w 1895 0 240 352 2 MP stroke 0 1671 2135 352 2 MP stroke -1895 0 2135 2023 2 MP stroke 0 -1337 240 2023 2 MP stroke 1672 0 240 686 2 MP stroke 0 1003 1912 686 2 MP stroke -1449 0 1912 1689 2 MP stroke 0 -669 463 1689 2 MP stroke 1226 0 463 1020 2 MP stroke 0 335 1689 1020 2 MP stroke -780 -223 1689 1355 2 MP stroke -112 223 909 1132 2 MP stroke 1003 223 797 1355 2 MP stroke 0 -781 1800 1578 2 MP stroke -1448 0 1800 797 2 MP stroke 0 1115 352 797 2 MP stroke 1671 0 352 1912 2 MP stroke 0 -1449 2023 1912 2 MP stroke -1894 0 2023 463 2 MP stroke 0 1783 129 463 2 MP stroke 2117 0 129 2246 2 MP stroke 0 -2117 2246 2246 2 MP stroke -1894 0 2246 129 2 MP stroke -112 223 352 129 2 MP stroke 6 w -96 -35 -46 -13 -22 -6 -44 -11 -33 -7 -64 -16 -47 -11 -46 -11 -46 -11 -22 -5 -45 -10 -67 -16 -66 -14 -33 -7 -34 -7 -35 -5 -36 -5 -27 0 -14 0 -14 2 -15 3 -16 5 -14 7 -13 9 -11 11 -9 11 -7 11 -5 10 -4 11 -6 18 -3 13 -4 23 -5 59 -1 83 0 81 1 56 2 29 3 32 8 37 10 30 8 16 12 18 16 18 21 15 22 10 45 12 61 8 58 3 55 1 55 0 54 1 54 0 54 0 54 0 54 0 54 0 54 0 54 0 54 0 54 0 54 0 54 -1 55 0 55 -1 58 -3 61 -7 45 -12 22 -10 21 -14 17 -18 12 -18 8 -17 11 -30 7 -37 4 -32 2 -29 1 -56 0 -81 0 -81 0 -81 0 -81 0 -81 -1 -82 -2 -57 -4 -33 -9 -38 -12 -31 -9 -17 -14 -19 -19 -16 -22 -13 -22 -9 -44 -10 -61 -6 -57 -2 -55 -1 -55 -1 -54 0 -54 0 868 1867 100 MP stroke -54 0 -54 0 -54 0 -54 0 -54 0 -54 0 -54 0 -54 0 -54 0 -54 0 -54 0 -54 0 -54 0 -54 0 -55 1 -55 1 -58 3 -61 7 -45 12 -22 11 -21 15 -16 17 -12 18 -8 17 -10 30 -7 37 -4 32 -2 29 -1 55 0 82 0 80 0 81 0 81 0 81 0 81 0 81 0 81 0 81 1 82 2 56 3 31 6 36 8 28 7 16 9 18 14 18 18 17 21 13 23 9 23 6 21 4 41 5 58 4 56 1 55 1 54 0 54 0 54 0 54 0 54 0 54 0 54 0 54 0 54 0 54 0 54 0 54 0 54 0 54 0 54 0 54 0 54 0 54 0 54 0 54 0 54 0 55 -1 57 -2 59 -5 42 -6 22 -6 23 -9 22 -13 18 -16 14 -18 10 -18 7 -16 5 -15 6 -26 5 -34 4 -59 1 -82 0 -81 0 -81 0 -81 0 -81 0 -81 0 -81 0 -81 151 1401 100 MP stroke 0 -80 0 -81 0 -81 0 -81 0 -81 0 -81 -1 -83 -5 -60 -7 -36 -9 -29 -8 -17 -10 -18 -15 -18 -19 -16 -23 -11 -22 -8 -23 -6 -21 -4 -41 -4 -57 -3 -56 -1 -55 -1 -54 0 -54 0 -54 -1 -54 0 -54 0 -54 0 -54 0 -54 0 -54 0 -54 0 -54 0 -54 0 -54 0 -54 0 -53 0 -54 0 -54 0 -54 0 -54 0 -54 0 -54 0 -54 1 -54 0 -54 0 -55 0 -55 1 -56 2 -59 4 -42 7 -22 5 -23 9 -22 12 -19 16 -14 19 -10 17 -7 17 -6 15 -6 26 -5 34 -4 59 -1 82 0 81 0 81 0 81 0 81 0 81 0 81 0 81 0 80 0 81 0 81 0 81 0 81 0 81 0 81 0 81 0 81 0 81 1 82 4 58 4 34 7 26 5 15 6 16 10 18 14 18 18 17 22 13 22 9 23 6 42 7 59 4 57 2 55 1 54 0 54 0 54 0 1713 174 100 MP stroke 54 1 54 0 54 0 54 0 54 0 54 0 54 0 36 0 18 0 36 0 36 0 36 0 36 0 36 0 36 0 36 0 36 0 36 0 71 0 72 0 48 0 24 0 48 0 48 0 48 0 63 1 31 0 60 2 103 19 341 151 30 MP stroke -88 -36 -44 -13 -22 -7 -43 -11 -32 -9 -63 -16 -47 -12 -46 -11 -46 -11 -22 -6 -45 -11 -66 -16 -66 -15 -32 -6 -33 -6 -33 -5 -33 -2 -33 2 -22 4 -10 4 -10 4 -9 5 -8 6 -8 6 -6 6 -6 7 -5 6 -8 14 -4 10 -3 10 -3 9 -3 19 -4 38 -2 81 1 81 1 55 3 27 6 29 6 21 5 10 6 11 8 11 9 11 11 11 13 10 16 9 16 8 36 11 55 10 55 4 54 2 54 1 54 0 54 0 54 0 54 0 54 0 54 0 54 0 54 0 54 0 54 0 54 0 54 0 54 -1 55 -2 54 -4 56 -9 35 -11 17 -8 15 -9 13 -10 12 -11 9 -11 8 -11 6 -11 5 -10 7 -21 6 -29 2 -27 2 -55 1 -81 0 -81 0 -81 0 -81 0 -81 -2 -81 -4 -55 -6 -29 -8 -21 -5 -11 -7 -11 -8 -11 -10 -11 -13 -10 -14 -10 -16 -9 -17 -7 -36 -10 542 1808 100 MP stroke -55 -8 -55 -4 -54 -1 -54 -1 -54 0 -54 -1 -54 0 -54 0 -54 0 -54 0 -54 0 -54 0 -54 0 -54 0 -54 0 -54 0 -54 0 -53 0 -54 1 -55 0 -54 1 -54 2 -55 4 -55 9 -36 12 -16 7 -15 9 -14 11 -11 11 -9 11 -8 11 -6 11 -4 10 -7 20 -6 29 -2 28 -2 55 -1 81 0 80 0 81 0 81 0 81 0 81 0 81 0 81 0 81 1 81 4 55 4 29 6 20 4 10 5 11 7 11 8 11 10 11 12 10 14 10 16 9 17 7 18 6 18 4 37 7 55 5 54 2 54 1 54 0 54 0 54 1 54 0 54 0 54 0 54 0 54 0 54 0 54 0 54 0 54 0 54 0 54 0 54 0 54 0 54 0 54 0 53 -1 55 0 54 0 54 -2 55 -3 55 -6 36 -8 18 -5 17 -7 16 -9 14 -10 12 -10 11 -11 8 -11 7 -11 9 -21 189 667 100 MP stroke 8 -30 6 -56 1 -81 1 -81 0 -81 0 -81 0 -81 0 -81 0 -81 0 -81 0 -80 0 -81 0 -81 0 -81 0 -81 -1 -81 -2 -82 -7 -56 -6 -20 -5 -11 -5 -10 -8 -11 -8 -11 -11 -11 -13 -11 -14 -9 -16 -9 -35 -12 -55 -10 -55 -4 -55 -2 -54 -1 -54 -1 -54 0 -54 0 -54 0 -54 0 -54 0 -54 0 -54 0 -54 0 -54 0 -54 0 -54 0 -54 0 -54 0 -53 0 -54 0 -54 0 -54 0 -54 0 -54 0 -54 0 -54 0 -54 0 -54 1 -54 0 -54 1 -55 3 -55 6 -37 8 -18 5 -17 7 -16 9 -14 9 -13 11 -10 11 -8 11 -7 11 -6 11 -4 10 -3 10 -5 20 -6 56 -1 81 -1 81 0 81 0 81 0 81 0 81 0 81 0 81 0 80 0 81 0 81 0 81 0 81 0 81 0 81 0 81 0 81 1 81 1 81 6 56 7 29 10 21 6 11 9 11 10 12 2152 279 100 MP stroke 12 10 14 10 16 9 17 7 18 5 36 8 55 7 55 3 54 1 54 0 54 1 54 0 54 0 54 0 54 0 54 0 54 0 54 0 54 0 36 0 18 0 36 0 36 0 36 0 36 0 36 0 36 0 36 0 36 0 36 0 71 0 72 0 48 0 24 0 48 0 48 0 48 1 63 1 32 1 42 2 21 1 40 6 76 23 324 183 44 MP stroke -81 -34 -43 -13 -21 -7 -42 -12 -32 -8 -63 -17 -46 -13 -46 -12 -45 -11 -23 -6 -44 -12 -66 -16 -64 -16 -32 -7 -62 -11 -58 -2 -26 4 -14 5 -7 3 -6 3 -5 4 -5 4 -4 4 -7 10 -4 7 -3 8 -3 8 -3 17 -4 35 -1 80 0 81 2 53 2 26 4 17 2 9 3 8 4 8 5 8 6 7 7 8 9 7 10 6 12 7 13 5 14 5 30 8 50 8 53 3 53 2 54 1 54 0 53 1 54 0 54 0 54 0 54 0 54 0 54 0 54 0 54 0 54 -1 53 0 54 -1 53 -2 53 -3 50 -7 31 -8 14 -5 13 -6 12 -6 10 -7 9 -7 7 -7 6 -8 5 -8 4 -7 3 -9 3 -8 3 -17 3 -26 2 -53 0 -81 0 -81 0 -81 0 -81 0 -81 -1 -80 -4 -53 -4 -17 -3 -8 -3 -8 -4 -8 -6 -8 -6 -7 -8 -7 -10 -7 -11 -7 -25 -11 -46 -12 550 1765 100 MP stroke -51 -7 -53 -3 -53 -2 -54 0 -53 -1 -54 0 -54 0 -54 0 -54 0 -54 0 -54 0 -54 0 -54 0 -54 0 -54 0 -54 0 -53 0 -54 0 -54 0 -54 1 -54 1 -53 1 -52 4 -50 7 -31 8 -14 5 -13 6 -12 6 -10 7 -9 7 -7 8 -6 7 -5 8 -4 8 -3 8 -2 8 -3 17 -3 27 -2 53 0 81 0 81 0 80 0 81 0 81 0 81 0 81 0 81 0 81 1 80 3 53 3 17 2 9 2 8 4 8 4 8 5 8 7 7 8 8 9 7 11 6 12 6 13 6 30 8 49 9 52 4 53 2 54 1 54 1 54 0 53 0 54 0 54 0 54 0 54 0 54 0 54 0 54 0 54 0 54 0 54 0 54 0 54 0 54 0 54 0 53 0 54 0 54 0 54 -1 53 -1 53 -3 52 -5 48 -10 28 -10 12 -6 11 -7 9 -7 8 -7 7 -7 5 -8 216 669 100 MP stroke 5 -8 3 -8 3 -8 2 -9 3 -17 3 -35 1 -80 0 -81 0 -81 0 -81 0 -81 0 -81 0 -81 0 -81 0 -80 0 -81 0 -81 0 -81 0 -81 0 -81 -1 -54 -1 -26 -2 -26 -3 -17 -3 -9 -2 -8 -4 -8 -5 -8 -5 -8 -7 -7 -8 -7 -10 -7 -11 -6 -13 -6 -14 -6 -30 -8 -50 -8 -52 -4 -53 -2 -54 -1 -53 0 -54 0 -54 0 -54 0 -54 0 -54 0 -54 0 -54 0 -54 0 -54 0 -54 0 -54 0 -54 0 -54 0 -53 0 -54 0 -54 0 -54 0 -54 0 -54 0 -54 0 -54 0 -54 0 -54 0 -53 1 -54 1 -53 2 -51 6 -49 9 -28 10 -12 6 -11 7 -10 7 -8 7 -7 7 -5 8 -4 8 -4 8 -3 8 -2 9 -3 17 -3 35 -1 80 0 81 0 81 0 81 0 81 0 81 0 81 0 81 0 80 0 81 0 81 0 81 0 81 0 81 0 81 0 81 0 81 2179 581 100 MP stroke 0 81 1 80 3 35 3 17 2 9 3 8 3 8 4 8 6 7 6 8 8 7 9 7 11 7 12 6 28 10 48 10 52 5 53 3 53 1 54 1 54 0 53 0 54 0 54 0 54 0 54 0 54 0 54 0 54 0 36 0 18 0 36 0 36 0 36 0 36 0 36 0 36 0 36 0 36 0 36 0 71 0 72 0 48 0 24 1 48 0 48 0 48 0 65 1 32 1 43 2 22 2 44 6 88 27 304 223 54 MP stroke -77 -30 -41 -12 -21 -7 -42 -12 -31 -9 -62 -17 -47 -13 -45 -12 -45 -13 -23 -6 -44 -12 -65 -17 -64 -17 -31 -7 -59 -13 -52 -8 -21 0 -13 1 -5 1 -4 1 -5 2 -3 2 -3 2 -5 6 -2 6 -2 6 -2 7 -2 15 -2 33 -1 79 0 81 1 52 2 25 2 15 2 7 2 6 3 6 3 5 5 5 7 4 8 3 9 4 22 6 42 6 47 4 51 2 52 1 53 1 54 0 53 0 54 0 54 0 54 0 54 0 54 0 54 0 54 0 54 0 53 0 54 0 53 -1 53 -1 50 -2 48 -4 41 -6 23 -6 9 -3 8 -4 7 -4 5 -4 4 -5 3 -6 2 -7 2 -6 2 -16 2 -24 1 -53 0 -80 0 -81 0 -81 0 -81 0 -81 -1 -80 -2 -50 -3 -15 -2 -6 -2 -6 -3 -6 -5 -5 -6 -4 -7 -4 -8 -3 -10 -3 -24 -6 -42 -6 -48 -4 -51 -2 -53 -1 -53 0 761 1733 100 MP stroke -54 0 -53 0 -54 0 -54 -1 -54 0 -54 0 -54 0 -54 0 -54 0 -54 0 -54 0 -54 0 -53 1 -54 0 -54 0 -54 0 -53 0 -52 2 -51 2 -47 4 -41 6 -23 6 -9 3 -8 4 -6 4 -5 5 -4 5 -3 5 -2 7 -2 7 -2 15 -2 25 -1 52 0 81 0 81 0 80 0 81 0 81 0 81 0 81 0 81 0 81 0 80 3 51 1 16 2 7 1 7 3 6 3 5 4 5 6 5 7 3 8 4 21 6 40 7 46 5 50 2 52 1 53 1 54 0 54 0 53 0 54 1 54 0 54 0 54 0 54 0 54 0 54 0 54 0 54 0 54 0 54 0 54 0 54 0 53 -1 54 0 54 0 54 0 53 0 53 -1 52 -1 49 -3 45 -6 36 -7 19 -7 7 -4 6 -4 4 -5 4 -6 2 -6 3 -14 4 -49 1 -79 0 -81 0 -81 0 -81 0 -81 0 -81 218 1239 100 MP stroke 0 -81 0 -81 0 -80 0 -81 0 -81 0 -81 0 -81 0 -81 -1 -79 -3 -33 -2 -14 -2 -7 -3 -6 -3 -5 -5 -5 -6 -4 -8 -4 -9 -3 -21 -6 -40 -7 -47 -4 -51 -3 -52 -1 -53 0 -54 -1 -53 0 -54 0 -54 0 -54 0 -54 0 -54 0 -54 0 -54 0 -54 0 -54 0 -54 0 -54 0 -54 0 -53 0 -54 0 -54 0 -54 0 -54 0 -54 0 -54 0 -54 0 -54 0 -53 0 -54 1 -53 1 -52 1 -49 3 -45 5 -37 8 -18 7 -8 3 -6 5 -4 4 -4 6 -2 6 -3 14 -4 49 -1 79 0 81 0 81 0 81 0 81 0 81 0 81 0 81 0 80 0 81 0 81 0 81 0 81 0 81 0 81 0 81 0 81 0 80 1 80 4 49 3 14 2 6 3 6 5 5 5 4 8 4 18 7 36 8 45 5 49 3 52 1 53 1 53 1 54 0 54 0 53 0 54 0 1605 307 100 MP stroke 54 0 54 0 54 0 54 0 54 0 36 0 18 0 36 0 36 0 36 0 36 0 36 0 36 0 36 0 36 0 36 0 71 0 72 0 48 0 24 0 48 0 48 0 49 0 65 1 32 1 45 1 23 1 31 2 16 2 33 5 72 22 280 272 32 MP stroke 0 16 0 16 0 16 0 16 0 16 0 16 0 16 0 16 0 16 0 15 0 16 0 16 0 16 0 16 1510 129 15 MP stroke -8 0 -8 0 -8 0 -8 0 -7 0 -8 0 -8 0 -8 0 -8 0 -8 0 -8 0 -8 0 -8 0 -8 0 2246 567 15 MP stroke -8 0 -8 0 -8 0 -8 0 -8 0 -7 0 -8 0 -8 0 -8 0 -8 0 -8 0 -8 0 -8 0 -8 0 2246 1167 15 MP stroke -8 0 -8 0 -8 0 -8 0 -7 0 -8 0 -8 0 -8 0 -8 0 -8 0 -8 0 -8 0 -8 0 -8 0 2246 1766 15 MP stroke 0 -16 0 -16 0 -16 0 -16 0 -16 0 -16 0 -16 0 -16 0 -16 0 -15 0 -16 0 -16 0 -16 0 -16 1593 2246 15 MP stroke 1 -15 0 -15 0 -15 1 -15 1 -15 1 -16 1 -15 2 -16 1 -16 1 -17 1 -17 1 -17 0 -17 0 -17 388 2246 15 MP stroke 8 0 8 0 8 0 8 0 8 0 7 0 8 0 8 0 8 0 8 0 8 0 8 0 8 0 8 0 129 1572 15 MP stroke 8 0 8 0 8 0 8 0 7 0 8 0 8 0 8 0 8 0 8 0 8 0 8 0 8 0 8 0 129 972 15 MP stroke 0 16 0 16 0 16 0 16 0 16 0 15 0 16 0 16 0 16 0 16 0 16 0 16 0 16 0 16 724 463 15 MP stroke -1 9 -1 9 -3 9 -3 9 -5 10 -5 10 -7 10 -8 11 -9 12 -12 12 -13 13 -17 14 -15 9 -9 5 -6 3 -4 1 -7 2 -16 2 2023 536 19 MP stroke -8 0 -8 0 -8 0 -8 0 -8 0 -8 0 -8 0 -8 0 -7 0 -8 0 -8 0 -8 0 -8 0 -8 0 2023 1220 15 MP stroke 0 -14 -1 -14 -1 -15 -1 -14 -1 -15 -2 -15 -2 -15 -2 -16 -2 -17 -2 -16 -2 -18 -1 -18 -1 -18 0 -18 1804 1912 15 MP stroke 0 -14 0 -15 1 -15 1 -14 1 -15 2 -16 1 -15 2 -16 2 -16 1 -17 1 -17 1 -17 1 -18 0 -18 588 1912 15 MP stroke 8 0 8 0 8 0 8 0 8 0 8 0 8 0 7 0 8 0 8 0 8 0 8 0 8 0 8 0 352 1227 15 MP stroke 0 16 0 15 0 16 0 16 0 16 0 16 0 16 0 16 0 16 0 16 0 16 0 16 0 16 0 16 1105 797 15 MP stroke -8 0 -8 0 -7 0 -8 0 -8 0 -8 0 -8 -1 -8 0 -8 0 -8 0 -8 0 -8 0 -8 0 -8 0 1800 1257 15 MP stroke gr gs 0 0 229 229 MR c np end eplot epage end showpage %%EndDocument @endspecial 0 1589 a(>>)g([w,beta])e(=)i(drawpoly;)0 1649 y(>>)g([z,c,L])e (=)i(rparam\(w,be)o(ta)o(\);)0 1709 y(>>)g(rplot\(w,be)o(ta)o(,z,)o(c,L)o(,6,) o(12)o(\))558 2661 y @beginspecial 0.000000 @llx 0.000000 @lly 200.000000 @urx 200.000000 @ury 2000.000000 @rwi @setspecial %%BeginDocument: tube-r.ps /MathWorks 120 dict begin /bdef {bind def} bind def /ldef {load def} bind def /xdef {exch def} bdef /xstore {exch store} bdef /c /clip ldef /cc /concat ldef /cp /closepath ldef /gr /grestore ldef /gs /gsave ldef /mt /moveto ldef /np /newpath ldef /cm /currentmatrix ldef /sm /setmatrix ldef /rc {rectclip} bdef /rf {rectfill} bdef /rm /rmoveto ldef /rl /rlineto ldef /s /show ldef /sc /setrgbcolor ldef /w /setlinewidth ldef /cap /setlinecap ldef /pgsv () def /bpage {/pgsv save def} bdef /epage {pgsv restore} bdef /bplot /gsave ldef /eplot {stroke grestore} bdef /portraitMode 0 def /landscapeMode 1 def /dpi2point 0 def /FontSize 0 def /FMS { /FontSize xstore %save size off stack findfont [FontSize 0 0 FontSize neg 0 0] makefont setfont }bdef /csm { 1 dpi2point div -1 dpi2point div scale neg translate landscapeMode eq {90 rotate} if } bdef /SO { [] 0 setdash } bdef /DO { [.5 dpi2point mul 4 dpi2point mul] 0 setdash } bdef /DA { [6 dpi2point mul] 0 setdash } bdef /DD { [.5 dpi2point mul 4 dpi2point mul 6 dpi2point mul 4 dpi2point mul] 0 setdash } bdef /L { lineto stroke } bdef /MP { 3 1 roll moveto 1 sub {rlineto} repeat } bdef /AP { {rlineto} repeat } bdef /PP { closepath fill } bdef /DP { closepath stroke } bdef /MR { 4 -2 roll moveto dup 0 exch rlineto exch 0 rlineto neg 0 exch rlineto closepath } bdef /FR { MR stroke } bdef /PR { MR fill } bdef /L1i { { currentfile picstr readhexstring pop } image } bdef /tMatrix matrix def /MakeOval { newpath tMatrix currentmatrix pop translate scale 0 0 1 0 360 arc tMatrix setmatrix } bdef /FO { MakeOval stroke } bdef /PO { MakeOval fill } bdef /PD { 2 copy moveto lineto stroke } bdef currentdict end def MathWorks begin 0 cap 1 setlinejoin end MathWorks begin bpage bplot /dpi2point 12 def portraitMode 0000 2376 csm 0 -25 2401 2402 MR c np 76 dict begin %Colortable dictionary /c0 { 0 0 0 sc} bdef /c1 { 1 1 1 sc} bdef /c2 { 1 0 0 sc} bdef /c3 { 0 1 0 sc} bdef /c4 { 0 0 1 sc} bdef /c5 { 1 1 0 sc} bdef /c6 { 1 0 1 sc} bdef /c7 { 0 1 1 sc} bdef /Helvetica 144 FMS c1 0 0 2377 2377 PR 6 w DO 4 w SO 6 w c0 23 2352 mt 2352 2352 L 23 23 mt 2352 23 L 23 2352 mt 23 23 L 2352 2352 mt 2352 23 L 23 2352 mt 23 2352 L 2352 2352 mt 2352 2352 L 23 2352 mt 2352 2352 L 23 2352 mt 23 23 L 23 2352 mt 23 2352 L 23 2352 mt 2352 2352 L 23 23 mt 2352 23 L 23 2352 mt 23 23 L 2352 2352 mt 2352 23 L 23 23 mt 23 23 L 2352 23 mt 2352 23 L gs 23 23 2330 2330 MR c np 12 w 0 -1941 658 2246 2 MP stroke 0 1941 658 305 2 MP stroke 706 0 658 2246 2 MP stroke 0 -1764 1364 2246 2 MP stroke 0 1764 1364 482 2 MP stroke 706 0 1364 2246 2 MP stroke 0 -2117 2070 2246 2 MP stroke -353 0 2070 129 2 MP stroke 0 1764 1717 129 2 MP stroke 0 -1588 1717 1893 2 MP stroke -706 0 1717 305 2 MP stroke 0 1588 1011 305 2 MP stroke 0 -1764 1011 1893 2 MP stroke -706 0 1011 129 2 MP stroke 0 2117 305 129 2 MP stroke 353 0 305 2246 2 MP stroke 6 w 0 -90 0 -45 0 -23 0 -45 0 -34 0 -68 0 -51 0 -51 0 -51 0 -25 0 -51 0 -76 0 -76 0 -77 0 -76 0 -76 0 -76 0 -77 0 -76 0 -76 0 -76 1 -75 0 -75 2 -73 3 -70 4 -65 9 -55 7 -29 4 -11 5 -9 5 -7 5 -3 6 -1 5 1 5 4 5 7 5 10 4 12 4 13 6 33 7 60 4 67 2 72 1 74 1 75 0 75 0 76 1 76 0 77 0 76 0 77 0 76 1 78 1 79 3 81 6 87 9 64 8 35 13 36 13 25 8 12 9 12 10 10 10 10 11 8 22 13 31 14 29 9 26 7 47 6 64 2 67 -7 54 -14 30 -13 22 -12 11 -7 11 -9 10 -10 10 -10 8 -12 15 -25 14 -37 9 -35 6 -33 4 -32 5 -59 4 -83 2 -80 1 -78 0 -77 0 -76 0 -77 1 -76 0 -76 0 -76 0 -76 0 -76 1 -74 2 -73 1058 1662 100 MP stroke 3 -69 6 -63 8 -53 8 -27 5 -10 5 -7 5 -5 5 -2 5 0 6 3 5 6 5 9 8 23 10 50 6 61 3 69 2 72 1 74 1 75 0 76 0 76 0 76 0 76 0 76 0 77 0 76 1 77 0 77 0 77 2 79 2 81 6 85 8 63 7 34 11 36 10 25 7 13 8 12 9 11 10 11 10 9 22 16 32 16 30 11 27 7 47 8 65 3 66 -6 52 -12 29 -11 33 -17 22 -16 10 -9 10 -11 8 -11 8 -13 7 -12 10 -25 11 -36 7 -34 5 -32 5 -60 5 -84 1 -80 1 -78 1 -77 0 -77 0 -76 0 -77 0 -76 0 -76 0 -76 0 -77 0 -76 0 -76 0 -77 0 -76 0 -76 0 -51 0 -25 0 -51 0 -51 0 -51 0 -68 0 -34 0 -45 0 -23 0 -45 0 -90 356 2246 90 MP stroke 0 -90 0 -45 0 -23 0 -45 0 -34 0 -68 0 -51 0 -51 0 -51 0 -25 0 -51 0 -76 0 -76 0 -77 0 -76 0 -76 0 -76 0 -77 1 -76 0 -76 0 -76 1 -76 1 -75 3 -74 5 -72 9 -67 10 -41 6 -18 7 -17 8 -14 9 -13 10 -10 10 -7 11 -4 11 -2 11 2 11 5 10 8 10 10 8 13 8 15 13 36 13 63 8 69 4 73 2 75 1 75 0 76 1 76 0 76 0 77 0 76 1 76 0 77 1 77 2 78 5 80 10 82 13 56 9 29 13 28 16 26 19 23 20 19 22 16 21 12 21 9 20 6 19 4 19 3 19 1 18 -1 19 -2 20 -4 19 -6 21 -8 21 -11 22 -15 21 -18 19 -22 17 -26 13 -27 18 -57 14 -84 6 -80 3 -79 2 -77 0 -77 1 -77 0 -76 0 -76 0 -76 1 -77 0 -76 1 -75 1 -75 3 -74 6 -71 11 -66 1089 1801 100 MP stroke 10 -39 7 -18 8 -15 8 -14 10 -11 10 -8 10 -6 11 -2 11 0 11 4 11 6 9 10 10 11 8 15 7 16 12 37 12 65 6 70 4 73 2 75 1 76 0 76 1 76 0 76 0 76 0 76 0 77 0 76 0 77 1 76 1 77 2 78 4 79 9 82 12 56 8 29 12 28 14 27 18 24 20 21 22 17 21 13 21 10 20 7 20 5 19 4 19 1 18 0 19 -1 19 -4 20 -5 20 -7 21 -10 22 -13 21 -17 20 -21 18 -25 14 -27 12 -28 8 -28 7 -29 9 -55 6 -81 4 -79 1 -77 1 -77 0 -77 1 -76 0 -77 0 -76 0 -76 0 -76 0 -77 0 -76 0 -76 0 -77 0 -76 0 -76 0 -51 0 -25 0 -51 0 -51 0 -51 0 -68 0 -34 0 -45 0 -23 0 -45 0 -90 406 2246 90 MP stroke 0 -90 0 -45 0 -23 0 -45 0 -34 0 -68 0 -51 0 -51 0 -51 0 -25 0 -51 0 -76 0 -76 0 -77 0 -76 0 -76 0 -76 0 -77 0 -76 0 -76 1 -76 1 -76 2 -76 3 -76 7 -74 12 -72 14 -45 9 -20 11 -19 12 -18 14 -14 15 -12 17 -9 17 -5 12 -2 6 0 6 0 11 2 18 6 16 10 15 12 14 15 12 18 10 19 9 21 7 23 11 46 10 73 5 75 3 76 1 76 1 76 0 76 0 76 1 76 0 77 0 76 1 77 1 76 3 77 5 77 11 77 12 50 9 25 10 23 11 21 14 20 14 17 15 14 16 12 16 10 15 7 16 5 15 3 15 1 15 0 16 -3 15 -5 16 -6 15 -9 16 -11 15 -14 15 -17 14 -19 12 -21 10 -23 16 -49 14 -76 8 -77 3 -77 2 -77 1 -76 0 -77 1 -76 0 -76 0 -77 0 -76 1 -76 1 -76 1160 1516 100 MP stroke 2 -76 4 -75 7 -74 15 -71 15 -44 10 -20 12 -18 13 -15 14 -14 17 -10 16 -7 12 -2 6 -1 6 0 12 1 17 4 17 8 15 11 15 15 12 16 11 19 18 42 16 70 9 73 4 75 3 76 1 76 1 76 0 77 0 76 0 76 0 76 0 77 0 76 1 76 0 77 2 76 2 77 5 77 10 77 11 51 8 24 10 24 11 22 13 20 14 18 15 16 15 13 16 10 15 8 16 6 15 4 15 2 16 -1 15 -1 15 -4 16 -6 15 -8 16 -11 16 -13 14 -15 15 -18 12 -21 11 -22 18 -48 15 -76 8 -78 4 -76 1 -77 1 -77 1 -76 0 -76 0 -77 0 -76 0 -76 0 -76 0 -77 0 -76 0 -76 0 -77 0 -76 0 -76 0 -51 0 -25 0 -51 0 -51 0 -51 0 -68 0 -34 0 -45 0 -23 0 -45 0 -90 457 2246 94 MP stroke 0 -90 0 -45 0 -23 0 -45 0 -34 0 -68 0 -51 0 -51 0 -51 0 -25 0 -51 0 -76 0 -76 0 -77 0 -76 0 -76 0 -76 0 -77 0 -76 0 -76 0 -77 1 -76 2 -77 4 -77 7 -77 14 -78 16 -51 12 -25 14 -23 16 -22 20 -18 22 -16 24 -11 26 -7 26 -2 26 3 25 8 24 12 21 16 19 19 16 22 14 24 11 25 9 25 12 52 11 77 5 78 3 76 1 77 1 76 1 77 0 76 0 76 0 77 0 76 1 76 2 76 2 75 5 75 10 73 16 68 16 39 9 18 10 15 11 14 11 11 11 9 12 7 11 6 11 3 12 1 11 -1 11 -3 12 -4 11 -7 12 -9 11 -11 10 -12 11 -16 18 -35 20 -64 12 -71 6 -75 4 -75 1 -76 1 -76 1 -76 0 -76 0 -76 0 -77 1 -76 0 -76 1 -77 2 -77 4 -77 9 -77 16 -78 18 -50 13 -24 1149 1900 100 MP stroke 16 -23 18 -20 21 -17 23 -13 25 -9 26 -4 26 1 26 6 24 10 23 15 20 18 18 21 14 23 12 24 10 25 8 26 11 52 9 77 5 77 2 77 1 77 1 76 0 76 0 77 1 76 0 76 0 77 0 76 0 76 1 76 1 76 2 76 5 75 9 73 15 68 15 41 9 18 10 16 11 14 11 12 11 11 11 7 12 6 11 4 11 2 12 0 11 -2 11 -4 12 -6 11 -8 11 -10 11 -12 11 -14 9 -17 9 -18 9 -19 13 -44 12 -70 7 -74 4 -75 2 -76 1 -76 1 -76 0 -76 0 -77 0 -76 0 -76 0 -76 0 -77 0 -76 0 -76 0 -77 0 -76 0 -76 0 -51 0 -25 0 -51 0 -51 0 -51 0 -68 0 -34 0 -45 0 -23 0 -45 0 -90 507 2246 86 MP stroke 0 -90 0 -45 0 -23 0 -45 0 -34 0 -68 0 -51 0 -51 0 -51 0 -25 0 -51 0 -76 0 -76 0 -77 0 -76 0 -76 0 -77 0 -76 0 -76 0 -77 1 -76 1 -77 1 -77 3 -79 6 -80 13 -85 16 -59 12 -30 16 -31 21 -29 26 -26 31 -22 35 -16 36 -9 38 -2 37 3 36 11 34 17 30 22 25 27 20 30 16 30 11 31 9 29 12 58 9 83 5 79 2 78 1 77 1 77 0 77 0 76 0 76 0 76 1 76 0 76 1 76 2 74 4 73 7 70 11 63 17 53 13 27 7 11 7 9 8 7 7 5 8 3 7 1 8 -1 7 -2 8 -5 7 -6 7 -9 8 -10 6 -12 7 -15 12 -33 13 -59 9 -68 4 -71 3 -74 1 -75 1 -76 1 -76 0 -76 0 -77 0 -76 0 -76 1 -77 1 -77 1 -77 4 -79 6 -81 15 -86 19 -59 15 -31 18 -30 24 -27 1159 1988 100 MP stroke 30 -24 33 -19 36 -12 37 -5 37 1 37 8 35 14 32 20 27 25 22 29 17 30 14 31 9 30 8 29 10 57 8 82 4 79 2 78 1 77 1 77 0 76 0 77 0 76 0 76 0 76 0 77 1 76 0 76 1 75 2 75 3 73 7 70 10 64 16 55 13 28 7 12 7 9 8 8 7 6 8 3 7 2 8 0 7 -2 8 -4 7 -5 8 -8 7 -10 7 -11 6 -14 12 -32 14 -58 10 -67 5 -71 3 -74 1 -75 1 -75 0 -76 0 -77 1 -76 0 -76 0 -76 0 -76 0 -77 0 -76 0 -76 0 -77 0 -76 0 -76 0 -51 0 -25 0 -51 0 -51 0 -51 0 -68 0 -34 0 -45 0 -23 0 -45 0 -90 557 2246 80 MP stroke 0 -90 0 -45 0 -23 0 -45 0 -34 0 -68 0 -51 0 -51 0 -51 0 -25 0 -51 0 -76 0 -76 0 -77 0 -76 0 -76 0 -77 0 -76 0 -76 0 -77 0 -76 1 -78 0 -78 2 -79 3 -83 5 -59 3 -31 5 -33 6 -35 9 -37 14 -41 14 -30 8 -14 10 -15 12 -15 13 -14 15 -12 15 -12 17 -10 17 -8 35 -13 52 -10 51 -3 51 4 52 12 35 14 17 10 16 10 15 13 14 13 12 14 20 30 20 43 13 41 9 37 6 34 7 64 6 86 2 82 1 78 1 78 0 77 1 76 0 77 0 76 0 76 0 76 0 76 1 75 1 74 2 72 4 67 5 61 8 51 7 26 3 10 4 9 3 7 4 5 4 3 4 1 3 -1 4 -2 4 -5 3 -6 4 -9 7 -21 9 -45 7 -57 4 -66 3 -70 1 -73 1 -75 0 -75 0 -76 0 -76 0 -77 1 -76 0 -76 1313 1364 100 MP stroke 0 -77 0 -77 1 -79 2 -80 4 -84 5 -60 4 -32 6 -34 8 -36 11 -40 19 -42 17 -30 11 -15 13 -14 14 -13 16 -12 16 -10 17 -9 18 -7 17 -6 35 -9 51 -5 51 1 51 8 35 11 18 7 17 9 16 10 16 12 14 13 13 14 11 15 9 15 15 29 16 42 10 38 7 36 5 33 6 62 5 85 2 81 1 78 1 78 0 77 0 76 0 77 0 76 0 76 0 76 1 77 0 75 0 76 0 75 2 74 1 73 4 68 5 62 8 52 10 38 7 17 4 6 3 3 4 2 4 0 3 -2 4 -4 4 -5 4 -8 6 -20 10 -44 7 -56 4 -64 3 -70 2 -73 0 -74 1 -76 0 -76 0 -76 0 -76 0 -76 0 -76 0 -76 0 -77 0 -76 0 -76 0 -77 0 -76 0 -76 0 -51 0 -25 0 -51 0 -51 0 -51 0 -68 0 -34 0 -45 0 -23 0 -45 0 -90 608 2246 100 MP stroke 25 0 25 0 25 0 26 0 25 0 25 0 25 0 25 0 26 0 25 0 25 0 25 0 25 0 26 0 305 1507 15 MP stroke 25 0 25 0 25 0 25 1 25 0 25 0 25 0 25 1 25 0 26 0 25 1 26 0 25 0 26 0 305 766 15 MP stroke -5 1 -5 2 -5 5 -6 6 -5 9 -5 10 -5 12 -6 15 -5 16 -4 18 -5 21 -3 21 -2 23 -1 24 720 129 15 MP stroke -25 0 -25 0 -26 0 -25 0 -25 0 -25 0 -25 0 -25 1 -26 0 -25 0 -25 0 -25 0 -26 0 -25 0 1011 905 15 MP stroke -27 0 -27 1 -26 1 -26 1 -26 1 -26 2 -25 1 -25 2 -25 1 -24 1 -24 1 -24 1 -24 1 -24 0 1011 1638 15 MP stroke 29 0 28 2 29 2 27 2 27 3 26 4 25 3 25 3 24 3 23 3 23 2 22 1 23 1 22 1 1011 1719 15 MP stroke 25 0 25 0 25 0 25 0 25 0 25 1 26 0 25 0 25 0 25 0 26 0 25 1 26 0 25 0 1011 993 15 MP stroke -1 1 -2 2 -1 5 -1 7 -2 8 -1 10 -2 13 -1 14 -1 16 -2 17 -1 20 -1 20 0 22 0 22 1380 305 15 MP stroke -25 0 -25 0 -25 0 -25 0 -25 0 -26 0 -25 0 -25 0 -25 1 -26 0 -25 0 -25 0 -25 0 -26 0 1717 1031 15 MP stroke -30 1 -30 2 -30 3 -28 4 -27 4 -27 5 -25 4 -24 5 -23 4 -23 3 -22 3 -21 2 -22 1 -21 0 1717 1752 15 MP stroke 27 0 26 0 26 1 26 1 26 0 25 2 26 1 25 1 24 1 25 1 24 0 25 1 24 0 24 0 1717 1603 15 MP stroke 26 0 25 0 25 0 25 0 25 0 26 0 25 0 25 0 25 0 25 0 26 0 25 0 25 0 25 0 1717 868 15 MP stroke gr gs 0 0 229 229 MR c np end eplot epage end showpage %%EndDocument @endspecial 951 2795 a fl(19)g eop %%Page: 20 20 bop 0 42 a fe(Exterior)23 b(maps)0 134 y fl(Exterior)17 b(mapping)f(w)o(orks) h(the)g(same)f(w)o(a)o(y)l(,)h(except)f(that)h(v)o(ertices)f(are)h(no)o(w)g (clo)q(c)o(kwise)f(with)h(resp)q(ect)0 194 y(to)g(the)f(in)o(terior)f(of)h (the)g(region.)22 b(Note)15 b(that)i(slits)f(are)g(no)o(w)h(more)e(lik)o(e)f (sp)q(ok)o(es.)0 289 y fg(>>)25 b([w,beta]=d)o(ra)o(wpo)o(ly;)0 349 y(>>)g ([z,c]=depa)o(ra)o(m\(w)o(,be)o(ta\))o(;)0 409 y(>>)g(deplot\(w,b)o(et)o(a,z) o(,c\))558 1342 y @beginspecial 0.000000 @llx 0.000000 @lly 200.000000 @urx 200.000000 @ury 2000.000000 @rwi @setspecial %%BeginDocument: star-de.ps /MathWorks 120 dict begin /bdef {bind def} bind def /ldef {load def} bind def /xdef {exch def} bdef /xstore {exch store} bdef /c /clip ldef /cc /concat ldef /cp /closepath ldef /gr /grestore ldef /gs /gsave ldef /mt /moveto ldef /np /newpath ldef /cm /currentmatrix ldef /sm /setmatrix ldef /rc {rectclip} bdef /rf {rectfill} bdef /rm /rmoveto ldef /rl /rlineto ldef /s /show ldef /sc /setrgbcolor ldef /w /setlinewidth ldef /cap /setlinecap ldef /pgsv () def /bpage {/pgsv save def} bdef /epage {pgsv restore} bdef /bplot /gsave ldef /eplot {stroke grestore} bdef /portraitMode 0 def /landscapeMode 1 def /dpi2point 0 def /FontSize 0 def /FMS { /FontSize xstore %save size off stack findfont [FontSize 0 0 FontSize neg 0 0] makefont setfont }bdef /csm { 1 dpi2point div -1 dpi2point div scale neg translate landscapeMode eq {90 rotate} if } bdef /SO { [] 0 setdash } bdef /DO { [.5 dpi2point mul 4 dpi2point mul] 0 setdash } bdef /DA { [6 dpi2point mul] 0 setdash } bdef /DD { [.5 dpi2point mul 4 dpi2point mul 6 dpi2point mul 4 dpi2point mul] 0 setdash } bdef /L { lineto stroke } bdef /MP { 3 1 roll moveto 1 sub {rlineto} repeat } bdef /AP { {rlineto} repeat } bdef /PP { closepath fill } bdef /DP { closepath stroke } bdef /MR { 4 -2 roll moveto dup 0 exch rlineto exch 0 rlineto neg 0 exch rlineto closepath } bdef /FR { MR stroke } bdef /PR { MR fill } bdef /L1i { { currentfile picstr readhexstring pop } image } bdef /tMatrix matrix def /MakeOval { newpath tMatrix currentmatrix pop translate scale 0 0 1 0 360 arc tMatrix setmatrix } bdef /FO { MakeOval stroke } bdef /PO { MakeOval fill } bdef /PD { 2 copy moveto lineto stroke } bdef currentdict end def MathWorks begin 0 cap 1 setlinejoin end MathWorks begin bpage bplot /dpi2point 12 def portraitMode 0000 2376 csm 0 -25 2401 2402 MR c np 76 dict begin %Colortable dictionary /c0 { 0 0 0 sc} bdef /c1 { 1 1 1 sc} bdef /c2 { 1 0 0 sc} bdef /c3 { 0 1 0 sc} bdef /c4 { 0 0 1 sc} bdef /c5 { 1 1 0 sc} bdef /c6 { 1 0 1 sc} bdef /c7 { 0 1 1 sc} bdef /Helvetica 144 FMS c1 0 0 2377 2377 PR 6 w DO 4 w SO 6 w c0 23 2352 mt 2352 2352 L 23 23 mt 2352 23 L 23 2352 mt 23 23 L 2352 2352 mt 2352 23 L 23 2352 mt 23 2352 L 2352 2352 mt 2352 2352 L 23 2352 mt 2352 2352 L 23 2352 mt 23 23 L 23 2352 mt 23 2352 L 23 2352 mt 2352 2352 L 23 23 mt 2352 23 L 23 2352 mt 23 23 L 2352 2352 mt 2352 23 L 23 23 mt 23 23 L 2352 23 mt 2352 23 L gs 23 23 2330 2330 MR c np 12 w 176 529 1188 482 2 MP stroke 353 -176 1364 1011 2 MP stroke -353 176 1717 835 2 MP stroke 529 177 1364 1011 2 MP stroke -529 176 1893 1188 2 MP stroke -176 529 1364 1364 2 MP stroke -177 -529 1188 1893 2 MP stroke -176 176 1011 1364 2 MP stroke 176 -176 835 1540 2 MP stroke -529 -176 1011 1364 2 MP stroke 529 -177 482 1188 2 MP stroke 177 -529 1011 1011 2 MP stroke 6 w 16 -14 1 -1 8 -7 4 -4 3 -2 6 -4 6 -5 4 -3 9 -6 7 -5 3 -2 9 -6 4 -2 5 -4 5 -2 6 -4 3 -2 12 -7 2 -1 13 -7 0 0 7 -4 3 -1 5 -3 4 -2 5 -3 10 -5 4 -2 5 -3 9 -4 4 -2 4 -3 5 -2 4 -2 4 -2 5 -2 4 -2 4 -2 4 -2 4 -2 12 -6 4 -2 15 -8 4 -2 6 -3 5 -2 0 0 9 -5 2 0 8 -4 2 -2 7 -3 3 -2 8 -4 2 -1 4 -2 5 -2 6 -3 3 -2 9 -5 8 -4 0 0 8 -4 15 -9 21 -11 17 -11 14 -10 11 -10 6 -5 2 -3 1 -3 2 -3 0 -2 1 -3 0 -2 -1 -3 -1 -3 -1 -2 -2 -3 -2 -3 -6 -6 -12 -10 -15 -11 -18 -11 -14 -9 -8 -5 -8 -4 -8 -5 -9 -5 -9 -5 -10 -6 -10 -5 -10 -6 -10 -6 -12 -7 -11 -7 -12 -7 -12 -8 -13 -8 689 1334 100 MP stroke -13 -9 -14 -10 -14 -11 -13 -12 -14 -14 -12 -15 -11 -17 -9 -17 -7 -17 -5 -17 -3 -14 -2 -13 -2 -12 -2 -10 -2 -8 -3 -8 -3 -6 -4 -5 -5 -5 -5 -4 -7 -3 -7 -2 -9 -2 -10 -2 -12 -2 -14 -3 -15 -3 -16 -5 -17 -7 -18 -10 -16 -11 -15 -13 -13 -13 -12 -14 -11 -14 -10 -13 -9 -13 -8 -13 -8 -12 -7 -12 -7 -12 -6 -11 -6 -10 -6 -11 -6 -9 -5 -10 -5 -9 -5 -8 -5 -9 -4 -8 -5 -7 -8 -14 -12 -18 -11 -15 -10 -12 -5 -5 -3 -2 -3 -2 -3 -1 -3 -1 -2 -1 -3 0 -2 1 -3 1 -3 1 -2 2 -3 2 -6 5 -9 12 -11 14 -11 18 -11 20 -9 16 -4 8 -5 9 -4 8 -5 9 -5 10 -5 10 -5 10 -5 10 -6 11 -5 11 -6 12 -6 11 -6 12 -6 13 -6 13 -7 13 -7 13 -7 14 -8 15 -8 14 -8 16 -9 15 -10 16 -11 16 -11 16 -13 17 1437 1486 100 MP stroke -14 15 -15 16 -16 14 -16 13 -16 12 -16 11 -16 10 -16 9 -15 9 -15 8 -15 7 -14 8 -14 7 -13 7 -13 6 -13 6 -12 7 -12 6 -12 5 -11 6 -11 5 -11 6 -10 5 -10 5 -10 5 -9 4 -9 5 -9 5 -8 4 -8 4 -15 9 -20 12 -17 11 -14 10 -10 10 -5 6 -2 2 -1 3 0 3 -1 3 1 3 0 3 2 3 2 3 5 7 11 11 15 13 12 10 7 5 8 6 8 6 9 6 9 7 9 8 10 8 11 9 11 10 11 12 12 12 11 15 10 17 8 18 6 19 4 20 0 18 -1 17 -3 15 -3 12 -3 12 -2 9 -3 8 -1 8 -1 6 -1 5 0 5 0 4 2 4 1 3 3 3 3 2 3 2 4 2 5 1 11 2 14 1 8 0 9 0 9 -1 11 0 11 -1 12 0 13 -1 14 -1 16 0 17 1 18 1 19 2 21 4 21 6 1482 807 100 MP stroke 22 9 21 11 20 13 17 15 16 15 14 15 12 15 11 14 10 14 10 14 8 13 8 13 8 12 7 11 7 11 6 11 6 10 6 10 6 9 5 9 5 8 5 8 5 7 4 8 9 13 12 16 10 13 7 6 3 3 3 2 3 2 2 1 3 1 3 0 3 0 2 -1 3 -1 3 -1 3 -2 6 -5 9 -11 10 -14 11 -18 12 -20 9 -16 4 -8 4 -8 5 -9 5 -9 4 -9 5 -10 5 -10 6 -11 5 -10 5 -11 6 -12 6 -11 6 -12 6 -13 6 -12 7 -14 7 -13 7 -14 7 -14 8 -15 8 -15 9 -15 10 -16 10 -16 11 -16 12 -16 14 -16 14 -16 915 915 74 MP stroke 13 -12 7 -7 5 -5 5 -4 5 -5 3 -3 8 -6 5 -5 2 -1 8 -7 3 -2 5 -4 4 -3 4 -4 3 -2 10 -7 2 -1 11 -9 0 0 6 -4 3 -2 4 -3 4 -3 4 -3 9 -6 4 -3 4 -2 8 -6 4 -3 4 -3 4 -2 4 -3 3 -2 4 -3 4 -3 4 -2 4 -3 3 -2 12 -8 3 -2 14 -10 4 -2 6 -4 4 -3 0 0 9 -6 1 -1 8 -5 2 -1 6 -5 3 -2 8 -5 1 -1 4 -3 5 -4 5 -4 3 -2 9 -6 7 -6 0 0 8 -6 14 -11 19 -17 16 -16 13 -15 10 -14 7 -15 3 -9 0 -5 1 -4 0 -5 -1 -4 -1 -5 -2 -10 -7 -14 -11 -16 -13 -16 -17 -17 -13 -12 -6 -6 -8 -6 -7 -7 -8 -6 -8 -7 -8 -7 -9 -7 -9 -8 -9 -8 -10 -8 -10 -8 -9 -9 -11 -9 -10 -9 -10 -10 -10 -10 -10 -11 -10 -11 -10 -11 -10 -12 704 1455 100 MP stroke -9 -12 -8 -12 -8 -11 -8 -12 -7 -11 -7 -11 -6 -10 -7 -10 -6 -10 -7 -8 -7 -9 -7 -7 -7 -8 -8 -7 -8 -7 -9 -6 -10 -7 -10 -6 -10 -7 -11 -7 -11 -7 -12 -8 -12 -8 -12 -8 -12 -9 -11 -10 -11 -10 -11 -10 -11 -10 -10 -10 -10 -10 -9 -11 -9 -10 -9 -10 -8 -9 -8 -10 -8 -9 -7 -9 -7 -8 -7 -9 -7 -8 -7 -8 -6 -7 -7 -7 -6 -7 -12 -12 -17 -17 -16 -13 -15 -10 -14 -7 -10 -3 -5 0 -4 -1 -5 0 -5 1 -4 0 -10 3 -14 7 -15 10 -15 14 -16 16 -11 13 -5 6 -6 7 -6 8 -6 8 -6 7 -6 9 -6 8 -7 9 -6 9 -7 10 -6 10 -7 10 -7 10 -7 11 -8 10 -7 12 -8 11 -8 12 -8 12 -8 12 -9 12 -9 13 -10 12 -9 13 -10 13 -11 13 -11 14 -11 13 -11 12 -12 13 -13 13 -13 12 -12 11 -14 12 -13 11 -13 10 -13 10 1609 1456 100 MP stroke -13 10 -13 9 -13 9 -12 9 -13 9 -12 8 -12 8 -11 8 -11 7 -12 8 -10 7 -11 7 -10 7 -10 7 -10 7 -9 6 -9 6 -9 7 -9 6 -8 6 -8 6 -7 6 -7 6 -7 6 -7 5 -12 11 -16 17 -13 15 -9 16 -5 10 -1 5 -1 5 -1 5 0 5 0 5 0 5 1 5 1 6 4 11 9 17 12 19 10 14 5 8 6 7 6 8 7 8 6 9 7 9 7 10 7 10 7 10 7 11 7 12 7 12 6 12 5 13 5 13 5 13 3 12 3 12 3 12 3 11 2 10 2 10 2 9 4 17 6 14 3 7 4 6 4 5 4 6 5 5 10 8 20 12 16 6 9 3 9 3 10 3 10 3 11 3 12 4 12 3 12 4 14 4 14 4 14 5 14 6 15 6 15 7 15 7 15 9 15 9 14 9 13 10 13 11 12 10 12 10 11 11 11 10 1387 624 100 MP stroke 10 11 10 10 9 9 9 10 9 9 8 9 8 9 8 8 7 8 7 8 7 7 7 7 7 7 6 6 13 12 17 14 17 11 15 8 10 3 5 1 5 1 5 0 5 0 4 -1 5 -1 5 -1 5 -2 10 -5 15 -10 15 -13 16 -16 11 -13 6 -6 5 -7 6 -8 6 -7 6 -8 6 -8 7 -9 6 -9 6 -9 7 -9 6 -10 7 -10 7 -10 7 -11 8 -11 7 -11 8 -11 8 -12 8 -12 8 -12 8 -12 9 -13 9 -13 10 -12 10 -13 10 -14 11 -13 11 -13 11 -13 12 -12 12 -13 849 849 64 MP stroke 11 -11 7 -6 4 -5 5 -4 4 -5 3 -2 6 -6 5 -5 2 -1 7 -7 3 -3 4 -3 3 -3 5 -4 2 -2 9 -8 1 -1 11 -9 0 0 5 -5 2 -2 4 -3 4 -3 3 -4 8 -6 3 -3 4 -3 7 -6 4 -4 4 -3 3 -3 4 -3 3 -3 4 -3 3 -3 4 -3 3 -3 4 -3 10 -8 3 -3 13 -11 4 -3 5 -5 4 -4 0 0 8 -7 1 -1 7 -6 2 -2 6 -5 3 -3 7 -6 2 -2 3 -3 5 -4 5 -5 3 -3 8 -8 7 -7 0 0 7 -8 7 -7 6 -7 7 -7 11 -15 15 -21 13 -20 9 -20 6 -20 3 -20 0 -20 -3 -19 -6 -21 -9 -20 -12 -22 -10 -14 -5 -8 -6 -8 -6 -7 -6 -8 -6 -8 -7 -8 -7 -8 -7 -8 -8 -9 -7 -8 -8 -9 -8 -9 -9 -9 -8 -9 -9 -10 -8 -9 -9 -10 -9 -10 -9 -10 -9 -11 -9 -10 -9 -10 -8 -11 645 1502 100 MP stroke -9 -11 -9 -10 -8 -11 -8 -10 -9 -10 -8 -10 -8 -10 -9 -10 -8 -10 -8 -9 -9 -9 -9 -9 -8 -9 -9 -9 -10 -8 -9 -9 -10 -8 -9 -8 -11 -9 -10 -8 -10 -8 -10 -9 -11 -8 -11 -9 -10 -9 -11 -8 -10 -9 -11 -9 -10 -9 -10 -9 -10 -9 -9 -8 -10 -9 -9 -9 -10 -8 -9 -8 -9 -8 -8 -8 -9 -8 -8 -7 -9 -8 -8 -6 -8 -7 -8 -6 -7 -7 -8 -5 -8 -6 -7 -5 -15 -10 -21 -12 -21 -9 -20 -6 -20 -2 -20 0 -20 3 -19 7 -21 9 -20 13 -14 10 -7 5 -7 6 -8 6 -7 6 -7 7 -8 7 -7 7 -8 7 -7 8 -8 8 -8 8 -8 9 -8 9 -8 9 -8 9 -9 10 -8 10 -9 10 -8 10 -9 10 -9 11 -10 11 -9 11 -10 11 -9 11 -10 11 -11 12 -10 11 -11 12 -10 12 -11 11 -11 12 -11 11 -12 11 -11 12 -12 11 -12 11 -11 10 -12 11 -12 10 1663 1521 100 MP stroke -11 10 -12 10 -11 10 -11 10 -12 9 -11 9 -11 10 -10 9 -11 8 -10 9 -10 9 -10 8 -9 8 -10 9 -9 8 -9 8 -8 8 -8 7 -8 8 -8 8 -8 7 -7 8 -7 7 -6 8 -6 7 -6 7 -6 8 -5 7 -10 14 -12 21 -9 21 -6 21 -3 21 0 22 4 22 7 24 6 16 3 8 4 8 4 9 4 9 4 9 5 9 5 9 5 10 5 10 5 10 6 10 5 11 5 10 6 11 5 11 5 11 5 11 5 11 5 11 5 11 4 11 5 10 4 10 5 10 4 10 5 10 4 9 5 9 5 8 5 8 5 8 5 8 12 14 13 13 7 7 7 6 7 6 8 6 9 6 8 5 9 6 10 5 10 6 10 5 10 6 11 5 12 6 11 6 12 6 12 6 12 6 13 7 12 7 13 7 12 7 13 8 13 8 12 8 12 8 12 8 12 9 12 8 1458 584 100 MP stroke 11 9 11 8 11 8 10 9 11 8 10 8 10 8 9 7 10 7 9 8 9 6 9 7 8 6 9 6 8 6 8 6 8 5 8 5 8 4 15 8 22 10 22 6 21 3 20 0 20 -3 21 -6 20 -9 21 -13 14 -9 7 -6 8 -5 7 -6 7 -7 7 -6 8 -7 7 -7 8 -8 7 -8 8 -8 8 -8 8 -9 8 -8 8 -10 8 -9 8 -9 9 -10 8 -10 9 -11 9 -10 9 -11 9 -11 9 -11 10 -11 10 -11 9 -11 10 -12 11 -11 10 -12 11 -12 10 -11 11 -12 11 -11 12 -12 786 787 64 MP stroke 11 -11 6 -6 5 -5 4 -4 4 -4 3 -3 6 -6 4 -4 2 -2 9 -9 4 -4 7 -7 2 -2 9 -8 1 -2 10 -9 0 0 4 -5 3 -2 3 -3 4 -4 3 -3 7 -7 3 -4 4 -3 7 -7 3 -3 3 -4 4 -3 3 -3 3 -4 4 -3 3 -3 3 -4 3 -3 4 -3 9 -10 3 -3 13 -13 3 -3 5 -6 4 -4 0 0 7 -9 1 -1 7 -7 2 -2 5 -6 3 -3 7 -8 1 -2 4 -4 4 -5 5 -6 2 -3 8 -9 7 -9 0 0 6 -9 7 -9 6 -9 6 -9 6 -9 5 -9 5 -9 5 -8 4 -9 4 -9 4 -8 4 -9 3 -8 6 -18 6 -25 3 -26 0 -25 -3 -26 -5 -26 -5 -17 -3 -9 -4 -9 -4 -9 -3 -9 -5 -9 -4 -9 -5 -9 -5 -9 -6 -9 -5 -10 -6 -9 -6 -10 -6 -9 -7 -10 -7 -9 -7 -10 -7 -10 -7 -10 -8 -10 -8 -10 -8 -10 518 1468 100 MP stroke -8 -11 -8 -10 -8 -11 -8 -10 -9 -10 -8 -11 -9 -11 -9 -10 -8 -11 -9 -10 -9 -11 -9 -10 -9 -10 -9 -11 -9 -10 -9 -10 -9 -10 -9 -10 -10 -10 -9 -9 -10 -10 -9 -9 -10 -10 -10 -9 -10 -9 -10 -9 -10 -9 -11 -9 -10 -9 -10 -9 -11 -9 -10 -8 -11 -9 -11 -9 -10 -8 -11 -9 -10 -8 -11 -9 -10 -8 -10 -8 -11 -8 -10 -8 -10 -8 -10 -7 -10 -7 -10 -8 -9 -7 -10 -6 -10 -7 -9 -6 -10 -6 -9 -6 -10 -6 -9 -5 -9 -5 -9 -5 -9 -4 -9 -5 -9 -3 -9 -4 -9 -3 -9 -3 -17 -5 -26 -6 -26 -2 -25 0 -26 3 -25 7 -18 5 -8 4 -9 3 -9 4 -8 4 -9 5 -9 5 -8 5 -9 5 -9 6 -9 6 -9 6 -9 7 -9 7 -9 7 -10 7 -9 8 -9 8 -9 8 -10 8 -9 8 -10 9 -10 9 -9 9 -10 10 -10 9 -10 10 -10 10 -10 10 -11 10 -10 11 1549 1758 100 MP stroke -10 10 -11 11 -10 11 -11 10 -11 11 -11 11 -11 11 -11 11 -11 11 -11 11 -11 11 -11 10 -11 11 -11 11 -11 11 -11 10 -11 11 -10 10 -11 11 -11 10 -10 10 -10 10 -11 11 -10 10 -10 9 -9 10 -10 10 -9 10 -9 9 -9 10 -8 9 -9 10 -8 9 -8 10 -7 9 -8 9 -7 9 -7 9 -6 9 -7 9 -6 10 -5 9 -6 9 -5 8 -5 9 -4 9 -5 9 -3 9 -4 9 -3 9 -3 9 -3 9 -3 9 -3 17 -4 27 0 19 0 9 0 9 1 9 1 10 1 9 2 9 2 10 2 10 2 9 3 10 3 10 3 10 4 10 3 11 4 10 4 10 4 11 5 10 4 11 5 11 5 11 4 11 5 11 5 10 5 11 5 11 6 11 5 11 5 11 6 11 5 10 5 11 6 10 6 10 5 10 6 10 6 9 7 10 6 9 7 9 6 9 7 9 7 8 1817 742 100 MP stroke 8 8 8 8 7 8 9 8 8 8 9 8 9 7 9 8 9 7 10 7 10 7 10 8 10 7 11 7 11 7 11 7 11 8 12 7 11 7 12 7 12 8 11 7 12 8 12 7 12 8 12 7 12 8 12 8 11 7 12 8 12 7 11 8 11 7 12 7 11 7 11 7 10 7 11 6 11 7 10 6 11 6 10 6 10 5 10 5 10 5 10 5 9 5 10 4 9 4 10 3 9 4 10 3 9 3 9 2 9 2 18 3 27 3 26 0 26 -4 27 -6 17 -6 9 -3 9 -4 8 -4 9 -4 9 -4 9 -5 9 -5 9 -6 8 -6 9 -6 9 -6 9 -7 10 -6 9 -8 9 -7 9 -8 9 -7 10 -9 9 -8 10 -9 9 -8 10 -9 9 -10 10 -9 10 -10 10 -10 10 -10 10 -10 10 -10 10 -10 11 -11 10 -11 11 -10 10 -11 11 -11 10 -11 11 -11 11 -11 744 701 100 MP stroke 11 -11 11 -11 722 723 3 MP stroke 11 -11 7 -6 4 -5 4 -4 5 -4 2 -3 6 -6 5 -5 1 -2 10 -9 3 -4 7 -7 2 -3 9 -9 1 -1 9 -10 0 0 5 -5 2 -2 3 -4 4 -4 3 -3 7 -8 3 -3 3 -4 7 -8 3 -3 4 -4 3 -4 3 -3 3 -4 3 -4 4 -3 3 -4 3 -4 3 -3 3 -4 6 -7 3 -4 3 -4 6 -7 3 -4 3 -3 3 -4 2 -2 4 -5 0 0 7 -10 1 -1 6 -9 2 -2 6 -7 2 -4 7 -9 1 -2 3 -4 4 -6 2 -3 3 -4 3 -4 3 -5 4 -6 6 -11 0 0 7 -10 6 -11 6 -11 6 -10 5 -11 5 -10 5 -11 5 -11 4 -10 4 -11 4 -10 4 -11 3 -10 3 -11 2 -10 2 -11 2 -10 2 -11 1 -10 1 -11 1 -10 1 -10 0 -11 -1 -10 0 -11 -1 -11 -1 -10 -1 -11 -2 -10 -2 -11 -2 -10 -3 -11 -3 -11 -3 -10 -3 -11 345 1320 100 MP stroke -4 -11 -4 -11 -4 -10 -5 -11 -4 -11 -5 -11 -6 -11 -5 -11 -6 -11 -6 -11 -6 -11 -7 -11 -6 -11 -7 -11 -7 -11 -8 -12 -7 -11 -8 -11 -7 -11 -8 -11 -9 -12 -8 -11 -8 -11 -9 -11 -8 -12 -9 -11 -9 -11 -9 -11 -9 -11 -9 -11 -10 -11 -9 -10 -10 -11 -10 -11 -9 -10 -10 -11 -10 -10 -10 -11 -10 -10 -11 -10 -10 -10 -11 -10 -10 -9 -11 -10 -11 -10 -10 -9 -11 -9 -11 -10 -11 -9 -11 -9 -11 -9 -12 -8 -11 -9 -11 -9 -11 -8 -11 -8 -12 -8 -11 -8 -11 -8 -11 -8 -12 -7 -11 -7 -11 -7 -11 -7 -11 -7 -11 -6 -11 -6 -11 -6 -11 -6 -11 -6 -11 -5 -11 -5 -11 -5 -11 -4 -11 -4 -10 -4 -11 -4 -11 -3 -10 -3 -11 -3 -11 -3 -10 -2 -11 -2 -11 -1 -10 -2 -11 -1 -10 0 -11 -1 -10 0 -11 0 -10 1 -11 1 -10 1 -11 1 -10 2 -11 2 -10 2 -11 3 -10 3 1289 2036 100 MP stroke -11 3 -10 3 -11 4 -11 4 -10 5 -11 4 -10 5 -11 5 -11 6 -10 6 -11 6 -11 6 -10 7 -11 6 -11 8 -11 7 -11 7 -10 8 -11 8 -11 8 -11 9 -11 9 -11 8 -11 9 -11 10 -11 9 -11 10 -12 9 -11 10 -11 10 -11 11 -11 10 -12 10 -11 11 -11 10 -11 11 -11 11 -12 11 -11 11 -11 11 -11 11 -11 11 -11 11 -11 11 -11 11 -10 11 -11 11 -11 11 -10 11 -10 11 -11 12 -10 11 -10 11 -9 11 -10 11 -9 11 -9 11 -9 11 -9 11 -9 11 -8 10 -8 11 -8 11 -8 11 -7 11 -7 11 -7 11 -7 10 -6 11 -7 11 -5 11 -6 10 -5 11 -5 11 -5 11 -5 11 -4 10 -4 11 -4 11 -3 11 -3 10 -3 11 -2 11 -2 11 -2 11 -2 11 -1 11 -1 11 -1 11 0 11 -1 11 1 11 0 11 1 11 1 11 1 11 1 12 2 11 2 11 2056 1074 100 MP stroke 3 12 2 11 3 12 3 11 3 12 3 11 4 12 4 12 4 11 4 12 5 12 4 11 5 12 5 12 5 12 5 11 5 12 6 11 5 12 6 11 6 12 6 11 6 11 7 11 6 11 7 11 7 11 7 10 7 11 7 10 8 11 8 10 8 10 8 9 8 10 9 10 8 9 9 9 9 10 10 9 9 9 10 8 10 9 10 9 11 8 10 9 11 8 11 9 11 8 11 8 11 8 12 8 11 9 12 8 12 7 12 8 12 8 12 8 12 8 12 7 12 8 12 7 13 8 12 7 12 7 12 7 12 7 12 6 12 7 12 6 12 7 12 6 12 6 11 5 12 6 12 5 11 5 12 5 12 4 11 4 11 4 12 4 11 4 11 3 11 3 11 3 12 2 11 2 11 2 11 1 11 2 10 1 11 0 11 0 11 0 11 0 11 0 10 -1 11 -2 1152 321 100 MP stroke 11 -1 10 -2 11 -2 11 -2 10 -3 11 -3 11 -3 10 -4 11 -4 11 -4 10 -5 11 -4 11 -5 11 -6 10 -5 11 -6 11 -6 10 -7 11 -6 11 -7 11 -7 11 -8 10 -7 11 -8 11 -8 11 -9 11 -8 11 -9 11 -9 11 -9 11 -10 11 -9 11 -10 11 -10 11 -10 11 -10 11 -10 11 -10 11 -11 11 -10 11 -11 11 -11 11 -11 11 -11 11 -11 11 -11 653 654 47 MP stroke 11 -12 7 -6 4 -5 5 -5 4 -4 3 -3 6 -7 5 -5 1 -2 7 -7 3 -3 3 -4 3 -3 4 -5 3 -2 8 -10 1 -1 10 -11 0 0 4 -5 3 -3 3 -4 3 -4 4 -4 7 -8 3 -4 3 -4 7 -8 3 -4 4 -4 3 -5 3 -4 3 -4 3 -4 4 -4 3 -4 3 -4 3 -4 3 -4 6 -9 3 -4 3 -4 6 -8 3 -4 3 -4 3 -4 2 -3 4 -6 0 0 7 -11 1 -1 6 -10 2 -2 5 -9 3 -4 7 -11 1 -1 3 -6 4 -7 2 -3 3 -5 2 -4 3 -6 4 -7 7 -12 0 0 6 -13 7 -12 6 -13 5 -12 6 -13 5 -12 5 -13 4 -12 5 -13 4 -12 3 -13 4 -13 3 -12 3 -13 2 -12 3 -13 1 -12 2 -13 2 -13 1 -12 0 -13 1 -12 0 -13 0 -13 -1 -12 0 -13 -1 -12 -2 -13 -1 -13 -2 -12 -2 -13 -3 -13 -2 -12 256 1319 100 MP stroke -3 -13 -4 -13 -3 -12 -4 -13 -4 -13 -5 -12 -4 -13 -5 -13 -6 -12 -5 -13 -6 -13 -6 -12 -6 -13 -6 -13 -7 -12 -7 -13 -7 -13 -7 -12 -8 -13 -7 -12 -8 -13 -8 -12 -8 -13 -9 -12 -9 -12 -8 -13 -9 -12 -9 -12 -10 -12 -9 -12 -10 -12 -10 -12 -9 -12 -11 -12 -10 -11 -10 -12 -11 -11 -10 -11 -11 -11 -11 -12 -11 -10 -11 -11 -11 -11 -11 -11 -12 -10 -11 -10 -12 -10 -11 -10 -12 -10 -12 -10 -12 -10 -12 -9 -12 -9 -12 -10 -13 -8 -12 -9 -12 -9 -13 -8 -12 -9 -12 -8 -13 -7 -13 -8 -12 -8 -13 -7 -12 -7 -13 -7 -13 -6 -12 -7 -13 -6 -13 -6 -12 -5 -13 -6 -13 -5 -12 -5 -13 -4 -13 -5 -12 -4 -13 -4 -13 -3 -12 -3 -13 -3 -13 -3 -13 -3 -12 -2 -13 -2 -13 -1 -12 -1 -13 -1 -12 -1 -13 0 -13 0 -12 0 -13 0 -13 1 -12 1 -13 2 -12 1 -13 2 -13 3 1286 2123 100 MP stroke -12 2 -13 3 -12 3 -13 4 -13 4 -12 4 -13 4 -12 5 -13 5 -12 5 -13 5 -13 6 -12 6 -13 6 -12 7 -13 7 -12 7 -13 7 -12 7 -13 8 -12 8 -13 8 -12 9 -13 8 -12 9 -12 9 -13 9 -12 10 -12 9 -13 10 -12 10 -12 10 -12 10 -12 11 -13 10 -12 11 -12 11 -12 11 -11 11 -12 11 -12 12 -12 11 -11 11 -12 12 -11 12 -11 11 -11 12 -11 12 -11 12 -11 12 -11 12 -10 12 -10 12 -10 12 -10 13 -10 12 -10 12 -9 12 -9 13 -9 12 -9 13 -9 12 -8 12 -8 13 -8 12 -8 13 -7 12 -8 13 -7 13 -6 12 -7 13 -6 12 -6 13 -6 13 -5 12 -5 13 -5 13 -5 13 -4 12 -4 13 -4 13 -3 13 -3 13 -3 12 -3 13 -2 13 -2 13 -2 13 -1 13 -1 13 -1 13 -1 13 0 13 0 13 0 13 0 13 1 13 1 13 2 13 2145 1086 100 MP stroke 1 13 2 14 2 13 2 13 3 13 3 13 3 13 3 14 4 13 4 13 4 13 4 13 4 13 5 13 5 14 5 13 5 12 6 13 6 13 5 13 7 13 6 12 6 13 7 13 7 12 7 12 7 12 8 13 7 12 8 12 8 11 8 12 9 12 9 11 8 11 9 11 10 11 9 11 10 11 9 11 10 10 11 11 10 10 10 10 11 10 11 10 11 10 11 10 12 10 11 9 12 9 12 10 12 9 12 9 12 9 13 8 12 9 13 8 12 9 13 8 13 8 13 8 13 8 13 8 13 7 13 8 13 7 13 7 14 7 13 6 13 7 13 6 14 6 13 6 13 6 13 5 14 5 13 5 13 5 13 5 14 4 13 4 13 4 13 3 13 4 13 3 14 2 13 3 13 2 13 2 13 1 13 2 13 1 13 0 13 1 13 0 12 0 13 -1 13 0 1168 235 100 MP stroke 13 -1 13 -2 13 -1 13 -2 12 -2 13 -3 13 -3 13 -3 12 -3 13 -4 13 -4 12 -4 13 -4 13 -5 12 -5 13 -6 13 -5 12 -6 13 -6 12 -7 13 -6 12 -7 13 -7 12 -8 13 -7 12 -8 13 -8 12 -9 13 -8 12 -9 12 -9 13 -9 12 -10 12 -9 12 -10 13 -10 12 -10 12 -10 12 -11 12 -10 12 -11 12 -11 12 -11 11 -11 12 -11 12 -11 11 -12 12 -11 573 575 49 MP stroke 13 -12 7 -7 5 -6 4 -5 5 -5 3 -3 6 -7 5 -5 2 -2 7 -8 3 -3 4 -5 3 -4 4 -5 3 -2 9 -11 1 -1 10 -12 0 0 5 -6 2 -3 4 -4 3 -5 4 -4 7 -9 4 -5 3 -4 7 -10 4 -4 3 -5 3 -4 4 -5 3 -4 3 -5 4 -5 3 -4 3 -5 4 -5 3 -4 6 -9 3 -5 3 -5 6 -9 4 -5 3 -5 3 -4 1 -3 4 -7 0 0 8 -12 1 -2 7 -11 1 -3 4 -5 2 -5 3 -4 2 -4 4 -9 2 -2 3 -6 4 -8 2 -4 3 -5 3 -6 3 -6 4 -8 7 -15 0 0 6 -14 7 -15 6 -14 6 -15 5 -15 5 -14 5 -15 5 -15 5 -15 4 -15 3 -14 4 -15 3 -15 3 -15 3 -15 2 -15 2 -15 2 -15 1 -15 1 -15 1 -15 1 -15 0 -15 0 -15 0 -15 -1 -15 -1 -15 -1 -14 -2 -15 -2 -15 -2 -15 142 1312 100 MP stroke -3 -15 -2 -15 -4 -15 -3 -15 -4 -15 -4 -15 -4 -15 -4 -15 -5 -14 -5 -15 -5 -15 -6 -15 -6 -14 -6 -15 -6 -14 -7 -15 -7 -15 -7 -14 -7 -14 -8 -15 -8 -14 -8 -14 -8 -14 -9 -15 -8 -14 -9 -13 -9 -14 -10 -14 -9 -14 -10 -13 -10 -14 -10 -13 -11 -14 -10 -13 -11 -13 -11 -13 -11 -13 -11 -12 -12 -13 -11 -12 -12 -12 -12 -13 -12 -12 -12 -11 -12 -12 -13 -12 -12 -11 -13 -11 -13 -11 -13 -11 -13 -11 -13 -10 -13 -11 -14 -10 -13 -10 -14 -10 -13 -9 -14 -9 -14 -10 -14 -8 -14 -9 -14 -9 -14 -8 -15 -8 -14 -8 -14 -7 -15 -8 -14 -7 -15 -7 -14 -6 -15 -7 -14 -6 -15 -5 -15 -6 -15 -5 -14 -5 -15 -5 -15 -5 -15 -4 -15 -4 -15 -3 -15 -4 -15 -3 -15 -2 -15 -3 -14 -2 -15 -2 -15 -1 -15 -2 -15 -1 -15 0 -15 -1 -15 0 -15 1 -15 0 -15 1 -15 1 -15 2 -15 2 1275 2236 100 MP stroke -15 2 -15 2 -15 3 -15 3 -15 3 -15 3 -15 4 -15 4 -14 5 -15 5 -15 5 -15 5 -15 6 -14 5 -15 7 -15 6 -14 7 -15 7 -14 7 -15 7 -14 8 -14 8 -15 8 -14 9 -14 8 -15 9 -14 9 -14 10 -14 9 -14 10 -13 10 -14 10 -14 11 -14 10 -13 11 -13 11 -14 11 -13 12 -13 11 -13 12 -13 12 -13 12 -13 12 -12 12 -13 12 -12 13 -12 13 -12 12 -12 13 -12 13 -11 13 -12 14 -11 13 -11 13 -11 14 -10 13 -11 14 -10 14 -10 14 -10 13 -10 14 -9 14 -9 15 -9 14 -9 14 -8 14 -8 15 -8 14 -8 15 -8 14 -7 15 -7 14 -7 15 -6 15 -6 14 -6 15 -6 15 -5 15 -5 15 -5 15 -4 15 -5 15 -4 15 -3 15 -4 15 -3 15 -2 15 -3 15 -2 15 -2 16 -2 15 -1 15 -1 15 -1 16 0 15 0 15 0 15 0 16 1 15 2260 1105 100 MP stroke 1 15 1 16 2 15 2 15 2 15 2 16 3 15 3 15 3 15 4 15 3 16 4 15 4 15 5 15 5 15 5 15 5 14 6 15 5 15 6 15 6 14 7 15 7 14 7 15 7 14 7 14 8 14 8 14 8 14 8 14 9 13 8 14 9 13 9 14 10 13 9 13 10 13 10 12 10 13 11 13 11 12 10 12 11 12 12 12 11 12 12 12 12 11 12 11 12 12 12 11 13 10 12 11 13 11 13 10 13 10 13 10 14 10 13 10 14 9 14 10 14 9 14 9 14 9 14 8 14 9 15 8 14 8 15 8 15 8 14 7 15 7 15 7 15 7 15 6 15 7 15 6 15 6 15 5 15 6 15 5 15 4 16 5 15 4 15 4 15 4 16 4 15 3 15 3 15 2 16 3 15 2 15 2 16 1 15 1 15 1 16 1 15 0 15 0 15 0 1191 123 100 MP stroke 15 -1 16 0 15 -2 15 -1 15 -2 15 -2 15 -2 16 -3 15 -3 15 -3 15 -4 15 -3 15 -5 15 -4 14 -5 15 -5 15 -5 15 -5 15 -6 14 -6 15 -7 15 -6 14 -7 15 -7 14 -8 15 -8 14 -8 15 -8 14 -8 14 -9 14 -9 14 -9 14 -9 14 -10 14 -10 14 -10 14 -10 13 -10 14 -11 13 -11 14 -11 13 -11 13 -11 13 -12 13 -11 13 -12 13 -12 12 -12 13 -12 12 -13 479 482 51 MP stroke 18 -6 17 -6 17 -6 18 -7 17 -7 17 -7 17 -7 17 -8 17 -8 17 -8 17 -9 16 -9 17 -9 16 -9 17 -10 16 -10 16 -10 16 -10 16 -11 16 -11 15 -11 16 -11 15 -12 16 -12 15 -12 15 -12 15 -12 15 -13 14 -13 15 -13 14 -13 14 -14 14 -13 14 -14 360 365 35 MP stroke 6 18 6 17 6 17 7 17 7 17 7 17 8 16 8 17 8 16 8 17 9 16 9 16 9 16 9 16 10 16 10 16 10 15 10 16 11 15 11 15 11 15 11 15 12 14 11 15 12 14 13 14 12 14 13 14 13 13 13 14 13 13 14 13 13 13 14 12 14 13 15 12 14 12 15 12 15 12 15 11 15 11 15 11 16 11 15 11 16 10 16 10 16 10 16 9 16 10 17 9 16 9 17 9 17 8 16 8 17 8 17 8 17 7 18 7 17 7 17 7 18 6 17 6 18 6 17 5 1527 20 65 MP stroke -18 5 -17 5 -17 6 -18 6 -17 6 -17 6 -17 7 -17 7 -17 8 -17 7 -17 8 -17 9 -17 8 -17 9 -16 9 -17 10 -16 9 -16 10 -16 10 -16 11 -16 10 -16 11 -16 11 -16 12 -15 11 -15 12 -16 12 -15 12 -15 13 -14 12 -15 13 -15 13 -14 13 -14 14 -14 13 -14 14 -14 14 -13 14 -13 14 -13 15 -13 15 -13 14 -13 15 -12 15 -12 15 -12 16 -11 15 -12 16 -11 15 -11 16 -11 16 -10 16 -10 16 -10 17 -10 16 -9 17 -10 16 -8 17 -9 17 -8 16 -8 17 -8 17 -8 17 -7 18 -7 17 -7 17 -6 17 -6 18 2354 1489 69 MP stroke -5 -18 -5 -17 -6 -17 -5 -18 -7 -17 -6 -17 -6 -17 -7 -17 -7 -17 -8 -17 -8 -17 -8 -17 -8 -16 -8 -17 -9 -16 -9 -17 -10 -16 -9 -16 -10 -16 -10 -16 -10 -16 -11 -15 -11 -16 -11 -15 -11 -15 -12 -16 -11 -15 -12 -14 -12 -15 -13 -15 -12 -14 -13 -14 -13 -14 -13 -14 -13 -14 -14 -13 -14 -13 -13 -13 -14 -13 -15 -13 -14 -13 -15 -12 -14 -12 -15 -12 -15 -12 -15 -11 -16 -11 -15 -11 -15 -11 -16 -11 -16 -10 -16 -10 -16 -10 -16 -9 -16 -10 -17 -9 -16 -8 -17 -9 -16 -8 -17 -8 -17 -8 -17 -7 -17 -7 -17 -7 -17 -7 -17 -6 -17 -6 -18 -6 -17 -5 -17 -5 -18 -5 921 2356 72 MP stroke 13 -14 1 -1 7 -7 3 -4 3 -2 4 -5 6 -6 3 -3 7 -8 6 -7 2 -2 7 -9 4 -3 4 -5 4 -5 4 -5 3 -4 10 -11 1 -2 11 -13 0 0 5 -7 3 -3 4 -5 4 -5 4 -6 7 -10 4 -5 4 -5 8 -10 3 -6 4 -5 4 -5 3 -5 4 -6 4 -5 3 -5 4 -5 3 -6 4 -5 3 -5 7 -11 4 -5 3 -6 7 -11 3 -5 3 -5 3 -6 3 -4 4 -7 0 0 8 -14 1 -2 7 -13 2 -4 4 -6 2 -5 3 -5 2 -5 5 -10 2 -2 3 -8 5 -9 2 -4 3 -6 3 -7 1 -2 2 -5 4 -9 0 -1 8 -17 0 0 7 -17 7 -17 6 -17 6 -17 6 -18 6 -17 5 -17 5 -18 23 927 81 MP stroke 18 -13 18 -13 18 -13 18 -13 18 -14 17 -14 17 -14 17 -15 17 -15 17 -14 16 -16 17 -15 16 -16 16 -16 204 212 15 MP stroke 13 17 13 18 13 17 14 17 14 17 14 17 15 16 14 16 15 16 16 16 15 15 16 16 16 15 16 15 17 14 16 15 17 14 17 14 17 13 18 13 17 13 18 13 18 13 1999 14 24 MP stroke -18 13 -18 13 -18 13 -18 13 -18 14 -17 14 -18 14 -17 14 -17 15 -17 15 -16 15 -17 15 -16 16 -16 16 -15 16 -16 16 -15 17 -15 16 -15 17 -14 17 -15 18 -14 17 -13 18 -14 18 -13 18 -13 18 2357 1948 27 MP stroke -12 -18 -13 -18 -13 -18 -13 -18 -13 -17 -14 -17 -14 -18 -14 -16 -15 -17 -15 -17 -15 -16 -15 -16 -15 -16 -16 -16 -16 -15 -16 -15 -16 -15 -17 -15 -16 -14 -17 -14 -17 -14 -18 -14 -17 -13 -18 -14 -18 -12 -18 -13 -18 -12 434 2362 28 MP stroke 15 -16 1 -1 8 -8 4 -4 3 -3 5 -6 6 -7 4 -4 8 -9 7 -7 2 -3 8 -10 4 -4 5 -6 4 -5 6 -6 3 -4 11 -14 1 -2 13 -15 0 0 6 -8 3 -4 3 -4 1 -2 5 -6 4 -6 2 -2 6 -8 1 -2 4 -6 5 -6 1 -2 6 -8 1 -2 5 -6 2 -4 2 -2 4 -6 4 -6 21 436 41 MP stroke 16 16 6 6 2 2 5 5 3 3 6 6 5 5 8 8 6 6 12 12 8 8 8 8 7 7 8 8 7 7 7 7 7 7 7 7 7 7 7 6 6 7 7 7 7 6 6 7 7 7 6 6 13 13 20 20 13 13 7 6 6 7 7 6 7 7 6 7 7 6 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 8 8 7 7 8 8 8 7 7 8 8 8 8 8 8 8 9 8 8 9 9 8 8 9 9 8 9 9 10 9 9 10 9 9 10 10 10 10 10 10 11 10 10 11 11 10 11 11 12 12 12 11 12 12 12 12 13 13 12 12 14 13 14 14 14 14 14 14 15 15 16 15 15 16 17 16 17 17 17 17 19 18 18 18 13 13 7 6 6 7 7 6 7 7 7 7 7 7 7 7 7 7 7 7 8 7 7 7 8 8 105 114 100 MP stroke 7 7 8 8 8 7 8 8 8 8 8 8 8 8 8 8 9 9 9 8 8 9 16 26 12 MP stroke 11 6 5 4 6 5 5 6 5 7 5 8 6 9 5 11 6 11 5 14 6 14 5 16 6 18 6 20 6 22 7 23 4 17 3 9 2 9 2 10 3 9 2 10 2 10 3 11 2 11 3 11 3 12 2 12 3 12 3 13 3 13 3 14 3 14 3 14 3 15 3 15 3 16 3 16 4 17 1021 17 40 MP stroke -23 9 -11 5 -5 3 -11 6 -7 4 -15 10 -21 17 -19 17 -18 18 -16 18 -16 19 -15 19 -15 20 -14 21 -15 21 -14 22 -14 22 -10 16 -5 8 -5 8 -5 9 -5 8 -5 9 -5 8 -5 9 -5 9 -6 10 -5 9 -5 10 -6 10 -5 10 -6 10 -6 11 -6 10 -6 11 -6 12 -6 11 -7 12 -6 12 -7 13 -6 12 -7 13 -7 14 -8 14 -7 14 -8 15 -7 15 -8 15 -9 16 -8 16 -9 17 -9 18 -9 18 -9 19 -10 19 1776 19 56 MP stroke -9 -13 -5 -5 -3 -3 -7 -4 -5 -3 -5 -2 -5 -2 -6 -1 -11 -2 -16 -1 -17 2 -17 4 -17 5 -17 6 -17 8 -18 9 -19 9 -19 11 -20 11 -22 12 -23 13 -15 9 -9 5 -8 5 -9 5 -8 5 -9 5 -10 5 -9 6 -10 5 -10 6 -10 6 -10 6 -11 6 -11 6 -11 6 -12 7 -11 6 -13 7 -12 7 -13 8 -13 7 -14 8 -14 7 -15 8 -15 9 -15 8 -16 9 -16 9 -17 9 -18 10 -18 10 -19 10 2354 576 54 MP stroke -3 -6 -2 -3 -1 -1 -2 -3 -5 -4 -6 -4 -7 -4 -9 -4 -9 -4 -11 -4 -12 -5 -13 -4 -15 -5 -17 -5 -18 -5 -20 -5 -22 -5 -24 -6 -17 -4 -9 -2 -9 -2 -10 -2 -9 -2 -11 -2 -10 -2 -11 -3 -11 -2 -11 -2 -12 -3 -12 -2 -12 -2 -13 -3 -13 -2 -14 -3 -14 -3 -14 -2 -15 -3 -16 -3 -15 -3 -17 -3 2354 1323 41 MP stroke -8 -21 -5 -10 -3 -4 -5 -9 -4 -7 -9 -12 -6 -9 -7 -9 -6 -8 -7 -8 -6 -8 -6 -8 -7 -7 -6 -8 -6 -7 -7 -7 -6 -7 -6 -7 -6 -7 -13 -14 -19 -20 -19 -20 -12 -13 -7 -7 -6 -7 -7 -6 -6 -7 -7 -7 -7 -7 -6 -7 -7 -7 -7 -7 -7 -7 -7 -7 -7 -7 -7 -7 -7 -7 -7 -8 -8 -7 -7 -8 -8 -7 -8 -8 -7 -8 -8 -8 -8 -8 -8 -8 -9 -8 -8 -8 -9 -9 -9 -9 -8 -8 -9 -9 -10 -9 -9 -10 -10 -9 -10 -10 -10 -10 -10 -10 -10 -10 -11 -11 -11 -10 -11 -11 -12 -12 -11 -11 -12 -12 -13 -12 -12 -13 -13 -12 -14 -13 -14 -14 -14 -14 -14 -14 -15 -15 -16 -15 -16 -16 -16 -16 -18 -16 -17 -18 -18 -17 -19 -19 -13 -13 -7 -6 -6 -6 -7 -7 -7 -7 -7 -7 -7 -6 -7 -7 -7 -7 -7 -7 -8 -8 -7 -7 -8 -7 -8 -8 -7 -7 -8 -8 -8 -8 -8 -8 -8 -8 2339 2290 100 MP stroke -9 -8 -8 -8 2356 2306 3 MP stroke -13 -6 -6 -4 -7 -6 -6 -6 -6 -7 -7 -8 -6 -9 -6 -11 -7 -11 -6 -13 -6 -15 -7 -16 -7 -18 -7 -19 -6 -21 -8 -23 -5 -17 -2 -9 -3 -9 -2 -9 -3 -10 -2 -10 -3 -10 -3 -10 -2 -11 -3 -11 -3 -12 -3 -12 -3 -12 -3 -13 -3 -13 -3 -13 -3 -14 -3 -14 -3 -15 -3 -15 -4 -16 -3 -16 -4 -17 -3 -17 1380 2363 41 MP stroke 25 -10 13 -6 6 -3 11 -7 18 -11 17 -12 16 -13 16 -14 15 -14 15 -16 15 -16 15 -17 15 -18 14 -19 16 -21 15 -21 10 -15 6 -8 5 -8 5 -8 6 -8 5 -9 6 -9 6 -9 5 -9 6 -9 6 -10 6 -9 6 -11 6 -10 7 -10 6 -11 7 -12 6 -11 7 -12 7 -12 7 -12 7 -13 7 -13 8 -14 8 -14 7 -14 8 -15 9 -15 8 -16 9 -16 9 -17 9 -17 9 -18 10 -18 10 -19 10 -20 620 2361 53 MP stroke 7 -18 4 -9 2 -4 4 -9 4 -6 7 -13 13 -19 13 -17 14 -17 15 -16 15 -16 17 -15 16 -15 18 -15 18 -16 20 -15 20 -16 14 -10 8 -5 7 -6 8 -5 8 -6 8 -5 8 -6 8 -6 9 -5 8 -6 9 -6 9 -6 10 -6 9 -6 10 -6 10 -7 10 -6 11 -7 11 -6 11 -7 11 -7 12 -7 12 -7 12 -8 13 -7 13 -8 13 -8 14 -8 14 -8 15 -9 15 -8 16 -9 16 -9 16 -9 17 -10 18 -10 18 -10 19 -11 20 -10 20 -12 10 1797 58 MP stroke 5 11 4 6 5 5 6 6 7 5 8 5 9 6 10 5 12 5 13 6 14 5 16 6 18 5 19 6 21 6 23 6 17 4 9 2 9 3 9 2 10 2 9 2 11 2 10 3 11 2 11 2 12 3 11 2 13 3 12 2 13 3 14 2 13 3 15 3 14 3 16 2 15 3 17 3 16 3 18 3 7 1025 41 MP stroke gr gs 0 0 229 229 MR c np end eplot epage end showpage %%EndDocument @endspecial 0 1437 a(>>)g([w,beta]=d)o(ra)o(wpo)o(ly;)0 1497 y(>>)g([z,c]=de\ pa)o(ra)o(m\(w)o(,be)o(ta\))o(;)0 1557 y(>>)g(F)g(=)g(faber\(8,w,b)o(,z,)o (c\);)47 b(%)26 b(Faber)e(polynomia)o(ls)e(F_j,)i(j=0:8)0 1617 y(>>)h([X,Y]=m\ esh)o(gr)o(id\()o(lin)o(spa)o(ce)o(\(-3)o(,3,)o(40\))o(\);)0 1677 y(>>)g(cont\ our\(X,)o(Y,)o(abs)o(\(po)o(lyv)o(al)o(\(F\()o(1:9)o(,9\))o(,X)o(+i*)o(Y\)\)) o(,[)o(1,N)o(aN])o(\);)d(%)j({z:)g(|F_8\(z\)|=1)o(})0 1738 y(>>)g(hold)f(on;) h(set\(plotp)o(oly)o(\(w)o(,be)o(ta\))o(,'l)o(in)o(est)o(y',)o('-)o(-'\))48 b (%)25 b(plot)f(polygon)f(in)i(dashes)558 2670 y @beginspecial 0.000000 @llx 0.000000 @lly 200.000000 @urx 200.000000 @ury 2000.000000 @rwi @setspecial %%BeginDocument: faber-de.ps /MathWorks 120 dict begin /bdef {bind def} bind def /ldef {load def} bind def /xdef {exch def} bdef /xstore {exch store} bdef /c /clip ldef /cc /concat ldef /cp /closepath ldef /gr /grestore ldef /gs /gsave ldef /mt /moveto ldef /np /newpath ldef /cm /currentmatrix ldef /sm /setmatrix ldef /rc {rectclip} bdef /rf {rectfill} bdef /rm /rmoveto ldef /rl /rlineto ldef /s /show ldef /sc /setrgbcolor ldef /w /setlinewidth ldef /cap /setlinecap ldef /pgsv () def /bpage {/pgsv save def} bdef /epage {pgsv restore} bdef /bplot /gsave ldef /eplot {stroke grestore} bdef /portraitMode 0 def /landscapeMode 1 def /dpi2point 0 def /FontSize 0 def /FMS { /FontSize xstore %save size off stack findfont [FontSize 0 0 FontSize neg 0 0] makefont setfont }bdef /csm { 1 dpi2point div -1 dpi2point div scale neg translate landscapeMode eq {90 rotate} if } bdef /SO { [] 0 setdash } bdef /DO { [.5 dpi2point mul 4 dpi2point mul] 0 setdash } bdef /DA { [6 dpi2point mul] 0 setdash } bdef /DD { [.5 dpi2point mul 4 dpi2point mul 6 dpi2point mul 4 dpi2point mul] 0 setdash } bdef /L { lineto stroke } bdef /MP { 3 1 roll moveto 1 sub {rlineto} repeat } bdef /AP { {rlineto} repeat } bdef /PP { closepath fill } bdef /DP { closepath stroke } bdef /MR { 4 -2 roll moveto dup 0 exch rlineto exch 0 rlineto neg 0 exch rlineto closepath } bdef /FR { MR stroke } bdef /PR { MR fill } bdef /L1i { { currentfile picstr readhexstring pop } image } bdef /tMatrix matrix def /MakeOval { newpath tMatrix currentmatrix pop translate scale 0 0 1 0 360 arc tMatrix setmatrix } bdef /FO { MakeOval stroke } bdef /PO { MakeOval fill } bdef /PD { 2 copy moveto lineto stroke } bdef currentdict end def MathWorks begin 0 cap 1 setlinejoin end MathWorks begin bpage bplot /dpi2point 12 def portraitMode 0000 2376 csm 0 -25 2401 2402 MR c np 76 dict begin %Colortable dictionary /c0 { 0 0 0 sc} bdef /c1 { 1 1 1 sc} bdef /c2 { 1 0 0 sc} bdef /c3 { 0 1 0 sc} bdef /c4 { 0 0 1 sc} bdef /c5 { 1 1 0 sc} bdef /c6 { 1 0 1 sc} bdef /c7 { 0 1 1 sc} bdef /Helvetica 144 FMS c1 0 0 2377 2377 PR 6 w DO 4 w SO 6 w c0 23 2352 mt 2352 2352 L 23 23 mt 2352 23 L 23 2352 mt 23 23 L 2352 2352 mt 2352 23 L 23 2352 mt 23 2352 L 2352 2352 mt 2352 2352 L 23 2352 mt 2352 2352 L 23 2352 mt 23 23 L 23 2352 mt 23 2352 L 23 2352 mt 2352 2352 L 23 23 mt 2352 23 L 23 2352 mt 23 23 L 2352 2352 mt 2352 23 L 23 23 mt 23 23 L 2352 23 mt 2352 23 L gs 23 23 2330 2330 MR c np DA 12 w 529 706 1188 217 2 MP stroke -353 529 1717 923 2 MP stroke 353 353 1364 1452 2 MP stroke -529 353 1717 1805 2 MP stroke -530 -529 1188 2158 2 MP stroke 530 -706 658 1629 2 MP stroke -530 -353 1188 923 2 MP stroke 530 -353 658 570 2 MP stroke SO 6 w 15 -15 21 -54 -22 -54 -14 -23 -52 -32 -2 -2 -55 -30 -31 -22 -23 -24 -27 -30 -27 -39 -13 -16 -34 -54 -7 -14 -25 -40 -24 -54 -6 -23 -12 -32 -7 -54 7 -54 12 -25 11 -30 40 -54 4 -3 46 -51 8 -6 54 -49 0 0 54 -42 13 -12 42 -29 24 -25 30 -24 18 -30 24 -55 -2 -54 -29 -54 -11 -15 -53 -40 -1 -1 -55 -34 -23 -19 -31 -28 -24 -26 -30 -33 -18 -21 -36 -42 -12 -13 -43 -52 -1 -2 -45 -54 -8 -6 -54 -40 -38 -9 -17 -1 -9 1 -45 22 -46 33 -8 12 -40 42 -15 17 -43 37 -11 10 -54 32 -44 13 -10 3 -55 15 -54 27 -8 9 -26 54 6 54 26 55 2 3 48 51 6 10 41 44 14 23 24 32 29 54 1 2 28 52 20 54 6 30 8 25 4 54 -12 39 -4 15 -37 55 -13 9 -54 43 -2 2 -53 34 -20 20 -34 25 -20 30 -28 54 -3 54 27 54 24 31 1649 804 100 MP stroke 36 24 18 15 55 34 7 5 47 53 1 1 29 55 20 54 4 9 21 45 30 54 3 5 40 50 15 17 31 37 23 27 19 27 35 29 45 26 10 2 18 -2 36 -11 54 -44 0 -1 36 -53 19 -29 22 -25 32 -35 34 -20 20 -12 54 -9 55 -1 54 -17 726 494 34 MP stroke gr gs 0 0 229 229 MR c np end eplot epage end showpage %%EndDocument @endspecial 951 2795 a fl(20)g eop %%Page: 21 21 bop 0 50 a fd(References)24 159 y fl([1])24 b fa(R.)15 b(V.)g(Chur)o(chill)f (and)h(J.)g(W.)h(Br)o(o)o(wn)p fl(,)c fi(Complex)k(V)l(ariables)f(and)g(Appli\ c)n(ations)p fl(,)f(McGra)o(w-)100 220 y(Hill,)g(5th)j(ed.,)e(1990.)24 321 y ([2])24 b fa(H.)h(D.)h(D)308 317 y(\177)306 321 y(appen)p fl(,)d fi(Die)h(Sch\ warz-Christo\013el-Abbildung)j(f)q(\177)-26 b(ur)23 b(zweifach)h(zusammenh\ \177)-25 b(angende)100 381 y(Gebiete)19 b(mit)f(Anwendungen)p fl(,)h(PhD)e (thesis,)e(ETH)h(Z)q(\177)-26 b(uric)o(h,)16 b(1988.)24 483 y([3])24 b fa(R.) 14 b(T.)g(D)o(a)l(vis)p fl(,)c fi(Numeric)n(al)k(metho)n(ds)f(for)f(c)n(o)n (or)n(dinate)h(gener)n(ation)h(b)n(ase)n(d)f(on)g(Schwarz-Christo\013el)100 543 y(tr)n(ansformations)p fl(,)f(in)h(4th)h(AIAA)d(Comput.)h(Fluid)g(Dynamic\ s)g(Conf.,)h(Williamsburg,)f(V)-5 b(A,)11 b(1979,)100 604 y(pp.)16 b(1{15.)24 705 y([4])24 b fa(J.)d(M.)g(Flor)m(y)m(an)p fl(,)16 b fi(Conformal-mapping-b) n(ase)n(d)j(c)n(o)n(or)n(dinate)f(gener)n(ation)j(metho)n(d)d(for)h(\015ows)g (in)100 765 y(p)n(erio)n(dic)e(c)n(on\014gur)n(ations)p fl(,)f(J.)g(Comp.)f (Ph)o(ys.,)g(62)i(\(1986\),)h(pp.)e(221{247.)24 867 y([5])24 b fa(J.)18 b(M.) f(Flor)m(y)m(an)e(and)i(C.)g(Zema)o(ch)p fl(,)d fi(Schwarz-Christo\013el)k (mappings:)k(A)16 b(gener)n(al)h(appr)n(o)n(ach)p fl(,)100 927 y(J.)f(Comput.) f(Ph)o(ys.)24 b(72)17 b(\(1987\),)h(pp.)e(347{371.)24 1029 y([6])24 b fa(P.) 19 b(Henrici)p fl(,)c fi(Applie)n(d)j(and)g(Computational)g(Complex)g(A)o(nal\ ysis)p fl(,)e(v)o(ol.)f(1,)h(Wiley)l(,)e(1974.)24 1131 y([7])100 1124 y 96 2 v 196 1131 a(,)i fi(Applie)n(d)h(and)h(Computational)g(Complex)g(A)o(nalysis)p fl(,)e(v)o(ol.)f(3,)h(Wiley)l(,)f(1986.)24 1232 y([8])24 b fa(M.)i(Hoekstra)p fl(,)21 b fi(Co)n(or)n(dinate)h(gener)n(ation)i(in)g(symmetric)n(al)e(interio\ r,)i(exterior,)h(or)d(annular)100 1293 y(2D)15 b(domains,)h(using)g(a)f(gener) n(alize)n(d)h(Schwarz-Christo\013el)g(tr)n(ansformation)p fl(,)d(in)h(Numeric\ al)d(Grid)100 1353 y(Generation)i(in)g(Computational)g(Fluid)f(Mec)o(hanics,) g(J.)h(Hauser)g(and)h(C.)f(T)l(a)o(ylor,)g(eds.,)g(Pineridge)100 1413 y(Press\ ,)j(1986.)24 1515 y([9])24 b fa(L.)g(H.)g(Ho)o(well)p fl(,)c fi(Numeric)n(al) i(c)n(onformal)g(mapping)h(of)f(cir)n(cular)f(ar)n(c)h(p)n(olygons)p fl(,)g (J.)f(Comput.)100 1575 y(Appl.)15 b(Math.)24 b(46)17 b(\(1993\),)h(pp.)e(7{28\ .)0 1677 y([10])100 1670 y 96 2 v 196 1677 a(,)j fi(Schwarz-Christo\013el)j (metho)n(ds)d(for)h(multiply-elongate)n(d)j(r)n(e)n(gions)p fl(,)c(in)g(Pro)q (c.)g(of)h(the)f(14th)100 1737 y(IMA)o(CS)c(W)l(orld)i(Congress)g(on)g(Comput\ ation)f(and)h(Applied)e(Mathematics,)f(1994.)0 1838 y([11])24 b fa(L.)14 b (H.)f(Ho)o(well)e(and)i(L.)h(N.)f(Trefethen)p fl(,)d fi(A)k(mo)n(di\014e)n (d)e(Schwarz-Christo\013el)i(tr)n(ansformation)100 1899 y(for)j(elongate)n (d)i(r)n(e)n(gions)p fl(,)c(SIAM)h(J.)f(Sci.)h(Stat.)g(Comput.)23 b(11)17 b (\(1990\),)h(pp.)e(928{949.)0 2000 y([12])24 b fa(K.)17 b(Pear)o(ce)p fl(,)e fi(A)h(c)n(onstructive)h(metho)n(d)f(for)g(numeric)n(al)r(ly)h(c)n(omputing)g (c)n(onformal-mappings)g(for)100 2061 y(ge)n(arlike)i(domains)p fl(,)c(SIAM)h (J.)f(Sci.)h(Stat.)g(Comput.,)f(12)i(\(1991\),)g(pp.)f(231{246.)0 2162 y([13]) 24 b fa(K.)14 b(Reppe)p fl(,)d fi(Ber)n(e)n(chnung)k(von)f(Magnetfeldern)h (mit)e(Hilfe)h(der)f(konformen)h(A)o(bbildung)h(dur)n(ch)e(nu-)100 2222 y(mer\ ische)21 b(Inte)n(gr)n(ation)f(der)g(A)o(bbildungsfunktion)j(von)e(Schwarz-Ch\ risto\013el)p fl(,)g(Siemens)c(F)l(orsc)o(h.)100 2283 y(u.)f(En)o(t)o(wic)o (kl.)e(Ber.,)g(8)j(\(1979\),)g(pp.)f(190{195.)0 2384 y([14])24 b fa(E.)f(B.)g (Saff)f(and)f(A.)h(D.)h(Snider)p fl(,)d fi(F)l(undamentals)j(of)d(Complex)i (A)o(nalysis)p fl(,)e(Pren)o(tice)e(Hall,)100 2445 y(2nd)f(ed.,)e(1993.)0 2546 y([15])24 b fa(K.)c(P.)f(Sridhar)g(and)f(R.)i(T.)f(D)o(a)l(vis)p fl(,)c fi (A)j(Schwarz-Christo\013el)h(metho)n(d)e(for)h(gener)n(ating)h(two-)100 2606 y (dimensional)g(\015ow)e(grids)p fl(,)f(J.)g(Fluids)f(Eng.,)h(107)i(\(1985\),) f(pp.)f(330{337.)951 2795 y(21)g eop %%Page: 22 22 bop 0 42 a fl([16])24 b fa(L.)19 b(N.)f(Trefethen)p fl(,)c fi(Numeric)n(al)k (c)n(omputation)f(of)g(the)h(Schwarz-Christo\013el)g(tr)n(ansformation)p fl (,)100 102 y(SIAM)d(J.)h(Sci.)f(Stat.)i(Comput.)23 b(1)17 b(\(1980\),)g(pp.)f (82{102.)0 203 y([17])100 196 y 96 2 v 196 203 a(,)g fi(SCP)l(A)o(CK)i(user's) f(guide)p fl(.)22 b(MIT)16 b(Numerical)d(Analysis)j(Rep)q(ort)h(89-2,)g(1989.) 0 305 y([18])100 298 y 96 2 v 196 305 a(,)e fi(Schwarz-Christo\013el)k(mappin\ g)e(in)h(the)g(1980's)p fl(.)i(Cornell)c(Univ)o(ersit)o(y)d(Computer)j(Scienc\ e)100 365 y(Departmen)o(t)f(T)l(ec)o(hnical)g(Rep)q(ort)h(TR)h(93-1381,)h(199\ 3.)0 467 y([19])24 b fa(L.)19 b(C.)g(W)o(oods)p fl(,)c fi(The)i(The)n(ory)f (of)i(Subsonic)h(Plane)f(Flow)p fl(,)f(Cam)o(bridge)e(Univ.)f(Press,)j(1961.) 951 2795 y(22)g eop %%Trailer end %%EOF C*** src.shar #! /bin/sh # This is a shell archive. Remove anything before this line, then unpack # it by saving it into a file and typing "sh file". To overwrite existing # files, type "sh file -c". You can also feed this as standard input via # unshar, or by typing "sh 'Contents.m' <<'END_OF_FILE' X% Schwarz-Christoffel Toolbox X% Version 1.3 June 1, 1995. X% Written by Toby Driscoll (driscoll@na-net.ornl.gov). X% See user's guide for full usage details. X% X% Graphical user interface (GUI). X% scgui - Activate graphical user interface. X% scgget - Get polygon/solution properties from GUI. X% scgset - Set polygon/solution properties in the GUI. X% X% Working with polygons. X% drawpoly - Draw a polygon with the mouse. X% plotpoly - Plot a polygon. X% modpoly - Modify a polygon with the mouse. X% scselect - Select polygon vertices with the mouse. X% scaddvtx - Add a vertex. X% scangle - Compute turning angles. X% scfix - Make polygon acceptable to other SC routines. X% X% Half-plane->polygon map. X% hpparam - Solve parameter problem. X% hpdisp - Pretty-print solution data. X% hpmap - Compute forward map. X% hpinvmap - Compute inverse map. X% hpplot - Adaptive plotting of the image of a cartesian grid. X% hpderiv - Derivative of the map. X% X% Disk->polygon map. X% dparam - Solve parameter problem. X% ddisp - Pretty-print solution data. X% dmap - Compute forward map. X% dinvmap - Compute inverse map. X% dplot - Adaptive plotting of the image of a polar grid. X% dderiv - Derivative of the map. X% X% Disk->exterior polygon map. X% deparam - Solve parameter problem. X% dedisp - Pretty-print solution data. X% demap - Compute forward map. X% deinvmap - Compute inverse map. X% deplot - Adaptive plotting of the image of a polar grid. X% dederiv - Derivative of the map. X% X% Strip->polygon map. X% stparam - Solve parameter problem. X% stdisp - Pretty-print solution data. X% stmap - Compute forward map. X% stinvmap - Compute inverse map. X% stplot - Adaptive plotting of the image of a polar grid. X% stderiv - Derivative of the map. X% X% Rectangle->polygon map. X% rparam - Solve parameter problem. X% rdisp - Pretty-print solution data. X% rmap - Compute forward map. X% rinvmap - Compute inverse map. X% rplot - Adaptive plotting of the image of a polar grid. X% rderiv - Derivative of the map. X% X% Conversion routines. X% hp2disk - Convert a solution from half-plane to one from disk. X% disk2hp - Convert a solution from disk to one from half-plane. X% dfixwc - Choose conformal center of disk map. X% ptsource - Graphical use of DFIXWC. X% X% Demonstrations. X% scdemo - Select demos from a menu. X% tutdemo - Walk through a tutorial. X% infdemo - Explain infinite vertices. X% elongdemo - Maps to elongated polygons. X% faberdemo - Introduce Faber polynomials. END_OF_FILE if test 2698 -ne `wc -c <'Contents.m'`; then echo shar: \"'Contents.m'\" unpacked with wrong size! fi chmod +x 'Contents.m' # end of 'Contents.m' fi if test -f 'clipdata.m' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'clipdata.m'\" else echo shar: Extracting \"'clipdata.m'\" \(971 characters\) sed "s/^X//" >'clipdata.m' <<'END_OF_FILE' Xfunction wc = clipdata(w,lim) X%CLIPDATA (not intended for calling directly by the user) X% When adding curves one by one to a plot, it may be desirable to X% override the defualt behavior of redrawing the entire plot each X% time. This is done with the line's EraseMode property. X% Unfortunately, in Matlab 4.0, with no-redraw modes, lines are not X% always clipped to the axes box. This routine clips manually. The X% input vector W should be a vector of closely spaced complex points X% tracing out a smooth curve. A cluster of points outside the box is X% replaced with NaN's, except for the first and last points of the X% cluster. X% X% See also HPPLOT, DPLOT, DEPLOT, STPLOT, RPLOT. X% X% Written by Toby Driscoll. Last updated 5/24/95. X Xx = real(w); Xy = imag(w); Xoutside = (x < lim(1)) | (x > lim(2)) | (y < lim(3)) | (y > lim(4)); Xdout = diff(outside); Xkill = outside & [1;dout~=1] & [dout~=-1;1]; Xwc = w; Xjunk = NaN; Xwc(kill) = junk(ones(size(wc(kill)))); X X END_OF_FILE if test 971 -ne `wc -c <'clipdata.m'`; then echo shar: \"'clipdata.m'\" unpacked with wrong size! fi chmod +x 'clipdata.m' # end of 'clipdata.m' fi if test -f 'dderiv.m' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'dderiv.m'\" else echo shar: Extracting \"'dderiv.m'\" \(591 characters\) sed "s/^X//" >'dderiv.m' <<'END_OF_FILE' Xfunction fprime = dderiv(zp,z,beta) X%DDERIV Derivative of the disk map. X% DDERIV(ZP,Z,BETA) returns the derivative at the points of ZP of X% the Schwarz-Christoffel disk map whose prevertices are Z and X% whose turning angles are BETA. X% X% Don't forget the multiplicative constant in the SC map! X% X% See also DPARAM, DMAP. X% X% Written by Toby Driscoll. Last updated 5/24/95. X Xz = z(:); Xbeta = beta(:); Xzprow = zp(:).'; Xfprime = zeros(size(zp)); Xnpts = length(zp(:)); Xterms = 1 - zprow(ones(length(beta),1),:)./z(:,ones(npts,1)); Xfprime(:) = exp(sum(log(terms).*beta(:,ones(npts,1)))); END_OF_FILE if test 591 -ne `wc -c <'dderiv.m'`; then echo shar: \"'dderiv.m'\" unpacked with wrong size! fi chmod +x 'dderiv.m' # end of 'dderiv.m' fi if test -f 'ddisp.m' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'ddisp.m'\" else echo shar: Extracting \"'ddisp.m'\" \(927 characters\) sed "s/^X//" >'ddisp.m' <<'END_OF_FILE' Xfunction ddisp(w,beta,z,c) X%DDISP Display results of Schwarz-Christoffel disk parameter problem. X% DDISP(W,BETA,Z,C) displays the results of DPARAM in a pleasant X% way. X% X% See also DPARAM, DPLOT. X% X% Written by Toby Driscoll. Last updated 5/24/95. X Xdisp(' ') Xdisp(' w beta z arg(z)/pi') Xdisp(' -----------------------------------------------------------------------') Xu = real(w); Xv = imag(w); Xx = real(z); Xy = imag(z); Xang = angle(z)/pi; Xang(ang<=0) = ang(ang<=0) + 2; Xfor j = 1:length(w) X if v(j) < 0 X s1 = '-'; X else X s1 = '+'; X end X if y(j) < 0 X s2 = '-'; X else X s2 = '+'; X end X disp(sprintf(' %8.5f %c %7.5fi %8.5f %8.5f %c %7.5fi %14.12f',... X u(j),s1,abs(v(j)),beta(j),x(j),s2,abs(y(j)),ang(j))); X Xend Xdisp(' ') Xif imag(c) < 0 X s = '-'; Xelse X s = '+'; Xend Xdisp(sprintf(' c = %.8g %c %.8gi',real(c),s,abs(imag(c)))) END_OF_FILE if test 927 -ne `wc -c <'ddisp.m'`; then echo shar: \"'ddisp.m'\" unpacked with wrong size! fi chmod +x 'ddisp.m' # end of 'ddisp.m' fi if test -f 'dederiv.m' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'dederiv.m'\" else echo shar: Extracting \"'dederiv.m'\" \(637 characters\) sed "s/^X//" >'dederiv.m' <<'END_OF_FILE' Xfunction fprime = dederiv(zp,z,beta) X%DEDERIV Derivative of the exterior map. X% DEDERIV(ZP,Z,BETA) returns the derivative at the points of ZP of X% the Schwarz-Christoffel exterior map whose prevertices are Z and X% whose turning angles are BETA. X% X% Don't forget the multiplicative constant in the SC map! X% X% See also DEPARAM, DEMAP. X% X% Written by Toby Driscoll. Last updated 5/24/95. X Xz = z(:); Xbeta = [beta(:);-2]; Xzprow = zp(:).'; Xfprime = zeros(size(zp)); Xnpts = length(zp(:)); Xterms = 1 - zprow(ones(length(z),1),:)./z(:,ones(npts,1)); Xterms(length(z)+1,:) = zprow; Xfprime(:) = exp(sum(log(terms).*beta(:,ones(npts,1)))); END_OF_FILE if test 637 -ne `wc -c <'dederiv.m'`; then echo shar: \"'dederiv.m'\" unpacked with wrong size! fi chmod +x 'dederiv.m' # end of 'dederiv.m' fi if test -f 'dedisp.m' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'dedisp.m'\" else echo shar: Extracting \"'dedisp.m'\" \(935 characters\) sed "s/^X//" >'dedisp.m' <<'END_OF_FILE' Xfunction dedisp(w,beta,z,c) X%DEDISP Display results of Schwarz-Christoffel exterior parameter problem. X% DEDISP(W,BETA,Z,C) displays the results of DEPARAM in a pleasant X% way. X% X% See also DEPARAM, DEPLOT. X% X% Written by Toby Driscoll. Last updated 5/24/95. X Xdisp(' ') Xdisp(' w beta z arg(z)/pi') Xdisp(' -----------------------------------------------------------------------') Xu = real(w); Xv = imag(w); Xx = real(z); Xy = imag(z); Xang = angle(z)/pi; Xang(ang<=0) = ang(ang<=0) + 2; Xfor j = 1:length(w) X if v(j) < 0 X s1 = '-'; X else X s1 = '+'; X end X if y(j) < 0 X s2 = '-'; X else X s2 = '+'; X end X disp(sprintf(' %8.5f %c %7.5fi %8.5f %8.5f %c %7.5fi %14.12f',... X u(j),s1,abs(v(j)),beta(j),x(j),s2,abs(y(j)),ang(j))); X Xend Xdisp(' ') Xif imag(c) < 0 X s = '-'; Xelse X s = '+'; Xend Xdisp(sprintf(' c = %.8g %c %.8gi',real(c),s,abs(imag(c)))) END_OF_FILE if test 935 -ne `wc -c <'dedisp.m'`; then echo shar: \"'dedisp.m'\" unpacked with wrong size! fi chmod +x 'dedisp.m' # end of 'dedisp.m' fi if test -f 'deimapf1.m' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'deimapf1.m'\" else echo shar: Extracting \"'deimapf1.m'\" \(470 characters\) sed "s/^X//" >'deimapf1.m' <<'END_OF_FILE' Xfunction zdot = deimapf1(wp,yp); X%DEIMAPF1 (not intended for calling directly by the user) X% Used by DEINVMAP for solution of an ODE. X Xglobal SCIMDATA X Xlenyp = length(yp); Xlenzp = lenyp/2; Xzp = yp(1:lenzp)+sqrt(-1)*yp(lenzp+1:lenyp); Xlenz = SCIMDATA(1,4); Xbigz = SCIMDATA(1:lenz,2)*ones(1,lenzp); Xbigbeta = SCIMDATA(1:lenz,3)*ones(1,lenzp); X Xf = SCIMDATA(1:lenzp,1).*exp(sum(log(1 - (ones(lenz,1)*zp.' )./bigz).*... X (-bigbeta))).'.*zp.^2; Xzdot = [real(f);imag(f)]; END_OF_FILE if test 470 -ne `wc -c <'deimapf1.m'`; then echo shar: \"'deimapf1.m'\" unpacked with wrong size! fi chmod +x 'deimapf1.m' # end of 'deimapf1.m' fi if test -f 'deinvmap.m' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'deinvmap.m'\" else echo shar: Extracting \"'deinvmap.m'\" \(3208 characters\) sed "s/^X//" >'deinvmap.m' <<'END_OF_FILE' Xfunction zp = deinvmap(wp,w,beta,z,c,qdat,z0,options) X%DEINVMAP Schwarz-Christoffel exterior inverse map. X% DEINVMAP(WP,W,BETA,Z,C,QDAT) computes the inverse of the X% Schwarz-Christoffel exterior map (i.e., from the exterior of a X% polygon to the disk) at the points given in vector WP. The other X% arguments are as in DEPARAM. QDAT may be omitted. X% X% The default algorithm is to solve an ODE in order to obtain a fair X% approximation for ZP, and then improve ZP with Newton iterations. X% The ODE solution at WP requires a vector Z0 whose forward image W0 X% is such that for each j, the line segment connecting WP(j) and W0(j) X% lies inside the polygon. By default Z0 is chosen by a fairly robust X% automatic process. Using a parameter (see below), you can choose to X% use either an ODE solution or Newton iterations exclusively. X% X% DEINVMAP(WP,W,BETA,Z,C,QDAT,Z0) has two interpretations. If the ODE X% solution is being used, Z0 overrides the automatic selection of X% initial points. (This can be handy in convex polygons, where the X% choice of Z0 is trivial.) Otherwise, Z0 is taken as an initial X% guess to ZP. In either case, if length(Z0)==1, the value Z0 is used X% for all elements of WP; otherwise, length(Z0) should equal X% length(WP). X% X% DEINVMAP(WP,W,BETA,Z,C,QDAT,Z0,OPTIONS) uses a vector of parameters X% that control the algorithm. See SCIMAPOPT. X% X% See also SCIMAPOPT, DEPARAM, DEMAP. X% X% Written by Toby Driscoll. Last updated 5/24/95. X Xn = length(w); Xz = z(:); Xbeta = beta(:); Xzp = zeros(size(wp)); Xwp = wp(:); Xlenwp = length(wp); X Xif nargin < 8 X options = []; X if nargin < 7 X z0 = []; X if nargin < 6 X qdat = []; X end X end Xend X X[ode,newton,tol,maxiter] = scimapopt(options); X Xif isempty(qdat) X qdat = scqdata(beta,max(ceil(-log10(tol)),2)); Xend X X% ODE Xif ode X if isempty(z0) X % Pick a value z0 (not a singularity) and compute the map there. X [z0,w0] = scimapz0('de',wp,w,beta,z,c,qdat); X else X w0 = demap(z0,w,beta,z,c,qdat); X if length(z0)==1 & lenwp > 1 X z0 = z0(:,ones(lenwp,1)).'; X w0 = w0(:,ones(lenwp,1)).'; X end X end X X % Use relaxed ODE tol if improving with Newton. X odetol = max(tol,1e-3*(newton)); X X % Set up data for the ode function. X global SCIMDATA X SCIMDATA = (wp - w0)/c; % adjusts "time" interval X SCIMDATA(1:n,2:3) = [z, beta]; X SCIMDATA(1,4) = n; X X z0 = [real(z0);imag(z0)]; X [t,y] = ode45('deimapf1',0,1,z0,odetol); X [m,leny] = size(y); X zp(:) = y(m,1:lenwp)+sqrt(-1)*y(m,lenwp+1:leny); Xend X X% Newton iterations Xif newton X if ~ode X zn = z0(:); X if length(z0)==1 & lenwp > 1 X zn = zn(:,ones(lenwp,1)); X end X else X zn = zp(:); X end X X wp = wp(:); X done = zeros(size(zn)); X k = 0; X while ~all(done) & k < maxiter X F = wp(~done) - demap(zn(~done),w,beta,z,c,qdat); X m = length(F); X dF = c*(zn(~done).').^(-2).*... X exp(sum(beta(:,ones(m,1)) .* log(1-(zn(~done,ones(n,1)).')./z(:,ones(m,1))))); X zn(~done) = zn(~done) + F(:)./dF(:); X done(~done) = (abs(F)< tol); X k = k+1; X end X if any(abs(F)> tol) X disp('Warning in deinvmap: Solution may be inaccurate') X fprintf('Maximum residual = %.3g\n',max(abs(F))) X end X zp(:) = zn; Xend; X END_OF_FILE if test 3208 -ne `wc -c <'deinvmap.m'`; then echo shar: \"'deinvmap.m'\" unpacked with wrong size! fi chmod +x 'deinvmap.m' # end of 'deinvmap.m' fi if test -f 'demap.m' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'demap.m'\" else echo shar: Extracting \"'demap.m'\" \(2003 characters\) sed "s/^X//" >'demap.m' <<'END_OF_FILE' Xfunction wp = demap(zp,w,beta,z,c,qdat) X%DEMAP Schwarz-Christoffel exterior map. X% DEMAP(ZP,W,BETA,Z,C,QDAT) computes the values of the Schwarz- X% Christoffel exterior map at the points in vector ZP. The arguments X% W, BETA, Z, C, and QDAT are as in DEPARAM. DEMAP returns a vector X% the same size as ZP. X% X% DEMAP(ZP,W,BETA,Z,C,TOL) uses quadrature data intended to give an X% answer accurate to within roughly TOL. X% X% See also DEPARAM, DEPLOT, DEINVMAP. X% X% Written by Toby Driscoll. Last updated 5/31/95. X Xif nargin < 6 X qdat = scqdata(beta,8); Xelseif length(qdat)==1 X qdat = scqdata(beta,max(ceil(-log10(qdat)),8)); Xend X Xn = length(w); Xbeta = beta(:); Xz = z(:); Xp = length(zp); Xwp = zeros(size(zp)); Xws = wp; Xzs = wp; X X% For each point in zp, find nearest prevertex. X[mindist,sing] = min(abs(ones(n,1)*zp(:).'-z(:,ones(1,p)))); X X% zs = the starting singularities X% A MATLAB technicality could cause a mistake if sing is all ones and same X% length as z, hence a workaround. Xzs(1:p+1) = z([sing,2]); Xzs = zs(1:p); X% ws = SCmap(zs) Xws(1:p+1) = w([sing,2]); Xws = ws(1:p); X X% Must be careful about the singularity at the origin, since the X% quadrature routine doesn't pay attention to the right endpoint. X Xabszp = abs(zp); % dist to sing at 0 Xzp2zs = abs(zp-zs); % dist from zp to zs Xbad = zp2zs < 10*eps; Xunf = ones(size(zp2zs)); % unfinished? Xdist = unf; Xznew = unf; X% Take care of "bad" ones explicitly. Xwp(bad) = ws(bad); Xunf(bad) = zeros(size(unf(bad))); X% Integrate for the rest. Xdist(unf) = min(1,2*abszp(unf)./zp2zs(unf)); % how far may we go? Xznew(unf) = zs(unf) + dist(unf).*(zp(unf)-zs(unf)); Xwp(unf) = ws(unf) + c*dequad(zs(unf),znew(unf),sing(unf),z,beta,qdat); Xunf = (dist<1); % unfinished positions Xwhile any(unf) X zold = znew; X dist(unf) = min(1,2*abszp(unf)./abs(zp(unf)-zold(unf))); X znew(unf) = zold(unf) + dist(unf).*(zp(unf)-zold(unf)); X wp(unf) = wp(unf) + c*dequad(zold(unf),znew(unf),[],z,beta,qdat); X unf = (dist<1); Xend X END_OF_FILE if test 2003 -ne `wc -c <'demap.m'`; then echo shar: \"'demap.m'\" unpacked with wrong size! fi chmod +x 'demap.m' # end of 'demap.m' fi if test -f 'deparam.m' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'deparam.m'\" else echo shar: Extracting \"'deparam.m'\" \(3287 characters\) sed "s/^X//" >'deparam.m' <<'END_OF_FILE' Xfunction [z,c,qdat] = deparam(w,beta,z0,options) X%DEPARAM Schwarz-Christoffel exterior parameter problem. X% [Z,C,QDAT] = DEPARAM(W,BETA) solves the Schwarz-Christoffel X% mapping parameter problem with a disk as fundamental domain and X% the exterior of the polygon specified by W as the target. W X% must be a vector of the vertices of the polygon, specified in X% clockwise order, and BETA should be a vector of the turning X% angles of the polygon; see SCANGLES for details. If successful, X% DEPARAM will return Z, a vector of the pre-images of W; C, the X% multiplicative constant of the conformal map; and QDAT, a matrix X% of quadrature data used by some of the other S-C routines. X% X% [Z,C,QDAT] = DEPARAM(W,BETA,Z0) uses Z0 as an initial guess for X% Z. X% X% [Z,C,QDAT] = DEPARAM(W,BETA,Z0,OPTIONS) uses a vector of control X% parameters. See SCPARMOPT. X% X% See also SCPARMOPT, DRAWPOLY, DEDISP, DEPLOT, DEMAP, DEINVMAP. X% X% Written by Toby Driscoll. Last updated 5/24/95. X Xn = length(w); % no. of vertices Xw = w(:); Xbeta = beta(:); X X% Set up defaults for missing args Xif nargin < 4 X options = []; X if nargin < 3 X z0 = []; X end Xend X Xerr = sccheck('de',w,beta); Xif err==1 X fprintf('Use SCFIX to make polygon obey requirements\n') X error(' ') Xend X X[trace,tol] = scparmopt(options); Xnqpts = max(ceil(-log10(tol)),2); Xqdat = scqdata(beta,nqpts); % quadrature data X X%%if length(beta)~=n X%% error('Mismatched angles and vertices') X%%elseif any(beta > 1) | any(beta <= -1) X%% error('Each entry of beta must be in (-1,1]') X%%elseif abs(sum(beta)-2) > tol X%% disp('Warning: angles do not sum to +2') X%% if abs(sum(beta)+2) < tol X%% disp('Vertices were probably specified in the wrong order.') X%% disp('Use flipud and scangle to reverse ordering.') X%% return X%% end X%%elseif (beta(n)==0 | beta(n)==1) & (n > 2) X%% error('Sides adjacent to w(n) must not be collinear') X%%elseif n < 2 X%% error('Polygon must have at least two vertices') X%%end X Xif n==2 % it's a slit X z = [-1;1]; X Xelse X % Set up normalized lengths for nonlinear equations X len = abs(diff(w([n,1:n]))); X nmlen = abs(len(3:n-1)/len(2)); X X % Set up initial guess X if isempty(z0) X y0 = zeros(n-1,1); X else X th = angle(z0(:)); X th(th<=0) = th(th<=0) + 2*pi; X dt = diff([0;th(1:n-1);2*pi]); X y0 = log(dt(1:n-1)./dt(2:n)); X end X X % Solve nonlinear system of equations: X X % package data X nrow = max([n,nqpts,3]); X ncol = 3+2*(n+1); X fdat = zeros(nrow,ncol); X fdat(1:3,1) = [n;nqpts;ncol]; X fdat(1:n,2) = beta; X if n > 3 X fdat(1:n-3,3) = nmlen(:); X end X fdat(1:nqpts,4:ncol) = qdat; X % set options X opt = zeros(16,1); X opt(1) = trace; X opt(6) = 100*(n-3); X opt(8) = tol; X opt(9) = tol/10; X opt(12) = nqpts; X % do it X [y,termcode] = nesolve('depfun',y0,opt,fdat); X if termcode~=1 X disp('Warning: Nonlinear equations solver did not terminate normally') X end X X % Convert y values to z X cs = cumsum(cumprod([1;exp(-y)])); X theta = 2*pi*cs/cs(n); X z = ones(n,1); X z(1:n-1) = [exp(i*theta(1:n-1))]; Xend X X% Determine scaling constant Xmid = exp(i*mean(angle(z(n-1:n)))); Xc = (w(n) - w(n-1)) / (dequad(z(n-1),mid,n-1,z,beta,qdat)-... X dequad(z(n),mid,n,z,beta,qdat)); X X END_OF_FILE if test 3287 -ne `wc -c <'deparam.m'`; then echo shar: \"'deparam.m'\" unpacked with wrong size! fi chmod +x 'deparam.m' # end of 'deparam.m' fi if test -f 'depfun.m' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'depfun.m'\" else echo shar: Extracting \"'depfun.m'\" \(1213 characters\) sed "s/^X//" >'depfun.m' <<'END_OF_FILE' Xfunction F = depfun(y,fdat) X%DEPFUN (not intended for calling directly by the user) X% Returns residual for solution of nonlinear equations. X% Used by DEPARAM. X% X% Written by Toby Driscoll. Last updated 5/23/95. X Xn = fdat(1,1); Xbeta = fdat(1:n,2); Xnmlen = fdat(1:n-3,3); Xqdat = fdat(1:fdat(2,1),4:fdat(3,1)); X X% Transform y (unconstr. vars) to z (prevertices) Xcs = cumsum(cumprod([1;exp(-y)])); Xtheta = 2*pi*cs(1:n-1)/cs(n); Xz = ones(n,1); Xz(1:n-1) = exp(i*theta); X X% Check crowding. Xif any(diff(theta) pi) = dtheta(dtheta > pi) - 2*pi; Xmid = exp(i*(theta(1:n-2) + dtheta/2)); X Xints = dequad(z(1:n-2),mid,1:n-2,z,beta,qdat) - ... X dequad(z(2:n-1),mid,2:n-1,z,beta,qdat); X Xif any(ints==0) X % Singularities were too crowded in practice. X F = y; X disp('Warning: Severe crowding') Xelse X % Compute equation residual values. X F = abs(ints(2:n-2))/abs(ints(1)) - nmlen; X X % Compute residue. X res = -sum(beta./z)/ints(1); X X F = [F;real(res);imag(res)]; Xend X X END_OF_FILE if test 1213 -ne `wc -c <'depfun.m'`; then echo shar: \"'depfun.m'\" unpacked with wrong size! fi chmod +x 'depfun.m' # end of 'depfun.m' fi if test -f 'deplot.m' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'deplot.m'\" else echo shar: Extracting \"'deplot.m'\" \(3850 characters\) sed "s/^X//" >'deplot.m' <<'END_OF_FILE' Xfunction [H,R2,THETA] = deplot(w,beta,z,c,R,theta,options) X%DEPLOT Image of polar grid under Schwarz-Christoffel exterior map. X% DEPLOT(W,BETA,Z,C) will adaptively plot the images under the X% Schwarz-Christoffel exterior map of ten evenly spaced circles X% and rays in the unit disk. The arguments are as in DEPARAM. X% X% DEPLOT(W,BETA,Z,C,M,N) will plot images of M evenly spaced X% circles and N evenly spaced rays. X% X% DEPLOT(W,BETA,Z,C,R,THETA) will plot images of circles whose X% radii are given in R and rays whose arguments are given in X% THETA. Either argument may be empty. X% X% DEPLOT(W,BETA,Z,C,R,THETA,OPTIONS) allows customization of X% DEPLOT's behavior. See SCPLOTOPT. X% X% H = DEPLOT(W,BETA,Z,C,...) returns a vector of handles to all X% the curves drawn in the interior of the polygon. [H,R,THETA] = X% DEPLOT(W,BETA,Z,C,...) also returns the moduli and arguments of X% the curves comprising the grid. X% X% See also SCPLOTOPT, DEPARAM, DEMAP, DEDISP. X% X% Written by Toby Driscoll. Last updated 5/24/95. X Xn = length(w); Xbeta = beta(:); Xz = z(:); X Xturn_off_hold = ~ishold; Xif nargin < 7 X options = []; X if nargin < 6 X theta = []; X if nargin < 5 X R = []; X end X end Xend X Xif isempty([R(:);theta(:)]) X R = 10; X theta = 10; Xend X Xif (length(R)==1) & (R == round(R)) X m = R+2; X R = fliplr(linspace(.25,1,m)); X R([1,m]) = []; Xend Xif (length(theta)==1) & (theta == round(theta)) X m = theta+1; X theta = linspace(0,2*pi,m); X theta(m) = []; Xend X X[nqpts,maxturn,maxlen,maxrefn] = scplotopt(options); Xautoscale = strcmp(get(gca,'xlimmode'),'auto') & ... X strcmp(get(gca,'ylimmode'),'auto'); Xautoscale = autoscale | ~ishold; X Xfig = gcf; Xfigure(fig); Xplotpoly(w,beta); Xhold on X Xaxlim = axis; Xif autoscale X axlim(1:2) = axlim(1:2) + 0.25*diff(axlim(1:2))*[-1,1]; X axlim(3:4) = axlim(3:4) + 0.25*diff(axlim(3:4))*[-1,1]; X axis(axlim); Xend Xdrawnow X Xn = length(w); Xwf = w(~isinf(w)); Xreflen = maxlen*max(abs(diff([wf;wf(1)]))); X Xqdat = scqdata(beta,nqpts); XRp0 = linspace(.1,1,15)'; X Xfor j = 1:length(R) X tp = linspace(0,2*pi,16)'; X tp = [tp(length(tp)-1)-2*pi;tp]; X zp = R(j)*exp(i*tp); X wp = demap(zp,w,beta,z,c,qdat); X bad = find(toobig(wp,maxturn,reflen,axis)); X iter = 0; X while (~isempty(bad)) & (iter < maxrefn) X lenwp = length(wp); X newt = [(tp(bad-1)+2*tp(bad))/3;(tp(bad+1)+2*tp(bad))/3]; X newz = R(j)*exp(i*newt); X neww = demap(newz,w,beta,z,c,qdat); X [k,in] = sort([tp;newt]); X tp = [tp;newt]; wp = [wp;neww]; X tp = tp(in); wp = wp(in); X iter = iter + 1; X bad = find(toobig(wp,maxturn,reflen,axis)); X end X tp(tp<0) = tp(tp<0) + 2*pi; X [k,in] = sort(tp); X linh(j) = plot(clipdata(wp(in),axis), 'g-','erasemode','none'); X set(linh(j),'erasemode','normal'); X drawnow X Z(1:length(zp),j) = zp; X W(1:length(wp),j) = wp; Xend X Xfor j = 1:length(theta) X Rp = Rp0; X zp = Rp*exp(i*theta(j)); X wp = demap(zp,w,beta,z,c,qdat); X bad = find(toobig(wp,maxturn,reflen,axis)); X iter = 0; X while (~isempty(bad)) & (iter < maxrefn) X lenwp = length(wp); X newR = [(Rp(bad-1)+2*Rp(bad))/3;(Rp(bad+1)+2*Rp(bad))/3]; X newz = newR*exp(i*theta(j)); X neww = demap(newz,w,beta,z,c,qdat); X [k,in] = sort([Rp;newR]); X Rp = [Rp;newR]; wp = [wp;neww]; X Rp = Rp(in); wp = wp(in); X iter = iter + 1; X bad = find(toobig(wp,maxturn,reflen,axis)); X end X linh(j+length(R)) = plot(clipdata(wp,axis), 'g-','erasemode','none'); X drawnow X set(linh(j+length(R)),'erasemode','normal'); X Z(1:length(zp),j+length(R)) = zp; X W(1:length(wp),j+length(R)) = wp; Xend X X% Force redraw to get clipping enforced. Xset(fig,'color',get(fig,'color')) Xif turn_off_hold, hold off, end; Xif nargout > 0 X H = linh; X if nargout > 1 X R2 = R; X if nargout > 2 X THETA = theta; X end X end Xend X END_OF_FILE if test 3850 -ne `wc -c <'deplot.m'`; then echo shar: \"'deplot.m'\" unpacked with wrong size! fi chmod +x 'deplot.m' # end of 'deplot.m' fi if test -f 'dequad.m' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'dequad.m'\" else echo shar: Extracting \"'dequad.m'\" \(2519 characters\) sed "s/^X//" >'dequad.m' <<'END_OF_FILE' Xfunction I = dequad(z1,z2,sing1,z,beta,qdat) X%DEQUAD (not intended for calling directly by the user) X% Numerical quadrature for the exterior map. X X% z1,z2 are vectors of left and right endpoints. sing1 is a X% vector of integer indices which label the singularities in z1. X% So if sing1(5) = 3, then z1(5) = z(3). A zero means no X% singularity. z is the vector of prevertices (all singularities X% except the origin); beta is the vector of associated turning X% angles. qdat is quadrature data from SCQDATA. X% X% Make sure that z and beta are column vectors. X% X% DEQUAD integrates from a possible singularity at the left end to a X% regular point at the right. If both endpoints are singularities, X% you must break the integral into two pieces and make two calls. X% X% The integral is subdivided, if necessary, so that no X% singularity lies closer to the left endpoint than 1/2 the X% length of the integration (sub)interval. But the singularity at the X% origin is NOT accounted for in this decision. X% X% Written by Toby Driscoll. Last updated 5/23/95. X Xnqpts = size(qdat,1); Xn = length(z); Xbigz = z(:,ones(1,nqpts)); Xbeta = [beta(:);-2]; Xbigbeta = beta(:,ones(1,nqpts)); Xif isempty(sing1) X sing1 = zeros(length(z1),1); Xend X XI = zeros(size(z1)); Xnontriv = find(z1(:)~=z2(:))'; X Xfor k = nontriv X za = z1(k); X zb = z2(k); X sng = sing1(k); X X % Allowable integration step, based on nearest singularity. X dist = min(1,2*min(abs(z([1:sng-1,sng+1:n])-za))/abs(zb-za)); X zr = za + dist*(zb-za); X % Adjust Gauss-Jacobi nodes and weights to interval. X ind = sng + (n+1)*(sng==0); X nd = ((zr-za)*qdat(:,ind) + zr + za)/2; % nodes X wt = ((zr-za)/2) * qdat(:,ind+n+1); % weights X terms = 1 - nd(:,ones(n,1)).'./bigz; X if any(~diff(nd)) | any(any(~terms)) X % Endpoints are practically coincident. X I(k) = 0; X else X terms = [terms;nd.']; X % Use Gauss-Jacobi on first subinterval, if necessary. X if sng > 0 X terms(sng,:) = terms(sng,:)./abs(terms(sng,:)); X wt = wt*(abs(zr-za)/2)^beta(sng); X end X I(k) = exp(sum(log(terms).*bigbeta))*wt; X while dist < 1 X % Do regular Gaussian quad on other subintervals. X zl = zr; X dist = min(1,2*min(abs(z-zl))/abs(zl-zb)); X zr = zl + dist*(zb-zl); X nd = ((zr-zl)*qdat(:,n+1) + zr + zl)/2; X wt = ((zr-zl)/2) * qdat(:,2*n+2); X terms = 1 - nd(:,ones(n,1)).'./bigz; X terms = [terms;nd.']; X I(k) = I(k) + exp(sum(log(terms).*bigbeta))*wt; X end X end Xend X END_OF_FILE if test 2519 -ne `wc -c <'dequad.m'`; then echo shar: \"'dequad.m'\" unpacked with wrong size! fi chmod +x 'dequad.m' # end of 'dequad.m' fi if test -f 'dfixwc.m' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'dfixwc.m'\" else echo shar: Extracting \"'dfixwc.m'\" \(1006 characters\) sed "s/^X//" >'dfixwc.m' <<'END_OF_FILE' Xfunction [y,d] = dfixwc(w,beta,z,c,wc,z0) X%DFIXWC Fix conformal center of disk map. X% The conformal center WC of a Schwarz-Christoffel interior disk X% map is defined as the image of zero. The parameter problem X% solver DPARAM does not allow control over the placement of the X% conformal center. Using the output Z,C from DPARAM, [Z0,C0] = X% DFIXWC(W,BETA,Z,C,WC) computes a Moebius transformation so that X% if Z0 and C0 are used in place of Z and C, the conformal center X% of the resulting map will be WC. X% X% See also DPARAM, PTSOURCE. X% X% Written by Toby Driscoll. Last updated 5/24/95. X Xn = length(w); X Xif nargin < 6 X z0 = []; Xend X Xzc = dinvmap(wc,w,beta,z,c,[],z0,[0,1e-10]); X X% Transform prevertices. Xy = ((1-zc')/(1-zc))*(z-zc)./(1-zc'*z); Xy(n) = 1; % force it to be exact X X% Recalculate constant from scratch. Xmid = (y(1)+y(2))/2; Xqdat = scqdata(beta,10); Xd = (w(1) - w(2))/... X (dquad(y(2),mid,2,y,beta,qdat) - dquad(y(1),mid,1,y,beta,qdat)); X END_OF_FILE if test 1006 -ne `wc -c <'dfixwc.m'`; then echo shar: \"'dfixwc.m'\" unpacked with wrong size! fi chmod +x 'dfixwc.m' # end of 'dfixwc.m' fi if test -f 'dimapf1.m' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'dimapf1.m'\" else echo shar: Extracting \"'dimapf1.m'\" \(448 characters\) sed "s/^X//" >'dimapf1.m' <<'END_OF_FILE' Xfunction zdot = dimapf1(wp,yp); X%DIMAPF1 (not intended for calling directly by the user) X% Used by DINVMAP for solution of an ODE. X Xglobal SCIMDATA X Xlenyp = length(yp); Xlenzp = lenyp/2; Xzp = yp(1:lenzp)+sqrt(-1)*yp(lenzp+1:lenyp); Xn = SCIMDATA(1,4); Xbigz = SCIMDATA(1:n,2)*ones(1,lenzp); Xbigbeta = SCIMDATA(1:n,3)*ones(1,lenzp); X Xf = SCIMDATA(1:lenzp,1).*exp(sum(log(1 - (ones(n,1)*zp.' )./bigz).*... X (-bigbeta))).'; Xzdot = [real(f);imag(f)]; END_OF_FILE if test 448 -ne `wc -c <'dimapf1.m'`; then echo shar: \"'dimapf1.m'\" unpacked with wrong size! fi chmod +x 'dimapf1.m' # end of 'dimapf1.m' fi if test -f 'dinvmap.m' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'dinvmap.m'\" else echo shar: Extracting \"'dinvmap.m'\" \(3252 characters\) sed "s/^X//" >'dinvmap.m' <<'END_OF_FILE' Xfunction zp = dinvmap(wp,w,beta,z,c,qdat,z0,options) X%DINVMAP Schwarz-Christoffel disk inverse map. X% DINVMAP(WP,W,BETA,Z,C,QDAT) computes the inverse of the X% Schwarz-Christoffel disk map (i.e., from a polygon to the disk) at X% the points given in vector WP. The other arguments are as in X% DPARAM. QDAT my be omitted. X% X% The default algorithm is to solve an ODE in order to obtain a fair X% approximation for ZP, and then improve ZP with Newton iterations. X% The ODE solution at WP requires a vector Z0 whose forward image W0 X% is such that for each j, the line segment connecting WP(j) and W0(j) X% lies inside the polygon. By default Z0 is chosen by a fairly robust X% automatic process. Using a parameter (see below), you can choose to X% use either an ODE solution or Newton iterations exclusively. X% X% DINVMAP(WP,W,BETA,Z,C,QDAT,Z0) has two interpretations. If the ODE X% solution is being used, Z0 overrides the automatic selection of X% initial points. (This can be handy in convex polygons, where the X% choice of Z0 is trivial.) Otherwise, Z0 is taken as an initial X% guess to ZP. In either case, if length(Z0)==1, the value Z0 is used X% for all elements of WP; otherwise, length(Z0) should equal X% length(WP). X% X% DINVMAP(WP,W,BETA,Z,C,QDAT,Z0,OPTIONS) uses a vector of parameters X% that control the algorithm. See SCIMAPOPT. X% X% See also SCIMAPOPT, DPARAM, DMAP. X% X% Written by Toby Driscoll. Last updated 5/24/95. X Xn = length(w); Xbeta = beta(:); Xz = z(:); Xzp = zeros(size(wp)); Xwp = wp(:); Xlenwp = length(wp); X Xif nargin < 8 X options = []; X if nargin < 7 X z0 = []; X if nargin < 6 X qdat = []; X end X end Xend X X[ode,newton,tol,maxiter] = scimapopt(options); X Xif isempty(qdat) X qdat = scqdata(beta,max(ceil(-log10(tol)),2)); Xend X X X% ODE Xif ode X if isempty(z0) X % Pick a value z0 (not a singularity) and compute the map there. X [z0,w0] = scimapz0('d',wp,w,beta,z,c,qdat); X else X w0 = dmap(z0,w,beta,z,c,qdat); X if length(z0)==1 & lenwp > 1 X z0 = z0(:,ones(lenwp,1)).'; X w0 = w0(:,ones(lenwp,1)).'; X end X end X X % Use relaxed ODE tol if improving with Newton. X odetol = max(tol,1e-3*(newton)); X X % Set up data for the ode function. X global SCIMDATA X SCIMDATA = (wp - w0)/c; % adjusts "time" interval X SCIMDATA(1:n,2:3) = [z, beta]; X SCIMDATA(1,4) = n; X X z0 = [real(z0);imag(z0)]; X [t,y] = ode45('dimapf1',0,1,z0,odetol); X [m,leny] = size(y); X zp(:) = y(m,1:lenwp)+sqrt(-1)*y(m,lenwp+1:leny); X abszp = abs(zp); X out = abszp > 1; X zp(out) = zp(out)./abszp(out); Xend X X% Newton iterations Xif newton X if ~ode X zn = z0(:); X if length(z0)==1 & lenwp > 1 X zn = zn(:,ones(lenwp,1)); X end X else X zn = zp(:); X end X X wp = wp(:); X done = zeros(size(zn)); X k = 0; X while ~all(done) & k < maxiter X F = wp(~done) - dmap(zn(~done),w,beta,z,c,qdat); X m = length(F); X dF = c*exp(sum(beta(:,ones(m,1)).*... X log(1-(zn(~done,ones(n,1)).')./z(:,ones(m,1))))); X zn(~done) = zn(~done) + F(:)./dF(:); X done(~done) = (abs(F)< tol); X k = k+1; X end X if any(abs(F)> tol) X disp('Warning in dinvmap: Solution may be inaccurate') X fprintf('Maximum residual = %.3g\n',max(abs(F))) X end X zp(:) = zn; Xend; X X X X END_OF_FILE if test 3252 -ne `wc -c <'dinvmap.m'`; then echo shar: \"'dinvmap.m'\" unpacked with wrong size! fi chmod +x 'dinvmap.m' # end of 'dinvmap.m' fi if test -f 'disk2hp.m' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'disk2hp.m'\" else echo shar: Extracting \"'disk2hp.m'\" \(764 characters\) sed "s/^X//" >'disk2hp.m' <<'END_OF_FILE' Xfunction [x,a] = disk2hp(w,beta,z,c) X%DISK2HP Convert solution from the disk to one from the half-plane. X% [X,C] = DISK2HP(W,BETA,Z,C) quickly transforms the solution Z,C X% of the Schwarz-Christoffel disk mapping parameter problem to the X% solution X,C of the half-plane problem. X% X% See also HP2DISK, DPARAM, HPPARAM. X% X% Written by Toby Driscoll. Last updated 5/24/95. X Xn = length(w); Xx = zeros(size(z)); Xx(n) = Inf; Xx(1:n-1) = -i*(z(1:n-1)+1)./(z(1:n-1)-1); % Mobius transfmn Xx = real(x); % enforce exactly imag(x)==0 X X% Recalculate constant from scratch. Xmid = mean(x(1:2)); Xqdat = scqdata(beta(1:n-1),10); Xa = (w(1)-w(2))/(hpquad(x(2),mid,2,x(1:n-1),beta(1:n-1),qdat) - ... X hpquad(x(1),mid,1,x(1:n-1),beta(1:n-1),qdat)); X X END_OF_FILE if test 764 -ne `wc -c <'disk2hp.m'`; then echo shar: \"'disk2hp.m'\" unpacked with wrong size! fi chmod +x 'disk2hp.m' # end of 'disk2hp.m' fi if test -f 'dmap.m' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'dmap.m'\" else echo shar: Extracting \"'dmap.m'\" \(2284 characters\) sed "s/^X//" >'dmap.m' <<'END_OF_FILE' Xfunction wp = dmap(zp,w,beta,z,c,qdat) X%DMAP Schwarz-Christoffel disk map. X% DMAP(ZP,W,BETA,Z,C,QDAT) computes the values of the Schwarz- X% Christoffel disk map at the points in vector ZP. The arguments X% W, BETA, Z, C, and QDAT are as in DPARAM. DMAP returns a vector X% the same size as ZP. X% X% DMAP(ZP,W,BETA,Z,C,TOL) uses quadrature data intended to give an X% answer accurate to within roughly TOL. X% X% DMAP(ZP,W,BETA,Z,C) uses a tolerance of 1e-8. X% X% See also DPARAM, DPLOT, DINVMAP. X% X% Written by Toby Driscoll. Last updated 5/31/95. X Xn = length(z); Xw = w(:); Xbeta = beta(:); Xz = z(:); Xif nargin < 6 X qdat = scqdata(beta,8); Xelseif length(qdat)==1 X qdat = scqdata(beta,max(ceil(-log10(qdat)),8)); Xend Xwp = zeros(size(zp)); Xzp = zp(:); Xp = length(zp); X X% For each point in zp, find nearest prevertex. X[tmp,sing] = min(abs(zp(:,ones(n,1)).'-z(:,ones(1,p)))); Xsing = sing(:); % indices of prevertices Xatinf = find(isinf(w)); % infinite vertices Xatinf = atinf(:); Xninf = length(atinf); % # of inf vertices Xif ninf > 0 X % "Bad" points are closest to a prevertex of infinity. X bad = sing(:,ones(ninf,1))' == atinf(:,ones(1,p)); X % Can be closest to any pre-infinity. X if ninf > 1 X bad = any(bad); X end X % Exclude cases which are exactly those prevertices. X bad = bad(:) & (abs(zp-z(sing)) > 10*eps); X % Can't integrate starting at pre-infinity: find conformal center to use X % as integration basis. X if ~isinf(w(n-1)) X wc = w(n-1) + c*dquad(z(n-1),0,n-1,z,beta,qdat); X else X wc = w(n) + c*dquad(z(n),0,n,z,beta,qdat); X end Xelse X bad = zeros(p,1); % all clear X wc = []; % don't need it Xend X X% zs = the starting singularities X% A MATLAB technicality could cause a mistake if sing is all ones and same X% length as z, hence a workaround. Xzs = wp(:); Xzs(1:p+1) = z([sing;2]); Xzs = zs(1:p); X% ws = SCmap(zs) Xws = wp(:); Xws(1:p+1) = w([sing;2]); Xws = ws(1:p); X X% Compute the map directly at "normal" points. Xwp(~bad) = ws(~bad) + c*dquad(zs(~bad),zp(~bad),sing(~bad),z,beta,qdat); X% Compute map at "bad" points, using conformal center as basis, to avoid X% integration where right endpoint is too close to a singularity. Xwp(bad) = wc - c*dquad(zp(bad),zeros(sum(bad),1),zeros(sum(bad),1),... X z,beta,qdat); X X END_OF_FILE if test 2284 -ne `wc -c <'dmap.m'`; then echo shar: \"'dmap.m'\" unpacked with wrong size! fi chmod +x 'dmap.m' # end of 'dmap.m' fi if test -f 'dparam.m' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'dparam.m'\" else echo shar: Extracting \"'dparam.m'\" \(3278 characters\) sed "s/^X//" >'dparam.m' <<'END_OF_FILE' Xfunction [z,c,qdat] = dparam(w,beta,z0,options); X%DPARAM Schwarz-Christoffel disk parameter problem. X% [Z,C,QDAT] = DPARAM(W,BETA) solves the Schwarz-Christoffel X% mapping parameter problem with the disk as fundamental domain X% and the polygon specified by W as the target. W must be a X% vector of the vertices of the polygon, specified in X% counterclockwise order, and BETA should be a vector of the X% turning angles of the polygon; see SCANGLE for details. If X% successful, DPARAM will return Z, a vector of the pre-images of X% W; C, the multiplicative constant of the conformal map; and X% QDAT, a matrix of quadrature data used by some of the other X% S-C routines. X% X% [Z,C,QDAT] = DPARAM(W,BETA,Z0) uses Z0 as an initial guess for X% Z. X% X% [Z,C,QDAT] = DPARAM(W,BETA,Z0,OPTIONS) uses a vector of control X% parameters. See SCPARMOPT. X% X% See also SCPARMOPT, DRAWPOLY, DDISP, DPLOT, DMAP, DINVMAP. X% X% Written by Toby Driscoll. Last updated 5/26/95. X Xn = length(w); % no. of vertices Xw = w(:); Xbeta = beta(:); X X% Set up defaults for missing args Xif nargin < 4 X options = []; X if nargin < 3 X z0 = []; X end Xend X Xerr = sccheck('d',w,beta); Xif err==1 X fprintf('Use SCFIX to make polygon obey requirements\n') X error(' ') Xend X X[trace,tol] = scparmopt(options); Xnqpts = max(ceil(-log10(tol)),4); Xqdat = scqdata(beta,nqpts); % quadrature data X Xatinf = (beta <= -1); X Xif n==3 X % Trivial solution X z = [-i;(1-i)/sqrt(2);1]; X Xelse X X % Set up normalized lengths for nonlinear equations: X X % indices of left and right integration endpoints X left = 1:n-2; X right = 2:n-1; X % delete indices corresponding to vertices at Inf X left(find(atinf)) = []; X right(find(atinf) - 1) = []; X cmplx = ((right-left) == 2); X % normalize lengths by w(2)-w(1) X nmlen = (w(right)-w(left))/(w(2)-w(1)); X % abs value for finite ones; Re/Im for infinite ones X nmlen = [abs(nmlen(~cmplx));real(nmlen(cmplx));imag(nmlen(cmplx))]; X % first entry is useless (=1) X nmlen(1) = []; X X % Set up initial guess X if isempty(z0) X y0 = zeros(n-3,1); X else X z0 = z0(:)./abs(z0(:)); X % Moebius to make th(n-2:n)=[1,1.5,2]*pi; X Am = moebius(z0(n-2:n),[-1;-i;1]); X z0 = (Am(1)*z0+Am(2))./(Am(3)*z0+Am(4)); X th = angle(z0); X th(th<=0) = th(th<=0) + 2*pi; X dt = diff([0;th(1:n-2)]); X y0 = log(dt(1:n-3)./dt(2:n-2)); X end X X % Solve nonlinear system of equations: X X % package data X nrow = max([n,nqpts,4]); X ncol = 6+2*(n+1); X fdat = zeros(nrow,ncol); X fdat(1:4,1) = [n;length(left);nqpts;ncol]; X fdat(1:n,2) = beta; X fdat(1:n-3,3) = nmlen(:); X fdat(1:fdat(2,1),4:6) = [left(:),right(:),cmplx(:)]; X fdat(1:nqpts,7:ncol) = qdat; X % set options X opt = zeros(16,1); X opt(1) = 2*trace; X opt(6) = 100*(n-3); X opt(8) = tol; X opt(9) = tol/10; X opt(12) = nqpts; X [y,termcode] = nesolve('dpfun',y0,opt,fdat); X if termcode~=1 X disp('Warning: Nonlinear equations solver did not terminate normally') X end X X % Convert y values to z X cs = cumsum(cumprod([1;exp(-y)])); X theta = pi*cs(1:n-3)/cs(n-2); X z = ones(n,1); X z([1:n-3]) = exp(i*theta); X z(n-2:n-1) = [-1;-i]; Xend X X% Determine scaling constant Xmid = (z(1)+z(2))/2; Xc = (w(1) - w(2))/... X (dquad(z(2),mid,2,z,beta,qdat) - dquad(z(1),mid,1,z,beta,qdat)); X X END_OF_FILE if test 3278 -ne `wc -c <'dparam.m'`; then echo shar: \"'dparam.m'\" unpacked with wrong size! fi chmod +x 'dparam.m' # end of 'dparam.m' fi if test -f 'dpfun.m' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'dpfun.m'\" else echo shar: Extracting \"'dpfun.m'\" \(1424 characters\) sed "s/^X//" >'dpfun.m' <<'END_OF_FILE' Xfunction F = dpfun(y,fdat) X%DPFUN (not intended for calling directly by the user) X% Returns residual for solution of nonlinear equations. X% Used by DPARAM. X% X% Written by Toby Driscoll. Last updated 5/26/95. X Xn = fdat(1,1); Xbeta = fdat(1:n,2); Xnmlen = fdat(1:n-3,3); Xrows = 1:fdat(2,1); Xleft = fdat(rows,4); Xright = fdat(rows,5); Xcmplx = fdat(rows,6); Xqdat = fdat(1:fdat(3,1),7:fdat(4,1)); X X% Convert y values to z (prevertices) Xcs = cumsum(cumprod([1;exp(-y)])); Xtheta = pi*cs(1:n-3)/cs(length(cs)); Xz = ones(n,1); Xz(1:n-3) = exp(i*theta); Xz(n-2:n-1) = [-1;-i]; X X% Check crowding. Xif any(diff(theta)'dplot.m' <<'END_OF_FILE' Xfunction [H,R2,THETA] = dplot(w,beta,z,c,R,theta,options) X%DPLOT Image of polar grid under Schwarz-Christoffel disk map. X% DPLOT(W,BETA,Z,C) will adaptively plot the images under the X% Schwarz-Christoffel disk map of ten evenly spaced circles and X% rays in the unit disk. The arguments are as in DPARAM. X% X% DPLOT(W,BETA,Z,C,M,N) will plot images of M evenly spaced X% circles and N evenly spaced rays. X% X% DPLOT(W,BETA,Z,C,R,THETA) will plot images of circles whose X% radii are given in R and rays whose arguments are given in X% THETA. Either argument may be empty. X% X% DPLOT(W,BETA,Z,C,R,THETA,OPTIONS) allows customization of X% DPLOT's behavior. See SCPLOTOPT. X% X% H = DPLOT(W,BETA,Z,C,...) returns a vector of handles to all the X% curves drawn in the interior of the polygon. [H,R,THETA] = X% DPLOT(W,BETA,Z,C,...) also returns the moduli and arguments of X% the curves comprising the grid. X% X% See also SCPLOTOPT, DPARAM, DMAP, DDISP. X% X% Written by Toby Driscoll. Last updated 5/24/95. X Xw = w(:); Xbeta = beta(:); Xz = z(:); Xturn_off_hold = ~ishold; Xif nargin < 7 X options = []; X if nargin < 6 X theta = []; X if nargin < 5 X R = []; X end X end Xend X Xif isempty([R(:);theta(:)]) X R = 10; X theta = 10; Xend X Xif (length(R)==1) & (R == round(R)) X m = R+2; X R = linspace(0,1,m); X R([1,m]) = []; Xend Xif (length(theta)==1) & (theta == round(theta)) X m = theta+1; X theta = linspace(0,2*pi,m); X theta(m) = []; Xend X X[nqpts,maxturn,maxlen,maxrefn] = scplotopt(options); X Xfig = gcf; Xfigure(fig); Xplotpoly(w,beta); Xdrawnow Xhold on X Xn = length(w); Xwf = w(~isinf(w)); Xreflen = maxlen*max(abs(diff([wf;wf(1)]))); X Xqdat = scqdata(beta,nqpts); XRp0 = linspace(0,1,15)'; X Xfor j = 1:length(R) X tp = linspace(0,2*pi,16)'; X tp = [tp(length(tp)-1)-2*pi;tp]; X zp = R(j)*exp(i*tp); X wp = dmap(zp,w,beta,z,c,qdat); X bad = find(toobig(wp,maxturn,reflen,axis)); X iter = 0; X while (~isempty(bad)) & (iter < maxrefn) X lenwp = length(wp); X newt = [(tp(bad-1)+2*tp(bad))/3;(tp(bad+1)+2*tp(bad))/3]; X newz = R(j)*exp(i*newt); X neww = dmap(newz,w,beta,z,c,qdat); X [k,in] = sort([tp;newt]); X tp = [tp;newt]; wp = [wp;neww]; X tp = tp(in); wp = wp(in); X iter = iter + 1; X bad = find(toobig(wp,maxturn,reflen,axis)); X end X tp(tp<0) = tp(tp<0) + 2*pi; X [k,in] = sort(tp); X linh(j) = plot(clipdata(wp(in),axis), 'g-','erasemode','none'); X set(linh(j),'erasemode','normal'); X drawnow X Z(1:length(zp),j) = zp; X W(1:length(wp),j) = wp; Xend X Xfor j = 1:length(theta) X Rp = Rp0; X zp = Rp*exp(i*theta(j)); X wp = dmap(zp,w,beta,z,c,qdat); X bad = find(toobig(wp,maxturn,reflen,axis)); X iter = 0; X while (~isempty(bad)) & (iter < maxrefn) X lenwp = length(wp); X newR = [(Rp(bad-1)+2*Rp(bad))/3;(Rp(bad+1)+2*Rp(bad))/3]; X newz = newR*exp(i*theta(j)); X neww = dmap(newz,w,beta,z,c,qdat); X [k,in] = sort([Rp;newR]); X Rp = [Rp;newR]; wp = [wp;neww]; X Rp = Rp(in); wp = wp(in); X iter = iter + 1; X bad = find(toobig(wp,maxturn,reflen,axis)); X end X linh(j+length(R)) = plot(clipdata(wp,axis), 'g-','erasemode','none'); X drawnow X set(linh(j+length(R)),'erasemode','normal'); X Z(1:length(zp),j+length(R)) = zp; X W(1:length(wp),j+length(R)) = wp; Xend X X% Force redraw to get clipping enforced. Xset(fig,'color',get(fig,'color')) Xif turn_off_hold, hold off, end; Xif nargout > 0 X H = linh; X if nargout > 1 X R2 = R; X if nargout > 2 X THETA = theta; X end X end Xend X END_OF_FILE if test 3520 -ne `wc -c <'dplot.m'`; then echo shar: \"'dplot.m'\" unpacked with wrong size! fi chmod +x 'dplot.m' # end of 'dplot.m' fi if test -f 'dquad.m' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'dquad.m'\" else echo shar: Extracting \"'dquad.m'\" \(2276 characters\) sed "s/^X//" >'dquad.m' <<'END_OF_FILE' Xfunction I = dquad(z1,z2,sing1,z,beta,qdat) X%DQUAD (not intended for calling directly by the user) X% Numerical quadrature for the disk map. X X% z1,z2 are vectors of left and right endpoints. sing1 is a vector X% of integer indices which label the singularities in z1. So if X% sing1(5) = 3, then z1(5) = z(3). A zero means no singularity. X% z is the vector of singularities; beta is the vector of X% associated turning angles. qdat is quadrature data from SCQDATA. X% X% Make sure that z and beta are column vectors. X% X% DQUAD integrates from a possible singularity at the left end to a X% regular point at the right. If both endpoints are singularities, X% you must break the integral into two pieces and make two calls. X% X% The integral is subdivided, if necessary, so that no X% singularity lies closer to the left endpoint than 1/2 the X% length of the integration (sub)interval. X% X% Written by Toby Driscoll. Last updated 5/23/95. X Xnqpts = size(qdat,1); Xn = length(z); Xbigz = z(:,ones(1,nqpts)); Xbigbeta = beta(:,ones(1,nqpts)); Xif isempty(sing1) X sing1 = zeros(length(z1),1); Xend X XI = zeros(size(z1)); Xnontriv = find(z1(:)~=z2(:))'; X Xfor k = nontriv X za = z1(k); X zb = z2(k); X sng = sing1(k); X X % Allowable integration step, based on nearest singularity. X dist = min(1,2*min(abs(z([1:sng-1,sng+1:n])-za))/abs(zb-za)); X zr = za + dist*(zb-za); X % Adjust Gauss-Jacobi nodes and weights to interval. X ind = rem(sng+n,n+1)+1; X nd = ((zr-za)*qdat(:,ind) + zr + za)/2; % G-J nodes X wt = ((zr-za)/2) * qdat(:,ind+n+1); % G-J weights X terms = 1 - (nd(:,ones(n,1)).')./bigz; X if any(~diff(nd)) | any(any(~terms)) X % Endpoints are practically coincident. X I(k) = 0; X else X % Use Gauss-Jacobi on first subinterval, if necessary. X if sng > 0 X terms(sng,:) = terms(sng,:)./abs(terms(sng,:)); X wt = wt*(abs(zr-za)/2)^beta(sng); X end X I(k) = exp(sum(log(terms).*bigbeta))*wt; X while dist < 1 X % Do regular Gaussian quad on other subintervals. X zl = zr; X dist = min(1,2*min(abs(z-zl))/abs(zl-zb)); X zr = zl + dist*(zb-zl); X nd = ((zr-zl)*qdat(:,n+1) + zr + zl)/2; X wt = ((zr-zl)/2) * qdat(:,2*n+2); X I(k) = I(k) + exp(sum(log(1 - nd(:,ones(n,1)).'./bigz).*bigbeta)) * wt; X end X end Xend X END_OF_FILE if test 2276 -ne `wc -c <'dquad.m'`; then echo shar: \"'dquad.m'\" unpacked with wrong size! fi chmod +x 'dquad.m' # end of 'dquad.m' fi if test -f 'drawcb.m' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'drawcb.m'\" else echo shar: Extracting \"'drawcb.m'\" \(6598 characters\) sed "s/^X//" >'drawcb.m' <<'END_OF_FILE' Xfunction [x,y] = drawcb(event,cmd) X%DRAWCB (not intended for calling directly by the user) X% Callback for DRAWPOLY. X% X% Written by Toby Driscoll. Last updated 5/31/95. X Xglobal DRP_LINE DRP_PT DRP_AUX X X% DRP_LINE: The preview line. Also, its Userdata stores the points X% selected thus far. X X% DRP_PT: Selected point. The ButtonUpFcn sets this according to what it X% sees in the Userdata of DRP_LINE. X X% DRP_AUX: Parameters. X% 1: Drawing mode. X% 0=normal, 1=2nd point of Inf vertex, 2=after an Inf vertex X% 2,3: Grid spacing. If both zero, no grid; else x,y spacings. X% 4: Angle quantization. If zero, inactive; else fundamental angle. X% 5: Length quantization. If zero, inactive; else fundamental length. X Xif strcmp(event,'getpoint') % get a point from user X DRP_PT = []; X set(cmd,'windowbuttonmotionfcn','drawcb(''move'');'); X drawnow X while isempty(DRP_PT) % wait for point selection X drawnow X end; X x = DRP_PT(1); X y = DRP_PT(2); X Xelseif strcmp(event,'move') % mouse motion X ptrpos = get(gca,'currentpoint'); X P = ptrpos(1,1:2); X axlim = axis; X pts = get(DRP_LINE, 'userdata'); X [m,junk] = size(pts); X mode = DRP_AUX(1); X grid = DRP_AUX(2:3)'; X qang = DRP_AUX(4); X qlen = DRP_AUX(5); X X % Modify point to meet mode constraints. X if mode==0 % normal mode X % No constraints. X elseif mode==1 % infinite mode X % Point may not be inside axes box. X if all(P>axlim([1,3])) & all(P0) = ang(ang>0) - 2; X ang = sum(ang); X if ang > -1 X % Would be illegal. Project to make ang=-1. X A = pts(m-1,:); X B = pts(m-3,:) + A - pts(m-2,:); X P = A + ((B-A)*(P-A)')/((B-A)*(B-A)')*(B-A); X ang = -1; X qang = 0; % override other restrictions X grid = 0; X elseif ang < -3 X % It's illegal. Is it even possible? X P = [NaN,NaN]; X ang = NaN; X end X end X X % Modify point to meet angle, length, or grid constraints. X X if any(mode==[0,2]) & qang & (m > 2) % quantized angle X % Find arg of new side which meets quantization requirements. X if mode==0 X ang = scangle([pts(m-2:m-1,1);P(1)]+i*[pts(m-2:m-1,2);P(2)]); X ang = qang*round(ang(2)/qang); X theta = atan2(pts(m-1,2)-pts(m-2,2),pts(m-1,1)-pts(m-2,1))-pi*ang; X elseif mode==2 X % ang was computed above X ang = qang*round(ang/qang); X theta = atan2(pts(m-2,2)-pts(m-3,2),pts(m-2,1)-pts(m-3,1))-pi*ang; X end X % Project P to correct angle. X A = pts(m-1,:); X BA = [cos(theta),sin(theta)]; X P = A + ((BA)*(P-A)')*(BA); X grid = 0; X end X if (mode==0) & qlen & (m > 1) % quantized length X A = pts(m-1,:); X len = norm(P-A); X fixlen = qlen*(round(len/qlen)); X P = A + fixlen/len*(P-A); X grid = 0; X end X if any(mode==[0,1,2]) & all(grid) % snap to grid X minxy = axlim([1,3]); X P = minxy + grid.*(round((P-minxy)./grid)); X end X X % Update. X if m > 1 X if ~(mode==1) % preview line X set(DRP_LINE, 'xdata',[pts(m-1,1),P(1)], 'ydata',[pts(m-1,2),P(2)]); X end X set(DRP_LINE, 'userdata',[pts(1:m-1,:);P]); X else X set(DRP_LINE, 'userdata',P); X end X drawnow X Xelseif strcmp(event,'up') % mouse up X pts = get(DRP_LINE, 'userdata'); X m = size(pts,1); X if ~isnan(pts(m,1)) % valid point X set(gcf,'windowbuttonmotionfcn',''); X set(DRP_LINE,'xdata',[pts(m,1),NaN], 'ydata',[pts(m,2),NaN]) X set(DRP_LINE,'userdata',[pts;[NaN,NaN]]) X DRP_PT = pts(m,:); X end X Xelseif strcmp(event,'control') % ui control X axlim = axis; X data = get(DRP_LINE,'userdata'); X control = get(gca,'userdata'); X mode = DRP_AUX(1); X if strcmp(cmd,'g') % grid feature X if get(control(2),'value') % grid on X % Turn off quantizations, if now on. X if get(control(3),'value') X set(control(3),'value',0) X drawcb('control','a'); X end X if get(control(4),'value') X set(control(4),'value',0) X drawcb('control','l'); X end X % Get number of grid points. X N = round(get(control(5),'value')); X % Set up allowable x,y values. X x = linspace(axlim(1),axlim(2),N+1); X y = linspace(axlim(3),axlim(4),N+1); X set(gca,'xticklabelmode','auto') X set(gca,'yticklabelmode','auto') X set(gca,'xtick',x,'ytick',y) X % For clarity, keep only about eight of the labels. X keep = [1,3:ceil(N/8):N-1,N+1]; X xl = get(gca,'xticklabels'); X p = min(size(xl,2),4); X xlnew = setstr(ones(N+1,1)*blanks(p)); X xlnew(keep,:) = xl(keep,1:p); X yl = get(gca,'yticklabels'); X p = min(size(yl,2),4); X ylnew = setstr(ones(N+1,1)*blanks(p)); X ylnew(keep,:) = yl(keep,1:p); X % Make it so. X set(gca,'xticklabels',xlnew,'xgrid','on',... X 'yticklabels',ylnew,'ygrid','on') X drawnow X DRP_AUX(2:3) = [x(2)-x(1),y(2)-y(1)]; X else % grid off X set(gca,'xtickmode','auto','xticklabelmode','auto','xgrid','off') X set(gca,'ytickmode','auto','yticklabelmode','auto','ygrid','off') X drawnow X DRP_AUX(2:3) = [0,0]; X end X elseif strcmp(cmd,'a') % quantize angle X DRP_AUX(4) = get(control(3),'value')/round(get(control(6),'value')); X % Turn off grid, if now on. X if get(control(2),'value') & get(control(3),'value') X set(control(2),'value',0) X drawcb('control','g'); X end X elseif strcmp(cmd,'l') % quantize length X pct = 1/round(get(control(7),'value')); X DRP_AUX(5) = get(control(4),'value')*pct*(axlim(2)-axlim(1)); X % Turn off grid, if now on. X if get(control(2),'value') & get(control(4),'value') X set(control(2),'value',0) X drawcb('control','g'); X end X elseif strcmp(cmd,'sg') X set(control(8),'string',sprintf('1/%i',round(get(control(5),'value')))); X drawcb('control','g'); X elseif strcmp(cmd,'sa') X set(control(9),'string',sprintf('pi/%i',round(get(control(6),'value')))); X drawcb('control','a'); X elseif strcmp(cmd,'sl') X set(control(10),'string',sprintf('1/%i',round(get(control(7),'value')))); X drawcb('control','l'); X end X % Call move so new restrictions take effect immediately. X if ~strcmp(cmd(1),'s') X drawcb('move'); X end X Xelseif strcmp(event,'key') % key pressed X cmd = lower(get(gcf,'currentchar')); X drawcb('control',cmd); X Xend X X X END_OF_FILE if test 6598 -ne `wc -c <'drawcb.m'`; then echo shar: \"'drawcb.m'\" unpacked with wrong size! fi chmod +x 'drawcb.m' # end of 'drawcb.m' fi if test -f 'drawpoly.m' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'drawpoly.m'\" else echo shar: Extracting \"'drawpoly.m'\" \(6301 characters\) sed "s/^X//" >'drawpoly.m' <<'END_OF_FILE' Xfunction [w,beta,handles] = drawpoly(fig,axlim) X%DRAWPOLY Draw a polygon with the mouse. X% [W,BETA] = DRAWPOLY allows the user to draw a polygon with the X% mouse. Use the mouse to position the crosshair and press the X% left mouse button to create a vertex. For use with other S-C X% Toolbox functions, the vertices must be specified in a X% "positively oriented" manner; i.e. counterclockwise for X% interior polygons and clockwise for exterior regions. There are X% several GUI elements added to the figure to help you snap X% vertices to a grid, get specfic angles, etc. For the last X% vertex, use the middle or right mouse button, or double click. X% Upon return, W is a vector of complex vertices and BETA is a X% vector of turning angles. X% X% [W,BETA] = DRAWPOLY(FIG) draws in figure FIG. [W,BETA] = X% DRAWPOLY(FIG,AXLIM) also uses AXLIM for the axes limits. X% X% [W,BETA,H] = DRAWPOLY also returns a vector of handles to the X% plotted edges. X% X% See the user's guide for full details. X% X% See also PLOTPOLY, MODPOLY, SCGUI. X% X% Written by Toby Driscoll. Last updated 5/24/95. X Xif nargin < 2 X axlim = [-4,4,-4,4]; X if nargin < 1 X fig = gcf; X end Xend X Xfigure(fig); X X% See DRAWCB for documentation of globals. Xglobal DRP_LINE DRP_PT DRP_AUX X X% Set up figure, axes, etc. Xif ~ishold, cla, end Xview(2) Xoldbuf = get(fig,'windowbuttonupfcn'); Xoldbdf = get(fig,'windowbuttondownfcn'); Xset(gca,'xlim',axlim(1:2),'ylim',axlim(3:4),'aspect',[1,NaN],'box','on') Xhold on Xptr = get(fig, 'pointer'); Xset(fig, 'pointer','crosshair'); XDRP_LINE = line(NaN,NaN,'linestyle','--','erasemode','xor',... X 'clipping','off'); X X% Set up check boxes. Xoldun = get(fig,'units'); Xset(fig,'units','centi'); Xfigpos = get(fig,'position'); Xset(gca,'units','centi') Xaxpos = get(gca,'pos'); Xset(gca,'pos',[axpos(1),axpos(2)+1.8,axpos(3:4)]) Xset(fig,'pos',[figpos(1),figpos(2)-1.8,figpos(3),figpos(4)+1.8]) Xcontrol(1) = uicontrol('style','frame','units','centi',... X 'pos',[0,0,figpos(3),1.8]); Xset(control(1),'units','norm') Xoffset = max(0,(figpos(3)-11.6)/2); Xcontrol(2) = uicontrol('style','check','string','Snap to grid ',... X 'units','centi','pos',[offset .8 3.7 .8]); Xset(control(2),'units','norm','call','drawcb(''control'',''g'');') Xcontrol(3) = uicontrol('style','check','string','Quantize angle',... X 'units','centi','pos',[offset+3.95 .8 3.7 .8]); Xset(control(3),'units','norm','call','drawcb(''control'',''a'');') Xcontrol(4) = uicontrol('style','check','string','Quantize length',... X 'units','centi','pos',[offset+7.9 .8 3.7 .8]); Xset(control(4),'units','norm','call','drawcb(''control'',''l'');') X% Create sliders. Xcontrol(5) = uicontrol('style','slider','min',4,'max',32,... X 'value',16,'units','cent','pos',[offset+.45 .2 1.75 .4]); Xset(control(5),'units','norm','call','drawcb(''control'',''sg'');') Xcontrol(6) = uicontrol('style','slider','min',2,'max',24,... X 'value',12,'units','cent','pos',[offset+4.4 .2 1.75 .4]); Xset(control(6),'units','norm','call','drawcb(''control'',''sa'');') Xcontrol(7) = uicontrol('style','slider','min',3,'max',20,... X 'value',8,'units','cent','pos',[offset+8.35 .2 1.75 .4]); Xset(control(7),'units','norm','call','drawcb(''control'',''sl'');') X% Text to accompany sliders. Xcontrol(8) = uicontrol('style','text','string','1/16',... X 'units','cent','pos',[offset+2.5 .2 1 .4]); Xset(control(8),'units','norm') Xcontrol(9) = uicontrol('style','text','string','pi/12',... X 'units','cent','pos',[offset+6.3 .2 1 .4]); Xset(control(9),'units','norm') Xcontrol(10) = uicontrol('style','text','string','1/8',... X 'units','cent','pos',[offset+10.15 .2 1 .4]); Xset(control(10),'units','norm') Xset(gca,'userdata',control) Xdrawnow X X% Preparation. XDRP_AUX = zeros(5,1); Xset(DRP_LINE, 'userdata',[NaN,NaN]); Xif ~strcmp(computer,'SUN4') X % Kludge. Draw preview line when button is pressed. X set(fig,'windowbuttondownfcn','drawcb(''move'');'); Xend Xset(fig,'windowbuttonupfcn', 'drawcb(''up'');'); X%%set(fig,'keypressfcn','drawcb(''key'');'); Xdrawnow X X% Get first vertex. X[x,y] = drawcb('getpoint',fig); Xw = x+i*y; Xvertices = plot(x,y,'.', 'markersize',12); Xset(DRP_LINE,'xdata',[x NaN], 'ydata',[y,NaN]); Xdrawnow Xbutton = 1; Xn = 1; X X% Get rest of vertices. XDRP_PT = []; % no point selected Xmode = 0; % "normal" mode Xwhile button==1 % until last was selected X DRP_AUX(1) = mode; X n = n + 1; X [x0,y0] = drawcb('getpoint',fig); X m = length(x); X x = [x;x0]; y = [y;y0]; X edges(n-1) = plot(x(m:m+1),y(m:m+1),'-'); X set(vertices, 'xdata',x, 'ydata',y); X drawnow X if x0>=axlim(1) & x0<=axlim(2) & y0>=axlim(3) & y0<=axlim(4) X % Finite vertex. X w(n) = x0+i*y0; X mode = 0; X else % infinite vertex X % Get re-entry point for next edge. X DRP_AUX(1) = 1; % "inf" mode X set(fig,'pointer','cross') X [x0,y0] = drawcb('getpoint',fig); X set(fig,'pointer','crosshair') X x = [x;x0]; y = [y;y0]; X w(n) = Inf; X mode = 2; % "post-inf" mode X end % if vertex is infinite X if n > 2 % angle at previous vertex X if ~isinf(w(n-1)) X ang = scangle(x(m-1:m+1)+i*y(m-1:m+1)); X beta(n-1) = ang(2); X else X ang = scangle(x(m-2:m+1)+i*y(m-2:m+1)); X ang = ang(2:3); X ang(ang>0) = ang(ang>0) - 2; X beta(n-1) = sum(ang); X end X end % if n > 2 X % What kind of button press? X if strcmp(get(fig,'selectiontype'),'normal') X button = 1; X else X button = 2; X end Xend % while button==1 X Xm = length(x); Xedges(n) = plot(x([m,1]),y([m,1]),'-'); Xdrawnow X% Angle at vertex n. Xif ~isinf(w(n)) X ang = scangle(x([m-1:m,1])+i*y([m-1:m,1])); X beta(n) = ang(2); Xelse X ang = scangle(x([m-2:m,1])+i*y([m-2:m,1])); X ang = ang(2:3); X ang(ang>0) = ang(ang>0) - 2; X beta(n) = sum(ang); Xend X X% Angle at first vertex (necessarily finite). Xang = scangle(x([m,1:2])+i*y([m,1:2])); Xbeta(1) = ang(2); X X% Prepare outputs. Xw = w(:); Xbeta = beta(:); X X% Clean up the mess. Xset(fig, 'pointer',ptr, 'windowbuttonupfcn',oldbuf,... X 'windowbuttondownfcn',oldbdf,... X 'windowbuttonmotionfcn', '',... X 'pos',figpos,'units',oldun); Xset(gca,'pos',axpos,'units','norm') Xfor j = 1:length(control) X delete(control(j)) Xend Xdelete(DRP_LINE) Xclear DRP_LINE DRP_PT DRP_AUX X Xhold off Xaxis auto Xhandles = plotpoly(w,beta); X END_OF_FILE if test 6301 -ne `wc -c <'drawpoly.m'`; then echo shar: \"'drawpoly.m'\" unpacked with wrong size! fi chmod +x 'drawpoly.m' # end of 'drawpoly.m' fi if test -f 'elongdemo.m' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'elongdemo.m'\" else echo shar: Extracting \"'elongdemo.m'\" \(4292 characters\) sed "s/^X//" >'elongdemo.m' <<'END_OF_FILE' Xmore off Xecho on Xclc X% This script demonstrates mapping to elongated polygons with the X% Schwarz-Christoffel Toolbox. X Xpause % Strike any key to begin (Ctrl-C to abort) X X X% We begin with a demonstration of "crowding." X Xpause % Strike any key to continue X X% Here is a moderately elongated region. Xw = [3+2.4i; .6-.4i; -1-.4i; -3+2i; -3-2i; -1-.8i; .6-.8i; 3-2i]; Xbeta = scangle(w); X Xfigure(gcf) Xhold off Xplotpoly(w,beta) X Xpause % Strike any key to continue X X% Solve the parameter problem for the half-plane. X[x,c] = hpparam(w,beta); X Xpause % Strike any key to display results X Xhpdisp(w,beta,x,c) X Xpause % Strike any key to continue X X% Notice how close together four of the prevertices are. X% Although we estimate an aspect ratio of 6/.4 = 15, the X% prevertices differ by about 1e-7, or roughly exp(-15). X% The exponential proximity of the prevertices is commonly X% known as the crowding phenomenon. The phenomenon occurs X% for the disk as well as the half-plane (and for exterior X% maps, when the exterior region is elongated). X Xpause % Strike any key to continue Xclc X% If the polygon above had been much more elongated, the X% prevertices would have been indistinguishable in double X% precision. Even before this point, the solution of the X% parameter problem can become extremely difficult. X X% While sometimes an elongated polygon can be subdivided X% and then mapped, a more elegant solution is to use a more X% appropriate fundamental domain. In the important case of X% a region which is elongated in only one direction, a natural X% choice is a rectangle. X Xpause % Strike any key to continue Xclc X% Let's map the same polygon to a rectangle. The corners of X% the rectangle should map to the outermost vertices of the X% polygon. X X[z,c,L]=rparam(w,beta,[1,4,5,8]); X Xrdisp(w,beta,z,c,L) X Xpause % Strike any key to continue X X% The corners of the rectangle are found to be about +-pi/2 X% and +-pi/2 + 23i. The conformal modulus of the polygon, X% which is the aspect ratio of the rectangle, is determined X% (as part of the solution) to be about 7.3. X Xpause % Strike any key to continue X X% Here's a plot of the images of 6 vertical and 12 horizontal X% lines. X Xrplot(w,beta,z,c,L,6,12) X Xpause % Strike any key to continue Xclc X% Here's another example of a rectangle map. The solution is X% given, just to save time. Xw = [-3 + 1.5i;-2 + 1.5i;1.5 + 1.5i;1.5 + 0.5i;-2 + 0.5i;-2 - 2i; X 3 - 2i;3 - 1i;-1.5 - 1i;-1.5;2;2 + 2.5i;-3 + 2.5i]; X Xbeta = scangle(w); X Xz = [ X -0.75095889852766 X 1.57079632679490 X 1.57079632679490+13.62792581256858i X 1.57079632679490+21.47908439726175i X 1.57079632679490+42.08393917979348i X 1.57079632679490+51.32236373477432i X 1.57079632679490+65.40343136968455i X -1.57079632679490+65.40343136968455i X -1.57079632679490+49.93558255696847i X -1.57079632679490+42.08442599909570i X -1.57079632679490+21.47957121760661i X -1.57079632679490+12.24115478564419i X -1.57079632679490 ]; X Xc = 1.549060450542251e+13 + 1.549060450542251e+13i; X XL = 20.37728759500835; X X% In the plot, notice how one rectangle corner is mapped to a X% trivial vertex---one located in the middle of a side. X Xpause % Strike any key for plot X Xrplot(w,beta,z,c,L,6,12) X Xpause % Strike any key to continue Xclc X% Another choice for the fundamental domain for an elongated X% polygon is the strip 0 <= Im z <= 1. This is especially X% appropriate when the target region is a polygonal channel, X% such as you might encounter in a fluids problem. X Xpause % Strike any key to continue X X% Here's a simple example: X Xw = [-2-i; -2-2i; -2i; 2-i; Inf; 2.5; Inf]; Xbeta = [.5; -.5; -atan(1/2)/pi; atan(1/2)/pi; -1.2; .2; -1]; Xplotpoly(w,beta) X Xpause % Strike any key to solve the parameter problem X X[z,c] = stparam(w,beta,[7,5]); X Xpause % Strike any key to see results X Xstdisp(w,beta,z,c) X Xstplot(w,beta,z,c) X Xpause % Strike any key to continue Xclc X% We close with another strip map. This time, one end of the X% strip will map to a finite vertex. The result is as if a X% sink or source were placed at this vertex. X Xw = [3-.5i; 2+1.5i; .5+.5i; -1+.5i; Inf; -1; .5; 2-1.5i]; Xbeta = scangle(w); Xbeta(4:6) = [.2;-1.4;.2]; X X[z,c] = stparam(w,beta,[5,1]); Xstplot(w,beta,z,c,12,8) X Xecho off % End of demo X END_OF_FILE if test 4292 -ne `wc -c <'elongdemo.m'`; then echo shar: \"'elongdemo.m'\" unpacked with wrong size! fi chmod +x 'elongdemo.m' # end of 'elongdemo.m' fi if test -f 'faber.m' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'faber.m'\" else echo shar: Extracting \"'faber.m'\" \(1836 characters\) sed "s/^X//" >'faber.m' <<'END_OF_FILE' Xfunction F = faber(m,w,beta,z,c) X%FABER Faber polynomial coefficients for polygonal regions. X% FABER(M,W,BETA,Z,C) returns the coefficients of Faber X% polynomials of degree <= M for the polygonal region described by X% W and BETA. A call to DEPARAM must be made first to obtain the X% values of Z and C for the Schwarz-Christoffel exterior map. X% FABER will return an upper triangular square matrix P of size X% M+1 such that P(1:k,k) is the vector of coefficients for the X% Faber polynomial of degree k-1. Note that the leading (highest X% degree) coefficient is always first. X% X% See also DEPARAM, FABERDEMO. X% X% Written by Toby Driscoll. Last updated 5/24/95. X X% This function follows somewhat closely the procedure outlined in X% section 4 of Starke and Varga (Num. Math., 1993), except that no X% symmetry of the polygon is assumed. X Xif nargin < 6 X qdat = scqdata(beta,8); Xend Xn = length(w); Xgam = ones(n,m+1); % coeffs of binomial expansion XZ = ones(n,m-1); % powers of the z(j) Xfor k = 1:m X gam(:,k+1) = -gam(:,k).*(beta-k+1)./(k*z); X if k < m X Z(:,k) = z.^k; X end Xend X X% Compute the coeffs of the Laurent expansion of Psi Xe1 = zeros(m+1,1); Xe1(1) = 1; XC = -c*e1; Xfor j = 1:n X C = toeplitz(gam(j,:).', e1')*C; Xend XC = C(3:m+1)./(-(1:m-1)'); X%c0 = (sum(w) + c*sum(1./z) - sum(Z)*C)/n; Xx0 = 10^(-10/m); Xc0 = demap(x0,w,beta,z,c,qdat) + c/x0 - x0.^(1:m-1)*C; XC = [c0;C]; X X% Use the Faber recurrence to compute polynomial coeffs XP = zeros(m+1,m+1); XP(1,1) = 1; % poly coeffs, low order first XF = P; % high order first (MATLAB style) Xfor k = 1:m X P(1:k+1,k+1) = ([0;P(1:k,k)] - P(1:k+1,1:k)*[k*C(k);C(k-1:-1:1)])/(-c); X F(1:k+1,k+1) = flipud(P(1:k+1,k+1)); Xend X X% Normalize so that leading coefficients are real XF = F*diag(exp(-i*angle(F(1,:)))); X END_OF_FILE if test 1836 -ne `wc -c <'faber.m'`; then echo shar: \"'faber.m'\" unpacked with wrong size! fi chmod +x 'faber.m' # end of 'faber.m' fi if test -f 'faberdemo.m' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'faberdemo.m'\" else echo shar: Extracting \"'faberdemo.m'\" \(2136 characters\) sed "s/^X//" >'faberdemo.m' <<'END_OF_FILE' Xmore off Xecho on Xclc X% This script demonstrates Faber polynomials. X X% Faber polynomials are defined via a conformal map f from the X% simply connected exterior of a bounded region to the exterior X% of the unit disk, fixing the point at infinity. The nth Faber X% polynomial is the polynomial part of the Laurent expansion of f^n X% at infinity. The Faber polynomials reduce to Chebyshev polynomials X% when the region is an interval and Taylor polynomials when it is a X% disk. If the region is bounded by a polygon, the Schwarz-Christoffel X% exterior map can be used to compute Faber polynomial coefficients. X X% If you are using MATLAB for MS Windows, be sure you have selected the X% "Enable background process" item on the "Options" menu before proceeding. X Xpause % Strike any key to begin (Ctrl-C to abort) Xfigure(gcf) Xhold off Xclc X% Use the mouse to draw a polygon. Be sure to put vertices in X% clockwise order, and use only finite vertices. X X[w,beta] = drawpoly; X Xhold on Xaxis(axis) X Xpause % Strike any key to compute Faber polynomial coefficients X X[z,c] = deparam(w,beta); X XF = faber(20,w,beta,z,c); X Xpause % Strike any key to continue X X X% Because the Faber polynomials approximate a function having unit X% modulus on the polygon, the lemniscates {z: |p(z)|=1} for Faber X% polynomials p will approximate the polygon. X Xlim = axis; X[X,Y] = meshgrid(linspace(lim(1),lim(2),40),linspace(lim(3),lim(4),40)); Xh = line(NaN,NaN); Xfor m = 4:4:16 X delete(h) X Z = abs(polyval(F(1:m+1,m+1),X+i*Y)); X [con,h] = contour(X,Y,Z,[1,NaN],'c'); X title(['degree of Faber polynomial = ',int2str(m)]) X disp(' ') X disp([blanks(m/4),' Strike any key to continue']) X pause Xend X X X% Another way to see this is to look at |p(z)| for z on the polygon. X% Here we choose Fejer points (images of roots of unity) for z. X Xzp = demap(exp(i*linspace(0,2*pi,100)),w,beta,z,c); X Xhold off Xfor m = 4:4:16 X plot(1:100,abs(polyval(F(1:m+1,m+1),zp))); X title(['degree of Faber polynomial = ',int2str(m)]) X disp(' ') X disp([blanks(m/4),' Strike any key to continue']) X pause Xend X Xecho off % End of demo Xtitle(' ') Xhold off X X END_OF_FILE if test 2136 -ne `wc -c <'faberdemo.m'`; then echo shar: \"'faberdemo.m'\" unpacked with wrong size! fi chmod +x 'faberdemo.m' # end of 'faberdemo.m' fi if test -f 'gaussj.m' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'gaussj.m'\" else echo shar: Extracting \"'gaussj.m'\" \(1260 characters\) sed "s/^X//" >'gaussj.m' <<'END_OF_FILE' Xfunction [z,w] = gaussj(n,alf,bet); X%GAUSSJ Nodes and weights for Gauss-Jacobi integration. X% [X,W] = GAUSSJ(N,ALF,BET) returns nodes and weights for X% Gauss-Jacobi integration. Z and W are N-vectors such that X% X% / +1 X% | ALF BET X% | f(x) (1-x) (1+x) dx X% | X% / X% - -1 X% X% is approximated by sum(f(Z) .* W). X% X% Written by Toby Driscoll. Last updated 5/23/95. X X% Uses the Lanczos iteration connection to orthogonal polynomials. X% Borrows heavily from GAUSSJ out of SCPACK Fortran. X X% Calculate coeffs a,b of Lanczos recurrence relation (closed form is X% known). Break out n=1 specially to avoid possible divide by zero. Xapb = alf+bet; Xa(1) = (bet-alf)/(apb+2); Xb(1) = sqrt(4*(1+alf)*(1+bet) / ((apb+3)*(apb+2)^2)); XN = 2:n; Xa(N) = (apb)*(bet-alf) ./ ((apb+2*N).*(apb+2*N-2)); XN = 2:(n-1); Xb(N) = sqrt(4*N.*(N+alf).*(N+bet).*(N+apb) ./ ... X (((apb+2*N).^2-1).*(apb+2*N).^2)); X X% Find eigvals/eigvecs of tridiag "Ritz" matrix X[V,D] = eig(diag(a) + diag(b,1) + diag(b,-1)); X X% Compute normalization (integral of w(x)) Xc = 2^(apb+1)*gamma(alf+1)*gamma(bet+1)/gamma(apb+2); X X% return the values Xz = diag(D); Xw = c*(V(1,:)').^2; X[z,ind] = sort(z); Xw = w(ind); X END_OF_FILE if test 1260 -ne `wc -c <'gaussj.m'`; then echo shar: \"'gaussj.m'\" unpacked with wrong size! fi chmod +x 'gaussj.m' # end of 'gaussj.m' fi if test -f 'hp2disk.m' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'hp2disk.m'\" else echo shar: Extracting \"'hp2disk.m'\" \(741 characters\) sed "s/^X//" >'hp2disk.m' <<'END_OF_FILE' Xfunction [z,c] = hp2disk(w,beta,x,a) X%HP2DISK Convert solution from the half-plane to one from the disk. X% [Z,C] = HP2DISK(W,BETA,X,C) quickly transforms the solution X,C X% of the Schwarz-Christoffel half-plane mapping parameter problem X% to the solution Z,C of the disk problem. X% X% See also DISK2HP, HPPARAM, DPARAM. X% X% Written by Toby Driscoll. Last updated 5/24/95. X Xn = length(w); Xz = zeros(size(x)); Xif isinf(x(n)) X z(n) = 1; X z(1:n-1) = (x(1:n-1)-i)./(x(1:n-1)+i); Xelse X z = (x-i)./(x+i); X z = z/z(n); Xend Xz = z./abs(z); % enforce exactly abs(z)==1 X X% Recalculate constant from scratch. Xmid = (z(1)+z(2))/2; Xqdat = scqdata(beta,10); Xc = (w(1) - w(2))/... X (dquad(z(2),mid,2,z,beta,qdat) - dquad(z(1),mid,1,z,beta,qdat)); X END_OF_FILE if test 741 -ne `wc -c <'hp2disk.m'`; then echo shar: \"'hp2disk.m'\" unpacked with wrong size! fi chmod +x 'hp2disk.m' # end of 'hp2disk.m' fi if test -f 'hpderiv.m' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'hpderiv.m'\" else echo shar: Extracting \"'hpderiv.m'\" \(606 characters\) sed "s/^X//" >'hpderiv.m' <<'END_OF_FILE' Xfunction fprime = hpderiv(zp,x,beta) X%HPDERIV Derivative of the half-plane map. X% HPDERIV(ZP,X,BETA) returns the derivative at the points of ZP of X% the Schwarz-Christoffel half-plane map whose prevertices are X and X% whose turning angles are BETA. X% X% Don't forget the multiplicative constant in the SC map! X% X% See also HPPARAM, HPMAP. X% X% Written by Toby Driscoll. Last updated 5/24/95. X Xx = x(:); Xbeta = beta(:); Xzprow = zp(:).'; Xfprime = zeros(size(zp)); Xnpts = length(zp(:)); Xterms = zprow(ones(length(beta),1),:) - x(:,ones(npts,1)); Xfprime(:) = exp(sum(log(terms).*beta(:,ones(npts,1)))); END_OF_FILE if test 606 -ne `wc -c <'hpderiv.m'`; then echo shar: \"'hpderiv.m'\" unpacked with wrong size! fi chmod +x 'hpderiv.m' # end of 'hpderiv.m' fi if test -f 'hpdisp.m' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'hpdisp.m'\" else echo shar: Extracting \"'hpdisp.m'\" \(784 characters\) sed "s/^X//" >'hpdisp.m' <<'END_OF_FILE' Xfunction hpdisp(w,beta,x,c) X%HPDISP Display results of Schwarz-Christoffel half-plane parameter problem. X% HPDISP(W,BETA,X,C) displays the results of HPPARAM in a pleasant X% way. X% X% See also HPPARAM, HPPLOT. X% X% Written by Toby Driscoll. Last updated 5/24/95. X Xif length(x) < length(w) X x = [x(:);Inf]; Xend Xdisp(' ') Xdisp(' w beta x ') Xdisp(' --------------------------------------------------------') Xu = real(w); Xv = imag(w); Xfor j = 1:length(w) X if v(j) < 0 X s = '-'; X else X s = '+'; X end X disp(sprintf(' %8.5f %c %7.5fi %8.5f %20.12e',... X u(j),s,abs(v(j)),beta(j),x(j))); Xend Xdisp(' ') Xif imag(c) < 0 X s = '-'; Xelse X s = '+'; Xend Xdisp(sprintf(' c = %.8g %c %.8gi',real(c),s,abs(imag(c)))) X END_OF_FILE if test 784 -ne `wc -c <'hpdisp.m'`; then echo shar: \"'hpdisp.m'\" unpacked with wrong size! fi chmod +x 'hpdisp.m' # end of 'hpdisp.m' fi if test -f 'hpimapf1.m' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'hpimapf1.m'\" else echo shar: Extracting \"'hpimapf1.m'\" \(459 characters\) sed "s/^X//" >'hpimapf1.m' <<'END_OF_FILE' Xfunction zdot = imapf1(wp,yp); X%HPIMAPF1 (not intended for calling directly by the user) X% Used by HPINVMAP for solution of an ODE. X Xglobal HPIMDATA X Xlenyp = length(yp); Xlenzp = lenyp/2; Xzp = yp(1:lenzp)+sqrt(-1)*yp(lenzp+1:lenyp); Xlenx = HPIMDATA(1,4); Xbigx = HPIMDATA(1:lenx,2)*ones(1,lenyp/2); Xbigbeta = HPIMDATA(1:lenx,3)*ones(1,lenyp/2); X Xf = HPIMDATA(1:lenzp,1).*exp(sum(log(ones(lenx,1)*zp.' - bigx).*... X (-bigbeta))).'; Xzdot = [real(f);imag(f)]; END_OF_FILE if test 459 -ne `wc -c <'hpimapf1.m'`; then echo shar: \"'hpimapf1.m'\" unpacked with wrong size! fi chmod +x 'hpimapf1.m' # end of 'hpimapf1.m' fi if test -f 'hpinvmap.m' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'hpinvmap.m'\" else echo shar: Extracting \"'hpinvmap.m'\" \(3269 characters\) sed "s/^X//" >'hpinvmap.m' <<'END_OF_FILE' Xfunction zp = hpinvmap(wp,w,beta,x,c,qdat,z0,options) X%HPINVMAP Schwarz-Christoffel half-plane inverse map. X% HPINVMAP(WP,W,BETA,X,C,QDAT) computes the inverse of the X% Schwarz-Christoffel half-plane map (i.e., from the polygon X% to the upper half-plane ) at the points given in vector WP. The X% other arguments are as in HPPARAM. QDAT may be omitted. X% X% The default algorithm is to solve an ODE in order to obtain a fair X% approximation for ZP, and then improve ZP with Newton iterations. X% The ODE solution at WP requires a vector Z0 whose forward image W0 X% is such that for each j, the line segment connecting WP(j) and W0(j) X% lies inside the polygon. By default Z0 is chosen by a fairly robust X% automatic process. Using a parameter (see below), you can choose to X% use either an ODE solution or Newton iterations exclusively. X% X% HPINVMAP(WP,W,BETA,X,C,QDAT,Z0) has two interpretations. If the ODE X% solution is being used, Z0 overrides the automatic selection of X% initial points. (This can be handy in convex polygons, where the X% choice of Z0 is trivial.) Otherwise, Z0 is taken as an initial X% guess to ZP. In either case, if length(Z0)==1, the value Z0 is used X% for all elements of WP; otherwise, length(Z0) should equal X% length(WP). X% X% HPINVMAP(WP,W,BETA,X,C,QDAT,Z0,OPTIONS) uses a vector of parameters X% that control the algorithm. See SCIMAPOPT. X% X% See also SCIMAPOPT, HPPARAM, HPMAP. X% X% Written by Toby Driscoll. Last updated 5/24/95. X Xn = length(w); Xw = w(:); Xbeta = beta(:); Xx = x(:); Xzp = zeros(size(wp)); Xwp = wp(:); Xlenwp = length(wp); X Xif nargin < 8 X options = []; X if nargin < 7 X z0 = []; X if nargin < 6 X qdat = []; X end X end Xend X X[ode,newton,tol,maxiter] = scimapopt(options); X Xnfin = n - isinf(x(n)); Xif isempty(qdat) X qdat = scqdata(beta(1:nfin),max(ceil(-log10(tol)),2)); Xend X X% ODE Xif ode X if isempty(z0) X % Pick a value z0 (not a singularity) and compute the map there. X [z0,w0] = scimapz0('hp',wp,w,beta,x,c,qdat); X else X w0 = hpmap(z0,w,beta,x,c,qdat); X if length(z0)==1 & lenwp > 1 X z0 = z0(:,ones(lenwp,1)).'; X w0 = w0(:,ones(lenwp,1)).'; X end X end X X % Use relaxed ODE tol if improving with Newton. X odetol = max(tol,1e-3*(newton)); X X % Set up data for the ode function. X global HPIMDATA X HPIMDATA = (wp - w0(:))/c; % adjusts "time" interval X HPIMDATA(1:nfin,2:3) = [x(1:nfin), beta(1:nfin)]; X HPIMDATA(1,4) = nfin; X X z0 = [real(z0);imag(z0)]; X [t,y] = ode45('hpimapf1',0,1,z0,odetol); X [m,leny] = size(y); X zp(:) = y(m,1:lenwp)+sqrt(-1)*y(m,lenwp+1:leny); Xend X X% Newton iterations Xif newton X if ~ode X zn = z0(:); X if length(z0)==1 & lenwp > 1 X zn = zn(:,ones(lenwp,1)); X end X else X zn = zp(:); X end X X wp = wp(:); X done = zeros(size(zn)); X k = 0; X while ~all(done) & k < maxiter X F = wp(~done) - hpmap(zn(~done),w,beta,x,c,qdat); X m = length(F); X dF = c*exp(sum(beta(1:nfin,ones(m,1)).*... X log(zn(~done,ones(nfin,1)).'-x(1:nfin,ones(m,1))))); X zn(~done) = zn(~done) + F(:)./dF(:); X done(~done) = (abs(F) < tol); X k = k + 1; X end X if any(abs(F)> tol) X disp('Warning in hpinvmap: Solution may be inaccurate') X fprintf('Maximum residual = %.3g\n',max(abs(F))) X end X zp(:) = zn; Xend; X END_OF_FILE if test 3269 -ne `wc -c <'hpinvmap.m'`; then echo shar: \"'hpinvmap.m'\" unpacked with wrong size! fi chmod +x 'hpinvmap.m' # end of 'hpinvmap.m' fi if test -f 'hpmap.m' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'hpmap.m'\" else echo shar: Extracting \"'hpmap.m'\" \(2464 characters\) sed "s/^X//" >'hpmap.m' <<'END_OF_FILE' Xfunction wp = hpmap(zp,w,beta,x,c,qdat) X%HPMAP Schwarz-Christoffel half-plane map. X% HPMAP(ZP,W,BETA,X,C,QDAT) computes the values of the X% Schwarz-Christoffel half-plane map at the points in vector ZP. The X% polygon's vertices should be given in W and the arguments X, C, and X% QDAT should be computed by HPPARAM. HPMAP returns a vector the same X% size as ZP. X% X% HPMAP(ZP,W,BETA,X,C,TOL) uses quadrature data intended to give an X% answer accurate to within roughly TOL. X% X% HPMAP(ZP,W,BETA,X,C) uses a tolerance of 1e-8. X% X% See also HPPARAM, HPPLOT, HPINVMAP. X% X% Written by Toby Driscoll. Last updated 5/31/95. X Xn = length(w); Xw = w(:); Xbeta = beta(:); Xx = x(:); Xif any(isinf(x)) X x(n) = []; X beta(n) = []; Xend X Xif nargin < 6 X qdat = scqdata(beta,8); Xelseif length(qdat)==1 X qdat = scqdata(beta,max(ceil(-log10(qdat)),8)); Xend Xwp = zeros(size(zp)); Xzp = zp(:); Xp = length(zp); X X% For each point in zp, find nearest prevertex. X[tmp,sing] = min(abs(zp(:,ones(length(x),1)).'-x(:,ones(1,p)))); Xsing = sing(:); % indices of prevertices Xatinf = find(isinf(w(1:length(x)))); % infinite vertices Xatinf = atinf(:); Xninf = length(atinf); % # of inf vertices Xif ninf > 0 X % "Bad" points are closest to a prevertex of infinity. X bad = sing(:,ones(ninf,1))' == atinf(:,ones(1,p)); X % Can be closest to any pre-infinity. X if ninf > 1 X bad = any(bad); X end X % Exclude cases which are exactly those prevertices. X bad = bad(:) & (abs(zp-x(sing)) > 10*eps); X % Can't integrate starting at pre-infinity: which neighboring prevertex X % to use? X direcn = real(zp(bad)-x(sing(bad))); X sing(bad) = sing(bad) + sign(direcn) + (direcn==0); X % Midpoints of these integrations X mid = (x(sing(bad)) + zp(bad)) / 2; Xelse X bad = zeros(p,1); Xend X X% xs = the starting singularities X% A MATLAB technicality could cause a mistake if sing is all ones and same X% length as x, hence a workaround. Xxs = wp(:); xs(1:p+1) = x([sing;2]); xs = xs(1:p); X% ws = f(xs) Xws = wp(:); ws(1:p+1) = w([sing;2]); ws = ws(1:p); X X% Compute the map directly at "normal" points. Xif any(~bad) X wp(~bad) = ws(~bad) + c*hpquad(xs(~bad),zp(~bad),sing(~bad),... X x,beta,qdat); Xend X% Compute map at "bad" points, stopping at midpoint to avoid integration X% where right endpoint is close to a singularity. Xif any(bad) X wp(bad) = ws(bad) + c*... X (hpquad(xs(bad),mid,sing(bad),x,beta,qdat) -... X hpquad(zp(bad),mid,zeros(sum(bad),1),x,beta,qdat)); Xend X X X END_OF_FILE if test 2464 -ne `wc -c <'hpmap.m'`; then echo shar: \"'hpmap.m'\" unpacked with wrong size! fi chmod +x 'hpmap.m' # end of 'hpmap.m' fi if test -f 'hpparam.m' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'hpparam.m'\" else echo shar: Extracting \"'hpparam.m'\" \(3032 characters\) sed "s/^X//" >'hpparam.m' <<'END_OF_FILE' Xfunction [x,c,qdat] = hpparam(w,beta,x0,options); X%HPPARAM Schwarz-Christoffel half-plane parameter problem. X% [X,C,QDAT] = HPPARAM(W,BETA) solves the Schwarz-Christoffel X% parameter problem with the upper half-plane as fundamental X% domain and interior of the specified polygon as the target. W X% must be a vector of the vertices of the polygon, specified in X% counterclockwise order. BETA is a vector of turning angles; see X% SCANGLES. If successful, HPPARAM will return X, a vector of the X% pre-images of W; C, the multiplicative constant of the conformal X% map; and QDAT, a matrix of quadrature data used by some of X% the other S-C routines. X% X% [X,C,QDAT] = HPPARAM(W,BETA,X0) uses X0 as an initial guess for X% X. X% X% [X,C,QDAT] = HPPARAM(W,BETA,X0,OPTIONS) uses a vector of control X% parameters. See SCPARMOPT. X% X% See also SCPARMOPT, DRAWPOLY, HPDISP, HPPLOT, HPMAP, HPINVMAP. X% X% Written by Toby Driscoll. Last updated 5/26/95. X Xn = length(w); % no. of vertices Xw = w(:); Xbeta = beta(:); X X% Set up defaults for missing args Xif nargin < 4 X options = []; X if nargin < 3 X x0 = []; X end Xend X Xerr = sccheck('hp',w,beta); Xif err==1 X fprintf('Use SCFIX to make polygon obey requirements\n') X error(' ') Xend X X[trace,tol] = scparmopt(options); Xnqpts = max(ceil(-log10(tol)),4); Xqdat = scqdata(beta(1:n-1),nqpts); % quadrature data X Xatinf = (beta <= -1); X X% Find prevertices (solve param problem) Xif n==3 X x = [-1;0;Inf]; X Xelse X X % Set up normalized lengths for nonlinear equations: X X % indices of left and right integration endpoints X left = 1:n-2; X right = 2:n-1; X % delete indices corresponding to vertices at Inf X left(find(atinf)) = []; X right(find(atinf) - 1) = []; X cmplx = ((right-left) == 2); X % normalize lengths by w(2)-w(1) X nmlen = (w(right)-w(left))/(w(2)-w(1)); X % abs value for finite ones; Re/Im for infinite ones X nmlen = [abs(nmlen(~cmplx));real(nmlen(cmplx));imag(nmlen(cmplx))]; X % first entry is useless (=1) X nmlen(1) = []; X X % Set up initial guess X if isempty(x0) X y0 = zeros(n-3,1); X else X x0 = x0(:); X x0 = (x0-x0(2))/(x0(2)-x0(1)); X y0 = log(diff(x0(2:n-1))); X end X X % Solve nonlinear system of equations: X X % package data X nrow = max([n-1,nqpts,4]); X ncol = 6+2*n; X fdat = zeros(nrow,ncol); X fdat(1:4,1) = [n;length(left);nqpts;ncol]; X fdat(1:n-1,2) = beta(1:n-1); X fdat(1:n-3,3) = nmlen(:); X fdat(1:fdat(2,1),4:6) = [left(:),right(:),cmplx(:)]; X fdat(1:nqpts,7:ncol) = qdat; X % set options X opt = zeros(16,1); X opt(1) = 2*trace; X opt(6) = 100*(n-3); X opt(8) = tol; X opt(9) = tol/10; X opt(12) = nqpts; X % do it X [y,termcode] = nesolve('hppfun',y0,opt,fdat); X if termcode~=1 X disp('Warning: Nonlinear equations solver did not terminate normally') X end X X % Convert y values to x X x = [-1;cumsum([0;exp(y)]);Inf]; Xend X X% Determine multiplicative constant Xmid = mean(x(1:2)); Xg = hpquad(x(2),mid,2,x(1:n-1),beta(1:n-1),qdat) -... X hpquad(x(1),mid,1,x(1:n-1),beta(1:n-1),qdat); Xc = (w(1)-w(2))/g; X END_OF_FILE if test 3032 -ne `wc -c <'hpparam.m'`; then echo shar: \"'hpparam.m'\" unpacked with wrong size! fi chmod +x 'hpparam.m' # end of 'hpparam.m' fi if test -f 'hppfun.m' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'hppfun.m'\" else echo shar: Extracting \"'hppfun.m'\" \(1363 characters\) sed "s/^X//" >'hppfun.m' <<'END_OF_FILE' Xfunction F = hppfun(y,fdat) X%HPPFUN (not intended for calling directly by the user) X% Returns residual for solution of nonlinear equations. X% Used by HPPARAM. X% X% Written by Toby Driscoll. Last updated 5/23/95. X X Xn = fdat(1,1); Xbeta = fdat(1:n-1,2); Xnmlen = fdat(1:n-3,3); Xrows = 1:fdat(2,1); Xleft = fdat(rows,4); Xright = fdat(rows,5); Xcmplx = fdat(rows,6); Xqdat = fdat(1:fdat(3,1),7:fdat(4,1)); X X% Transform y (unconstr. vars) to x (prevertices) Xx = [-1;cumsum([0;exp(y)])]; X X% Check crowding of singularities. Xif any(diff(x)'hpplot.m' <<'END_OF_FILE' Xfunction [H,RE,IM] = hpplot(w,beta,x,c,re,im,options) X%HPPLOT Image of cartesian grid under Schwarz-Christoffel half-plane map. X% HPPLOT(W,BETA,X,C) will adaptively plot the images under the X% Schwarz-Christoffel exterior map of ten evenly spaced horizontal X% and vertical lines in the upper half-plane. The abscissae of the X% vertical lines will bracket the finite extremes of X. The X% arguments are as in HPPARAM. X% X% HPPLOT(W,BETA,X,C,M,N) will plot images of M evenly spaced X% vertical and N evenly spaced horizontal lines. The spacing will X% be the same in both directions. X% X% HPPLOT(W,BETA,X,C,RE,IM) will plot images of vertical lines X% whose real parts are given in RE and horizontal lines whose X% imaginary parts are given in IM. Either argument may be empty. X% X% HPPLOT(W,BETA,X,C,RE,IM,OPTIONS) allows customization of X% HPPLOT's behavior. See SCPLOTOPT. X% X% H = HPPLOT(W,BETA,X,C,...) returns a vector of handles to all X% the curves drawn in the interior of the polygon. [H,RE,IM] = X% HPPLOT(W,BETA,X,C,...) also returns the abscissae and ordinates X% of the lines comprising the grid. X% X% See also SCPLOTOPT, HPPARAM, HPMAP, HPDISP. X% X% Written by Toby Driscoll. Last updated 5/24/95. X Xturn_off_hold = ~ishold; Xn = length(w); Xw = w(:); Xbeta = beta(:); Xx = x(:); Xif nargin < 7 X options = []; X if nargin < 6 X im = []; X if nargin < 5 X re = []; X end X end Xend X Xif isempty([re(:);im(:)]) X re = 10; X im = 10; Xend X Xif (length(re)==1) & (re == round(re)) X if re < 1 X re = []; X elseif re < 2 X re = mean(x([1,n-1])); X else X m = re; X re = linspace(x(1),x(n-1),m); X dre = diff(re(1:2)); X re = linspace(x(1)-dre,x(n-1)+dre,m); X end Xend Xif (length(im)==1) & (im == round(im)) X if length(re) < 2 X im = linspace(0,4,im+1); X im(1) = []; X else X im = mean(diff(re))*(1:im); X end Xend X X[nqpts,maxturn,maxlen,maxrefn] = scplotopt(options); X Xfig = gcf; Xfigure(fig); Xplotpoly(w,beta); Xdrawnow Xhold on X Xn = length(w); Xreflen = maxlen*max(abs(diff([w(~isinf(w));w(1)]))); Xif any(isinf(x)) X qdat = scqdata(beta(1:n-1),nqpts); Xelse X qdat = scqdata(beta,nqpts); Xend X Xy2 = max(x(n-1),10); Xfor j = 1:length(re) X zp = re(j) + i*linspace(0,y2,15).'; X wp = hpmap(zp,w,beta,x,c,qdat); X bad = find(toobig([wp;w(n)],maxturn,reflen,axis)); X iter = 0; X while (~isempty(bad)) & (iter < maxrefn) X lenwp = length(wp); X newz = []; X special = find(bad==lenwp); X newz = re(j) + i*5*imag(zp(bad(special))); X bad(special) = []; X newz = [newz;(zp(bad-1)+2*zp(bad))/3;(zp(bad+1)+2*zp(bad))/3]; X neww = hpmap(newz,w,beta,x,c,qdat); X [k,in] = sort(imag([zp;newz])); X zp = [zp;newz]; wp = [wp;neww]; X zp = zp(in); wp = wp(in); X iter = iter + 1; X bad = find(toobig([wp;w(n)],maxturn,reflen,axis)); X end X linh(j) = plot(clipdata([wp;w(n)],axis), 'g-','erasemode','none'); X drawnow X set(linh(j),'erasemode','normal'); X Z(1:length(zp),j) = zp; X W(1:length(wp),j) = wp; Xend X Xx1 = min(-10,x(n-1)); Xx2 = max(40,x(n-1)); Xaxlim = axis; Xfor j = 1:length(im) X zp = linspace(x1,x2,15).' + i*im(j); X wp = hpmap(zp,w,beta,x,c,qdat); X bad = find(toobig([w(n);wp;w(n)],maxturn,reflen,axis)) - 1; X iter = 0; X while (~isempty(bad)) & (iter < maxrefn) X lenwp = length(wp); X special = zeros(2,1); X if isinf(w(n)) X ends = wp([1,lenwp]); X special = real(ends)>axlim(1) & real(ends)axlim(3) & imag(ends) 0 X H = linh; X if nargout > 1 X RE = re; X if nargout > 2 X IM = im; X end X end Xend X END_OF_FILE if test 4486 -ne `wc -c <'hpplot.m'`; then echo shar: \"'hpplot.m'\" unpacked with wrong size! fi chmod +x 'hpplot.m' # end of 'hpplot.m' fi if test -f 'hpquad.m' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'hpquad.m'\" else echo shar: Extracting \"'hpquad.m'\" \(2434 characters\) sed "s/^X//" >'hpquad.m' <<'END_OF_FILE' Xfunction I = hpquad(z1,z2,sing1,x,beta,qdat) X%HPQUAD (not intended for calling directly by the user) X% Numerical quadrature for the half-plane map. X X% z1,z2 are vectors of left and right endpoints. sing1 is a vector X% of integer indices which label the singularities in z1. So if X% sing1(5) = 3, then z1(5) = x(3). A zero means no singularity. X% x is the vector of finite singularities; beta is the vector of X% associated turning angles. qdat is quadrature data from SCQDATA. X% X% Make sure x and beta are column vectors. X% X% HPQUAD integrates from a possible singularity at the left end to a X% regular point at the right. If both endpoints are singularities, X% you must break the integral into two pieces and make two calls. X% X% The integral is subdivided, if necessary, so that no X% singularity lies closer to the left endpoint than 1/2 the X% length of the integration (sub)interval. X% X% Written by Toby Driscoll. Last updated 5/23/95. X Xnqpts = size(qdat,1); X% Note: Here n is the total number of *finite* singularities; i.e., the X% number of terms in the product appearing in the integrand. Xn = length(x); Xbigx = x(:,ones(1,nqpts)); Xbigbeta = beta(:,ones(1,nqpts)); Xif isempty(sing1) X sing1 = zeros(length(z1),1); Xend X XI = zeros(size(z1)); Xnontriv = find(z1(:)~=z2(:))'; X Xfor k = nontriv X za = z1(k); X zb = z2(k); X sng = sing1(k); X X % Allowable integration step, based on nearest singularity. X dist = min(1,2*min(abs(x([1:sng-1,sng+1:n])-za))/abs(zb-za)); X zr = za + dist*(zb-za); X ind = rem(sng+n,n+1)+1; X % Adjust Gauss-Jacobi nodes and weights to interval. X nd = ((zr-za)*qdat(:,ind) + zr + za)/2; % G-J nodes X wt = ((zr-za)/2) * qdat(:,ind+n+1); % G-J weights X terms = nd(:,ones(n,1)).' - bigx; X if any(~diff(nd)) | any(any(~terms)) X % Endpoints are practically coincident. X I(k) = 0; X else X % Use Gauss-Jacobi on first subinterval, if necessary. X if sng > 0 X terms(sng,:) = terms(sng,:)./abs(terms(sng,:)); X wt = wt*(abs(zr-za)/2)^beta(sng); X end X I(k) = exp(sum(log(terms).*bigbeta))*wt; X while dist < 1 X % Do regular Gaussian quad on other subintervals. X zl = zr; X dist = min(1,2*min(abs(x-zl))/abs(zl-zb)); X zr = zl + dist*(zb-zl); X nd = ((zr-zl)*qdat(:,n+1) + zr + zl)/2; X wt = ((zr-zl)/2) * qdat(:,2*n+2); X terms = nd(:,ones(n,1)).' - bigx; X I(k) = I(k) + exp(sum(log(terms).*bigbeta)) * wt; X end X end Xend X END_OF_FILE if test 2434 -ne `wc -c <'hpquad.m'`; then echo shar: \"'hpquad.m'\" unpacked with wrong size! fi chmod +x 'hpquad.m' # end of 'hpquad.m' fi if test -f 'infdemo.m' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'infdemo.m'\" else echo shar: Extracting \"'infdemo.m'\" \(3355 characters\) sed "s/^X//" >'infdemo.m' <<'END_OF_FILE' Xmore off Xecho on Xclc X% This script demonstrates the interpretation of infinite vertices. X Xpause % Strike any key to begin (Ctrl-C to abort) X X% For the purposes of the Schwarz-Christoffel Toolbox, a polygon X% is represented by two vectors: w, the vertices in positively X% oriented order, and beta, the corresponding "turning angles." X% At a finite vertex w(j), the meaning of beta(j) is simple: X% pi*beta(j) is the exterior turning angle of the polygon X% at w(j), with a minus sign for left (counterclockwise) turns. X% By convention, beta(j) is +1 at a slit, so at a finite vertex, X% -1 < beta(j) <= 1. X X% If w(j) is infinite, the formal definition of beta(j) is more X% cumbersome: pi*beta(j) is -2*pi plus the exterior angle formed by X% the two sides incident on w(j) as they are extended *away* from X% infinity. But the interpretation of pi*beta(j) as "turn" is still X% valid. It turns out that -3 <= beta(j) <= -1 at an infinite vertex. X X% Following are some examples that should help clarify matters. X Xpause % Strike any key to continue Xecho off X Xfigure(gcf) Xcla Xaxis square Xaxis([-2 2 -2 2]) Xhold on X Xint = fill([2,0,0,2],[1,1,-1,-1],[.6,.6,.6]); Xedges = plot([2+i,i,-i,2-i],'y-'); Xplot([-i,i],'.','marker',12) Xt1 = text(-.1,1,'-1/2','hor','right','ver','mid'); Xt2 = text(-.1,-1,'-1/2','hor','right','ver','mid'); Xt3 = text(2.1,0,'-1','hor','left','ver','mid'); X Xclc Xdisp(' ') Xdisp('Here is a three-vertex polygon. The values of beta are shown') Xdisp('next to their associated vertices. The infinite vertex has a') Xdisp('turn of -1, which is the least possible.') Xdisp(' ') Xdisp(' Strike any key to continue') Xpause X Xset(t1,'string','0'); Xset(t3,'string','-3/2'); Xset(edges,'xdata',[0,0,2],'ydata',[2,-1,-1]) Xset(int,'xdata',[0,0,2,2],'ydata',[2,-1,-1,2]) X Xdisp(blanks(2)') Xdisp('The turn at infinity is now -3/2. Note that the sum of the') Xdisp('turns is still -2.') Xdisp(' ') Xdisp(' Strike any key to continue') Xpause X X Xset(t1,'string','1/2','pos',[-.1,.9],'ver','top') Xset(t3,'string','-2') Xset(edges,'xdata',[-2,0,0,2],'ydata',[1,1,-1,-1]) Xset(int,'xdata',[-2,0,0,2,2,-2],'ydata',[1,1,-1,-1,2,2]) X Xdisp(blanks(2)') Xdisp('A turn of -2 isn''t really a turn at all. But the edge returning') Xdisp('from infinity doesn''t have to be colinear with the outgoing edge.') Xdisp(' ') Xdisp(' Strike any key to continue') Xpause X X Xset(t1,'pos',[-.1,.4],'string','3/4') Xset(t3,'string','-9/4') Xset(edges,'xdata',[-2,0,0,2],'ydata',[-2,1,-1,-1]) Xset(int,'xdata',[-2,0,0,2,2,-2],'ydata',[-2,1,-1,-1,2,2]) X Xdisp(blanks(2)') Xdisp('Turning past -2 produces a more "open" region.') Xdisp(' ') Xdisp(' Strike any key to continue') Xpause X X Xset(t1,'string','1/2','pos',[.1,.9],'hor','left') Xset(t2,'string','1/2','pos',[.1,-.9],'hor','left','ver','bot') Xset(t3,'string','-3') Xset(edges,'xdata',[2,0,0,2],'ydata',[1,1,-1,-1]) Xset(int,'xdata',[2,0,0,2,2,-2,-2,2],'ydata',[-1,-1,1,1,2,2,-2,-2]) X Xdisp(blanks(2)') Xdisp('Finally, a turn of -3 is the most allowed. The interior of this') Xdisp('polygon is the complement of the first example, with a turn of -1.') Xdisp(' ') Xdisp(' Strike any key to continue') Xpause X Xdisp(' ') Xdisp('Here is what a disk map of this region looks like....') Xdisp(' ') Xecho on Xw = [-i; i; Inf]; Xbeta = [.5; .5; -3]; X[z,c] = dparam(w,beta); X[z,c] = dfixwc(w,beta,z,c,-1+i); Xcla Xdplot(w,beta,z,c) X Xecho off % End of demo X END_OF_FILE if test 3355 -ne `wc -c <'infdemo.m'`; then echo shar: \"'infdemo.m'\" unpacked with wrong size! fi chmod +x 'infdemo.m' # end of 'infdemo.m' fi if test -f 'modpoly.m' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'modpoly.m'\" else echo shar: Extracting \"'modpoly.m'\" \(7511 characters\) sed "s/^X//" >'modpoly.m' <<'END_OF_FILE' Xfunction [w,beta,indx] = modpoly(w,beta) X%MODPOLY Modify a polygon. X% [WNEW,BETANEW] = MODPOLY(W,BETA) plots the polygon given by W X% and BETA and allows the user to change it with the mouse. At X% the start, MODPOLY allows you to move vertices. Move the cursor X% over a vertex you want to move, hold down the left mouse button, X% drag it to its new location, and release. The vertex changes X% color and affected sides become dashed as you move the vertex. X% X% To delete a vertex, press the Delete button. The pointer X% will change to a fleur. After your next click and release, the X% selected vertex will be deleted and you will return to movement X% mode. To cancel a requested deletion, press Delete again. X% X% The Add button works similarly. To add, press the button and X% then click and release on a polygon side. A vertex will be X% added to the middle of the side, the polygon is redrawn, and you X% return to movement mode. X% X% Infinite vertices cannot be moved(!), deleted, or added. When X% moving the neighbor of an infinite vertex, the angle at infinity X% is kept constant. When you delete a neighbor of infinity, the X% turn at the deleted vertex is lost and the angle at infinity X% changes. You cannot delete a vertex with two infinite X% neighbors. When you add a vertex to an infinite side, the new X% vertex appears at a "reasonable" distance from its finite X% neighbor. X% X% [WNEW,BETANEW,IDX] = MODPOLY(W,BETA) also returns an index X% vector to help keep track of additions and deletions. IDX has X% the same length as WNEW, and if IDX(J) is an integer, it gives X% the index that WNEW(J) had in the original W. If WNEW(J) was X% added, then IDX(J) is NaN. X% X% Note: MODPOLY makes no attempt to keep the polygon "legal." You X% can easily create things which are not polygons, or change X% infinite vertices into unrecognized finite ones. X% X% See also DRAWPOLY, PLOTPOLY. X% X% Written by Toby Driscoll. Last updated 6/1/95. X Xglobal sc_hs sc_hv sc_k sc_w sc_beta sc_idx Xn = length(sc_w); Xptr = get(gcf,'pointer'); X Xif ~isstr(w) % initial call X % Draw polygon and initialize global vars X sc_w = w(:); % vertices X sc_beta = beta(:); % angles X hold off X sc_hs = plotpoly(w,beta); % side handles X hold on X sc_hv = zeros(n,1); % vertex handles X for j=find(~isinf(w))' X sc_hv(j) = plot(real(w(j)),imag(w(j)),'.','mark',22); X end X sc_idx = (1:length(w))'; % indices X oldptr = ptr; X set(gcf,'pointer','circle') X % Create uicontrols X pb_done = uicontrol('style','push','string','Done','pos',[5,5,60,22],... X 'call','set(get(gcf,''currentobj''),''user'',1)'); X set(pb_done,'user',0); X pb_del = uicontrol('style','push','string','Delete','pos',[5,30,60,22],... X 'call','modpoly(''delete'');'); X pb_add = uicontrol('style','push','string','Add','pos',[5,55,60,22],... X 'call','modpoly(''add'');'); X set(gcf,'windowbuttondown','modpoly(''down'');') X % Run in place until finished X while ~get(pb_done,'user') X drawnow X end X set(gcf,'windowbuttondown','') X % Recover new info and clean up X w = sc_w; X beta = sc_beta; X hold off X delete(pb_done) X delete(pb_del) X delete(pb_add) X set(gcf,'pointer',oldptr) X plotpoly(w,beta) X indx = sc_idx; X clear sc_hs sc_hv sc_k sc_w sc_beta sc_idx X Xelseif strcmp(w,'down') % button down X h = get(gcf,'currentobj'); X % Act only if h is a line object X if strcmp(get(h,'type'),'line') X if ~strcmp(ptr,'crosshair') % move or delete X if strcmp(get(h,'linesty'),'.') % vertex? X sc_k = find(h==sc_hv); X colr = get(gca,'colororder'); X set(h,'color',colr(2,:)) X set(sc_hs([sc_k,rem(sc_k-2+n,n)+1]),'linesty','--') X if strcmp(ptr,'circle') X % Mouse movement needed only when moving vertices X set(gcf,'windowbuttonmotion','modpoly(''move'');') X end X set(gcf,'windowbuttonup','modpoly(''up'');') X end X else % insert X if strcmp(get(h,'linesty'),'-') % edge? X sc_k = find(h==sc_hs); X set(sc_hs(sc_k),'linesty','--') X set(gcf,'windowbuttonup','modpoly(''up'');') X end X end X end X Xelseif strcmp(w,'move') % mouse move X z = get(gca,'currentpoint'); X k = sc_k; X set(sc_hv(k),'xd',z(1,1),'yd',z(1,2)) X % Must handle case of infinite predecessor/successor separately. X j = rem(k,n)+1; % successor X if isinf(sc_w(j)) X xd = get(sc_hs(k),'xd'); X yd = get(sc_hs(k),'yd'); X phi = atan2(diff(yd),diff(xd)); X r = sqrt(diff(xd)^2+diff(yd)^2); X y = sc_w(k) + [0,r*exp(i*phi)]; X else X y = [z(1,1)+i*z(1,2),sc_w(j)]; X phi = angle(-diff(y)/diff(sc_w([j,k]))); X sc_beta(k) = sc_beta(k)-phi/pi; X sc_beta(j) = sc_beta(j)+phi/pi; X end X set(sc_hs(k),'xd',real(y),'yd',imag(y)) X j = rem(k-2+n,n)+1; % predecessor X if isinf(sc_w(j)) X xd = get(sc_hs(j),'xd'); X yd = get(sc_hs(j),'yd'); X phi = atan2(-diff(yd),-diff(xd)); X r = sqrt(diff(xd)^2+diff(yd)^2); X y = sc_w(k) + [r*exp(i*phi),0]; X else X y = [sc_w(j),z(1,1)+i*z(1,2)]; X phi = angle(diff(y)/diff(sc_w([j,k]))); X sc_beta(k) = sc_beta(k)+phi/pi; X sc_beta(j) = sc_beta(j)-phi/pi; X end X % Make change effective X set(sc_hs(j),'xd',real(y),'yd',imag(y)) X drawnow X sc_w(k) = z(1,1)+i*z(1,2); X Xelseif strcmp(w,'up') % button up X set(sc_hs([sc_k,rem(sc_k-2+n,n)+1]),'linesty','-') X set(gcf,'windowbuttonup','') X if strcmp(ptr,'circle') X % Moved a vertex. Just clean up. X colr = get(gca,'colororder'); X set(sc_hv(sc_k),'color',colr(1,:)) X set(gcf,'windowbuttonmotion','') X elseif strcmp(ptr,'fleur') % Delete... X colr = get(gca,'colororder'); X set(sc_hv(sc_k),'color',colr(1,:)) X set(gcf,'pointer','circle') X idx = rem(sc_k+(-2:1)+n-1,n)+1; % 2 back, here, and 1 forward X infb = isinf(sc_w(idx(2))); X infa = isinf(sc_w(idx(4))); X if n <= 3 | (infa & infb) X return % do nothing X elseif ~infb & ~infa X % Finite neighborhs; easy. X v = get(sc_hs(idx(1)),'xdata')+i*get(sc_hs(idx(1)),'ydata'); X v(3:4) = get(sc_hs(idx(4)),'xdata')+i*get(sc_hs(idx(4)),'ydata'); X b = scangle(v); X sc_beta(idx([2,4])) = b(2:3); X v = v(2:3); X else X % An infinite neighbor X axlim = axis; X r = sqrt(diff(axlim(1:2))^2+diff(axlim(3:4))^2); X x = get(sc_hs(sc_k*infb + idx(2)*infa),'xdata'); X y = get(sc_hs(sc_k*infb + idx(2)*infa),'ydata'); X ang = atan2(diff(y),diff(x)) + (pi*infb); X j = (idx(2)*infb) + (idx(4)*infa); X sc_beta(j) = sc_beta(j) + sc_beta(sc_k); X if infb X v = sc_w(idx(4)) + [1.1*r*exp(i*ang),0]; X else X v = sc_w(idx(2)) + [0,1.1*r*exp(i*ang)]; X end X end X X set(sc_hs(idx(2)),... X 'xdata',real(v),'ydata',imag(v),'linesty','-') X delete(sc_hv(sc_k)) X sc_hv(sc_k) = []; X sc_w(sc_k) = []; X delete(sc_hs(sc_k)) X sc_hs(sc_k) = []; X sc_beta(sc_k) = []; X sc_idx(sc_k) = []; X X elseif strcmp(ptr,'crosshair') % Add... X [wn,bn] = scaddvtx(sc_w,sc_beta,sc_k); X sc_w = wn(:); X sc_beta = bn(:); X hold off X sc_hs = plotpoly(wn,bn); X hold on X sc_hv = zeros(n+1,1); X for j=find(~isinf(wn))' X sc_hv(j) = plot(real(wn(j)),imag(wn(j)),'.','mark',22); X end X sc_idx = [sc_idx(1:sc_k);NaN;sc_idx(sc_k+1:n)]; X set(gcf,'pointer','circle') X X end X Xelseif strcmp(w,'delete') % toggle delete state X if ~strcmp(ptr,'fleur') X set(gcf,'pointer','fleur') X else X set(gcf,'pointer','circle') X end X Xelseif strcmp(w,'add') % toggle add state X if ~strcmp(ptr,'crosshair') X set(gcf,'pointer','crosshair') X else X set(gcf,'pointer','circle') X end X Xend END_OF_FILE if test 7511 -ne `wc -c <'modpoly.m'`; then echo shar: \"'modpoly.m'\" unpacked with wrong size! fi chmod +x 'modpoly.m' # end of 'modpoly.m' fi if test -f 'moebius.m' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'moebius.m'\" else echo shar: Extracting \"'moebius.m'\" \(515 characters\) sed "s/^X//" >'moebius.m' <<'END_OF_FILE' Xfunction A = moebius(z,w) X%MOEBIUS Moebius transformation parameters. X% A = MOEBIUS(Z,W) computes the coefficients of the Moebius X% transformation taking the 3-vector Z to W, so that X% X% W = (A(1)*Z + A(2))./(A(3)*Z + A(4)). X% X% Infinities are not recognized and will not work. X% X% Written by Toby Driscoll. Last updated 5/26/95. X Xt1 = -diff(z(1:2))*diff(w(2:3)); Xt2 = -diff(z(2:3))*diff(w(1:2)); X XA(1) = w(1)*t1 - w(3)*t2; XA(2) = w(3)*z(1)*t2 - w(1)*z(3)*t1; XA(3) = t1 - t2; XA(4) = z(1)*t2 - z(3)*t1; END_OF_FILE if test 515 -ne `wc -c <'moebius.m'`; then echo shar: \"'moebius.m'\" unpacked with wrong size! fi chmod +x 'moebius.m' # end of 'moebius.m' fi if test -f 'nebroyuf.m' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'nebroyuf.m'\" else echo shar: Extracting \"'nebroyuf.m'\" \(824 characters\) sed "s/^X//" >'nebroyuf.m' <<'END_OF_FILE' Xfunction A = nebroyuf(A,xc,xp,fc,fp,sx,eta) X% X% A = nebroyuf(A,xc,xf,fc,fp,sx,eta) X% X% This function is part of the Nonlinear Equations package, see NESOLVE.M. X% X% This updates A, a secant approximation to the jacobian, using X% BROYDEN'S UNFACTORED SECANT UPDATE. X% X% Algorithm A8.3.1: Part of the modular software system from X% the appendix of the book "Numerical Methods for Unconstrained X% Optimization and Nonlinear Equations" by Dennis & Schnabel 1983. X% X% X% Coded in Matlab by Sherkat Masoum M., April 1988. X% Edited by Richard T. Behrens, June 1988. X% X X% X% Algorithm step 1. X% Xn = length(A); Xs=xp-xc; X X% X% Algorithm step 2. X% Xdenom=norm(sx.*s)^2; X X% X% Algorithm step 3. X% Xtempi = (fp - fc - A*s); Xii = find(abs(tempi) < eta*(abs(fp)+abs(fc))); Xtempi(ii) = zeros(length(ii),1); XA = A + (tempi/denom)*(s.*(sx.*sx))'; X END_OF_FILE if test 824 -ne `wc -c <'nebroyuf.m'`; then echo shar: \"'nebroyuf.m'\" unpacked with wrong size! fi chmod +x 'nebroyuf.m' # end of 'nebroyuf.m' fi if test -f 'nechdcmp.m' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'nechdcmp.m'\" else echo shar: Extracting \"'nechdcmp.m'\" \(1899 characters\) sed "s/^X//" >'nechdcmp.m' <<'END_OF_FILE' Xfunction [L,maxadd] = nechdcmp(H,maxoffl) X% X% [L,maxadd] = nechdcmp(H,maxoffl) X% X% This function is part of the Nonlinear Equations package, see NESOLVE.M. X% X% This is a "Perturbed Cholesky Decomposition". It finds a lower X% triangular matrix L such that LL' is a factorization of H+D, where X% D is a diagonal (non-negative) matrix that is added to H if necessary X% to make it positive definite (so that the factorization is possible). X% If H is already positive definite, the ordinary Cholesky decomposition X% (D=0) is carried out. X% X% Algorithm A5.5.2: Part of the modular software system from X% the appendix of the book "Numerical Methods for Unconstrained X% Optimization and Nonlinear Equations" by Dennis & Schnabel 1983. X% X% Coded in Matlab by Sherkat Masoum M., April 1988. X% Edited by Richard T. Behrens, June 1988. X% X X% X% Check input arguments. X% X[m,n]=size(H); Xif (m ~=n) X error('Matrix H must be square.') Xend X X% X% Algorithm step 1. X% Xminl=(eps^.25) * maxoffl; X X% X% Algorithm step 2. X% Xif (maxoffl == 0.) X% This is the case when H is known to be positive def. X maxoffl=sqrt(max(diag(H))); X minl2=(eps^.5) * maxoffl; Xend X X% X% Algorithm step 3. X% Xmaxadd=0.; % the maximum diagonal element (so far) in D. X X% X% Algorithm step 4. X% Xfor j=1:n X if (j==1) X L(j,j)=H(j,j); X else X L(j,j)=H(j,j)-L(j,1:j-1)*L(j,1:j-1)'; X end X minljj=0.; X for i=j+1:n X if (j==1) X L(i,j)=H(j,i); X else X L(i,j)=H(j,i)-L(i,1:j-1)*L(j,1:j-1)'; X end X minljj=max(abs(L(i,j)),minljj); X end X minljj=max(minljj/maxoffl,minl); X if (L(j,j) > minljj^2) X % Normal Cholesky iteration X L(j,j)=sqrt(L(j,j)); X else X % Augment H(j,j) X if (minljj < minl2) X minljj=minl2; X % Only possible when input maxoffl=0 X end X maxadd=max(maxadd,(minljj^2-L(j,j))); X L(j,j)=minljj; X end X for i=j+1:n X L(i,j)=L(i,j)/L(j,j); X end X %L(j+1:n,j)=L(j+1:n,j)/L(j,j); Xend X END_OF_FILE if test 1899 -ne `wc -c <'nechdcmp.m'`; then echo shar: \"'nechdcmp.m'\" unpacked with wrong size! fi chmod +x 'nechdcmp.m' # end of 'nechdcmp.m' fi if test -f 'neconest.m' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'neconest.m'\" else echo shar: Extracting \"'neconest.m'\" \(1305 characters\) sed "s/^X//" >'neconest.m' <<'END_OF_FILE' Xfunction est = neconest(M,M2) X% X% This function is part of the Nonlinear Equations package, see NESOLVE.M. X% X% est = neconest(M,M2) X% This is an estimate of the l-1 condition number of an upper triangular X% matrix. X% X% Algorithm A3.3.1: Part of the modular software system from the X% appendix of the book "Numerical Methods for Unconstrained Optimization X% and Nonlinear Equations" by Dennis & Schnabel, 1983. X% X% Coded in MATLAB by Richard T. Behrens, March 1988. X% X X% X% Allocate variables. X% Xn = length(M); Xp = zeros(n,1); Xpm = zeros(n,1); Xx = zeros(n,1); X X% X% Algorithm steps 1 & 2. X% Xest = norm( triu(M)-diag(diag(M))+diag(M2) ,1); X X% X% Algorithm step 3. X% Xx(1) = 1/M2(1); X X% X% Algorithm step 4. X% Xp(2:n) = M(1,2:n) * x(1); X X% X% Algorithm step 5. X% Xfor j = 2:n X xp = (+1-p(j)) / M2(j); X xm = (-1-p(j)) / M2(j); X temp = abs(xp); X tempm = abs(xm); X for i = (j+1):n X pm(i) = p(i) + M(j,i)*xm; X tempm = tempm + abs(p(i))/abs(M2(i)); X p(i) = p(i) + M(j,i) * xp; X temp = temp + abs(p(i))/abs(M2(i)); X end X if (temp > tempm) X x(j) = xp; X else X x(j) = xm; X p((j+1):n) = pm((j+1):n); X end Xend X X% X% Algorithm steps 6 & 7. X% Xest = est / norm(x,1); X X% X% Algorithm step 8. X% Xx = nersolv(M,M2,x); X X% X% Algorithm steps 9 & 10. X% Xest = est * norm(x,1); X END_OF_FILE if test 1305 -ne `wc -c <'neconest.m'`; then echo shar: \"'neconest.m'\" unpacked with wrong size! fi chmod +x 'neconest.m' # end of 'neconest.m' fi if test -f 'nedemo.m' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'nedemo.m'\" else echo shar: Extracting \"'nedemo.m'\" \(2501 characters\) sed "s/^X//" >'nedemo.m' <<'END_OF_FILE' X% X% NEDEMO demonstrates the Nonlinear Equations sovler NESOLVE. X% X% Written by Richard T. Behrens, July 1988. X% Xformat compact Xecho on Xclc X% X% Nonlinear Equations DEMO: Demonstration of the use of NESOLVE. X% X% X% First, we need a set of simultaneous nonlinear equations whose solution X% we wish to compute numerically. Let's sovle the 'helical valley function' X% defined as: X% X% 0 = 10 * (x3 - 10*theta) X% 0 = 10 * (sqrt(x1^2 + x2^2) - 1) X% 0 = x3 X% X% where: theta = (1/(2*pi)) * atan(x2/x1) X% X% X% We need to write a function file to define the above set of equations. X% Given a 3-vector X, it should evaluate the right-hand sides and return X% a 3-vector F, which will be zero when a solution is found. Both X and X% F need to be column-vectors (i.e. n x 1, NOT 1 x n). X% Xpause Xclc X% X% Here is the function file: X% X% Xtype netestf1 Xpause Xclc X% X% Next, we need an ititial guess of the solution we are looking for. X% Nonlinear equations can have multiple solutions, so the starting point X% should be chosen as close as possible to the desired solution (it is X% also possible to have no solutions at all). Since we have no idea where X% the solution is, we choose an arbitrary starting point. But note that X% certain starting points like [0;0;0] are unsuitable in this case, because X% the 'helical valley function' is undefined there. X% X% Here is our starting point: X% Xecho off Xx0 = [10;10;10] Xpause Xclc Xecho on X% The function file and the starting point are the only required inputs X% to NESOLVE. We will specify additional inputs (DETAILS) which will X% cause the intermediate results to be printed and tell the package X% that the function is cheap (quick) to evaluate. Xecho off Xdetails = zeros(16,1); Xdetails(1) = 1; Xdetails(3) = 1 Xdisp(' ') Xdisp('Press any key to begin finding a solution . . .') Xpause X% Xclc Xdisp('Please stand by ... loading & compiling the functions may take a while.') Xflops(0); Xtime1 = clock; X[xf,termcode,path] = nesolve('netestf1',x0,details); Xtime2 = clock; Xclc Xf = flops; Xdisp('The solution is: ') Xxf Xdisp('The number of flops required to find it was: ') Xf Xdisp('The time it took was: ') Xetime(time2,time1) Xdisp(' ') Xdisp('Did you notice that the third component converged in only') Xdisp('one iteration? That is because that equation was linear.') Xdisp(' ') Xdisp('Press any key to see a plot of the sequence of iterates . . .') Xpause Xclc Xplot(path) Xtitle('Convergence Path') Xpause X END_OF_FILE if test 2501 -ne `wc -c <'nedemo.m'`; then echo shar: \"'nedemo.m'\" unpacked with wrong size! fi chmod +x 'nedemo.m' # end of 'nedemo.m' fi if test -f 'nefdjac.m' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'nefdjac.m'\" else echo shar: Extracting \"'nefdjac.m'\" \(1326 characters\) sed "s/^X//" >'nefdjac.m' <<'END_OF_FILE' Xfunction [J,nofun] = nefdjac(fvec,fc,xc,sx,details,nofun,fparam) X% X% This function is part of the Nonlinear Equations package, see NESOLVE.M. X% X% [J,nofun] = nefdjac(fvec,fc,xc,sx,details,nofun,fparam) X% This is a "Finite Differance Jacobian Approximation". It X% calculates a finite differance appproximation to J(xc) X% (the Jacobin of F(x) at x = xc). X% X% Algorithm A5.4.1: Part of the modular software system from X% the appendix of the book "Numerical Methods for Unconstrained X% Optimization and Nonlinear Equations" by Dennis & Schnabel 1983. X% X% Coded in Matlab by Sherkat Masoum M., March 1988. X% Edited by Richard T. Behrens, June 1988. X% X X% X% Algorithm step 1. X% Xn=length(fc); Xsqrteta = sqrt(details(13)); X X% X% Algorithm step 2. X% Xfor j =1:n X stepsizej = sqrteta * max(abs(xc(j)),1/sx(j)) * (sign(xc(j))+(xc(j)==0)); X% To incorporate a different stepsize rule, change the previous line. X tempj = xc(j); X xc(j) = xc(j) + stepsizej; X stepsizej=xc(j)-tempj; X% The previous line reduces finite precision error slightly, X% see section 5.4 of the book. X if details(15) X fj =feval(fvec,xc,fparam); % Evaluate function w/parameters. X else X fj =feval(fvec,xc); % Evaluate function w/o parameters. X end X nofun = nofun + 1; X J(1:n,j) = (fj(1:n) - fc(1:n))/stepsizej; X xc(j) = tempj; Xend X END_OF_FILE if test 1326 -ne `wc -c <'nefdjac.m'`; then echo shar: \"'nefdjac.m'\" unpacked with wrong size! fi chmod +x 'nefdjac.m' # end of 'nefdjac.m' fi if test -f 'nefn.m' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'nefn.m'\" else echo shar: Extracting \"'nefn.m'\" \(675 characters\) sed "s/^X//" >'nefn.m' <<'END_OF_FILE' Xfunction [fplus,FVplus,nofun] = nefn(xplus,SF,fvec,nofun,fparam) X% X% [fplus,FVplus] = nefn(xplus,SF,fvec) X% X% This function is part of the Nonlinear Equations package, see NESOLVE.M. X% X% It evaluates the vector function and calculates the sum of squares X% for nonlinear equations. X% X% Part of the modular software system from the appendix of the book X% "Numerical Methods for Unconstrained Optimization and Nonlinear X% Equations" by Dennis & Schnabel, 1983. X% X% Coded in MATLAB by Richard T. Behrens, April 1988. X% X Xif (nargin < 5) X FVplus = feval(fvec,xplus); Xelse X FVplus = feval(fvec,xplus,fparam); Xend Xfplus = .5 * sum((SF .* FVplus).^2); Xnofun = nofun + 1; X END_OF_FILE if test 675 -ne `wc -c <'nefn.m'`; then echo shar: \"'nefn.m'\" unpacked with wrong size! fi chmod +x 'nefn.m' # end of 'nefn.m' fi if test -f 'nehelp.m' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'nehelp.m'\" else echo shar: Extracting \"'nehelp.m'\" \(8438 characters\) sed "s/^X//" >'nehelp.m' <<'END_OF_FILE' X% X% Help file for NESOLVE.M and its system of subroutines. X% To access the help information, execute this file by typing NEHELP X% from within MATLAB. X% Xclc Xecho on X% X% NONLINEAR EQUATION SOLVER X% X% INTRODUCTION X% X% NESOLVE and its system of subordinate functions is a software package X% designed to solve systems of nonlinear equations. Everything must be X% REAL; the algorithms are not designed for complex numbers (complex X% functions could be handled by breaking each equation and each variable X% into two parts, real and imaginary, and solving a system twice as large). X% Newton's method, with a few modifications, is used to find the solution. X% A line search has been included to ensure global convergence (convergence X% from poor initial guesses). The necessary derivatives of the function are X% computed using finite differences unless the user supplies a function X% which computes them from analytically obtained equations. X% X% Detailed descriptions of the algorithmic modules as well as the theory X% behind them may be found in "Numerical Methods for Unconstrained X% Optimization and Nonlinear Equations" by J. E. Dennis, Jr. and X% R. B. Schnabel, 1983. The user is refered to that book if such X% information is needed. X% Xpause Xclc X% X% HOW TO USE NESOLVE X% X% To use the Nonlinear Equations package, you must first create a function X% file xxxxxx.M which evaluates the simultaneous nonlinear equations you X% wish to solve. You may name this function anything you like, just supply X% the name (in single quotes) as the FVEC argument to NESOLVE. To develop X% the function file, first write each equation as X% X% 'expression' = 0. X% X% Next write a function file which evaluates each of these 'expressions' and X% returns the results as an n-vector F(X), where the input X is also an X% n-vector. Note that the number of variables and the number of equations X% must be the same, but that dummy variables or trivial equations (0=0) X% could be added to accomplish this. It is possible to write some functions X% in such a way that the number of variables, n, is determined at run time X% by the length of the vector X0, the starting point (see netestf4). X% X% A solution is any vector X for which F(X) = 0. X% Xpause Xclc X% NESOLVE INPUT ARGUMENTS X% X% REQUIRED INPUTS X% X% FVEC, the first input argument, must be the name of the function file X% defining the system of nonlinear equations (as described on the previous X% screen). The name must be placed in single quotation marks or contained X% in a variable as a string. The '.m' should not be included. X% X% X0, the second input augument, must be a column-vector containing an X% initial guess of the solution. The size of X0 must be compatible with X% the function named in FVEC. X% Xpause Xclc X% X% OPTIONAL INPUTS X% X% NESOLVE has up to four optional input arguments. To supply any particular X% optional argument, all arguments preceding it in the input argument list X% must also be supplied, but may be empty matrices to hold the positions. X% X% DETAILS, the third input argument, is an optional 16-vector whose elements X% specify various algorithmic options and set various tolerances. Default X% values are assumed if DETAILS is not present or if an element is set to X% zero. If DETAILS is present, but has less than 16 elements, the remaining X% elements assume their default values. The next screen lists the specific X% function of each element of DETAILS. X% Xpause Xclc X% X% DETAILS elements (defaults are in square brackets [ ]): X% X% ELEMENT NAME DESCRIPTION X% ------- --------- --------------------------------------------------- X% 1 PRINTCODE [0]=No trace; 1=Trace; 2=Trace & Statistics. X% 2 GLOBMETH [1]=Line Search; 2=Hookstep; (3-4 reserved). X% 3 CHEAPF [0]=No (Use secant update if function is expensive to X% evaluate); 1=Yes (Always use finite differences). X% 4 ANALJAC [0]=No; 1=Yes, there is a jacobian function (.M file) X% (if so, supply its name in input argument JAC). X% 5 FACTSEC [0]=No; (1 reserved for future use). X% 6 ITNLIMIT Maximum number of iterations allowed [100]. X% 7 DELTA Initial trust radius for GLOBMETH=2,3 [cauchy step]. X% 8 FVECTOL How small the scaled norm(F) must get [eps^(1/3)]. X% 9 STEPTOL Minimum step size [eps^(2/3)]. X% 10 MINTOL For detecting non-root minima [eps^(2/3)]. X% 11 MAXSTEP Largest allowed step size [see NEINCK.M]. X% 12 FDIGITS Number of good digits returned by FVEC [-log10(eps)]. X% 13 ETA ^* Internal use only ^* X% 14 SAVEPATH ^* Internal use only ^* X% 15 PASSPARM ^* Internal use only ^* X% 16 SCALEFLG [0]=No; 1=Yes, by starting point; 2=Yes, by SCALE. X% (use if units in different variables are mismatched) Xpause Xclc X% X% OPTIONAL INPUT ARGUMENTS (CONTINUED) X% X% FPARAM, the fourth input argument, is an optional input. NESOLVE does X% not care what it contains, but if it exists and is nonempty it will be X% passed on to FVEC (and JAC) as a second argument. This feature allows X% the function to contain parameters which are held constant during the X% solution process but may be changed for the next run. Any number of X% parameters of any kind may be passed, but it is up to the user to pack X% them all into one matrix FPARAM and up to the user-written function FVEC X% (and JAC) to unpack them and use them appropriately. X% X% JAC, the fifth input argument, is optional. To use a function file X% which evaluates all the first derivatives of the function, the name of X% that file must be supplied in JAC and the flag DETAILS(4) must be set X% to one. The output of JAC should be the Jacobian matrix of the function X% specified in FVEC, evaluated at the input argument X. The i,j element of X% the Jacobian matrix is defined as the derivative of function element i X% with respect to variable j. JAC needs to provide a second output X% variable indicating the computational cost of one call to JAC in terms X% of the equivalent number of calls to FN (this is only used for reporting X% statistics on the number of function evaluations when PRINTCODE=2). X% Xpause Xclc X% X% OPTIONAL INPUT ARGUMENTS (CONTINUED) X% X% SCALE, the sixth and last input argument, is optional. If supplied, it X% should be an (n x 2) matrix whose first column contains a 'typical' X X% vector and whose second column contains a 'typical' F vector. SCALE must X% not contain any zeros. It is used to improve convergence behavior in X% in situations where the units of the variables are such that some variables X% are typically several orders of magnitude larger than others. The flag X% controling scaling is DETAILS(16) which must be set to 2 if SCALE is X% to be used. If DETAILS(16) is 1, X0 and F(X0) are used for scaling. X% Xpause Xclc X% X% OUTPUT ARGUMENTS OF NESOLVE X% X% XF is the primary output of NESOLVE. It contains the final approximation X% of the solution to the system of nonlinear equations. X% X% TERMCODE is an optional output (though highly recommended). If a second X% output variable is supplied, It will contain the termination code giving X% the reason the iteration process was stopped. The reasons are outlined X% below. For additional information the user is refered to the files X% NESTOP.M, NESTOP0.M and NEINCK.M or to the book referenced on screen one X% of this help file. X% X% TERMINATION CODES X% -2 : Input error in Fdigits (DETAILS(12)). X% -1 : Input error in starting point (X0). X% 1 : Normal termination, XF is probably near a root unless fvectol X% (DETAILS(8)) is too large. X% 2 : Two steps too small ( < steptol), maybe near a root. X% 3 : Can't find a good step. Maybe near a root or jacobian inacurate. X% 4 : Iteration limit exceeded. Increase DETAILS(6) or restart from XF. X% 5 : Five steps too big ( > maxstep), looks like asymtotic behavior. X% 6 : Stuck at a minimizer which is not a root. Restart with new X0. Xpause Xclc X% X% OUTPUT ARGUMENTS (CONTINUED) X% X% PATH is an optional output. If a third output variable is supplied it will X% contain the sequence of points generated by the iterations. The i-th row X% of PATH is the transpose of vector X at iteration (i-1), so you can use X% the command plot(path) to see how the variables converge. X% Xecho off X END_OF_FILE if test 8438 -ne `wc -c <'nehelp.m'`; then echo shar: \"'nehelp.m'\" unpacked with wrong size! fi chmod +x 'nehelp.m' # end of 'nehelp.m' fi if test -f 'nehook.m' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'nehook.m'\" else echo shar: Extracting \"'nehook.m'\" \(4227 characters\) sed "s/^X//" >'nehook.m' <<'END_OF_FILE' Xfunction [retcode,xp,fp,Fp,maxtaken,details,trustvars,nofun] = ... X nehook(xc,fc,fn,g,L,H,sN,sx,sf,details,itn,trustvars,nofun,fparam) X% X% [retcode,xp,fp,Fp,maxtaken,details,trustvars,nofun] = ... X% nehook(xc,fc,fn,g,L,H,sN,sx,sf,details,trustvars,nofun,fparam) X% X% This function is part of the Nonlinear Equations package and the X% Unconstrained Minimization package, see NESOLVE.M or UMSOLVE.M. X% X% It is a driver for locally constrained optimal ("hook") steps for use X% with Newton's Method of solving nonlinear equations. For function X% evaluations, it needs to know whether it is doing Nonlinear Equations X% (NE) or Unconstrained Minimization (UM); it distinguishes the two by the X% length of DETAILS, which is 16 for NE and 17 for UM. X% X% TRUSTVARS is a vector of variables that, though not used externally, X% need to be preserved between calls to NEHOOK. The elements are X% defined as: X% 1 = mu X% 2 = deltaprev X% 3 = phi X% 4 = phiprime X X% X% Algorithms A6.4.1 and A6.4.2: Incorporates both the "hookdriver" and X% "hookstep" algorithms. Part of the modular software system from the X% appendix of the book "Numerical Methods for Unconstrained Optimization X% and Nonlinear Equations" by Dennis & Schnabel, 1983. X% X% Coded in MATLAB by Richard T. Behrens, August 1990. X% X X% X% Initialization. X% Xn = length(xc); Xumflag = (length(details) == 17); % This is how we tell NE from UM. Xxpprev = zeros(n,1); % allocation Xfpprev = 0; % allocation XFpprev = zeros(n,1); % allocation X% X% Algorithm steps 1-3. X% Xretcode = 4; Xfirsthook = 1; Xnewtlen = norm(sx.*sN); X X% X% Algorithm step 4. X% Xif ((itn==1)|(details(7)==-1)) % details(7) is delta. X trustvars(1) = 0; % trustvars(1) is mu. X if (details(7)==-1) X alpha = g./sx; alpha = alpha'*alpha; X beta = L'*(g./(sx.*sx)); beta = beta'*beta; X details(7) = (alpha^1.5)/beta; X if (details(7) > details(11)) % details(11) is maxstep. X details(7) = details(11); X end X end Xend X X% X% Algorithm step 5 (incorporating algorithm A6.4.2). X% Xwhile (retcode >= 2) % Calculate and check a new step. X hi = 1.5; lo = 0.75; % Start of A6.4.2. X if (newtlen <= hi*details(7)) X newttaken = 1; X s = sN; X trustvars(1) = 0; % trustvars(1) is mu. X details(7) = min(details(7),newtlen); X else X newttaken = 0; X if (trustvars(1) > 0) X trustvars(1) = trustvars(1) - ... X ((trustvars(3) + trustvars(2))/details(7))* ... X (((trustvars(2)-details(7))+trustvars(3))/trustvars(4)); X end X trustvars(3) = newtlen - details(7); X if firsthook X firsthook = 0; X tempvec = L\((sx.*sx).*sN); X phiprimeinit = -(tempvec'*tempvec)/newtlen; X end X mulow = -trustvars(3)/phiprimeinit; X muup = norm(g./sx)/details(7); X done = 0; X while (~done) X if ((trustvars(1) < mulow)|(trustvars(1)>muup)) X if (mulow<0), disp('warning, mulow<0'), keyboard, end X trustvars(1) = max(sqrt(mulow*muup),muup*1e-3); X end X [L642,maxadd] = nechdcmp(H+trustvars(1)*diag(sx.*sx),0); X s = -L642'\(L642\g); % L642 is a copy of L local to A6.4.2. X steplen = norm(sx.*s); X trustvars(3) = steplen - details(7); X tempvec = L642\((sx.*sx).*s); X trustvars(4) = -(tempvec'*tempvec)/steplen; X if (((steplen>=lo*details(7))&(steplen<=hi*details(7))) ... X | (muup-mulow<=0)) X done = 1; X else X mulow = max(mulow,trustvars(1)-(trustvars(3)/trustvars(4))); X if (trustvars(3)<0), muup = trustvars(1); end X trustvars(1) = trustvars(1) - ((steplen/details(7))* ... X (trustvars(3)/trustvars(4))); X end X end X end % End of A6.4.2. X trustvars(2) = details(7); % trustvars(2) is deltaprev. X [xp,fp,Fp,maxtaken,retcode,xpprev,fpprev,Fpprev,details,nofun] = ... X netrust(retcode,xpprev,fpprev,Fpprev,xc,fc,fn,g,L,s,sx,sf,... X newttaken,details,1,H,umflag,nofun,fparam); Xend X END_OF_FILE if test 4227 -ne `wc -c <'nehook.m'`; then echo shar: \"'nehook.m'\" unpacked with wrong size! fi chmod +x 'nehook.m' # end of 'nehook.m' fi if test -f 'neinck.m' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'neinck.m'\" else echo shar: Extracting \"'neinck.m'\" \(1806 characters\) sed "s/^X//" >'neinck.m' <<'END_OF_FILE' Xfunction [dout,Sx,SF,termcode] = neinck(x0,F0,din,scale) X% X% [dout,Sx,SF,termcode] = neinck(x0,din,scale) X% X% This function is part of the Nonlinear Equations package, see NESOLVE.M. X% X% It checks the input arguments and sets various tolerances and limits. X% X% Based on the description for NEINCK. Part of the modular software system X% from the appendix of the book "Numerical Methods for Unconstrained X% Optimization and Nonlinear Equations" by Dennis & Schnabel, 1983. X% X% Coded in MATLAB by Richard T. Behrens, April 1988. X% X Xtermcode = 0; Xdout = din; X X% Step 1. X[n,nn] = size(x0); Xif ((n < 1) | (nn > 1)) X termcode = -1; X return Xend X X% Steps 2 & 3. X[l,m] = size(scale); Xif (dout(16) == 2) X if ((l==n) & (m==2)) X Sx = ones(n,1)./abs(scale(:,1)); X SF = ones(n,1)./abs(scale(:,2)); X else X dout(16) = 1; X end Xend Xif (dout(16) == 0) X Sx = ones(n,1); X SF = ones(n,1); Xend Xif (dout(16) == 1) X if (any(x0==0)) X x0(find(x0==0)) = ones(sum(x0==0),1); X end X if (any(F0==0)) X F0(find(F0==0)) = ones(sum(F0==0),1); X end X Sx = ones(n,1)./abs(x0); X SF = ones(n,1)./abs(F0); Xend X X% Step 4. Xif (dout(12) <= 0) X dout(13) = eps; Xelse X dout(13) = max(eps,10^(-dout(12))); Xend Xif (dout(13) > .01) X termcode = -2; X return Xend X X% Step 5. Xif (dout(2) <= 0) X dout(2) = 1; % Default to linesearch. Xend Xif (((dout(2) == 2) | (dout(2) == 3)) & (dout(7) <= 0)) X dout(7) = -1; Xend X X% Step 6. Xif (dout(6) <= 1) X dout(6) = 100; % Default to 100 iteration limit. Xend Xif (dout(8) <= 0) X dout(8) = eps ^ (1/3); % fvectol. Xend Xif (dout(9) <= 0) X dout(9) = eps ^ (2/3); % steptol. Xend Xif (dout(10) <= 0) X dout(10) = eps ^ (2/3); % mintol. Xend Xif (dout(11) <= 0) X dout(11) = 1000 * max(norm(Sx .* x0),norm(diag(Sx))); % maxstep. Xend X END_OF_FILE if test 1806 -ne `wc -c <'neinck.m'`; then echo shar: \"'neinck.m'\" unpacked with wrong size! fi chmod +x 'neinck.m' # end of 'neinck.m' fi if test -f 'nelnsrch.m' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'nelnsrch.m'\" else echo shar: Extracting \"'nelnsrch.m'\" \(3418 characters\) sed "s/^X//" >'nelnsrch.m' <<'END_OF_FILE' Xfunction [retcode,xp,fp,Fp,maxtaken,nofun,btrack] = ... X nelnsrch(xc,fc,fn,g,p,sx,sf,details,nofun,btrack,fparam) X% X% [retcode,xp,fp,Fp,maxtaken,nofun,btrack] = ... X% nelnsrch(xc,fc,fn,g,p,sx,sf,details,nofun,btrack,fparam) X% X% This function is part of the Nonlinear Equations package and the X% Unconstrained Minimization package, see NESOLVE.M or UMSOLVE.M. X% X% It is a line search for use with Newton's Method of solving nonlinear X% equations. For function evaluations, it needs to know whether it is X% doing Nonlinear Equations (NE) or Unconstrained Minimization (UM); it X% distinguishes the two by the length of DETAILS, which is 16 for NE and X% 17 for UM. X% X% Algorithm A6.3.1: Part of the modular software system from the X% appendix of the book "Numerical Methods for Unconstrained Optimization X% and Nonlinear Equations" by Dennis & Schnabel, 1983. X% X% Coded in MATLAB by Richard T. Behrens, March 1988. X% Modified slightly for UM usage, January 1989. X% X X% X% Initialization. X% Xn = length(xc); Xxp = zeros(n,1); Xfp = 0; Xumflag = (length(details) == 17); % This is how we tell NE from UM. X X% X% Algorithm step 1. X% Xmaxtaken = 0; X X% X% Algorithm step 2. X% Xretcode = 2; X X% X% Algorithm step 3. X% Xalpha = 1E-4; X X% X% Algorithm step 4. X% Xnewtlen = norm(sx .* p); X X% X% Algorithm step 5. X% Xif (newtlen > details(11)) X p = p * (details(11) / newtlen); X newtlen = details(11); Xend X X% X% Algorithm step 6. X% Xinitslope = g'*p; X X% X% Algorithm step 7. X% Xrellength = max(abs(p)./max(abs(xc),(ones(n,1)./sx))); X X% X% Algorithm step 8. X% Xminlambda = details(9)/rellength; X X% X% Algorithm step 9. X% Xlambda = 1; X X% X% Algorithm step 10. X% Xbt = 0; Xwhile (retcode >= 2) X xp = xc + lambda*p; % step 10.1 X if umflag % step 10.2 X if details(15) X fp = feval(fn,xp,fparam); X else X fp = feval(fn,xp); X end X nofun = nofun + 1; X else X if details(15) X [fp,Fp,nofun] = nefn(xp,sf,fn,nofun,fparam); X else X [fp,Fp,nofun] = nefn(xp,sf,fn,nofun); X end X end X if (fp <= fc + alpha*lambda*initslope) % step 10.3a X retcode = 0; X maxtaken = ((lambda == 1) & (newtlen > 0.99*details(11))); X elseif (lambda < minlambda) % step 10.3b X retcode = 1; X xp = xc; X else % step 10.3c X if (lambda == 1) X if (details(1) > 0), disp('Quadratic Backtrack.'), end X bt = bt + 1; X lambdatemp = -initslope / (2*(fp-fc-initslope)); X else X if (details(1) > 0), disp('Cubic Backtrack.'), end X bt = bt + 1; X a = (1/(lambda - lambdaprev)) * [1/lambda^2 (-1/lambdaprev^2); ... X (-lambdaprev/(lambda^2)) lambda/(lambdaprev^2)] * ... X [(fp-fc-lambda*initslope); (fpprev-fc-lambdaprev*initslope)]; X disc = a(2)^2 - 3*a(1)*initslope; X if (a(1)==0) X lambdatemp = -initslope/(2*a(2)); X else X lambdatemp = (-a(2)+sqrt(disc))/(3*a(1)); X end X if (lambdatemp > 0.5*lambda) X lambdatemp = 0.5*lambda; X end X end X lambdaprev = lambda; X fpprev = fp; X if (lambdatemp <= 0.1*lambda) X lambda = 0.1*lambda; X else X lambda = lambdatemp; X end X end Xend Xif (bt < length(btrack)) X btrack(bt+1) = btrack(bt+1) + 1; Xelse X btrack(bt+1) = 1; Xend X END_OF_FILE if test 3418 -ne `wc -c <'nelnsrch.m'`; then echo shar: \"'nelnsrch.m'\" unpacked with wrong size! fi chmod +x 'nelnsrch.m' # end of 'nelnsrch.m' fi if test -f 'nemodel.m' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'nemodel.m'\" else echo shar: Extracting \"'nemodel.m'\" \(1740 characters\) sed "s/^X//" >'nemodel.m' <<'END_OF_FILE' Xfunction [m,h,sn] = nemodel(fc,J,g,sf,sx,globmeth) X% X% [m,h,sn] = nemodel(fc,J,g,sf,sx,globmeth) X% X% This function is part of the Nonlinear Equations package, see NESOLVE.M. X% X% It forms the affine model for use in solving nonlinear equations. X% X% Algorithm A6.5.1: Part of the modular software system from X% the appendix of the book "Numerical Methods for Unconstrained X% Optimization and Nonlinear Equations" by Dennis & Schnabel 1983. X% X% Coded in Matlab by Sherkat Masoum M., March 1988. X% Edited by Richard T. Behrens, June 1988. X% X% X% Algorithm step 1. X% Xn = length(J); Xm = diag(sf)*J; X X% X% Algorithm step 2. X% X[m,m1,m2,sing]=neqrdcmp(m); X X% X% Algorithm step 3. X% Xif (sing == 0) X for j=2:n X m(1:(j-1),j)=m(1:(j-1),j)/sx(j); X end X m2 = m2./sx; X est = neconest(m,m2); Xelse X est=0.; Xend X X% X% Algorithm step 4. X% Xif (sing ==1) | (est > 1./eps) X h = J'*diag(sf); X h = h*h'; X % calculate hnorm=norm(invDxHinvDx) X tem = abs(h(1,:)) * (ones(n,1)./sx); X hnorm=(1./sx(1))*tem; X for i=2:n X tem1=sum(abs(h(:,i))./sx); X tem2=sum(abs(h(i,:))./(sx.')); X temp=(1./sx(i))/(tem1+tem2); X hnorm=max(temp,hnorm); X end X h = h + sqrt(n*eps) * hnorm * (diag(sx)^2); X % caculate sn=inv(H)*g, and keep m (the cholesky factor) for later use. X [m,maxadd] = nechdcmp(h,0); X sn = -m'\(m\g); Xelse X % Calculate normal Newton step X for j=2:n X m(1:(j-1),j)=m(1:(j-1),j)*sx(j); X end X m2 = m2.*sx; X sn = -sf.*fc; X sn = neqrsolv(m,m1,m2,sn); X if (globmeth ==2) | (globmeth ==3) X % the cholesky factor (for later use) is the same as R' from QR. X m = triu(m) + triu(m)'; X m = m - diag(diag(m)) + diag(m2); X end X if (globmeth == 2) X L = tril(m); X h = L*L'; % This is J'*J, an approximation of H. X end Xend X END_OF_FILE if test 1740 -ne `wc -c <'nemodel.m'`; then echo shar: \"'nemodel.m'\" unpacked with wrong size! fi chmod +x 'nemodel.m' # end of 'nemodel.m' fi if test -f 'neqrdcmp.m' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'neqrdcmp.m'\" else echo shar: Extracting \"'neqrdcmp.m'\" \(1218 characters\) sed "s/^X//" >'neqrdcmp.m' <<'END_OF_FILE' Xfunction [M,M1,M2,sing] = neqrdcmp(M) X% X% [M,M1,M2,sing] = neqrdcmp(M) X% X% This function is part of the Nonlinear Equations package, see NESOLVE.M. X% X% It is a QR decomposition function. It differs from the one built X% into MATLAB in that the result is encoded as rotation angles. Also, X% it is designed for square matrices only. X% X% Algorithm A3.2.1: Part of the modular software system from the X% appendix of the book "Numerical Methods for Unconstrained Optimization X% and Nonlinear Equations" by Dennis & Schnabel, 1983. X% X% Coded in MATLAB by Richard T. Behrens, March 1988. X% X X% X% Check size of input argument and allocate variables. X% Xn = length(M); XM1 = zeros(n,1); XM2 = zeros(n,1); X X% X% Algorithm step 1. X% Xsing = 0; X X% X% Algorithm step 2. X% Xfor k = 1:(n-1) X eta = max(M(k:n,k)); X if (eta == 0) X M1(k) = 0; X M2(k) = 0; X sing = 1; X else X M(k:n,k) = M(k:n,k) / eta; X sigma = (sign(M(k,k))+(M(k,k)==0)) * norm(M(k:n,k)); X M(k,k) = M(k,k) + sigma; X M1(k) = sigma * M(k,k); X M2(k) = -eta * sigma; X tau = (M(k:n,k)' * M(k:n,(k+1):n)) / M1(k); X M(k:n,(k+1):n) = M(k:n,(k+1):n) - M(k:n,k) * tau; X end Xend X X% X% Algorithm step 3. X% XM2(n) = M(n,n); X END_OF_FILE if test 1218 -ne `wc -c <'neqrdcmp.m'`; then echo shar: \"'neqrdcmp.m'\" unpacked with wrong size! fi chmod +x 'neqrdcmp.m' # end of 'neqrdcmp.m' fi if test -f 'neqrsolv.m' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'neqrsolv.m'\" else echo shar: Extracting \"'neqrsolv.m'\" \(652 characters\) sed "s/^X//" >'neqrsolv.m' <<'END_OF_FILE' Xfunction b = neqrsolv(M,M1,M2,b) X% X% b = neqrsolv(M,M1,M2,b) X% X% This function is part of the Nonlinear Equations package, see NESOLVE.M. X% X% It is a linear equation solve function using the QR decomposition. X% X% Algorithm A3.2.2: Part of the modular software system from the X% appendix of the book "Numerical Methods for Unconstrained Optimization X% and Nonlinear Equations" by Dennis & Schnabel, 1983. X% X% Coded in MATLAB by Richard T. Behrens, March 1988. X% X X% X% Algorithm step 1. X% Xn = length(M); Xfor j = 1:(n-1) X tau = (M(j:n,j)' * b(j:n)) / M1(j); X b(j:n) = b(j:n) - tau * M(j:n,j); Xend X X% X% Algorithm step 2. X% Xb = nersolv(M,M2,b); X END_OF_FILE if test 652 -ne `wc -c <'neqrsolv.m'`; then echo shar: \"'neqrsolv.m'\" unpacked with wrong size! fi chmod +x 'neqrsolv.m' # end of 'neqrsolv.m' fi if test -f 'nersolv.m' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'nersolv.m'\" else echo shar: Extracting \"'nersolv.m'\" \(628 characters\) sed "s/^X//" >'nersolv.m' <<'END_OF_FILE' Xfunction b = nersolv(M,M2,b) X% X% b = nersolv(M,M2,b) X% X% This function is part of the Nonlinear Equations package, see NESOLVE.M. X% X% It is a linear equation solve function for upper triangular systems. X% X% Algorithm A3.2.2a: Part of the modular software system from the X% appendix of the book "Numerical Methods for Unconstrained Optimization X% and Nonlinear Equations" by Dennis & Schnabel, 1983. X% X% Coded in MATLAB by Richard T. Behrens, March 1988. X% X X% X% Algorithm step 1. X% Xn = length(M); Xb(n) = b(n) / M2(n); X X% X% Algorithm step 2. X% Xfor i = (n-1):-1:1 X b(i) = (b(i) - M(i,(i+1):n) * b((i+1):n)) / M2(i); Xend X END_OF_FILE if test 628 -ne `wc -c <'nersolv.m'`; then echo shar: \"'nersolv.m'\" unpacked with wrong size! fi chmod +x 'nersolv.m' # end of 'nersolv.m' fi if test -f 'nesolve.m' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'nesolve.m'\" else echo shar: Extracting \"'nesolve.m'\" \(8195 characters\) sed "s/^X//" >'nesolve.m' <<'END_OF_FILE' Xfunction [xf,termcode,path] = fsolve(fvec,x0,details,fparam,jac,scale) X%FSOLVE Solution to a system of nonlinear equations. X% X = FSOLVE('f',X0) starts at X0 and produces a new vector X which X% solves for f(x) = 0. 'f' is a string containing the name of the X% function to be solved, normally an M-file. For example, to X% find the x, y, and z that solve the simultaneous equations X% X% sin(x) + y^2 + log(z) - 7 = 0 X% 3*x + 2^y - z^3 + 1 = 0 X% x + y + z - 5 = 0 X% X% Use X = FSOLVE('xyz',[1 1 1]') where XYZ is the M-file X% X% function q = xyz(p) X% x = p(1); y = p(2); z = p(3); X% q = zeros(3,1); X% q(1) = sin(x) + y^2 + log(z) - 7; X% q(2) = 3*x + 2^y - z^3 + 1; X% q(3) = x + y + z - 5; X% X% FSOLVE can take many other optional parameters; see the M-file X% for more information. X X% Copyright (c) 1988 by the MathWorks, Inc. X% Coded in MATLAB by Richard T. Behrens, April 1988. X% Revised 11/27/88 JNL X% Hookstep option added 8/21/90 RTB. X X% [XF,TERMCODE,PATH] = FSOLVE(FVEC,X0,DETAILS,FPARAM,JAC,SCALE) X% X% This function is for solving systems of nonlinear equations. For more X% information see a users guide. X% X% ^* INPUTS ^* X% FVEC - The name of a function which maps n-vectors into n-vectors. X% X0 - An initial guess of a solution (starting point for iterations). X% DETAILS - (optional) A vector whose elements select various algorithmic X% options and specify various tolerances. X% FPARAM - (optional) A set of parameters (constants) which, if nonempty, X% is passed on as a second argument to FVEC and JAC. X% JAC - (optional) The name of a function which implements the jacobian X% matrix (if available) of the function named in FVEC. X% SCALE - (optional) 'Typical' values of X (1st column) and F (2nd col.) X% for scaling purposes (no zeros in SCALE, please). X% ^* OUTPUTS ^* X% XF - The final approximation of the solution. X% TERMCODE - (optional) Indicates the stopping reason (equals 1 for normal X% termination). X% PATH - (optional) Returns the sequence of iterates. X% X% --> NOTE: All vectors must be column-vectors. X X% Based on Algorithm D6.1.3: Part of the modular software system from the X% appendix of the book "Numerical Methods for Unconstrained Optimization and X% Nonlinear Equations" by Dennis & Schnabel, 1983. Please refer to that book X% if you need more detailed information about the algorithms. X X% Initialization. X% Xif (nargin < 3) X details = zeros(16,1); Xend Xi = length(details); Xif (i < 16) X details((i+1):16,1) = zeros(16-i,1); % For unspecified details. Xend Xif (nargin < 4) X details(15) = 0; % No parameters to pass. Xelseif isempty(fparam) X details(15) = 0; Xelse X details(15) = 1; Xend Xif (details(15) == 0) X fparam = []; Xend Xif (nargin < 5) X details(4) = 0; % No analytic jacobian. Xelseif isempty(jac) X details(4) = 0; Xend Xif (details(4) == 0) X jac = ''; Xend Xif (nargin < 6) X scale = []; % No scaling given. X if (details(16) == 2) X details(16) = 1; X end Xend Xif (nargout < 3) X details(14) = 0; % No path output. Xelse X details(14) = 1; Xend Xif details(14), path = x0.'; end Xif (details(1) == 2), btrack = []; end Xnofun = 0; % Number of function evaluations. Xtrustvars = zeros(4,1); % variables for trust region methods. X X X% X% Algorithm step 2. X% Xif (details(16) > 0) % Might need F(x0) for scaling. X if details(15) X [fc,FVplus,nofun] = nefn(x0,ones(length(x0),1),fvec,nofun,fparam); X else X [fc,FVplus,nofun] = nefn(x0,ones(length(x0),1),fvec,nofun); X end Xelse X FVplus = zeros(length(x0),1); Xend X[details,Sx,SF,termcode] = neinck(x0,FVplus,details,scale); X X% X% Algorithm step 3. X% Xif (termcode < 0) X xf = x0; X if details(14), path = [path;xf.']; end X return Xend X X% X% Algorithm step 4. X% Xitncount = 0; X X% X% Algorithm step 5. X% Xif details(15) X [fc,FVplus,nofun] = nefn(x0,SF,fvec,nofun,fparam); Xelse X [fc,FVplus,nofun] = nefn(x0,SF,fvec,nofun); Xend X X% X% Algorithm step 6. X% X%[termcode,consecmax] = nestop0(x0,FVplus,SF,details(8)); Xconsecmax = 0; Xif (max(SF .* abs(FVplus)) <= 1E-2 * details(8)) X termcode = 1; Xelse X termcode = 0; Xend X X% X% Algorithm step 7. X% Xif (termcode > 0) X xf = x0; X if (details(14)), path = [path;xf.']; end Xelse X if details(4) X if details(15) X [Jc,addfun] = feval(jac,x0,fparam); X else X [Jc,addfun] = feval(jac,x0); X end X nofun = nofun + addfun; X else X [Jc,nofun] = nefdjac(fvec,FVplus,x0,Sx,details,nofun,fparam); X end X gc = Jc' * (FVplus .* (SF.^2)); X FVc = FVplus; Xend X X% X% Algorithm step 8. X% Xxc = x0; X X% X% Algorithm step 9. X% Xrestart = 1; Xnorest = 0; X X% X% Algorithm step 10 (iteration). X% X%%if (details(1) > 0), clc, end Xif details(1) X disp('ITN F-COUNT NORM(F)') Xend X Xwhile (termcode == 0) X if details(1) X disp(sprintf('%3d %8d %15g',itncount,nofun,norm(FVc))) X end X itncount = itncount + 1; X if (details(4) | details(3) | (1-details(5))) X [M,Hc,sN] = nemodel(FVc,Jc,gc,SF,Sx,details(2)); X else X error('Factored model not implemented.') X% [] = nemodfac(); X end X if (details(2) == 1) X [retcode,xplus,fplus,FVplus,maxtaken,nofun,btrack] = ... X nelnsrch(xc,fc,fvec,gc,sN,Sx,SF,details,nofun,btrack,fparam); X elseif (details(2) == 2) X [retcode,xplus,fplus,FVplus,maxtaken,details,trustvars,nofun] = ... X nehook(xc,fc,fvec,gc,tril(M),Hc,sN,Sx,SF,details,itncount,trustvars,... X nofun,fparam); X else X error('Dogleg not implemented.') X% [] = nedogdrv(); X end X if ((retcode ~= 1) | (restart) | (details(4)) | (details(3))) X if (details(4)) X if details(15) X [Jc,addfun] = feval(jac,xplus,fparam); X else X [Jc,addfun] = feval(jac,xplus); X end X nofun = nofun + addfun; X elseif (details(3)) X [Jc,nofun] = nefdjac(fvec,FVplus,xplus,Sx,details,nofun,fparam); X elseif (details(5)) X error('Factored secant method not implemented.') X% [] = nebroyf(); X else X Jc = nebroyuf(Jc,xc,xplus,FVc,FVplus,Sx,details(13)); % Broyden update X end X if (details(5)) X error('Gradient calculation for factored method not implemented.') X % Calculate gc using QR factorization (see book). X else X gc = Jc' * (FVplus .* (SF.^2)); X end X [consecmax,termcode] = nestop(xc,xplus,FVplus,fplus,gc,Sx,SF,retcode,... X details,itncount,maxtaken,consecmax); X end X if (((retcode == 1) | (termcode == 2)) & (1-restart) & ... X (1-details(4)) & (1-details(3))) X [Jc,nofun] = nefdjac(fvec,FVc,xc,Sx,details,nofun,fparam); X gc = Jc' * (FVc .* (SF.^2)); X if ((details(2) == 2) | (details(2) == 3)) X details(7) = -1; X end X restart = 1; X norest = norest + 1; X if termcode==2, termcode = 0; end %***added by TAD X else X if (termcode > 0) X xf = xplus; X if (details(14)), path = [path;xf.']; end X else X restart = 0; X if (details(14)), path = [path;xplus.']; end X end X xc = xplus; X fc = fplus; X FVc = FVplus; X%% if (details(1) > 0) X%% clc X%% disp('The current iteration is: ') X%% xc X%% end X end Xend X Xif (details(1) == 2) X %%disp('Press CR to see statistics . . .') X %%fprintf([' ',7]) X %%pause X X %%clc X %%format compact X disp(' ') X %%disp('Function: ') X %%fvec X %%disp('Starting point: ') X %%x0.' X %%disp('Termination condition: ') X %%termcode X disp(sprintf('Number of iterations: %d',itncount)) X disp(sprintf('Number of function evaluations: %d',nofun)) X disp(sprintf('Final norm(F(x)): %.6g',norm(FVc))) X if ((1-details(3)) & (1-details(4))) X disp(sprintf('Number of restarts for secant methods: %d',norest)) X end X%% if (details(2) == 1) X%% disp('Backtrack information: ') X%% btrack X%% end X%% pause Xend X X X X X X X END_OF_FILE if test 8195 -ne `wc -c <'nesolve.m'`; then echo shar: \"'nesolve.m'\" unpacked with wrong size! fi chmod +x 'nesolve.m' # end of 'nesolve.m' fi if test -f 'nestop.m' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'nestop.m'\" else echo shar: Extracting \"'nestop.m'\" \(1348 characters\) sed "s/^X//" >'nestop.m' <<'END_OF_FILE' Xfunction [consecmax,termcode] = nestop(xc,xp,F,Fnorm,g,sx,sf,retcode,... X details,itncount,maxtaken,consecmax) X% X% [consecmax,termcode] = nestop(xc,xp,F,Fnorm,g,sx,sf,retcode,... X% details,itncount,maxtaken,consecmax) X% X% This function is part of the Nonlinear Equations package, see NESOLVE.M. X% X% It decides whether or not to stop iterating when solving a set of X% nonlinear equations. X% X% Algorithm A7.2.3: Part of the modular software system from the X% appendix of the book "Numerical Methods for Unconstrained Optimization X% and Nonlinear Equations" by Dennis & Schnabel, 1983. X% X% Coded in MATLAB by Richard T. Behrens, March 1988. X% X X% X% Algorithm step 1. X% Xn = length(xc); Xtermcode = 0; X X% X% Algorithm step 2. X% Xif (retcode == 1) X termcode = 3; Xelseif (max(sf .* abs(F)) <= details(8)) X termcode = 1; Xelseif (max( abs(xp - xc) ./ max(abs(xp),ones(n,1)./sx)) <= details(9)) X termcode = 2; Xelseif (itncount >= details(6)) X termcode = 4; Xelseif (maxtaken) X consecmax = consecmax + 1; X if (consecmax == 5) X termcode = 5; X end Xelse X consecmax = 0; X if (details(4) | details(3)) X if (max(abs(g).*max(abs(xp),ones(n,1)./sx)/max(Fnorm,(n/2))) ... X <= details(10)) X termcode = 6; X end X end Xend X END_OF_FILE if test 1348 -ne `wc -c <'nestop.m'`; then echo shar: \"'nestop.m'\" unpacked with wrong size! fi chmod +x 'nestop.m' # end of 'nestop.m' fi if test -f 'netestf1.m' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'netestf1.m'\" else echo shar: Extracting \"'netestf1.m'\" \(519 characters\) sed "s/^X//" >'netestf1.m' <<'END_OF_FILE' Xfunction f=netestf1(x) X% X% f = netestf1(x) X% X% Helical Valley Function. This function is primarily for testing X% the nonlinear equations package (see NESOLVE), and is used by NEDEMO. X% The function is taken from Appendix B of "Numerical Methods for X% Unconstrained Optimization and Nonlinear Equations" by Dennis and Schnabel. X% X X% n = 3; Xf = zeros(3,1); Xtheta = (1/(2*pi)) * atan(x(2)/x(1)); Xif (x(1) < 0), theta = theta + .5; end Xf(1) = 10 * (x(3) - 10*theta); Xf(2) = 10 * (sqrt(x(1)^2 + x(2)^2) - 1); Xf(3) = x(3); X END_OF_FILE if test 519 -ne `wc -c <'netestf1.m'`; then echo shar: \"'netestf1.m'\" unpacked with wrong size! fi chmod +x 'netestf1.m' # end of 'netestf1.m' fi if test -f 'netrust.m' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'netrust.m'\" else echo shar: Extracting \"'netrust.m'\" \(3387 characters\) sed "s/^X//" >'netrust.m' <<'END_OF_FILE' Xfunction [xp,fp,Fp,maxtaken,retcode,xpprev,fpprev,Fpprev,details,nofun] = ... X netrust(retcode,xpprev,fpprev,Fpprev,xc,fc,fn,g,L,s,sx,sf,... X newttaken,details,steptype,H,umflag,nofun,fparam) X% X% function [xp,fp,Fp,maxtaken,retcode,xpprev,fpprev,Fpprev,details,nofun] = ... X% netrust(retcode,xpprev,fpprev,Fpprev,xc,fc,fn,g,L,s,sx,sf,... X% newttaken,details,steptype,H,umflag,nofun,fparam) X% X% This function is part of the Nonlinear Equations package and the X% Unconstrained Minimization package, see NESOLVE.M or UMSOLVE.M. X% X% It decides whether or not the proposed step is acceptable, and adjusts X% the trust radius accordingly. X% X X% X% Algorithm A6.4.5: Part of the modular software system from the X% appendix of the book "Numerical Methods for Unconstrained Optimization X% and Nonlinear Equations" by Dennis & Schnabel, 1983. X% X% Coded in MATLAB by Richard T. Behrens, August 1990. X% X X% X% Initialization. X% Xn = length(xc); Xxp = zeros(n,1); Xfp = 0; X X% X% Algorithm steps 1-4. X% Xmaxtaken = 0; Xalpha = 1e-4; Xsteplen = norm(sx.*s); Xxp = xc + s; X X% X% Algorithm step 5. X% Xif umflag X if details(15) X fp = feval(fn,xp,fparam); X else X fp = feval(fn,xp); X end X nofun = nofun + 1; Xelse X if details(15) X [fp,Fp,nofun] = nefn(xp,sf,fn,nofun,fparam); X else X [fp,Fp,nofun] = nefn(xp,sf,fn,nofun); X end Xend X X% X% Algorithm steps 6-8. X% Xdeltaf = fp - fc; Xinitslope = g'*s; Xif (retcode~=3), fpprev = 0; end X X% X% Algorithm step 9. X% Xif ((retcode==3)&((fp>=fpprev)|(deltaf>alpha*initslope))) % step 9a. X retcode = 0; X xp = xpprev; X fp = fpprev; X Fp = Fpprev; X details(7) = details(7)/2; X if (details(1)>0), disp('Decreasing trust radius.'), end Xelse X if (deltaf >= alpha*initslope) % step 9b. X rellength = max(s./max([abs(xp)'; 1.0./sx'])'); X if (rellength.5*details(7)) X details(7) = .5*details(7); X else X details(7) = deltatemp; X end X if (details(1)>0), disp('Decreasing trust radius.'), end X end X else % step 9c. X deltafpred = initslope; X if (steptype==1) X deltafpred = deltafpred + .5*(s'*H*s); X else X ttemp = L'*s; X deltafpred = deltafpred + .5*(ttemp'*ttemp); X end X if ((retcode~=2)&((abs(deltafpred-deltaf)<=.1*abs(deltaf)) | ... X (deltaf<=initslope)) & (~newttaken) & (details(7)<=.99*details(11))) X retcode = 3; X xpprev = xp; X fpprev = fp; X Fpprev = Fp; X details(7) = min(2*details(7),details(11)); % details(11) is maxstep X if (details(1)>0), disp('Increasing trust radius.'), end X else X retcode = 0; X if (steplen > .99*details(11)), maxtaken=1; end X if (deltaf>=.1*deltafpred) X details(7) = details(7)/2; X if (details(1)>0), disp('Decreasing trust radius.'), end X elseif (deltaf<=.75*deltafpred) X details(7) = min(2*details(7),details(11)); X if (details(1)>0), disp('Increasing trust radius.'), end X end X end X end Xend X END_OF_FILE if test 3387 -ne `wc -c <'netrust.m'`; then echo shar: \"'netrust.m'\" unpacked with wrong size! fi chmod +x 'netrust.m' # end of 'netrust.m' fi if test -f 'plotpoly.m' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'plotpoly.m'\" else echo shar: Extracting \"'plotpoly.m'\" \(2618 characters\) sed "s/^X//" >'plotpoly.m' <<'END_OF_FILE' Xfunction edgehandles = plotpoly(w,beta) X%PLOTPOLY Plot a (generalized) polygon. X% PLOTPOLY(W,BETA) plots the polygon whose vertices are in vector W X% and whose turning angles are in BETA. Vertices at infinity are X% permitted, but there must be at least two consecutive finite X% vertices somewhere in W. X% X% H = PLOTPOLY(W,BETA) returns a vector of handles to the polygon X% sides. X% X% See also DRAWPOLY, MODPOLY. X% X% Written by Toby Driscoll. Last updated 5/24/95. X Xif nargin < 3 X thick = 3; Xend Xturn_off_hold = ~ishold; X%set(gcf,'defaultlinelinewidth',2.5*get(gcf,'defaultlinelinewidth')); Xlw = 2*get(gcf,'defaultlinelinewidth'); Xn = length(w); X%w = w+i*1e-12; Xwf = w(~isinf(w)); Xautoscale = strcmp(get(gca,'xlimmode'),'auto') & ... X strcmp(get(gca,'ylimmode'),'auto'); Xautoscale = autoscale | turn_off_hold; Xif autoscale X lim = [min(real(wf)),max(real(wf)),min(imag(wf)),max(imag(wf))]; X maxdiff = max(diff(lim(1:2)),diff(lim(3:4))); Xelse X lim = axis; Xend Xfirst = 1; Xif ~any(isinf(w)) X for j = 1:n-1 X edgeh(j) = plot(real(w(j:j+1)),imag(w(j:j+1)),'-','linewid',lw); X if j==1, hold on; end; X end X edgeh(n) = plot(real(w([n,1])), imag(w([n,1])),'-','linewid',lw); X if autoscale X lim(1:2) = mean(lim(1:2)) + 0.55*maxdiff*[-1,1]; X lim(3:4) = mean(lim(3:4)) + 0.55*maxdiff*[-1,1]; X end X axis(lim) Xelse X if any(isinf(w(1:2))) X first = min(find(~isinf(w) & ~isinf(w([2:n,1])))); X if isempty(first), X error('There must be two consecutive finite vertices.') X end X w = w([first:n,1:first-1]); X beta = beta([first:n,1:first-1]); X end X edgeh(1) = plot(real(w(1:2)),imag(w(1:2)),'-','linewid',lw); X ang = angle(w(2)-w(1)); X if autoscale X lim(1:2) = mean(lim(1:2)) + 0.65*maxdiff*[-1,1]; X lim(3:4) = mean(lim(3:4)) + 0.65*maxdiff*[-1,1]; X end X R = max(lim(2)-lim(1),lim(4)-lim(3)); X axis(lim) X hold on X j = 2; X while j < n X if ~isinf(w(j+1)) X edgeh(j) = plot(real(w(j:j+1)),imag(w(j:j+1)),'-','linewid',lw); X ang = ang - pi*beta(j); X j = j+1; X else X ang = ang-pi*beta(j); X z = [w(j);w(j)+R*exp(i*ang)]; X edgeh(j) = plot(real(z),imag(z),'-','linewid',lw); X ang = ang-pi*beta(j+1); X z = [w(rem(j+1,n)+1)-R*exp(i*ang);w(rem(j+1,n)+1)]; X edgeh(j+1) = plot(real(z),imag(z),'-','linewid',lw); X j = j+2; X end X end X if j==n X edgeh(n) = plot(real(w([n,1])),imag(w([n,1])),'-','linewid',lw); X end Xend X Xaxis square Xaxis equal Xif nargout X edgehandles([first:n,1:first-1]) = edgeh; Xend X%set(gcf,'defaultlinelinewidth',get(gcf,'defaultlinelinewidth')/1.6); Xif turn_off_hold X hold off Xend X END_OF_FILE if test 2618 -ne `wc -c <'plotpoly.m'`; then echo shar: \"'plotpoly.m'\" unpacked with wrong size! fi chmod +x 'plotpoly.m' # end of 'plotpoly.m' fi if test -f 'ptsource.m' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'ptsource.m'\" else echo shar: Extracting \"'ptsource.m'\" \(1350 characters\) sed "s/^X//" >'ptsource.m' <<'END_OF_FILE' Xfunction ptsource(w,beta,z,c,ws,R,theta,options) X%PTSOURCE Field due to point source in a polygon. X% PTSOURCE plots evenly spaced equipotential and force lines for a X% point source located in a polygonal region. This is equivalent X% to the disk map with conformal center at the source. With no X% arguments the user draws the polygon and clicks the mouse at the X% source. X% X% PTSOURCE(W,BETA) uses the polygon described by W and BETA. X% X% PTSOURCE(W,BETA,Z,C) assmues that Z and C comprise the solution X% to the disk mapping parameter problem, as returned by DPARAM. X% X% PTSOURCE(W,BETA,Z,C,WS) uses WS as the source location. X% X% PTSOURCE(W,BETA,Z,C,WS,R,THETA,OPTIONS) uses the R, THETA, and X% OPTIONS parameter as described in SCPLOTOPT. X% X% See also DFIXWC. X% X% Written by Toby Driscoll. Last updated 5/23/95. X Xif nargin < 2 X [w,beta] = drawpoly; Xend Xn = length(w); Xif nargin < 8 X options = []; X if nargin < 7 X theta = []; X if nargin < 6 X R = []; X if nargin < 5 X ws = []; X if nargin < 4 X z = []; X end X end X end X end Xend X Xif isempty(z) X [z,c] = dparam(w,beta); Xend X Xif isempty(ws) X plotpoly(w,beta) X disp('Click mouse at source location.') X [xc,yc] = ginput(1); X ws = xc+i*yc; Xend X X[z,c] = dfixwc(w,beta,z,c,ws); Xdplot(w,beta,z,c,R,theta,options); END_OF_FILE if test 1350 -ne `wc -c <'ptsource.m'`; then echo shar: \"'ptsource.m'\" unpacked with wrong size! fi chmod +x 'ptsource.m' # end of 'ptsource.m' fi if test -f 'r2strip.m' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'r2strip.m'\" else echo shar: Extracting \"'r2strip.m'\" \(1487 characters\) sed "s/^X//" >'r2strip.m' <<'END_OF_FILE' Xfunction [yp,yprime] = r2strip(zp,z,L) X%R2STRIP Map from rectangle to strip. X% R2STRIP(ZP,Z,L) maps from a rectangle to the strip 0 <= Im z X% <= 1, with the function log(sn(z|m))/pi, where sn is a Jacobi X% elliptic function and m = exp(-2*pi*L). The prevertices of the X% map (in the rectangle domain) are given by Z; only the corners X% of the rectangle defined by Z are used. X% X% The functionality is NOT parallel to HP2DISK and DISK2HP. X% X% Written by Toby Driscoll. Last updated 5/23/95. X X% Uses different forms based on conformal modulus of the rectangle to avoid X% underflow when modulus is large (as measured by L, separation between X% corner images on the strip). Also returns the derivative of the map at X% the given points. X XK = max(real(z)); XKp = max(imag(z)); Xyp = zp; Xyprime = zp; Xif L < 5.9 X m = exp(-2*pi*L); X [sn1,cn1,dn1] = ellipj(real(zp),m); X [sn2,cn2,dn2] = ellipj(imag(zp),1-m); X sn = (sn1.*dn2 + i*sn2.*cn2.*cn1.*dn1)./(cn2.^2 + m*sn1.^2.*sn2.^2); X yp(:) = log(sn)/pi; X yprime(:) = sqrt((1-sn.^2)).*sqrt((1-m*sn.^2))./(pi*sn); Xelse X high = imag(zp) > Kp/2; X yp(~high) = (-i*zp(~high) + log(-i/2*(exp(2*i*zp(~high))-1)))/pi; X yprime(~high) = i*(2./(1-exp(-2*i*zp(~high)))-1)/pi; X u = i*Kp-zp(high); X yp(high) = L + i+ (i*u - log(-i/2*(exp(2*i*u)-1)))/pi; X yprime(high) = i*(2./(1-exp(-2*i*u))-1)/pi; Xend X X% Make sure everything is in the strip (roundoff could put it outside) Xyp = real(yp) + i*max(0,imag(yp)); Xyp = real(yp) + i*min(1,imag(yp)); X END_OF_FILE if test 1487 -ne `wc -c <'r2strip.m'`; then echo shar: \"'r2strip.m'\" unpacked with wrong size! fi chmod +x 'r2strip.m' # end of 'r2strip.m' fi if test -f 'rcorners.m' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'rcorners.m'\" else echo shar: Extracting \"'rcorners.m'\" \(848 characters\) sed "s/^X//" >'rcorners.m' <<'END_OF_FILE' Xfunction [w,beta,z,corners] = rcorners(w,beta,z) X%RCORNERS (not intended for calling directly by the user) X% Find corners of rectangle whose map is represented by X% prevertices z on the strip, then renumber w, beta, and z (and X% the corners) so that corners(1)=1. X% X% Written by Toby Driscoll. Last updated 5/23/95. X Xn = length(w); X X% Deduce corner locations Xleft = abs(real(z)-min(real(z))) < eps; Xright = abs(real(z)-max(real(z))) < eps; Xtop = abs(imag(z)-max(imag(z))) < eps; Xbot = abs(imag(z)-min(imag(z))) < eps; Xcorners = find(left+right+top+bot - 1); Xc1 = find(abs(z-max(real(z))) < eps); Xoffset = find(corners==c1); Xcorners = corners([offset:4,1:offset-1]); X X% Renumber vertices so that corners(1)=1 Xrenum = [corners(1):n,1:corners(1)-1]; Xw = w(renum); Xbeta = beta(renum); Xz = z(renum); Xcorners = rem(corners-corners(1)+1+n-1,n)+1; X END_OF_FILE if test 848 -ne `wc -c <'rcorners.m'`; then echo shar: \"'rcorners.m'\" unpacked with wrong size! fi chmod +x 'rcorners.m' # end of 'rcorners.m' fi if test -f 'rderiv.m' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'rderiv.m'\" else echo shar: Extracting \"'rderiv.m'\" \(1099 characters\) sed "s/^X//" >'rderiv.m' <<'END_OF_FILE' Xfunction fprime = rderiv(zp,z,beta,L,zs) X%RDERIV Derivative of the rectangle map. X% RDERIV(ZP,Z,BETA,L) returns the derivative at the points of ZP of X% the Schwarz-Christoffel rectangle map whose prevertices are Z, X% turning angles are BETA, and aspect ratio parameter is L. X% X% If a fifth argument is supplied, it is assumed to be the image X% of Z on the intermediate strip; see R2STRIP. X% X% Don't forget the multiplicative constant in the SC map! X% X% See also RPARAM, RMAP, R2STRIP. X% X% Written by Toby Driscoll. Last updated 5/24/95. X Xn = length(z); X Xif nargin < 5 X % Find prevertices on the strip X zs = r2strip(z,z,L); X zs = real(zs) + i*round(imag(zs)); % put them *exactly* on edges Xend X X% First compute map and derivative from rectangle to strip X[F,dF] = r2strip(zp,z,L); X X% Now compute derivative of map from strip to polygon X[tmp,j1] = min(zs); Xrenum = [j1:n,1:j1-1]; Xzs = zs(renum); Xbeta = beta(renum); Xnb = sum(~imag(zs)); Xzs = zs(:); Xzs = [-Inf; zs(1:nb); Inf; zs(nb+1:n)]; Xbetas = [0; beta(1:nb); 0; beta(nb+1:n)]; XdG = stderiv(F,zs,betas); X X% Put it together Xfprime = dF.*dG; X END_OF_FILE if test 1099 -ne `wc -c <'rderiv.m'`; then echo shar: \"'rderiv.m'\" unpacked with wrong size! fi chmod +x 'rderiv.m' # end of 'rderiv.m' fi if test -f 'rdisp.m' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'rdisp.m'\" else echo shar: Extracting \"'rdisp.m'\" \(1674 characters\) sed "s/^X//" >'rdisp.m' <<'END_OF_FILE' Xfunction rdisp(w,beta,z,c,L) X%RDISP Display results of Schwarz-Christoffel rectangle parameter problem. X% RDISP(W,BETA,RECT,Z,C) displays the results of RPARAM in a X% pleasant way. X% X% See also RPARAM, RPLOT. X% X% Written by Toby Driscoll. Last updated 5/24/95. X Xn = length(w); X% Deduce corner locations Xleft = abs(real(z)-min(real(z))) < eps; Xright = abs(real(z)-max(real(z))) < eps; Xtop = abs(imag(z)-max(imag(z))) < eps; Xbot = abs(imag(z)-min(imag(z))) < eps; Xcorners = find(left+right+top+bot - 1); Xc1 = find(abs(z-max(real(z))) < eps); Xoffset = find(corners==c1); Xcorners = corners([offset:4,1:offset-1]); Xrect = z(corners); X Xdisp(' ') Xdisp(' cnr w beta z ') Xdisp(' ------------------------------------------------------------------------') Xu = real(w); Xv = imag(w); Xfor j = 1:length(w) X if v(j) < 0 X s = '-'; X else X s = '+'; X end X cnr = find(j==corners); X if isempty(cnr) X cstr = ' '; X else X cstr = sprintf(' %i ',cnr); X end X if ~imag(z(j)) X disp(sprintf('%s %8.5f %c %7.5fi %8.5f %16.8e',... X cstr,u(j),s,abs(v(j)),beta(j),z(j))); X else X disp(sprintf('%s %8.5f %c %7.5fi %8.5f %16.8e + %14.8ei',... X cstr,u(j),s,abs(v(j)),beta(j),real(z(j)),imag(z(j)))); X end Xend Xdisp(' ') Xif imag(c) < 0 X s = '-'; Xelse X s = '+'; Xend Xdisp(sprintf(' c = %.8g %c %.8gi',real(c),s,abs(imag(c)))) Xdisp(sprintf('\n Conformal modulus = %.8g',imag(rect(2))/rect(1)/2)); X%disp(sprintf('\n Rectangle corners:')) X%R = [rect(1);real(rect(2));imag(rect(2));real(rect(3));imag(rect(3));rect(4)]; X%disp(sprintf(' %.4f, %.4f + %.4fi, %.4f + %.4fi, %.4f',R)) X END_OF_FILE if test 1674 -ne `wc -c <'rdisp.m'`; then echo shar: \"'rdisp.m'\" unpacked with wrong size! fi chmod +x 'rdisp.m' # end of 'rdisp.m' fi if test -f 'rimapf1.m' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'rimapf1.m'\" else echo shar: Extracting \"'rimapf1.m'\" \(385 characters\) sed "s/^X//" >'rimapf1.m' <<'END_OF_FILE' Xfunction zdot = rimapf1(wp,yp); X%RIMAPF1 (not intended for calling directly by the user) X% Used by RINVMAP for solution of an ODE. X Xglobal SCIMDATA X Xlenyp = length(yp); Xlenzp = lenyp/2; Xzp = yp(1:lenzp)+sqrt(-1)*yp(lenzp+1:lenyp); Xn = SCIMDATA(1,5); X Xf = SCIMDATA(1:lenzp,1)./rderiv(zp,SCIMDATA(1:n,2),SCIMDATA(1:n,3),... X SCIMDATA(2,5),SCIMDATA(1:n,4)); Xzdot = [real(f);imag(f)]; END_OF_FILE if test 385 -ne `wc -c <'rimapf1.m'`; then echo shar: \"'rimapf1.m'\" unpacked with wrong size! fi chmod +x 'rimapf1.m' # end of 'rimapf1.m' fi if test -f 'rinvmap.m' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'rinvmap.m'\" else echo shar: Extracting \"'rinvmap.m'\" \(3410 characters\) sed "s/^X//" >'rinvmap.m' <<'END_OF_FILE' Xfunction zp = rinvmap(wp,w,beta,z,c,L,qdat,z0,options) X%RINVMAP Schwarz-Christoffel rectangle inverse map. X% RINVMAP(WP,W,BETA,CORNERS,Z,C,L,QDAT) computes the inverse of X% the Schwarz-Christoffel rectangle map (i.e., from the polygon to X% the rectangle) at the points given in vector WP. The other X% arguments are as in RPARAM. QDAT may be omitted. X% X% The default algorithm is to solve an ODE in order to obtain a fair X% approximation for ZP, and then improve ZP with Newton iterations. X% The ODE solution at WP requires a vector Z0 whose forward image W0 X% is such that for each j, the line segment connecting WP(j) and W0(j) X% lies inside the polygon. By default Z0 is chosen by a fairly robust X% automatic process. Using a parameter (see below), you can choose to X% use either an ODE solution or Newton iterations exclusively. X% X% RINVMAP(WP,...,QDAT,Z0) has two interpretations. If the ODE X% solution is being used, Z0 overrides the automatic selection of X% initial points. (This can be handy in convex polygons, where the X% choice of Z0 is trivial.) Otherwise, Z0 is taken as an initial X% guess to ZP. In either case, if length(Z0)==1, the value Z0 is used X% for all elements of WP; otherwise, length(Z0) should equal X% length(WP). X% X% RINVMAP(WP,...,QDAT,Z0,OPTIONS) uses a vector of parameters X% that control the algorithm. See SCIMAPOPT. X% X% See also SCIMAPOPT, RPARAM, RMAP. X% X% Written by Toby Driscoll. Last updated 5/24/95. X Xn = length(w); Xw = w(:); Xbeta = beta(:); Xz = z(:); X[w,beta,z,corners] = rcorners(w,beta,z); Xrect = z(corners); XK = max(real(z)); XKp = max(imag(z)); Xzs = r2strip(z,z,L); Xzs = real(zs) + i*round(imag(zs)); % put them *exactly* on edges X Xzp = zeros(size(wp)); Xwp = wp(:); Xlenwp = length(wp); X Xif nargin < 9 X options = []; X if nargin < 8 X z0 = []; X if nargin < 7 X qdat = []; X end X end Xend X X[ode,newton,tol,maxiter] = scimapopt(options); X Xif isempty(qdat) X qdat = scqdata(beta,max(ceil(-log10(tol)),2)); Xend X X% ODE Xif ode X if isempty(z0) X % Pick a value z0 (not a singularity) and compute the map there. X [z0,w0] = scimapz0('r',wp,w,beta,z,c,L,qdat); X else X w0 = rmap(z0,w,beta,z,c,L,qdat); X if length(z0)==1 & lenwp > 1 X z0 = z0(:,ones(lenwp,1)).'; X w0 = w0(:,ones(lenwp,1)).'; X end X end X X % Use relaxed ODE tol if improving with Newton. X odetol = max(tol,1e-3*(newton)); X X % Set up data for the ode function. X global SCIMDATA X SCIMDATA = zeros(max(lenwp,n),5); X SCIMDATA = (wp - w0(:))/c; % adjusts "time" interval X SCIMDATA(1:n,2) = z; X SCIMDATA(1:n,3) = beta; X SCIMDATA(1:n,4) = zs; X SCIMDATA(1,5) = n; X SCIMDATA(2,5) = L; X X z0 = [real(z0);imag(z0)]; X [t,y] = ode45('rimapf1',0,1,z0,odetol); X [m,leny] = size(y); X zp(:) = y(m,1:lenwp)+sqrt(-1)*y(m,lenwp+1:leny); Xend X X% Newton iterations Xif newton X if ~ode X zn = z0(:); X if length(z0)==1 & lenwp > 1 X zn = zn(:,ones(lenwp,1)); X end X else X zn = zp(:); X end X X wp = wp(:); X done = zeros(size(zn)); X k = 0; X while ~all(done) & k < maxiter X F = wp(~done) - rmap(zn(~done),w,beta,z,c,L,qdat); X dF = c*rderiv(zn(~done),z,beta,L,zs); X zn(~done) = zn(~done) + F(:)./dF(:); X done(~done) = (abs(F) < tol); X k = k + 1; X end X if any(abs(F)> tol) X disp('Warning in rinvmap: Solution may be inaccurate') X fprintf('Maximum residual = %.3g\n',max(abs(F))) X end X zp(:) = zn; Xend; X X X X X X X X X X X X X X X X X X X END_OF_FILE if test 3410 -ne `wc -c <'rinvmap.m'`; then echo shar: \"'rinvmap.m'\" unpacked with wrong size! fi chmod +x 'rinvmap.m' # end of 'rinvmap.m' fi if test -f 'rmap.m' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'rmap.m'\" else echo shar: Extracting \"'rmap.m'\" \(1423 characters\) sed "s/^X//" >'rmap.m' <<'END_OF_FILE' Xfunction wp = rmap(zp,w,beta,z,c,L,qdat) X%RMAP Schwarz-Christoffel rectangle map. X% RMAP(ZP,W,BETA,Z,C,L,QDAT) computes the values of the X% Schwarz-Christoffel rectangle map at the points in vector ZP. X% The remaining arguments are as in RPARAM. RMAP returns a vector X% the same size as ZP. X% X% RMAP(ZP,W,BETA,Z,C,L,TOL) uses quadrature data intended to give X% an answer accurate to within TOL. X% X% RMAP(ZP,W,BETA,Z,C,L) uses a tolerance of 1e-8. X% X% See also RPARAM, RPLOT, RINVMAP. X% X% Written by Toby Driscoll. Last updated 5/24/95. X Xn = length(w); Xwp = z; Xw = w(:); Xbeta = beta(:); Xz = z(:); X[w,beta,z,corners] = rcorners(w,beta,z); X X% Map prevertices to strip XK = max(real(z)); XKp = max(imag(z)); Xzs = r2strip(z,z,L); Xzs = real(zs) + i*round(imag(zs)); % put them *exactly* on edges X Xif nargin < 7 X qdat = scqdata(beta,8); Xelseif length(qdat)==1 X qdat = scqdata(beta,max(ceil(-log10(qdat)),8)); Xend Xwp = zeros(size(zp)); Xzp = zp(:); Xp = length(zp); X X% Trap points which map to +/-Inf on the strip. Xbad = abs(zp) < 2*eps; Xzp(bad) = zp(bad) + 100*eps; Xbad = abs(zp-i*Kp) < 2*eps; Xzp(bad) = zp(bad) - i*100*eps*Kp; X X% Map from rectangle to strip. Xyp = r2strip(zp,z,L); X X% Now map from strip to polygon. Xi1 = 1:corners(3)-1; Xi2 = corners(3):n; Xws = [NaN; w(i1); NaN; w(i2)]; Xbs = [0; beta(i1); 0; beta(i2)]; Xzs = [Inf; zs(i1); Inf; zs(i2)]; Xwp(:) = stmap(yp,ws,bs,zs,c,qdat); X X END_OF_FILE if test 1423 -ne `wc -c <'rmap.m'`; then echo shar: \"'rmap.m'\" unpacked with wrong size! fi chmod +x 'rmap.m' # end of 'rmap.m' fi if test -f 'rparam.m' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'rparam.m'\" else echo shar: Extracting \"'rparam.m'\" \(6727 characters\) sed "s/^X//" >'rparam.m' <<'END_OF_FILE' Xfunction [z,c,L,qdat] = rparam(w,beta,cnr,z0,options); X%RPARAM Schwarz-Christoffel rectangle parameter problem. X% [Z,C,L,QDAT] = RPARAM(W,BETA,CORNERS) solves the X% Schwarz-Christoffel parameter problem with a rectangle as X% fundamental domain and interior of the specified polygon as the X% target. W must be a vector of the vertices of the polygon, X% specified in counterclockwise order. BETA is a vector of X% turning angles; see SCANGLES. CORNERS is a 4-component vector X% specifying the indices of the vertices which are the images of X% the corners of the rectangle. *BE SURE* the first two entries X% describe the LONG sides of the rectangle, and go in X% counterclockwise order. If CORNERS is omitted, the user is X% requested to select these vertices using the mouse. X% X% If successful, RPARAM will return Z, a vector of the X% prevertices; C, the multiplicative constant of the conformal X% map; L, a parameter related to aspect ratio; and QDAT, a matrix X% of quadrature data used by some of the other SC routines. X% X% [Z,C,L,QDAT] = RPARAM(W,BETA,CORNERS,Z0) uses Z0 as an initial X% guess for Z. In this case, Z0 represents the image of X% prevertices on the strip 0 <= Im z <= 1. You can use R2STRIP to X% transform prevertices from the rectangle to the strip. X% X% [Z,C,L,QDAT] = RPARAM(W,BETA,CORNERS,Z0,OPTIONS) uses a vector of X% control parameters. See SCPARMOPT. X% X% See also SCPARMOPT, DRAWPOLY, RDISP, RPLOT, RMAP, RINVMAP. X% X% Written by Toby Driscoll. Last updated 5/24/95. X Xn = length(w); % no. of vertices Xw = w(:); Xbeta = beta(:); X X% Set up defaults for missing args Xif nargin < 5 X options = []; X if nargin < 4 X z0 = []; X if nargin < 3 X cnr = []; X end X end Xend X Xif isempty(cnr) X disp('Use mouse to select images of rectangle corners.') X disp('Go in counterclockwise order and select a long edge first.') X figure(gcf) X cnr = scselect(w,beta,4); Xend X X% Renumber vertices so that cnr(1)=1 Xrenum = [cnr(1):n,1:cnr(1)-1]; Xw = w(renum); Xbeta = beta(renum); Xcnr = rem(cnr-cnr(1)+1+n-1,n)+1; X X[trace,tol] = scparmopt(options); Xnqpts = max(ceil(-log10(tol)),4); Xqdat = scqdata(beta,nqpts); % quadrature data X X% Check input data. Xerr = sccheck('r',w,beta,cnr); Xif err==1 X fprintf('Use SCFIX to make polygon obey requirements\n') X error(' ') Xend X Xatinf = (beta <= -1); X Xif isempty(z0) X % Try to find a reasonable initial guess. X dw = abs(diff(w([1:n,1]))); % side lengths X dw(isinf(dw)) = mean(dw(~isinf(dw)))*ones(size(dw(isinf(dw)))); X % Estimate length and width, and thus conformal modulus X len = mean([sum(dw(cnr(1):cnr(2)-1)), sum(dw(cnr(3):cnr(4)-1))]); X wid = mean([sum(dw(cnr(2):cnr(3)-1)), sum(dw([cnr(4):n,1:cnr(1)-1]))]); X modest = len/wid; X % Evenly space prevertices to match this conformal modulus X z0(cnr(1):cnr(2)) = linspace(0,modest,diff(cnr(1:2))+1); X dx = z0(cnr(1)+1)-z0(cnr(1)); X z0(cnr(1)-1:-1:1) = z0(cnr(1))-dx*(1:cnr(1)-1); X z0(cnr(2)+1:cnr(3)-1) = z0(cnr(2)) + dx*(1:diff(cnr(2:3))-1); X z0(cnr(4):-1:cnr(3)) = linspace(0,modest,diff(cnr(3:4))+1); X dx = z0(cnr(4)-1)-z0(cnr(4)); X z0(cnr(4)+1:n) = z0(cnr(4))-dx*(1:n-cnr(4)); X Xelse X if length(z0)~=n X error('Initial guess has wrong number of prevertices') X end X z0 = z0(renum); X if any(imag(z0(1:cnr(3)-1))) | any(~imag(z0(cnr(3):n))) X error('Initial guess has prevertices on wrong side of strip') X end Xend X X% Convert z0 to unconstrained vars Xy0 = zeros(n-3,1); Xdz = diff(z0); Xdz(cnr(3):n-1) = -dz(cnr(3):n-1); Xy0(1:cnr(2)-2) = log(dz(1:cnr(2)-2)); Xy0(cnr(2)-1) = mean(log(dz([cnr(2)-1,cnr(3)]))); Xy0(cnr(2):n-3) = log(dz([cnr(2):cnr(3)-2,cnr(3)+1:n-1])); X X% Find prevertices (solve param problem) X X% Set up normalized lengths for nonlinear equations: X% indices of left and right integration endpoints Xleft = 1:n-2; Xright = 2:n-1; X% delete indices corresponding to vertices at Inf Xleft(find(atinf)) = []; Xright(find(atinf) - 1) = []; Xif atinf(n-1) X right = [right,n]; Xend Xcmplx = ((right-left) == 2); X% normalize lengths by w(2)-w(1) Xnmlen = (w(right)-w(left))/(w(2)-w(1)); X% abs value for finite ones Xnmlen(~cmplx) = abs(nmlen(~cmplx)); X% first entry is useless (=1) Xnmlen(1) = []; X Xbeta = [0;beta(1:cnr(3)-1);0;beta(cnr(3):n)]; X X% Solve nonlinear system of equations: X% package data Xnrow = max([n+2,nqpts,8]); Xncol = 6+2*n+2; Xfdat = zeros(nrow,ncol); Xfdat(1:4,1) = [n;length(left);nqpts;ncol]; Xfdat(5:8,1) = cnr(:); Xfdat(1:n+2,2) = beta; Xfdat(1:fdat(2,1)-1,3) = nmlen(:); Xfdat(1:fdat(2,1),4:6) = [left(:),right(:),cmplx(:)]; Xfdat(1:nqpts,7:ncol) = qdat; X% set options Xopt = zeros(16,1); Xopt(1) = 2*trace; Xopt(6) = 100*(n-3); Xopt(8) = tol; Xopt(9) = tol/10; Xopt(12) = nqpts; X% do it X[y,termcode] = nesolve('rpfun',y0,opt,fdat); Xif termcode~=1 X disp('Warning: Nonlinear equations solver did not terminate normally') Xend X X% Convert y values to z on strip Xzs = rptrnsfm(y,cnr); Xnb = cnr(3)-1; X X% Determine multiplicative constant Xmid = mean(zs(1:2)); Xg = stquad(zs(2),mid,2,zs,beta,qdat) -... X stquad(zs(1),mid,1,zs,beta,qdat); Xc = (w(1)-w(2))/g; X X% Find corners of rectangle XL = zs(cnr(2))-zs(cnr(1)); Xif L < 5.9 X m = exp(-2*pi*L); X K = ellipke(m); X Kp = ellipke(1-m); Xelse X K = pi/2; X Kp = pi*L + log(4); Xend Xrect = [K;K+i*Kp;-K+i*Kp;-K]; Xbounds = [-K,K,0,Kp]; X X% Find prevertices on the rectangle: X% initial values evenly spaced on the rectangle Xz = zeros(size(zs)); Xz(cnr) = rect; Xz(1:cnr(2)) = linspace(rect(1),rect(2),diff(cnr(1:2))+1).'; Xtmp = linspace(rect(2),i*imag(rect(3)),diff(cnr(2:3))+1).'; Xz(cnr(2):cnr(3)-1) = tmp(1:diff(cnr(2:3))); Xz(cnr(3):cnr(4)) = linspace(rect(3),rect(4),diff(cnr(3:4))+1).'; Xtmp = linspace(rect(4),0,n-cnr(4)+2).'; Xz(cnr(4):n) = tmp(1:n-cnr(4)+1); Xzn = z(:); X X% Which are on left/right sides? Xlr = zeros(n,1); Xlr([1:cnr(2),cnr(3):cnr(4)]) = ones(cnr(2)+cnr(4)-cnr(3)+1,1); X X% Newton iteration Xmaxiter = 50; Xdone = zeros(size(zn)); Xdone(cnr) = ones(4,1); Xk = 0; Xwhile ~all(done) & k < maxiter X [F,dF] = r2strip(zn(~done),z(cnr),L); X F = zs(~done) - F; X % Must keep points from leaving the rectangle: X % pure real/imaginary, and not too big X step = 2*F./dF; X step(lr(~done)) = i*imag(step(lr(~done))); X step(~lr(~done)) = real(step(~lr(~done))); X bad = ones(size(step)); X while any(bad) X step(bad) = step(bad)/2; X znew = zn(~done) + step; X bad = real(znew) < bounds(1) | real(znew) > bounds(2) |... X imag(znew) < bounds(3) | imag(znew) > bounds(4); X end X % Update X zn(~done) = znew; X done(~done) = (abs(F) < tol); X k = k + 1; Xend Xif any(abs(F)> tol) X disp('Warning in rparam: Iteration for rectangle prevertices DNC') Xend Xz(:) = zn; X X% Undo renumbering Xz(renum) = z; X X X END_OF_FILE if test 6727 -ne `wc -c <'rparam.m'`; then echo shar: \"'rparam.m'\" unpacked with wrong size! fi chmod +x 'rparam.m' # end of 'rparam.m' fi if test -f 'rpfun.m' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'rpfun.m'\" else echo shar: Extracting \"'rpfun.m'\" \(1382 characters\) sed "s/^X//" >'rpfun.m' <<'END_OF_FILE' Xfunction F = rpfun(y,fdat) X%RPFUN (not intended for calling directly by the user) X% Returns residual for solution of nonlinear equations. X% Used by RPARAM. X% X% Written by Toby Driscoll. Last updated 5/23/95. X Xn = fdat(1,1); Xbeta = fdat(1:n+2,2); Xnmlen = fdat(1:fdat(2,1)-1,3); Xrows = 1:fdat(2,1); Xleft = fdat(rows,4); Xright = fdat(rows,5); Xcmplx = fdat(rows,6); Xqdat = fdat(1:fdat(3,1),7:fdat(4,1)); Xcorners = fdat(5:8,1); X X% Transform y (unconstr. vars) to z (actual params) Xz = rptrnsfm(y,corners); Xnb = corners(3)-1; X X% Check crowding of singularities. Xif any(abs(diff(z))'rplot.m' <<'END_OF_FILE' Xfunction [H,RE,IM] = rplot(w,beta,z,c,L,re,im,options) X%RPLOT Image of cartesian grid under Schwarz-Christoffel rectangle map. X% RPLOT(W,BETA,Z,C,L) will adaptively plot the images under the X% Schwarz-Christoffel rectangle map of ten evenly spaced X% horizontal and vertical lines in the retangle RECT. The X% arguments are as in RPARAM. X% X% RPLOT(W,BETA,Z,C,L,M,N) will plot images of M evenly spaced X% vertical and N evenly spaced horizontal lines. X% X% RPLOT(W,BETA,Z,C,L,RE,IM) will plot images of vertical lines X% whose real parts are given in RE and horizontal lines whose X% imaginary parts are given in IM. Either argument may be empty. X% X% RPLOT(W,BETA,Z,C,L,RE,IM,OPTIONS) allows customization of X% RPLOT's behavior. See SCPLOTOPT. X% X% H = RPLOT(W,BETA,Z,C,L,...) returns a vector of handles to all X% the curves drawn in the interior of the polygon. [H,RE,IM] = X% RPLOT(W,BETA,Z,C,L,...) also returns the abscissae and ordinates X% of the lines comprising the grid. X% X% See also SCPLOTOPT, RPARAM, RMAP, RDISP. X% X% Written by Toby Driscoll. Last updated 5/24/95. X Xturn_off_hold = ~ishold; Xn = length(w); Xw = w(:); Xbeta = beta(:); Xz = z(:); X[w,beta,z,corners] = rcorners(w,beta,z); Xrect = z(corners); X Xif nargin < 8 X options = []; X if nargin < 7 X im = []; X if nargin < 7 X re = []; X end X end Xend X XKp = imag(rect(2)); XK = rect(1); X Xif isempty([re(:);im(:)]) X re = 10; X im = 10; Xend X Xif (length(re)==1) & (re == round(re)) X if re < 1 X re = []; X else X m = re; X re = linspace(-K,K,m+2); X re([1,m+2]) = []; X end Xend Xif (length(im)==1) & (im == round(im)) X if im < 1 X im = []; X else X m = im; X im = linspace(0,Kp,m+2); X im([1,m+2]) = []; X end Xend X X[nqpts,maxturn,maxlen,maxrefn] = scplotopt(options); X Xfig = gcf; Xfigure(fig); Xplotpoly(w,beta); Xdrawnow Xhold on X Xreflen = maxlen*max(abs(diff([w(~isinf(w));w(2)]))); Xqdat = scqdata(beta,4); X Xfor j = 1:length(re) X zp = re(j) + i*linspace(0,Kp,15).'; X wp = rmap(zp,w,beta,z,c,L,qdat); X bad = find(toobig(wp,maxturn,reflen,axis)); X iter = 0; X while (~isempty(bad)) & (iter < maxrefn) X lenwp = length(wp); X newz = [(zp(bad-1)+2*zp(bad))/3;(zp(bad+1)+2*zp(bad))/3]; X neww = rmap(newz,w,beta,z,c,L,qdat); X [k,in] = sort(imag([zp;newz])); X zp = [zp;newz]; wp = [wp;neww]; X zp = zp(in); wp = wp(in); X iter = iter + 1; X bad = find(toobig(wp,maxturn,reflen,axis)); X end X linh(j) = plot(clipdata(wp,axis), 'g-','erasemode','none'); X drawnow X set(linh(j),'erasemode','normal'); X Z(1:length(zp),j) = zp; X W(1:length(wp),j) = wp; Xend X Xfor j = 1:length(im) X zp = linspace(-K,K,15).' + i*im(j); X wp = rmap(zp,w,beta,z,c,L,qdat); X bad = find(toobig(wp,maxturn,reflen,axis)); X iter = 0; X while (~isempty(bad)) & (iter < maxrefn) X lenwp = length(wp); X newz = [(zp(bad-1)+2*zp(bad))/3;(zp(bad+1)+2*zp(bad))/3]; X neww = rmap(newz,w,beta,z,c,L,qdat); X [k,in] = sort(real([zp;newz])); X zp = [zp;newz]; wp = [wp;neww]; X zp = zp(in); wp = wp(in); X iter = iter + 1; X bad = find(toobig(wp,maxturn,reflen,axis)); X end X linh(j+length(re)) = plot(clipdata(wp,axis), 'g-','erasemode','none'); X drawnow X Z(1:length(zp),j+length(re)) = zp; X W(1:length(wp),j+length(re)) = wp; X set(linh(j+length(re)),'erasemode','normal'); Xend X X% Force redraw to get clipping enforced. Xset(fig,'color',get(fig,'color')) X Xif turn_off_hold, hold off, end; Xif nargout > 0 X H = linh; X if nargout > 1 X RE = re; X if nargout > 2 X IM = im; X end X end Xend X END_OF_FILE if test 3587 -ne `wc -c <'rplot.m'`; then echo shar: \"'rplot.m'\" unpacked with wrong size! fi chmod +x 'rplot.m' # end of 'rplot.m' fi if test -f 'rptrnsfm.m' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'rptrnsfm.m'\" else echo shar: Extracting \"'rptrnsfm.m'\" \(823 characters\) sed "s/^X//" >'rptrnsfm.m' <<'END_OF_FILE' Xfunction z = rptrnsfm(y,corners) X%RPTRNSFM (not intended for calling directly by the user) X% Transform optimization vars to prevertices for rectangle X% parameter problem. X% X% Written by Toby Driscoll. Last updated 5/23/95. X Xn = length(y)+3; Xz = zeros(n,1); Xz(corners(1)-1:-1:1) = cumsum(-exp(y(corners(1)-1:-1:1))); Xz(corners(1)+1:corners(2)-1) = cumsum(exp(y(corners(1):corners(2)-2))); Xz(corners(4)+1:n) = cumsum(-exp(y(corners(4)-2:n-3))); Xz(corners(4)-1:-1:corners(3)+1) = cumsum(... X exp(y(corners(4)-3:-1:corners(3)-1))); Xxr = z([corners(2)-1,corners(3)+1]); Xz(corners(2)) = mean(xr)+sqrt(diff(xr/2)^2+exp(2*y(corners(2)-1))); Xz(corners(3)) = z(corners(2)); Xz(corners(2)+1:corners(3)-1) = z(corners(2)) + cumsum(... X exp(y(corners(2):corners(3)-2))); Xz(corners(3):n) = i + z(corners(3):n); X END_OF_FILE if test 823 -ne `wc -c <'rptrnsfm.m'`; then echo shar: \"'rptrnsfm.m'\" unpacked with wrong size! fi chmod +x 'rptrnsfm.m' # end of 'rptrnsfm.m' fi if test -f 'scaddvtx.m' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'scaddvtx.m'\" else echo shar: Extracting \"'scaddvtx.m'\" \(1234 characters\) sed "s/^X//" >'scaddvtx.m' <<'END_OF_FILE' Xfunction [wn,betan] = scaddvtx(w,beta,pos) X%SCADDVTX Add a vertex to a polygon. X% [WN,BETAN] = SCADDVTX(W,BETA,POS) adds a new vertex to the X% polygon described by W and BETA immediately after vertex POS. X% If W(POS:POS+1) are finite, the new vertex is at the midpoint of X% an edge; otherwise, the new vertex is a reasonable distance from X% its finite neighbor. X% X% See also SCFIX. X% X% Written by Toby Driscoll. Last updated 5/24/95. X Xw = w(:); Xbeta = beta(:); Xn = length(w); Xif ~pos, pos=n; end Xpos1 = rem(pos,n)+1; Xif ~any(isinf(w([pos,pos1]))) % easy case X new = mean(w([pos,pos1])); Xelse % messy case X % Find a pair of adjacent finite vertices as a basis. X base = min(find(~isinf(w) & ~isinf(w([2:n,1])))); X ang(base) = angle(w(rem(base,n)+1)-w(base)); X X % Determine absolute angle of side pos->pos1. X for j = [base+1:n,1:base-1] X ang(j) = ang(rem(j-2+n,n)+1)-pi*beta(j); X if j==pos, break, end X end X X % Find a nice side length. X len = abs(w([2:n,1])-w); X avglen = mean(len(~isinf(len))); X X % Do it. X if isinf(w(pos)) X new = w(pos1) + avglen*exp(i*(ang(pos)+pi)); X else X new = w(pos) + avglen*exp(i*(ang(pos))); X end Xend X Xwn = [w(1:pos);new;w(pos+1:n)]; Xbetan = [beta(1:pos);0;beta(pos+1:n)]; END_OF_FILE if test 1234 -ne `wc -c <'scaddvtx.m'`; then echo shar: \"'scaddvtx.m'\" unpacked with wrong size! fi chmod +x 'scaddvtx.m' # end of 'scaddvtx.m' fi if test -f 'scangle.m' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'scangle.m'\" else echo shar: Extracting \"'scangle.m'\" \(1313 characters\) sed "s/^X//" >'scangle.m' <<'END_OF_FILE' Xfunction beta = scangle(w) X%SCANGLE Turning angles of a polygon. X% SCANGLE(W) computes the turning angles of the polygon whose X% vertices are specified in the vector W. The turning angle of a X% vertex measures how much the heading changes at that vertex from X% the incoming to the outgoing edge, normalized by pi. For a X% finite vertex, it is equal in absolute value to (exterior X% angle)/pi, with a negative sign for left turns and positive for X% right turns. Thus the turn at a finite vertex is in (-1,1], X% with 1 meaning a slit. X% X% At an infinite vertex the turning angle is in the range [-3,-1] X% and is equal to the exterior angle of the two sides extended X% back from infinity, minus 2. SCANGLE cannot determine the angle X% at an infinite vertex or its neighbors, and will return NaN's in X% those positions. If infinite vertices are confusing, try X% INFDEMO. X% X% See also DRAWPOLY. X% X% Written by Toby Driscoll. Last updated 5/24/95. X Xn = length(w); Xinf = isinf(w); Xmask = ~(inf | inf([2:n,1]) | inf([n,1:n-1])); Xdw = [w(1)-w(n); diff(w(:))]; Xdwshift = dw([2:n,1]); Xbeta = NaN*ones(size(w)); Xbeta(mask) = angle(dw(mask).*conj(dwshift(mask)))/pi; Xmod = abs(beta+1) < eps; Xbeta(mod) = ones(size(beta(mod))); X END_OF_FILE if test 1313 -ne `wc -c <'scangle.m'`; then echo shar: \"'scangle.m'\" unpacked with wrong size! fi chmod +x 'scangle.m' # end of 'scangle.m' fi if test -f 'sccheck.m' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'sccheck.m'\" else echo shar: Extracting \"'sccheck.m'\" \(3348 characters\) sed "s/^X//" >'sccheck.m' <<'END_OF_FILE' Xfunction err = sccheck(type,w,beta,aux) X%SCCHECK Check polygon inputs to Schwarz-Christoffel functions. X% X% SCCHECK is used by the xxPARAM functions to check the validity X% of inputs describing the polygon to be mapped. If errors are X% found, execution will terminate. Sometimes the trouble has to X% do with how the parameter problem is posed, which imposes a few X% nonobvious constraints. The function SCFIX is provided to X% automatically fix such difficulties, by renumbering or perhaps X% adding vertices. X X% Calling sequence: SCCHECK(map,w,beta), where map is one of 'hp', X% 'd', 'de', etc. Output is 1 if the problem is rectifiable by X% SCFIX, 2 if warning status only. Breaks execution when problem X% is fatal. X X% By Toby Driscoll. Last modified 3/24/95. X Xw = w(:); Xbeta = beta(:); Xn = length(w); Xatinf = (beta <= -1); Xrenum = 1:n; Xerr = 0; X X% Universal truths Xif length(beta)~=n X error('Mismatched angles and vertices') Xelseif any(beta > 1) | any(beta < -3) X error('Each angle must be in [-3,1]') Xend X X% Infinite vertices Xif ~strcmp(type,'de') X if any(isinf(w(~atinf))) | any(~isinf(w(atinf))) X error('Infinite vertices must correspond to angle <= -1') X elseif any(diff(find(atinf))==1) X error('Infinite vertices must not be adjacent') X end X sumb = -2; Xelse X if any(atinf) | any(isinf(w)) X error('Infinite vertices not allowed in exterior mapping') X end X sumb = 2; Xend X X% Orientation conventions Xif abs(sum(beta)+sumb) < 1e-9 X fprintf('\nVertices were probably given in wrong order\n') X err = 1; Xelseif abs(sum(beta)-sumb) > 1e-9 X fprintf('\nWarning: Angles do not sum to %d\n\n',sumb) X err = 2; Xend X X% Some finer points Xif strcmp(type,'hp') | strcmp(type,'d') X if n < 3 X error('Polygon must have at least three vertices') X elseif any(isinf(w([1,2,n-1]))) X fprintf('\nInfinite vertices must not be at positions 1, 2, or n-1\n') X err = 1; X elseif any(abs(beta(n)-[0,1]) 2) X fprintf('\nSides adjacent to w(n) must not be collinear\n') X err = 1; X end Xelseif strcmp(type,'st') X if n < 5 X error('Polygon must have at least five vertices') X end X ends = aux; X renum = [ends(1):n,1:ends(1)-1]; X w = w(renum); X beta = beta(renum); X k = find(renum==ends(2)); X if any(atinf([2,3,n])) X fprintf('\nVertices at (w(ends(1)) + [1,2,-1]) must be finite\n') X err = 1; X elseif k-2 < 2 X fprintf('\nThere must be at least 2 vertices between ends 1 and 2\n') X err = 1; X elseif k==n X fprintf('\nThere must be at least one vertex between ends 2 and 1\n') X err = 1; X end Xelseif strcmp(type,'r') X corner = aux; X renum = [corner(1):n,1:corner(1)-1]; X w = w(renum); X beta = beta(renum); X corner = rem(corner-corner(1)+1+n-1,n)+1; X if n < 4 X error('Polygon must have at least four vertices') X elseif corner~=sort(corner) X error('Corners must be specified in ccw order') X elseif isinf(w(1)) X error('Corner(1) must be finite') X end X if isinf(w(2)) X fprintf('\nVertex corner(1)+1 must be finite\n') X err = 1; X end X if any(abs(beta(n)-[0,1])'scdemo.m' <<'END_OF_FILE' X% * Schwarz-Christoffel Toolbox demonstrations * X% X% 1) Tutorial X% 2) Infinite vertices X% 3) Elongated polygons X% 4) Faber polynomials X% X% 0) Quit X% X% Warning: All current workspace variables will be lost. Xecho off X Xwhile 1 X demos = str2mat('tutdemo','infdemo','elongdemo','faberdemo'); X clc X help scdemo X n = input('Select a demo number: '); X if ((n <= 0) | (n > 4)) X break X end X eval(demos(n,:)) X clear Xend X X END_OF_FILE if test 451 -ne `wc -c <'scdemo.m'`; then echo shar: \"'scdemo.m'\" unpacked with wrong size! fi chmod +x 'scdemo.m' # end of 'scdemo.m' fi if test -f 'scfix.m' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'scfix.m'\" else echo shar: Extracting \"'scfix.m'\" \(4880 characters\) sed "s/^X//" >'scfix.m' <<'END_OF_FILE' Xfunction [w,beta,aux] = scfix(type,w,beta,aux) X%SCFIX Fix polygon to meet Schwarz-Christoffel toolbox constraints. X% X% [W,BETA] = SCFIX(TYPE,W,BETA) attempts to fix a problem in the X% given polygon that arises from the posing of the parameter X% problem. SCFIX is used when a call to xxPARAM results in an X% error and so advises. In this case the polygon as given X% violates some fairly arbitrary constraint. SCFIX remedies the X% situation by renumbering the vertices, or, if necessary, adding X% a trivial (zero-turn) vertex. TYPE is one of X% {'hp','d','de','st','r'}. If one additional input and output X% argument is given, it represents the indices of the strip ends X% or the rectangle corners. X% X% See also SCCHECK, SCADDVTX. X% X% Written by Toby Driscoll. Last modified 5/31/95. X X% You may wonder, why not let the xxPARAM functions call SCFIX X% automatically? The trouble with that approach is that since a X% function can't modify its inputs in the calling workspace, X% either the xxPARAM functions would have to return more X% arguments, or the mapping and plotting functions also would have X% to detect and correct the problem every time they're called. X% The problem is rare enough that this method seems adequate. X Xw = w(:); Xbeta = beta(:); Xn = length(w); Xrenum = 1:n; X X% Orientation conventions Xsumb = -2 + 4*strcmp(type,'de'); Xif abs(sum(beta)+sumb) < 1e-9 X % Reverse order X w = w([1,n:-1:2]); X beta = scangle(w); X renum = renum([1,n:-1:2]); Xend X X% Less obvious restrictions Xif strcmp(type,'hp') | strcmp(type,'d') X shift = [2:n,1]; X % Renumber, if necessary, to meet requirements: X % w([1,2,n-1]) finite & sides at w(n) not collinear X while any(isinf(w([1,2,n-1]))) | any(abs(beta(n)-[0,1]) 2) X renum = renum(shift); X w = w(shift); X beta = beta(shift); X if renum(1)==1 X deg = abs(beta) < eps; X w(deg) = []; X beta(deg) = []; X renum = 1:2; X n = 2; X fprintf('\nPolygon is a line segment; removing superfluous vertices\n\n') X break X end X end Xelseif strcmp(type,'st') X ends = aux; X if isempty(ends) X disp('Use mouse to select images of left and right ends of the strip.') X figure(gcf) X ends = scselect(w,beta,2); X end X renum = [ends(1):n,1:ends(1)-1]; X w = w(renum); X beta = beta(renum); X k = find(renum==ends(2)); X if k < 4 X if k < n-1 X % Switch ends. X renum = [k:n,1:k-1]; X w = w(renum); X beta = beta(renum); X k = find(renum==1); X else X % Add one or two vertices. X for j=1:4-k X [w,beta] = scaddvtx(w,beta,j); X n = n+1; X k = k+1; X fprintf('\nWarning: A vertex has been added.\n\n') X end X end X end X X if k==n X % Must add a vertex in any case. X [w,beta] = scaddvtx(w,beta,n); X n = n+1; X fprintf('\nWarning: A vertex has been added.\n\n') X end X X X if isinf(w(2)) X % Add two vertices. X for j=1:2 X [w,beta] = scaddvtx(w,beta,j); X n = n+1; X k = k+1; X fprintf('\nWarning: A vertex has been added.\n\n') X end X elseif isinf(w(3)) X % Add one vertex. X [w,beta] = scaddvtx(w,beta,2); X n = n+1; X k = k+1; X fprintf('\nWarning: A vertex has been added.\n\n') X elseif isinf(w(n)) X [w,beta] = scaddvtx(w,beta,n); X n = n+1; X fprintf('\nWarning: A vertex has been added.\n\n') X end X X aux = [1,k]; X Xelseif strcmp(type,'r') X corner = aux; X renum = [corner(1):n,1:corner(1)-1]; X w = w(renum); X beta = beta(renum); X corner = rem(corner-corner(1)+1+n-1,n)+1; X % Note: These problems are pretty rare. X if any(abs(beta(n)-[0,1])'scgenable.m' <<'END_OF_FILE' Xfunction scgenable(fig,type,action) X%SCGENABLE Enables/disables menus in the SCM Toolbox GUI. X% Menu items created by SCGUI are at times disabled, when they X% appear to have no current meaning. However, if you use SCGSET, X% conditions may change. SCGENABLE(FIG,TYPE,ACTION) will change X% the status of a class(es) of menus. TYPE is an integer. X% Generally, TYPE=1 is on when a polygon is known to the GUI, and X% TYPE=2 is on when a parameter problem solution is known. ACTION X% is either 'on' or 'off'. X% X% Written by Toby Driscoll. Last updated 5/23/95. X X% This whole mechanism could be a lot friendlier. X Xmenus = get(fig,'userdata'); Xfor i = 1:length(type); X for j = find(menus(:,2)==type(i)) X set(menus(j,1), 'enable',action) X end Xend END_OF_FILE if test 754 -ne `wc -c <'scgenable.m'`; then echo shar: \"'scgenable.m'\" unpacked with wrong size! fi chmod +x 'scgenable.m' # end of 'scgenable.m' fi if test -f 'scgget.m' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'scgget.m'\" else echo shar: Extracting \"'scgget.m'\" \(1941 characters\) sed "s/^X//" >'scgget.m' <<'END_OF_FILE' Xfunction [val1,val2,val3,val4,val5] = scgget(fig,p1,p2,p3,p4,p5) X%SCGGET Get data from the SC Toolbox GUI. X% SCGGET(FIG,'property') returns the value of the specified property X% associated with the Schwarz-Christoffel Toolbox GUI in X% figure FIG. The properties are: X% X% vertices (polygon vertices) X% angles (turning angles) X% prevertices (solution of parameter problem) X% constant (multiplicative constant) X% maptype ('hp2p', 'd2p', 'd2ep', 'st2p', 'r2p') X% X% Only the first three characters need be specified. If additional X% property names are given, values will be returned in additional X% output arguments in the same order. X% X% SCGGET(FIG) is shorthand for SCGGET(FIG,'ver','ang','pre','con',... X% 'map'). X% X% See also SCGSET, SCGUI. X% X% Written by Toby Driscoll. Last updated 5/24/95. X X Xif nargin==1 X p1 = 'ver'; X p2 = 'ang'; X p3 = 'pre'; X p4 = 'con'; X p5 = 'map'; X nargin = 6; Xelseif nargout~=(nargin-1) & nargout~=0 X error('Incorrect number of output parameters.') Xend X Xmaptypes = str2mat('hp2p','d2p','d2ep','st2p','r2p'); X Xmenus = get(fig,'userdata'); Xdata = get(menus(1,1),'userdata'); X[n,p] = size(data); Xif p==0 X return Xend X Xw = data(:,1); Xif ~any(w), w = []; end; Xbeta = []; Xz = []; Xc = []; Xmapnum = 0; Xif p > 1 X beta = data(:,2); X if ~any(beta), beta = []; end X if p > 2 X z = data(:,3); X if ~any(z), z = []; end X if p > 3 X c = data(1,4); X if ~any(c), c = []; end X mapnum = data(2,4); X end X end Xend X Xfor k = 1:(nargin-1) X prop = eval(['p',int2str(k)]); X if strcmp(lower(prop(1:3)),'ver') X val = w; X elseif strcmp(lower(prop(1:3)),'ang') X val = beta; X elseif strcmp(lower(prop(1:3)),'pre') X val = z; X elseif strcmp(lower(prop(1:3)),'con') X val = c; X elseif strcmp(lower(prop(1:3)),'map') X if ~mapnum X val = []; X else X val = deblank(maptypes(mapnum,:)); X end X end X eval(['val',int2str(k),' = val;']); Xend X X X END_OF_FILE if test 1941 -ne `wc -c <'scgget.m'`; then echo shar: \"'scgget.m'\" unpacked with wrong size! fi chmod +x 'scgget.m' # end of 'scgget.m' fi if test -f 'scgprops.m' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'scgprops.m'\" else echo shar: Extracting \"'scgprops.m'\" \(335 characters\) sed "s/^X//" >'scgprops.m' <<'END_OF_FILE' Xfunction [trace,tol,v1,v2] = scgprops(fig) X%SCGPROPS (not intended for calling directly by the user) X% Read current values from SCGUI Properties window. X% X% Written by Toby Driscoll. Last updated 5/23/95. X Xmenus = get(fig,'user'); Xprops = get(menus(4,1),'user'); Xtrace = props(3); Xtol = 10^(-props(4)); Xv1 = props(5); Xv2 = props(6); END_OF_FILE if test 335 -ne `wc -c <'scgprops.m'`; then echo shar: \"'scgprops.m'\" unpacked with wrong size! fi chmod +x 'scgprops.m' # end of 'scgprops.m' fi if test -f 'scgset.m' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'scgset.m'\" else echo shar: Extracting \"'scgset.m'\" \(2125 characters\) sed "s/^X//" >'scgset.m' <<'END_OF_FILE' Xfunction scgset(fig,p1,v1,p2,v2,p3,v3,p4,v4,p5,v5) X%SCGSET Set data in the SCM Toolbox GUI. X% SCGSET(FIG,'property',VALUE) sets the value of the specified X% property to VALUE in the Schwarz-Christoffel Mapping Toolbox GUI in X% igure FIG. Valid properties are: X% X% vertices (polygon vertices) X% angles (turning angles) X% prevertices (solution of parameter problem) X% constant (multiplicative constant) X% maptype ('hp2p', 'd2p', 'd2ep', 'st2p', 'r2p') X% X% Only the first three characters need be specified. If additional X% property name-value pairs are given, they will be set appropriately. X% X% SCGSET(FIG,'clear') removes all data associated with the GUI. X% X% See also SCGGET, SCGUI. X% X% Written by Toby Driscoll. Last updated 5/26/95. X Xmaptypes = str2mat('hp2p','d2p','d2ep','st2p','r2p'); X Xmenus = get(fig,'userdata'); X Xif (nargin==2) & strcmp(lower(p1),'clear') X set(menus(1,1),'userdata',[]); X return Xend X Xif rem(nargin,2) ~= 1 X error('Wrong number of input parameters.') Xend Xdata = get(menus(1,1),'userdata'); X Xfor k = 1:(nargin-1)/2 X prop = eval(['p',int2str(k)]); X if ~isstr(prop) X error('Property name expected.') X else X prop = lower(prop); X end X val = eval(['v',int2str(k)]); X if isempty(val) X if strcmp(prop(1:3),'con') X val = 0; X elseif ~strcmp(prop(1:3),'map') X val = zeros(size(data(:,1))); X end X end X X if strcmp(prop(1:3),'ver') X data = []; X data(1:length(val),1) = val(:); X elseif strcmp(prop(1:3),'ang') X data(1:length(val),2) = val(:); X elseif strcmp(prop(1:3),'pre') X data(1:length(val),3) = val(:); X elseif strcmp(prop(1:3),'con') X if length(val) > 1 X error('Invalid value for property ''constant''.') X end X data(1,4) = val; X elseif strcmp(prop(1:3),'map') X found = 0; X [m,n] = size(maptypes); X for j = 1:m X if strcmp(lower(val),deblank(maptypes(j,:))) X data(2,4) = j; X found = 1; X break X end X end X if ~found & ~isempty(val) X error(['Map type ',val,' unknown.']) X end X else X error(['Property ',prop,' unknown.']) X end Xend X Xset(menus(1,1),'userdata',data); X END_OF_FILE if test 2125 -ne `wc -c <'scgset.m'`; then echo shar: \"'scgset.m'\" unpacked with wrong size! fi chmod +x 'scgset.m' # end of 'scgset.m' fi if test -f 'scgui.m' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'scgui.m'\" else echo shar: Extracting \"'scgui.m'\" \(2741 characters\) sed "s/^X//" >'scgui.m' <<'END_OF_FILE' Xfunction scgui(fig) X%SCGUI Create graphical user interface for SCM Toolbox. X% X% By itself, SCGUI creates the graphical user interface (GUI) X% menus for the Schwarz-Christoffel Toolbox in the current X% figure window. X% X% SCGUI(FIG) creates the GUI in figure window FIG. X% X% Use of the GUI is straightforward. For complete details, see X% the user's guide. X% X% See also SCGGET, SCGSET. X% X% Written by Toby Driscoll. Last updated 5/31/95. X Xif nargin < 1 X fig = gcf; Xend Xfigure(fig) Xclf Xreset(fig) X X% menus: column 1 holds menu handles, col 2 is menu group id: X% 0: always available X% 1: available if a polygon has been input X% 2: available if parameter problem has been solved X Xmenus = zeros(30,2); X Xmenus(1) = uimenu('label','Schwarz-Christoffel'); X Xmenus(4) = uimenu(menus(1), 'label','Properties...',... X 'call','scguicb(''prop'')','user',[-1,fig,0,8,10,10]); Xmenus(2) = uimenu(menus(1),'label','Draw new polygon',... X 'separator','on','call','scguicb(''draw'')','interrupt','yes'); Xmenus(5) = uimenu(menus(1),'label','Modify polygon',... X 'call','scguicb(''modify'')','interrupt','yes'); Xmenus(3) = uimenu(menus(1),'label','Load data file...',... X 'call','scguicb(''load'')','interrupt','yes'); Xmenus(5,2) = 1; X Xmenus(10) = uimenu(menus(1),'label','Save data file...',... X 'call','scguicb(''save'')','interrupt','yes'); X Xmenus(12) = uimenu(menus(1),'label','Solve parameter problem',... X 'separator','on'); Xmenus(13) = uimenu(menus(12), 'label','half plane -> polygon', ... X 'call','scguicb(''hp2p'')','interrupt','yes'); Xmenus(14) = uimenu(menus(12), 'label','disk -> polygon', ... X 'call','scguicb(''d2p'')','interrupt','yes'); Xmenus(15) = uimenu(menus(12), 'label','disk -> exterior polygon', ... X 'call','scguicb(''d2ep'')','interrupt','yes'); Xmenus(16) = uimenu(menus(12), 'label','strip -> polygon', ... X 'call','scguicb(''st2p'')','interrupt','yes'); Xmenus(17) = uimenu(menus(12), 'label','rectangle -> polygon', ... X 'call','scguicb(''r2p'')','interrupt','yes'); Xmenus(18) = uimenu(menus(12), 'label','continuation', ... X 'call','scguicb(''contin'')','interrupt','yes'); Xmenus([10,12:17],2) = ones(7,1); Xmenus(18,2) = 2; X Xmenus(20) = uimenu(menus(1),'label','Display results', ... X 'call','scguicb(''disp'')', 'enable','off','interrupt','yes'); Xmenus(21) = uimenu(menus(1),'label','Plot grid image',... X 'call','scguicb(''plot'')', 'enable','off','interrupt','yes'); Xmenus(20:21,2) = 2*ones(2,1); X Xmenus(22) = uimenu(menus(1), 'label','Point source',... X 'call', 'scguicb(''source'')'); Xmenus(22,2) = 2; X X% Save menus in figure userdata. Xset(fig,'userdata',menus); X X% Force compilation of scguicb to speed up later. Xif 0, scguicb('draw'), end X Xscgenable(fig,1:2,'off'); X X END_OF_FILE if test 2741 -ne `wc -c <'scgui.m'`; then echo shar: \"'scgui.m'\" unpacked with wrong size! fi chmod +x 'scgui.m' # end of 'scgui.m' fi if test -f 'scguicb.m' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'scguicb.m'\" else echo shar: Extracting \"'scguicb.m'\" \(8897 characters\) sed "s/^X//" >'scguicb.m' <<'END_OF_FILE' Xfunction scguicb(func) X%SCGUICB (not intended for calling directly by the user) X% Callback function for SCGUI. X% X% Written by Toby Driscoll. Last updated 5/31/95. X Xfig = gcf; Xmaptypes = str2mat('hp2p','d2p','d2ep','st2p','r2p'); Xprefixes = str2mat('hp','d','de','st','r'); X Xif strcmp(func,'draw') %** draw new polygon X scgset(fig, 'clear'); X % If drawpoly dies, clear the figure's callbacks. X errfun = ['set(fig,''windowbuttondownfcn'',''''),',... X 'set(fig,''windowbuttonmotionfcn'',''''),',... X 'set(fig,''windowbuttonupfcn'',''''),',... X 'set(fig,''keypressfcn'',''''),',... X 'return']; X w = []; X beta = []; X eval('[w,beta] = drawpoly(fig);',errfun); X scgset(fig,'vertices',w,'angles',beta) X scgenable(fig,2,'off'); X scgenable(fig,1,'on'); X Xelseif strcmp(func,'modify') %** modify polygon X [w,beta] = scgget(fig,'ver','ang'); X [w,beta] = modpoly(w,beta); X scgset(fig,'ver',w,'ang',beta) X scgenable(fig,2,'off') X Xelseif strcmp(func,'load') %** load data file X [fname,pname] = uigetfile('*.mat','Load S-C data file'); X if fname X w = []; beta = []; z = []; c = []; maptype = []; X eval(['load ',pname,fname]); X scgset(fig, 'clear'); X scgset(fig,'ver',w,'ang',beta,'pre',z,'con',c,'map',maptype); X if ~isempty(w) X scgenable(fig,1,'on'); X hold off X plotpoly(w,beta); X if ~isempty(z) X scgenable(fig,2,'on'); X else X scgenable(fig,2,'off'); X end X else X scgenable(fig,1,'off'); X end X if strcmp(maptype,'r2p') % rectangle is special X menus = get(fig,'userdata'); X set(menus(17),'userdata',L); X end X end X Xelseif strcmp(func,'save') %** save data file X [fname,pname] = uiputfile('*.mat','Save S-C data file'); X if fname X [w,beta,z,c,maptype] = scgget(fig); X evalstr = ['save ',pname,fname,' w beta z c maptype']; X if strcmp(maptype,'r2p') % rectangle is special X menus = get(fig,'userdata'); X L= get(menus(17),'userdata'); X evalstr = [evalstr,' L']; X end X eval(evalstr); X end X Xelseif strcmp(func,'hp2p') %** half plane -> polygon X [w,beta] = scgget(fig, 'vertices','angles'); X [w,beta] = scfix('hp',w,beta); X scgset(fig,'ver',w,'ang',beta) X disp('Solving parameter problem...') X [trace,tol,v1,v2] = scgprops(fig); X [x,c] = hpparam(w,beta,[],[trace,tol]); X disp('Finished parameter problem.') X scgset(fig, 'prevertices',x, 'const',c, 'maptype','hp2p') X scgenable(fig,2,'on'); X Xelseif strcmp(func,'d2p') %** disk -> polygon X [w,beta] = scgget(fig, 'vertices','angles'); X [w,beta] = scfix('d',w,beta); X scgset(fig,'ver',w,'ang',beta) X disp('Solving parameter problem...') X [trace,tol,v1,v2] = scgprops(fig); X [z,c] = dparam(w,beta,[],[trace,tol]); X disp('Finished parameter problem.') X scgset(fig, 'prevertices',z, 'const',c, 'maptype','d2p') X scgenable(fig,2,'on'); X Xelseif strcmp(func,'d2ep') %** disk -> exterior polygon X [w,beta] = scgget(fig, 'vertices','angles'); X [w,beta] = scfix('de',w,beta); X scgset(fig,'ver',w,'ang',beta) X disp('Solving parameter problem...') X [trace,tol,v1,v2] = scgprops(fig); X [z,c] = deparam(w,beta,[],[trace,tol]); X disp('Finished parameter problem.') X scgset(fig, 'prevertices',z, 'const',c, 'maptype','d2ep') X scgenable(fig,2,'on'); X Xelseif strcmp(func,'st2p') %** strip -> polygon X [w,beta] = scgget(fig, 'vertices','angles'); X disp('Use mouse to select images of left and right ends of the strip.') X figure(gcf) X ends = scselect(w,beta,2); X [w,beta,ends] = scfix('st',w,beta,ends); X scgset(fig,'ver',w,'ang',beta) X disp('Solving parameter problem...') X [trace,tol,v1,v2] = scgprops(fig); X [z,c] = stparam(w,beta,ends,[],[trace,tol]); X disp('Finished parameter problem.') X scgset(fig, 'prevertices',z, 'const',c, 'maptype','st2p') X scgenable(fig,2,'on'); X Xelseif strcmp(func,'r2p') %** rectangle -> polygon X [w,beta] = scgget(fig, 'vertices','angles'); X disp('Use mouse to select images of rectangle corners.') X disp('Go in counterclockwise order and select a long edge first.') X figure(gcf) X corner = scselect(w,beta,4); X [w,beta,corner] = scfix('r',w,beta,corner); X scgset(fig,'ver',w,'ang',beta) X disp('Solving parameter problem...') X [trace,tol,v1,v2] = scgprops(fig); X [z,c,L] = rparam(w,beta,corner,[],[trace,tol]); X disp('Finished parameter problem.') X scgset(fig, 'prevertices',z, 'const',c, 'maptype','r2p') X menus = get(fig,'userdata'); X set(menus(17),'userdata',L) X scgenable(fig,2,'on'); X Xelseif strcmp(func,'contin') %** continuation X [w,beta,z,c,maptype] = scgget(fig); X n = length(w); X [w,beta,idx] = modpoly(w,beta); X if any(isnan(idx)) | any(diff([0;idx;n+1])~=1) X fprintf('\nCannot continue after vertices have been added or deleted.\n') X fprintf('Use direct solution instead.\n') X scgset(fig,'ver',w,'ang',beta) X scgenable(fig,2,'off') X return X end X z0 = z; X [trace,tol,v1,v2] = scgprops(fig); X disp('Solving parameter problem...') X if strcmp(maptype,'r2p') X menus = get(fig,'userdata'); X L= get(menus(17),'userdata'); X [w,beta,z0,corners] = rcorners(w,beta,z0); X z0 = r2strip(z0,z,L); X [z,c,L] = rparam(w,beta,corners,z0,[trace,tol]); X set(menus(17),'userdata',L) X elseif strcmp(maptype,'st2p') X ends = [find(isinf(z0)&(z0<0)),find(isinf(z0)&(z0>0))]; X [z,c] = stparam(w,beta,ends,z0,[trace,tol]); X else X m = size(maptypes,1); X for j = 1:m % find correct prefix X if strcmp(maptype,deblank(maptypes(j,:))) X eval(['[z,c]=',... X deblank(prefixes(j,:)),'param(w,beta,z0,[trace,tol]);']); X break X end X end X end X disp('Finished parameter problem.') X scgset(fig,'ver',w,'ang',beta,'pre',z,'const',c,'map',maptype) X Xelseif strcmp(func,'disp') %** pretty print X [w,beta,z,c,maptype] = scgget(fig); X m = size(maptypes,1); X if strcmp(maptype,'r2p') % rectangle is special X menus = get(fig,'userdata'); X L= get(menus(17),'userdata'); X rdisp(w,beta,z,c,L); X else X for j = 1:m % find correct prefix X if strcmp(maptype,deblank(maptypes(j,:))) X eval([deblank(prefixes(j,:)),'disp(w,beta,z,c)']); X break X end X end X end X Xelseif strcmp(func,'plot') %** plot images of grid X [w,beta,z,c,maptype] = scgget(fig,'ver','ang','pre','con','map'); X [trace,tol,v1,v2] = scgprops(fig); X if strcmp(maptype,'r2p') X menus = get(fig,'userdata'); X L =get(menus(17),'userdata'); X rplot(w,beta,z,c,L,v1,v2) X else X m = size(maptypes,1); X for j = 1:m % find correct prefix X if strcmp(maptype,deblank(maptypes(j,:))) X eval([deblank(prefixes(j,:)),'plot(w,beta,z,c,v1,v2)']); X break X end X end X end X disp('Finished plot.') X Xelseif strcmp(func,'source') %** point source X [w,beta,z,c,mtype] = scgget(fig); X [trace,tol,v1,v2] = scgprops(fig); X if strcmp(mtype,'hp2p') X [z,c] = hp2disk(w,beta,z,c); X mtype = 'd2p'; X end X if strcmp(mtype,'d2p') X ptsource(w,beta,z,c,[],v1,v2); X else X ptsource(w,beta,[],[],[],v1,v2); X end X Xelseif strcmp(func,'prop') %** Properties window X menus = get(fig,'userdata'); X data = get(menus(4,1),'userdata'); X propfig = data(1); X deleted = 0; X eval('get(propfig,''pos'');','deleted=1;'); X if deleted X screen = get(0,'screensize'); X pos = [100, screen(4)-210, 300,200]; X propfig = figure('numbertitle','off','name','SC Properties','pos',pos); X uicontrol('style','frame','units','norm','pos',[0 0 1 1]); X uicontrol('style','push','pos',[120,10,60,20],'string','Done',... X 'call','set(gcf,''vis'',''off'')') X uicontrol('style','check','pos',[20,170,260,20],... X 'string','Trace parameter problem solution',... X 'call','scguicb(''pr_01'')','value',data(3)); X uicontrol('style','text','pos',[20,140,120,20],... X 'string','Error tolerace: 1e-'); X uicontrol('style','edit','pos',[143,140,20,20],... X 'string',int2str(data(4)),'call','scguicb(''pr_02'')'); X uicontrol('style','text','pos',[20,110,160,20],... X 'string','Number of curves to plot:'); X uicontrol('style','text','pos',[60,85,103,20],... X 'string','vertical/circular:'); X uicontrol('style','edit','pos',[170,85,20,20],... X 'string',int2str(data(5)),'call','scguicb(''pr_03'')'); X uicontrol('style','text','pos',[60,60,105,20],... X 'string','horizontal/radial:'); X uicontrol('style','edit','pos',[170,60,20,20],... X 'string',int2str(data(6)),'call','scguicb(''pr_04'')'); X set(menus(4,1),'userdata',[propfig,data(2:6)]); X set(propfig,'user',[propfig,data(2:6)]); X drawnow X else X set(propfig,'vis','on') X figure(propfig) X end X Xelseif strcmp(func(1:3),'pr_') %** set properties X data = get(gcf,'user'); X propfig = data(1); X fig = data(2); X propnum = eval(func(4:5)); X ctrl = get(propfig,'currentobject'); X if propnum==1, X data(3) = get(ctrl,'value'); X else X data(2+propnum) = eval(get(ctrl,'string')); X end X set(propfig,'user',data); X menus = get(fig,'user'); X set(menus(4,1),'user',data) X X X Xend X X X X END_OF_FILE if test 8897 -ne `wc -c <'scguicb.m'`; then echo shar: \"'scguicb.m'\" unpacked with wrong size! fi chmod +x 'scguicb.m' # end of 'scguicb.m' fi if test -f 'scimapopt.m' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'scimapopt.m'\" else echo shar: Extracting \"'scimapopt.m'\" \(818 characters\) sed "s/^X//" >'scimapopt.m' <<'END_OF_FILE' Xfunction [ode,newton,tol,maxiter] = scimapopt(options) X%SCIMAPOPT Parameters used by S-C inverse-mapping routines. X% OPTIONS(1): Algorithm (default 0) X% 0--use ode to get initial guess, then Newton iters. X% 1--use ode only X% 2--use Newton only; take Z0 as initial guess X% OPTIONS(2): Error tolerance for solution (default 1e-8) X% OPTIONS(3): Maximum number of Newton iterations (default 10) X% X% See also HPINVMAP, DINVMAP, DEINVMAP, RINVMAP, STINVMAP. X% X% Written by Toby Driscoll. Last updated 5/24/95. X Xuser = options; Xlenu = length(user); Xoptions = zeros(1,3); Xoptions(1:lenu) = user(1:lenu); Xoptions = options + (options==0).*[0,1e-8,10]; X Xode = options(1)==0 | options(1)==1; Xnewton = options(1)==0 | options(1)==2; Xtol = options(2); Xmaxiter = options(3); X END_OF_FILE if test 818 -ne `wc -c <'scimapopt.m'`; then echo shar: \"'scimapopt.m'\" unpacked with wrong size! fi chmod +x 'scimapopt.m' # end of 'scimapopt.m' fi if test -f 'scimapz0.m' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'scimapz0.m'\" else echo shar: Extracting \"'scimapz0.m'\" \(4424 characters\) sed "s/^X//" >'scimapz0.m' <<'END_OF_FILE' Xfunction [z0,w0] = scimapz0(prefix,wp,w,beta,z,c,qdat,aux) X%SCIMAPZ0 (not intended for calling directly by the user) X% SCIMAPZ0 returns starting points for computing inverses of X% Schwarz-Christoffel maps. X% X% Each wp(j) (in the polygon plane) requires z0(j) (in the X% fundamental domain) whose image w0(j) is such that the line X% segment from w0(j) to wp(j) lies in the target (interior or X% exterior) region. The algorithm here is to choose z0(j) as a X% (weighted) average of successive pairs of adjacent prevertices. X% The resulting w0(j) is on a polygon side. Each choice is tested X% by looking for intersections of the segment with (other) sides X% of the polygon. X% X% After randomly trying 10 weights with such prevertex pairs, the X% routine gives up. Failures are pretty rare. Slits are the most X% likely cause of trouble, since the intersection method doesn't X% know "which side" of the slit it's on. In such a case you will X% have to supply starting points manually, perhaps by a X% continuation method. X% X% See also HPINVMAP, DINVMAP, DEINVMAP, RINVMAP, STINVMAP. X% X% Written by Toby Driscoll. Last updated 7/7/95. X X% P.S. This file illustrates why the different domains in the SC X% Toolbox have mostly independent M-files. The contingencies for X% the various geometries become rather cumbersome. X Xn = length(w); Xshape = wp; Xwp = wp(:); Xz0 = wp; Xw0 = wp; Xfrom_disk = strcmp(prefix(1),'d'); Xfrom_hp = strcmp(prefix,'hp'); Xfrom_strip = strcmp(prefix,'st'); Xfrom_rect = strcmp(prefix,'r'); Xif from_strip X kinf = max(find(isinf(z))); X argw = cumsum([angle(w(3)-w(2));-pi*beta([3:n,1])]); X argw = argw([n,1:n-1]); Xelse X argw = cumsum([angle(w(2)-w(1));-pi*beta(2:n)]); Xend Xif from_disk X argz = angle(z); X argz(argz<=0) = argz(argz<=0) + 2*pi; Xend X Xfactor = 0.5; % images of midpoints of preverts Xdone = zeros(1,length(wp)); Xm = length(wp); Xiter = 0; X Xwhile m > 0 % while some not done X % Choose a point on each side of the polygon. X for j = 1:n X if from_disk X if j=0 & s(1)<=s1max X if abs(s(2)-1) < 30*eps X % Special case: wp(p) is on polygon side k X z0(p) = zbase(k); X w0(p) = wbase(k); X elseif s(2) > -10*eps & s(2) < 1 X % Intersection interior to segment: it's no good X done(p) = 0; X end X end X end X end X m = sum(~done); X if ~m, break, end X end X if iter > 10 X error('Can''t seem to choose starting points. Supply them yourself.') X else X iter = iter + 1; X end X factor = rand(1); % abandon midpoints Xend X Xshape(:) = z0; Xz0 = shape; Xshape(:) = w0; Xw0 = shape; END_OF_FILE if test 4424 -ne `wc -c <'scimapz0.m'`; then echo shar: \"'scimapz0.m'\" unpacked with wrong size! fi chmod +x 'scimapz0.m' # end of 'scimapz0.m' fi if test -f 'scparmopt.m' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'scparmopt.m'\" else echo shar: Extracting \"'scparmopt.m'\" \(563 characters\) sed "s/^X//" >'scparmopt.m' <<'END_OF_FILE' Xfunction [trace,tol] = scparmopt(options) X%SCPARMOPT Parameters used by S-C parameter problem routines. X% OPTIONS(1): Nonzero causes some intermediate results to be X% displayed (default 0) X% OPTIONS(2): Error tolerance for solution (default 1e-8) X% X% See also HPPARAM, DPARAM, DEPARAM, STPARAM, RPARAM. X% X% Written by Toby Driscoll. Last updated 5/24/95. X Xuser = options; Xlenu = length(user); Xoptions = zeros(1,2); Xoptions(1:lenu) = user(1:lenu); Xoptions = options + (options==0).*[0,1e-8]; X Xtrace = options(1); Xtol = options(2); X END_OF_FILE if test 563 -ne `wc -c <'scparmopt.m'`; then echo shar: \"'scparmopt.m'\" unpacked with wrong size! fi chmod +x 'scparmopt.m' # end of 'scparmopt.m' fi if test -f 'scplotopt.m' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'scplotopt.m'\" else echo shar: Extracting \"'scplotopt.m'\" \(1053 characters\) sed "s/^X//" >'scplotopt.m' <<'END_OF_FILE' Xfunction [nqpts,maxturn,maxlen,maxrefn] = scplotopt(options) X%SCPLOTOPT Parameters used by S-C plotting routines. X% OPTIONS(1): Number of quadrature points per integration. X% Approximately equals -log10(error). Increase if plot X% has false little zigzags in curves (default 4). X% OPTIONS(2): Maximum allowed turning angle at each plotted point, X% in degrees (default 12). X% OPTIONS(3): Max allowed line segment length, as a proportion of the X% largest finite polygon side (default 0.05). X% OPTIONS(4): Max allowed number of adaptive refinements made to meet X% other requirements (default 10). X% X% See also HPPLOT, DPLOT, DEPLOT, STPLOT, RPLOT. X% X% Written by Toby Driscoll. Last updated 5/24/95. X Xuser = options; Xlenu = length(user); Xoptions = zeros(1,4); Xoptions(1:lenu) = user(1:lenu); Xoptions = options + (options==0).*[4,12,.05,10]; X Xnqpts = options(1); Xmaxturn = options(2); Xmaxlen = options(3); Xmaxrefn = options(4); X END_OF_FILE if test 1053 -ne `wc -c <'scplotopt.m'`; then echo shar: \"'scplotopt.m'\" unpacked with wrong size! fi chmod +x 'scplotopt.m' # end of 'scplotopt.m' fi if test -f 'scqdata.m' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'scqdata.m'\" else echo shar: Extracting \"'scqdata.m'\" \(928 characters\) sed "s/^X//" >'scqdata.m' <<'END_OF_FILE' Xfunction qdat = scqdata(beta,nqpts); X%SCQDATA Gauss-Jacobi quadrature data for SC Toolbox. X% SCQDATA(BETA,NQPTS) returns a matrix of quadrature data suitable X% for other SC routines. BETA is a vector of turning angles X% corresponding to *finite* singularities (prevertices and, for X% exterior map, the origin). NQPTS is the number of quadrature X% points per subinterval, roughly equal to -log10(error). X% X% All the SC routines call this routine as needed, and the work X% required is small, so you probably never have to call this X% function directly. X% X% See also GAUSSJ, HPPARAM, DPARAM, DEPARAM, STPARAM, RPARAM. X% X% Written by Toby Driscoll. Last updated 5/24/95. X Xn = length(beta); Xqnode = zeros(nqpts,n+1); Xqwght = zeros(nqpts,n+1); Xfor j = find(beta(:)>-1)' X [qnode(:,j),qwght(:,j)] = gaussj(nqpts,0,beta(j)); Xend X[qnode(:,n+1),qwght(:,n+1)] = gaussj(nqpts,0,0); Xqdat = [qnode,qwght]; X END_OF_FILE if test 928 -ne `wc -c <'scqdata.m'`; then echo shar: \"'scqdata.m'\" unpacked with wrong size! fi chmod +x 'scqdata.m' # end of 'scqdata.m' fi if test -f 'scselect.m' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'scselect.m'\" else echo shar: Extracting \"'scselect.m'\" \(2189 characters\) sed "s/^X//" >'scselect.m' <<'END_OF_FILE' Xfunction K = scselect(w,beta,m) X%SCSELECT Select one or more vertices in a polygon. X% K = SCSELECT(W,BETA,M) draws the polygon given by W and BETA X% into the current figure window and then allows the user to X% select M vertices using the mouse. If M is not given, it X% defaults to 1. On exit K is a vector of indices into W. X% X% See also DRAWPOLY, PLOTPOLY, MODPOLY. X% X% Written by Toby Driscoll. Last updated 5/24/95. X Xn = length(w); Xif any(isinf(w) & isinf(w([2:n,1]))) X error('Infinite vertices must not be adjacent') Xend X Xplotpoly(w,beta) Xturn_off_hold = ~ishold; Xhold on X Xfirst = min(find(~isinf(w) & ~isinf(w([2:n,1])))); Xrenum = [first:n,1:first-1]; Xw = w(renum); Xbeta = beta(renum); X Xaxlim = axis; Xmaxdiff = max(diff(axlim(1:2)),diff(axlim(3:4))); Xaxlim(1:2) = mean(axlim(1:2)) + 0.57*maxdiff*[-1.05,1]; Xaxlim(3:4) = mean(axlim(3:4)) + 0.57*maxdiff*[-1,1]; X Xh = zeros(n,2); Xh(1,1) = plot(real(w(1)),imag(w(1)),'.','mark',22); Xang = angle(w(2)-w(1)); Xcolrs = get(gca,'colororder'); Xcolr = colrs(1,:); Xfor j = 2:n X if ~isinf(w(j)) X if ~imag(w(j)) X w(j) = w(j) + eps*i; X end X h(j,1) = plot(w(j),'.','mark',22); X ang = ang - pi*beta(j); X else X for p = 1:2 X theta = ang + pi*(p==2); X base = w(rem(j-2+2*(p==2),n)+1); X Rx = (axlim(1:2) - real(base)) / (cos(theta)+eps*(cos(theta)==0)); X Ry = (axlim(3:4) - imag(base)) / (sin(theta)+eps*(sin(theta)==0)); X R = [Rx,Ry]; X wj = base + min(R(R>0))*exp(i*theta); X str = sprintf('inf (%i)',renum(j)); X h(j,p) = text(real(wj),imag(wj),str,'horiz','center',... X 'fontsize',14,'fontweight','bold','color',colr); X ang = ang - pi*beta(j)*(p==1); X end X end Xend X Xcolr = colrs(min(2,size(colrs,1)),:); Xoldptr = get(gcf,'pointer'); Xset(gcf,'pointer','circle'); Xif nargin < 3 X m = 1; Xend Xfor j = 1:m X k = []; X while isempty(k) X waitforbuttonpress; X obj = get(gcf,'currentobj'); X [k,tmp] = find(obj==h); X if isempty(k) X disp('Selected object not a vertex. Try again.') X end X end X set(h(k,(h(k,:)>0)),'color',colr) X drawnow X K(j) = k; Xend Xset(gcf,'pointer',oldptr) X Xdelete(h(h>0)) Xdrawnow Xif turn_off_hold X hold off Xend X XK = renum(K); END_OF_FILE if test 2189 -ne `wc -c <'scselect.m'`; then echo shar: \"'scselect.m'\" unpacked with wrong size! fi chmod +x 'scselect.m' # end of 'scselect.m' fi if test -f 'stderiv.m' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'stderiv.m'\" else echo shar: Extracting \"'stderiv.m'\" \(1374 characters\) sed "s/^X//" >'stderiv.m' <<'END_OF_FILE' Xfunction fprime = stderiv(zp,z,beta,j) X%STDERIV Derivative of the strip map. X% STDERIV(ZP,Z,BETA) returns the derivative at the points of ZP of X% the Schwarz-Christoffel strip map whose prevertices are Z and X% whose turning angles are BETA. X% X% Don't forget the multiplicative constant in the S-C map! X% X% See also STPARAM, STMAP. X% X% Written by Toby Driscoll. Last updated 5/24/95. X X% If a fourth argument j is supplied, the terms corresponding to X% z(j) are normalized by abs(zp-z(j)). This is for Gauss-Jacobi X% quadrature. X Xlog2 = 0.69314718055994531; Xfprime = zeros(size(zp)); Xzprow = zp(:).'; Xnpts = length(zprow); X X% Strip out infinite prevertices Xif length(z)==length(beta) X ends = find(isinf(z)); X theta = diff(beta(ends)); X if z(ends(1)) < 0 X theta = -theta; X end X z(ends) = []; X beta(ends) = []; Xelse X error('Vector of prevertices must include +/-Inf entries') Xend Xzcol = z(:); Xbcol = beta(:); Xn = length(z); X Xterms = -pi/2*(zprow(ones(n,1),:) - zcol(:,ones(npts,1))); Xlower = (~imag(z)); Xterms(lower,:) = -terms(lower,:); Xrt = real(terms); Xbig = abs(rt) > 40; Xif any(any(~big)) X terms(~big) = log(-i*sinh(terms(~big))); Xend Xterms(big) = sign(rt(big)).*(terms(big)-i*pi/2) - log2; Xif nargin==4 X if j > 0 X terms(j,:) = terms(j,:)-log(abs(zprow-z(j))); X end Xend Xfprime(:) = exp(pi/2*theta*zprow + sum(terms.*bcol(:,ones(npts,1)))); X END_OF_FILE if test 1374 -ne `wc -c <'stderiv.m'`; then echo shar: \"'stderiv.m'\" unpacked with wrong size! fi chmod +x 'stderiv.m' # end of 'stderiv.m' fi if test -f 'stdisp.m' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'stdisp.m'\" else echo shar: Extracting \"'stdisp.m'\" \(880 characters\) sed "s/^X//" >'stdisp.m' <<'END_OF_FILE' Xfunction stdisp(w,beta,z,c) X%STDISP Display results of Schwarz-Christoffel strip parameter problem. X% STDISP(W,BETA,Z,C) displays the results of STPARAM in a pleasant X% way. X% X% See also STPARAM, STPLOT. X% X% Written by Toby Driscoll. Last updated 5/24/95. X Xdisp(' ') Xdisp(' w beta z ') Xdisp(' ------------------------------------------------------------') Xu = real(w); Xv = imag(w); Xfor j = 1:length(w) X if v(j) < 0 X s = '-'; X else X s = '+'; X end X if ~imag(z(j)) X disp(sprintf(' %8.5f %c %7.5fi %8.5f %20.12e',... X u(j),s,abs(v(j)),beta(j),z(j))); X else X disp(sprintf(' %8.5f %c %7.5fi %8.5f %20.12e + i',... X u(j),s,abs(v(j)),beta(j),z(j))); X end Xend Xdisp(' ') Xif imag(c) < 0 X s = '-'; Xelse X s = '+'; Xend Xdisp(sprintf(' c = %.8g %c %.8gi',real(c),s,abs(imag(c)))) X END_OF_FILE if test 880 -ne `wc -c <'stdisp.m'`; then echo shar: \"'stdisp.m'\" unpacked with wrong size! fi chmod +x 'stdisp.m' # end of 'stdisp.m' fi if test -f 'stimapf1.m' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'stimapf1.m'\" else echo shar: Extracting \"'stimapf1.m'\" \(351 characters\) sed "s/^X//" >'stimapf1.m' <<'END_OF_FILE' Xfunction zdot = stimapf1(wp,yp); X%STIMAPF1 (not intended for calling directly by the user) X% Used by STINVMAP for solution of an ODE. X Xglobal SCIMDATA X Xlenyp = length(yp); Xlenzp = lenyp/2; Xzp = yp(1:lenzp)+sqrt(-1)*yp(lenzp+1:lenyp); Xn = SCIMDATA(1,4); X Xf = SCIMDATA(1:lenzp,1)./stderiv(zp,SCIMDATA(1:n,2),SCIMDATA(1:n,3)); Xzdot = [real(f);imag(f)]; END_OF_FILE if test 351 -ne `wc -c <'stimapf1.m'`; then echo shar: \"'stimapf1.m'\" unpacked with wrong size! fi chmod +x 'stimapf1.m' # end of 'stimapf1.m' fi if test -f 'stinvmap.m' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'stinvmap.m'\" else echo shar: Extracting \"'stinvmap.m'\" \(3439 characters\) sed "s/^X//" >'stinvmap.m' <<'END_OF_FILE' Xfunction zp = stinvmap(wp,w,beta,z,c,qdat,z0,options) X%STINVMAP Schwarz-Christoffel strip inverse map. X% STINVMAP(WP,W,BETA,Z,C,QDAT) computes the inverse of the X% Schwarz-Christoffel strip map (i.e., from the polygon X% to the strip) at the points given in vector WP. The X% other arguments are as in STPARAM. QDAT may be omitted. X% X% The default algorithm is to solve an ODE in order to obtain a fair X% approximation for ZP, and then improve ZP with Newton iterations. X% The ODE solution at WP requires a vector Z0 whose forward image W0 X% is such that for each j, the line segment connecting WP(j) and W0(j) X% lies inside the polygon. By default Z0 is chosen by a fairly robust X% automatic process. Using a parameter (see below), you can choose to X% use either an ODE solution or Newton iterations exclusively. X% X% STINVMAP(WP,W,BETA,Z,C,QDAT,Z0) has two interpretations. If the ODE X% solution is being used, Z0 overrides the automatic selection of X% initial points. (This can be handy in convex polygons, where the X% choice of Z0 is trivial.) Otherwise, Z0 is taken as an initial X% guess to ZP. In either case, if length(Z0)==1, the value Z0 is used X% for all elements of WP; otherwise, length(Z0) should equal X% length(WP). X% X% STINVMAP(WP,W,BETA,Z,C,QDAT,Z0,OPTIONS) uses a vector of parameters X% that control the algorithm. See SCIMAPOPT. X% X% See also SCIMAPOPT, STPARAM, STMAP. X% X% Written by Toby Driscoll. Last updated 5/24/95. X XN = length(w); Xn = N-2; Xw = w(:); Xbeta = beta(:); Xz = z(:); X% Renumber vertices so that the ends of the strip map to w([1,k]) Xwend = [find(isinf(z)&(z<0)),find(isinf(z)&(z>0))]; Xrenum = [wend(1):N,1:wend(1)-1]; Xw = w(renum); Xbeta = beta(renum); Xz = z(renum); Xk = find(renum==wend(2)); Xzp = zeros(size(wp)); Xwp = wp(:); Xlenwp = length(wp); Xmask = ones(N,1); Xmask([1,k]) = zeros(2,1); X Xif nargin < 8 X options = []; X if nargin < 7 X z0 = []; X if nargin < 6 X qdat = []; X end X end Xend X X[ode,newton,tol,maxiter] = scimapopt(options); X Xif isempty(qdat) X qdat = scqdata(beta(mask),max(ceil(-log10(tol)),2)); Xend X X% ODE Xif ode X if isempty(z0) X % Pick a value z0 (not a singularity) and compute the map there. X [z0,w0] = scimapz0('st',wp,w,beta,z,c,qdat); X else X w0 = stmap(z0,w,beta,z,c,qdat); X if length(z0)==1 & lenwp > 1 X z0 = z0(:,ones(lenwp,1)).'; X w0 = w0(:,ones(lenwp,1)).'; X end X end X X % Use relaxed ODE tol if improving with Newton. X odetol = max(tol,1e-3*(newton)); X X % Set up data for the ode function. X global SCIMDATA X SCIMDATA = zeros(max(lenwp,N),4); X SCIMDATA = (wp - w0(:))/c; % adjusts "time" interval X SCIMDATA(1:N,2) = z; X SCIMDATA(1:N,3) = beta; X SCIMDATA(1,4) = N; X X z0 = [real(z0);imag(z0)]; X [t,y] = ode45('stimapf1',0,1,z0,odetol); X [m,leny] = size(y); X zp(:) = y(m,1:lenwp)+sqrt(-1)*y(m,lenwp+1:leny); Xend X X% Newton iterations Xif newton X if ~ode X zn = z0(:); X if length(z0)==1 & lenwp > 1 X zn = zn(:,ones(lenwp,1)); X end X else X zn = zp(:); X end X X wp = wp(:); X done = zeros(size(zn)); X k = 0; X while ~all(done) & k < maxiter X F = wp(~done) - stmap(zn(~done),w,beta,z,c,qdat); X dF = c*stderiv(zn(~done),z,beta); X zn(~done) = zn(~done) + F(:)./dF(:); X done(~done) = (abs(F) < tol); X k = k + 1; X end X if any(abs(F)> tol) X disp('Warning in stinvmap: Solution may be inaccurate') X fprintf('Maximum residual = %.3g\n',max(abs(F))) X end X zp(:) = zn; Xend; X END_OF_FILE if test 3439 -ne `wc -c <'stinvmap.m'`; then echo shar: \"'stinvmap.m'\" unpacked with wrong size! fi chmod +x 'stinvmap.m' # end of 'stinvmap.m' fi if test -f 'stmap.m' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'stmap.m'\" else echo shar: Extracting \"'stmap.m'\" \(2805 characters\) sed "s/^X//" >'stmap.m' <<'END_OF_FILE' Xfunction wp = stmap(zp,w,beta,z,c,qdat) X%STMAP Schwarz-Christoffel strip map. X% STMAP(ZP,W,BETA,Z,C,QDAT) computes the values of the Schwarz- X% Christoffel strip map at the points in vector ZP. The arguments X% W, BETA, Z, C, and QDAT are as in STPARAM. STMAP returns a vector X% the same size as ZP. X% X% STMAP(ZP,W,BETA,Z,C,TOL) uses quadrature data intended to give an X% answer accurate to within roughly TOL. X% X% STMAP(ZP,W,BETA,Z,C) uses a tolerance of 1e-8. X% X% See also STPARAM, STPLOT, STINVMAP. X% X% Written by Toby Driscoll. Last updated 5/31/95. X XN = length(w); Xn = N-2; Xw = w(:); Xbeta = beta(:); Xz = z(:); X% Renumber vertices so that the ends of the strip map to w([1,k]) Xwend = [find(isinf(z)&(z<0)),find(isinf(z)&(z>0))]; Xrenum = [wend(1):N,1:wend(1)-1]; Xw = w(renum); Xbeta = beta(renum); Xz = z(renum); Xk = find(renum==wend(2)); X% nb = Number of prevertices on bottom edge of strip Xnb = k-2; Xz([1,k]) = []; Xw([1,k]) = []; X Xif nargin < 6 X qdat = scqdata(beta([2:k-1,k+1:N]),8); Xelseif length(qdat)==1 X qdat = scqdata(beta([2:k-1,k+1:N]),max(ceil(-log10(qdat)),8)); Xend Xwp = zeros(size(zp)); Xzp = zp(:); Xp = length(zp); X X% For each point in zp, find nearest prevertex. X[tmp,sing] = min(abs(zp(:,ones(n,1)).'-z(:,ones(1,p)))); Xsing = sing(:); % indices of prevertices Xatinf = find(isinf(w)); % infinite vertices Xatinf = atinf(:); Xninf = length(atinf); % # of inf vertices Xif ninf > 0 X % "Bad" points are closest to a prevertex of infinity. X bad = sing(:,ones(ninf,1))' == atinf(:,ones(1,p)); X % Can be closest to any pre-infinity. X if ninf > 1 X bad = any(bad); X end X % Exclude cases which are exactly those prevertices. X bad = bad(:) & (abs(zp-z(sing)) > 10*eps); X % Can't integrate starting at pre-infinity: which prevertex X % is next closest? X zf = z(~isinf(w)); X [tmp,s2] = min(abs(zp(bad,ones(n-ninf,1)).'-zf(:,ones(1,sum(bad))))); X shift = cumsum(isinf(w)); X shift(atinf) = []; X sing(bad) = s2(:) + shift(s2(:)); X % Midpoints of these integrations X mid = (z(sing(bad)) + zp(bad)) / 2; Xelse X bad = zeros(p,1); % all clear Xend X X% zs = the starting singularities X% A MATLAB technicality could cause a mistake if sing is all ones and same X% length as z, hence a workaround. Xzs = wp(:); Xzs(1:p+1) = z([sing;2]); Xzs = zs(1:p); X% ws = map(zs) Xws = wp(:); Xws(1:p+1) = w([sing;2]); Xws = ws(1:p); X X% Compute the map directly at "normal" points. Xif any(~bad) X wp(~bad) = ws(~bad) + ... X c*stquad(zs(~bad),zp(~bad),sing(~bad),z,beta,qdat); Xend X% Compute map at "bad" points, stopping at midpoint to avoid integration X% where right endpoint is close to a singularity. Xif any(bad) X wp(bad) = ws(bad) + c*... X (stquad(zs(bad),mid,sing(bad),z,beta,qdat) -... X stquad(zp(bad),mid,zeros(sum(bad),1),z,beta,qdat)); Xend X X END_OF_FILE if test 2805 -ne `wc -c <'stmap.m'`; then echo shar: \"'stmap.m'\" unpacked with wrong size! fi chmod +x 'stmap.m' # end of 'stmap.m' fi if test -f 'stparam.m' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'stparam.m'\" else echo shar: Extracting \"'stparam.m'\" \(4700 characters\) sed "s/^X//" >'stparam.m' <<'END_OF_FILE' Xfunction [z,c,qdat] = stparam(w,beta,ends,z0,options); X%STPARAM Schwarz-Christoffel strip parameter problem. X% [Z,C,QDAT] = STPARAM(W,BETA,ENDS) solves the Schwarz-Christoffel X% parameter problem with the infinite strip as fundamental domain X% and interior of the specified polygon as the target. W must be X% a vector of the vertices of the polygon, specified in X% counterclockwise order. BETA is a vector of turning angles; see X% SCANGLES. ENDS is a 2-vector whose entries are the indices of X% the vertices which are the images of the left and right ends of X% the strip. If ENDS is omitted, the user is requested to select X% these vertices using the mouse. X% X% If successful, STPARAM will return Z, a vector of the pre-images X% of W; C, the multiplicative constant of the conformal map; and X% QDAT, a matrix of quadrature data required by some of the other X% SC routines. X% X% [Z,C,QDAT] = STPARAM(W,BETA,ENDS,Z0) uses Z0 as an initial guess X% for Z. X% X% [Z,C,QDAT] = STPARAM(W,BETA,ENDS,Z0,OPTIONS) uses a vector of X% control parameters. See SCPARMOPT. X% X% See also SCPARMOPT, DRAWPOLY, STDISP, STPLOT, STMAP, STINVMAP. X% X% Written by Toby Driscoll. Last updated 5/24/95. X X% Set up defaults for missing args Xif nargin < 5 X options = []; X if nargin < 4 X z0 = []; X if nargin < 3 X ends = []; X end X end Xend X Xif isempty(ends) X disp('Use mouse to select images of left and right ends of the strip.') X figure(gcf) X ends = scselect(w,beta,2); Xend X XN = length(w); % no. of vertices Xw = w(:); Xbeta = beta(:); X% Renumber vertices so that the ends of the strip map to w([1,k]) Xrenum = [ends(1):N,1:ends(1)-1]; Xw = w(renum); Xbeta = beta(renum); Xk = find(renum==ends(2)); X% n: number of finite prevertices Xn = N-2; X% nb: number of prevertices on bottom edge of strip Xnb = k-2; X X% Check input data. Xerr = sccheck('st',w,beta,ends); Xif err==1 X fprintf('Use SCFIX to make polygon obey requirements\n') X error(' ') Xend X X[trace,tol] = scparmopt(options); Xnqpts = max(ceil(-log10(tol)),4); Xqdat = scqdata(beta([2:k-1,k+1:N]),nqpts); % quadrature data Xatinf = (beta <= -1); X X% Ignore images of ends of strip. Xw([1,k]) = []; Xatinf([1,k]) = []; X Xif isempty(z0) X % Make initial guess based on polygon. X % This is from Louis Howell's code. X z0 = zeros(n,1); X%% scale = (abs(w(nb)-w(1))+abs(w(n)-w(nb+1)))/2; X%% z0(1:nb) = linspace(0,scale,nb)'; X%% z0(nb+1:n) = i + flipud(linspace(0,scale,n-nb)'); X scale = (abs(w(n)-w(1))+abs(w(nb)-w(nb+1)))/2; X z0(1:nb) = cumsum([0;abs(w(2:nb)-w(1:nb-1))]/scale); X if nb+1==n X z0(n) = mean(z0([1,nb])); X else X z0(n:-1:nb+1) = cumsum([0;abs(w(n:-1:nb+2)-w(n-1:-1:nb+1))]/scale); X end X scale = sqrt(z0(nb)/z0(nb+1)); X z0(1:nb) = z0(1:nb)/scale; X z0(nb+1:n) = i + z0(nb+1:n)*scale; Xelse X z0 = z0(renum); X if length(z0)==N X if ~all(isinf(z0([1,k]))) X error('Starting guess does not match ends of strip') X end X z0([1,k]) = []; X elseif length(z0)==n-1 X z0 = [0;z0]; X end Xend Xy0 = [log(diff(z0(1:nb)));real(z0(nb+1));log(-diff(z0(nb+1:n)))]; X X% Find prevertices (solve param problem) X X% Set up normalized lengths for nonlinear equations: X% indices of left and right integration endpoints X%%left = [1,1:nb-1,nb+1:n-1]; X%%right = [n,2:nb,nb+2:n]; Xleft = [1,1:n-1]; Xright = [n,2:n]; X% delete indices corresponding to vertices at Inf X%%left(find(atinf)+1) = []; X%%right(find(atinf)) = []; Xleft([find(atinf)+1,nb+1]) = []; Xright([find(atinf),nb+1]) = []; Xcmplx = ((right-left) == 2); Xcmplx(1) = 0; Xcmplx(2) = 1; X% normalize lengths Xnmlen = (w(right)-w(left))/(w(n)-w(1)); X% abs value for finite ones Xnmlen(~cmplx) = abs(nmlen(~cmplx)); X% first entry is useless (=1) Xnmlen(1) = []; X X% Solve nonlinear system of equations: X X% package data Xnrow = max([n,nqpts,5]); Xncol = 6+2*N-2; Xfdat = zeros(nrow,ncol); Xfdat(1:5,1) = [n;nb;length(left);nqpts;ncol]; Xfdat(1:N,2) = beta; Xfdat(1:fdat(3,1)-1,3) = nmlen(:); Xfdat(1:fdat(3,1),4:6) = [left(:),right(:),cmplx(:)]; Xfdat(1:nqpts,7:ncol) = qdat; X% set options Xopt = zeros(16,1); Xopt(1) = 2*trace; Xopt(6) = 100*(n-1); Xopt(8) = tol; Xopt(9) = tol/10; Xopt(12) = nqpts; X% do it X[y,termcode] = nesolve('stpfun',y0,opt,fdat); Xif termcode~=1 X disp('Warning: Nonlinear equations solver did not terminate normally') Xend X X% Convert y values to z Xz = zeros(n,1); Xz(2:nb) = cumsum(exp(y(1:nb-1))); Xz(nb+1:n) = i+cumsum([y(nb);-exp(y(nb+1:n-1))]); X Xend X X% Determine multiplicative constant Xmid = mean(z(1:2)); Xg = stquad(z(2),mid,2,z,beta,qdat) -... X stquad(z(1),mid,1,z,beta,qdat); Xc = (w(1)-w(2))/g; X Xz = [-Inf;z(1:nb);Inf;z(nb+1:n)]; X X% Undo renumbering Xz(renum) = z; X X END_OF_FILE if test 4700 -ne `wc -c <'stparam.m'`; then echo shar: \"'stparam.m'\" unpacked with wrong size! fi chmod +x 'stparam.m' # end of 'stparam.m' fi if test -f 'stpfun.m' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'stpfun.m'\" else echo shar: Extracting \"'stpfun.m'\" \(1709 characters\) sed "s/^X//" >'stpfun.m' <<'END_OF_FILE' Xfunction F = stpfun(y,fdat) X%STPFUN (not intended for calling directly by the user) X% Returns residual for solution of nonlinear equations. X% Used by STPARAM. X% X% Written by Toby Driscoll. Last updated 5/23/95. X Xn = fdat(1,1); Xnb = fdat(2,1); Xbeta = fdat(1:n+2,2); Xnmlen = fdat(1:fdat(3,1)-1,3); Xrows = 1:fdat(3,1); Xleft = fdat(rows,4); Xright = fdat(rows,5); Xcmplx = fdat(rows,6); Xqdat = fdat(1:fdat(4,1),7:fdat(5,1)); X X% In this function, n refers to the number of FINITE prevertices. X X% Transform y (unconstr. vars) to z (actual params) Xz = zeros(n,1); Xz(2:nb) = cumsum(exp(y(1:nb-1))); Xz(nb+1:n) = i+cumsum([y(nb);-exp(y(nb+1:n-1))]); X X% Check crowding of singularities. Xif any(abs(diff(z))'stplot.m' <<'END_OF_FILE' Xfunction [H,RE,IM] = stplot(w,beta,z,c,re,im,options) X%STPLOT Image of cartesian grid under Schwarz-Christoffel strip map. X% STPLOT(W,BETA,Z,C) will adaptively plot the images under the X% Schwarz-Christoffel exterior map of ten evenly spaced horizontal X% and vertical lines in the upper half-plane. The abscissae of the X% vertical lines will bracket the finite extremes of real(Z). The X% arguments are as in STPARAM. X% X% STPLOT(W,BETA,Z,C,M,N) will plot images of M evenly spaced X% vertical and N evenly spaced horizontal lines. Horizontal lines X% are spaced to bracket real(Z); vertical lines are evenly spaced X% between 0 and 1. X% X% STPLOT(W,BETA,Z,C,RE,IM) will plot images of vertical lines X% whose real parts are given in RE and horizontal lines whose X% imaginary parts are given in IM. Either argument may be empty. X% X% STPLOT(W,BETA,Z,C,RE,IM,OPTIONS) allows customization of X% HPPLOT's behavior. See SCPLOTOPT. X% X% H = STPLOT(W,BETA,Z,C,...) returns a vector of handles to all X% the curves drawn in the interior of the polygon. [H,RE,IM] = X% STPLOT(W,BETA,Z,C,...) also returns the abscissae and ordinates X% of the lines comprising the grid. X% X% See also SCPLOTOPT, STPARAM, STMAP, STDISP. X% X% Written by Toby Driscoll. Last updated 5/24/95. X Xturn_off_hold = ~ishold; XN = length(w); Xn = N-2; Xw = w(:); Xbeta = beta(:); Xz = z(:); X% Renumber vertices so that the ends of the strip map to w([1,k]) Xwend = [find(isinf(z)&(z<0)),find(isinf(z)&(z>0))]; Xrenum = [wend(1):N,1:wend(1)-1]; Xw = w(renum); Xbeta = beta(renum); Xz = z(renum); Xk = find(renum==wend(2)); X% nb = Number of prevertices on bottom edge of strip Xnb = k-2; X Xif nargin < 7 X options = []; X if nargin < 6 X im = []; X if nargin < 5 X re = []; X end X end Xend X Xif isempty([re(:);im(:)]) X re = 10; X im = 10; Xend X Xminre = min(real(z(~isinf(z)))); Xmaxre = max(real(z(~isinf(z)))); Xif (length(re)==1) & (re == round(re)) X if re < 1 X re = []; X elseif re < 2 X re = mean([minre,maxre]); X else X m = re; X re = linspace(minre,maxre,m); X dre = diff(re(1:2)); X re = linspace(minre-dre,maxre+dre,m); X end Xend Xif (length(im)==1) & (im == round(im)) X if im < 1 X im = []; X else X m = im; X im = linspace(0,1,m+2); X im([1,m+2]) = []; X end Xend X X[nqpts,maxturn,maxlen,maxrefn] = scplotopt(options); X Xfig = gcf; Xfigure(fig); Xplotpoly(w,beta); Xdrawnow Xhold on X Xreflen = maxlen*max(abs(diff([w(~isinf(w));w(2)]))); Xqdat = scqdata(beta([2:k-1,k+1:N]),4); X Xfor j = 1:length(re) X zp = re(j) + i*linspace(0,1,15).'; X wp = stmap(zp,w,beta,z,c,qdat); X bad = find(toobig(wp,maxturn,reflen,axis)); X iter = 0; X while (~isempty(bad)) & (iter < maxrefn) X lenwp = length(wp); X newz = [(zp(bad-1)+2*zp(bad))/3;(zp(bad+1)+2*zp(bad))/3]; X neww = stmap(newz,w,beta,z,c,qdat); X [tmp,in] = sort(imag([zp;newz])); X zp = [zp;newz]; wp = [wp;neww]; X zp = zp(in); wp = wp(in); X iter = iter + 1; X bad = find(toobig(wp,maxturn,reflen,axis)); X end X linh(j) = plot(clipdata(wp,axis), 'g-','erasemode','none'); X drawnow X set(linh(j),'erasemode','normal'); X Z(1:length(zp),j) = zp; X W(1:length(wp),j) = wp; Xend X Xx1 = min(-5,minre); Xx2 = max(5,maxre); Xaxlim = axis; Xfor j = 1:length(im) X zp = linspace(x1,x2,15).' + i*im(j); X wp = stmap(zp,w,beta,z,c,qdat); X bad = find(toobig([w(1);wp;w(k)],maxturn,reflen,axis))-1; X iter = 0; X while (~isempty(bad)) & (iter < maxrefn) X lenwp = length(wp); X special = zeros(2,1); X if isinf(w(1)) X if real(wp(1))>axlim(1) & real(wp(1))axlim(3) & imag(wp(1))axlim(1) & real(wp(lenwp))axlim(3) & imag(wp(lenwp)) 0 X H = linh; X if nargout > 1 X RE = re; X if nargout > 2 X IM = im; X end X end Xend X END_OF_FILE if test 4851 -ne `wc -c <'stplot.m'`; then echo shar: \"'stplot.m'\" unpacked with wrong size! fi chmod +x 'stplot.m' # end of 'stplot.m' fi if test -f 'stquad.m' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'stquad.m'\" else echo shar: Extracting \"'stquad.m'\" \(2536 characters\) sed "s/^X//" >'stquad.m' <<'END_OF_FILE' Xfunction I = stquad(z1,z2,sing1,z,beta,qdat) X%STQUAD (not intended for calling directly by the user) X% Numerical quadrature for the strip map. X X% z1,z2 are vectors of left and right endpoints. sing1 is a vector of X% integer indices which label the singularities in z1. So if sing1(5) X% = 3, then z1(5) = z(3). A zero means no singularity. z is the X% vector of *finite* singularities; beta is the vector of associated X% turning angles. z(1) must be the leftmost prevertex on the bottom X% edge of the strip. If nb=sum(~imag(z)), then z(1:nb) are on the X% bottom edge and z(nb+1:n) are on the top (going right to left). X% Note that length(beta) = length(z)+2, because the angles at the ends X% of the strip are significant. Hence beta(1) is the turn at the left X% end and beta(nb+2) is at the right end. qdat is quadrature data X% from SCQDATA. X% X% Make sure z and beta are column vectors. X% X% STQUAD integrates from a possible singularity at the left end to a X% regular point at the right. If both endpoints are singularities, X% you must break the integral into two pieces and make two calls. X% X% The integral is subdivided, if necessary, so that no X% singularity lies closer to the left endpoint than 1/2 the X% length of the integration (sub)interval. X% X% Written by Toby Driscoll. Last updated 5/23/95. X Xn = length(z); Xnb = sum(~imag(z)); Xif isempty(sing1) X sing1 = zeros(length(z1),1); Xend X XI = zeros(size(z1)); Xnontriv = find(z1(:)~=z2(:))'; X Xfor k = nontriv X za = z1(k); X zb = z2(k); X sng = sing1(k); X X % Allowable integration step, based on nearest singularity. X dist = min(1,2*min(abs(z([1:sng-1,sng+1:n])-za))/abs(zb-za)); X zr = za + dist*(zb-za); X ind = rem(sng+n,n+1)+1; X % Adjust Gauss-Jacobi nodes and weights to interval. X nd = ((zr-za)*qdat(:,ind) + zr + za)/2; % G-J nodes X wt = ((zr-za)/2) * qdat(:,ind+n+1); % G-J weights X if any(~diff([za;nd;zr])) %| any(any(~terms)) X % Endpoints are practically coincident. X I(k) = 0; X else X % Use Gauss-Jacobi on first subinterval, if necessary. X if sng > 0 X wt = wt*(abs(zr-za)/2)^beta(sng+1+(sng>nb)); X end X I(k) = stderiv(nd.',[-Inf;z(1:nb);Inf;z(nb+1:n)],beta,sng)*wt; X while (dist < 1) & ~isnan(I(k)) X % Do regular Gaussian quad on other subintervals. X zl = zr; X dist = min(1,2*min(abs(z-zl))/abs(zl-zb)); X zr = zl + dist*(zb-zl); X nd = ((zr-zl)*qdat(:,n+1) + zr + zl)/2; X wt = ((zr-zl)/2) * qdat(:,2*n+2); X I(k) = I(k) + stderiv(nd.',[-Inf;z(1:nb);Inf;z(nb+1:n)],beta)*wt; X end X end Xend X END_OF_FILE if test 2536 -ne `wc -c <'stquad.m'`; then echo shar: \"'stquad.m'\" unpacked with wrong size! fi chmod +x 'stquad.m' # end of 'stquad.m' fi if test -f 'toobig.m' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'toobig.m'\" else echo shar: Extracting \"'toobig.m'\" \(730 characters\) sed "s/^X//" >'toobig.m' <<'END_OF_FILE' Xfunction bad = toobig(wp,maxturn,reflen,clip) X%TOOBIG (not intended for calling directly by the user) X% Used by plotting functions to spot points in a polyline at which X% turning angles or line segments are too large. X% X% See also HPPLOT, DPLOT, DEPLOT, STPLOT, RPLOT. X% X% Written by Toby Driscoll. Last updated 5/24/95. X Xm = length(wp); Xdwp = abs(diff(wp(:))); Xdwp = max([dwp(1:m-2).';dwp(2:m-1).']).'; Xangl = abs(scangle(wp(:))); Xbad = [0;(((angl(2:m-1) > maxturn/180)&(dwp > reflen/8)) | (dwp > reflen));0]; Xif nargin >= 4 % ignore clipped points X xp = real(wp); X yp = imag(wp); X inside = (xp>clip(1)) & (xpclip(3)) & (yp'tutdemo.m' <<'END_OF_FILE' Xmore off Xecho on Xclc X% This script demonstrates the basic capabilities of the X% Schwarz-Christoffel Toolbox. X Xpause % Strike any key to begin (Ctrl-C to abort) X X X% We begin with an L-shaped region. X Xpause % Strike any key to continue X Xw = [i; -1+i; -1-i; 1-i; 1; 0]; Xbeta = scangle(w); X Xfigure(gcf) Xhold off Xplotpoly(w,beta) X Xpause % Strike any key to continue X X% Now we solve the parameter problem for the half-plane. X[x,c] = hpparam(w,beta); X Xpause % Strike any key to display results X Xhpdisp(w,beta,x,c) X Xpause % Strike any key to continue X X% Now let's visualize the map by plotting the image of X% a square grid of 12 vertical and 6 horizontal lines. X Xpause % Strike any key to begin plot X Xhpplot(w,beta,x,c,12,6) X X% Note how the lines intersect at right angles. Also, X% note how they converge at the last vertex, the origin, X% since that is the image of the point at infinity. X Xpause % Strike any key to continue Xclc X% Let's change the fundamental domain from the half-plane X% to the unit disk. X X[z,c]=hp2disk(w,beta,x,c); X Xddisp(w,beta,z,c) X Xpause % Strike any key to continue X X% What's the inverse image of the point -.3-.3i? X Xzp = dinvmap(-.3-.3i,w,beta,z,c) X Xpause % Strike any key to continue X X% We should get at least 8 accurate digits, by default. X Xabs(-.3-.3i - dmap(zp,w,beta,z,c)) X Xpause % Strike any key to continue X X% We can change the map so that -.3-.3i is the image of 0... X X[z,c] = dfixwc(w,beta,z,c,-.3-.3i); X Xpause % Strike any key to continue X X% ...and look at the resulting image of a certain polar grid. X Xdplot(w,beta,z,c,.1:.1:.9,pi*(.25:.25:2)) X Xpause % Strike any key to continue Xclc X% Now suppose we want an exterior map. First, the vertices X% have to be given in clockwise order: X Xw = flipud(w); Xbeta = scangle(w); X Xpause % Strike any key to solve the parameter problem X X[z,c] = deparam(w,beta); X Xpause % Strike any key to see results X Xdedisp(w,beta,z,c) X Xdeplot(w,beta,z,c) X Xecho off % End of demo X END_OF_FILE if test 1995 -ne `wc -c <'tutdemo.m'`; then echo shar: \"'tutdemo.m'\" unpacked with wrong size! fi chmod +x 'tutdemo.m' # end of 'tutdemo.m' fi echo shar: End of shell archive. exit 0