(* Content-type: application/mathematica *) (*** Wolfram Notebook File ***) (* http://www.wolfram.com/nb *) (* CreatedBy='Mathematica 7.0' *) (*CacheID: 234*) (* Internal cache information: NotebookFileLineBreakTest NotebookFileLineBreakTest NotebookDataPosition[ 145, 7] NotebookDataLength[ 346576, 8044] NotebookOptionsPosition[ 262382, 6162] NotebookOutlinePosition[ 330581, 7548] CellTagsIndexPosition[ 330501, 7543] WindowFrame->Normal*) (* Beginning of Notebook Content *) Notebook[{ Cell[BoxData[ GraphicsBox[ TagBox[RasterBox[CompressedData[" 1:eJzt3V9sVOeZx/FIKyHFHmzPeBiDApEsERLZNEQEO8GkJEQkaLsKf2LUNsRZ KJFIIFQrF4JK1RCllqIVVSWjJm16gUTCHUjJXSxxV1nlGiGtVlqhvdiLvZi5 2Iu92IuVVvtwHp/nfc7fOWM7IeDvp1N3OPOe97znOe/xhX99z4ye/Kc3T/7d Y4899g/y3xOPP/bY/fcjAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFZJq9VaxsZW Uk+H61X1YXc9dNeBbajGD696+/IjZttUrIN24ttUr2F23/KadG1Zcrgi1Y/S 015VhrS8YVcs7zLaV+ywqGX2QEV6bVyl/+qnX95D1w6rl6vKCHsdHgAAAAAA AAAAD7VWq/XrX/96fHxc8xHduHPnTtm4ZXTUb9y9e7dstBhF/3nhwoUzZ87I 7s1m0/6EfvLkyf379/t9U4fTHVPGI6mPpHM5kHSe6i132KL80NJb0afa4Hqj Uf01PDwsA6vY+FLU3h9a3hxrNP7caHxdr9+Nfsp72fJko6HF1DaX4h6Oue1F w7Y2fsfZej116PJ9/afPNJunok9vRYOUN5fr9YOZc+naVQmtg3QrO96NDiRv Trk65PYjA0tVL7vXQVf/gwVDetW1OVVt2NJg175Xps+ekdebH5z+yYnjW8fG slPUt5cG0kzby2v7xK6i9tLz0V9+IA2KejOv/fyn0lJ6tpbyU7bYwEpeupf8 1PbljfcdnbaSFvUvZ/f8y3uL6iBDrT4qLe+yi+DLLn586KAdWk7kic2bsyOs ODw5wa7jAQAAAAAAAADgodBqte7cuXPmzBlLfDRHu3fv3szMjG7UZnNzcwsL C41GY8vo6NWrV6WB7Hjjxo17EWssbt68eeHChdxMSv4pjaWfGxkTExP79++X T/1GaSlbrly5kurt5MmTsl2OIuPx+YgcWgeZDXq089QuqbHdjSKqiq+BgYGh oaGKjb+q16WxnIVW+NU4ccu+bkdhlhXzerx9Nuohe15+2NbG7ygvOZyedckp p/qXn6eiweQO8ut6fTIeZNeuSkzGAV9uHY7Fw04FkQeLB2Z7ydGfdM2+dvX3 XfkqPd3Xl1sl3/7Hhw7OfXPzj3/7a+r1q7/8aXTbU9nsafvELvko2372i8+f f3lvNjI++ssP5FM5xBObN6dGmxqJdmud6MbsgXJfO17aI3vt2vdKlcYyVK2n HKVrY6uDP6ncChSNSo4yffbMsovgK/n7W99mj/LWh+c0JbR5XnF4b35wuuhX BwAAAAAAAAAAD5cNGzZcjfj0SuO/+fl5v3FhYWFubk62yPY7d+7MzMwMRLaO jZ0/f17aHzlyRJfUaT6YmxDJ4aTlvn37dN+hJI3wBmK6URrr4Sy70REuRnzo Iz81r5RdZHsqL7hy5Yrmg9mcyMbWUz5Yq9Wq54NfDg3JGekpHKvQ/qBbn6hb ztZq0kN25H7Y1sbveDfKIjf29VXcVy/35YLYzidxPiIs6qpk7k0Wx3z2utRo pFLLKtW7HKeBs+4spvr6UrNi0u3y6fr1ekGL8kE59FsfntOo6MTHH02+/tqP dr/47NTuvUcOz37xuWz8/a1vZaMPqrZP7NKIShpIM2ksL2mj7eW17+h0Ixlw azSmMVZJxmqp1rN7pqyZ5ncXr1+TgelLj5h+7Zlqbdokx33+5b16LuXttz23 Qw8hdGy57Q+9f0qTUzll2cXflTrUiqOSo6ykCLr93blPdCTSg56C/Dzwzts6 QvlpI5SiaSfyadnwpnaPbntKpwf5IAAAAAAAAADgYaerBe/cuTM0NKRRhUZ4 GsBZpKUbDx069MTmzbpaMBXwzc/Pa8go7W/cuFEUw/l8UBsbaezzQftUO5c+ rcMto6PaifzcuXOnZTryU5rJufi4U487Pj6uCx7PnTunJ5WbD87W6/I6W6vp 69P1631+ZNv1lcoHrw0Ophr413R/vx73mWbTh2Kyl3w01dcnP+X93Xix28Yo zJJT8PmgyI48Fcxpm1Q+KK/fRCVNRS25+8rGg8l95dwPRIM8Xqv5ZY8+dpSe s12VJClSh1RX0nmqDvqSQ1suM5kcWG71dMA6f/wSQo1ofW7lM1A5kfJ88LWf /1Qjpx/tfjE6v5rOUp2uB955W7M2K/LWsTENB+Uja2/2Hjlsi+YaLvh+84PT tmDt2andReOxVEsGY1Nd88HZLz5//PHHbXhFZBfNBw+9f6prex2h5YO57fW8 pAI6Bj8qHWqVUWkKuZIiWIx78fo1+UVhZdcRNjeO6Ag1edTfbNrJ+IsvyAi7 Fq1keSkAAAAAAAAAAA+LVvRNgvfu3ZuYmNC/z2tIt3PnTvmpS2Zs4xObN2sq J2/0D+m6VE1+WsgoquSDQy6ONJYP2p/ihbyR3jQf1F3kWIuLi7Va7erVq7rI 0dZPSTNdzGiLfUbcw1Hl05J8ULbIsTRH0EBnqq/Prz5bt26dZhw+5vChmG+Q YiflM6lP169P7TLd36/hoA5yFfPB3AV0RfmgT+5kSH6QMravk59arFM9H9SH l5bXwT6Vw2muJwP7s9srW3DdS3qTjVrtoiWEreirFf0ANBsqWvMoGzXs03DQ 8ms9hKbYO17aM+BCWF3C9taH54raa6R48fo1n21pNPazc7O6zK21aVPRWleL xmzYlg/qEe1wKXqxpLHlgxqMlrTXivl80Oazp3eErtHTVYc+gPN3QcmoxEqK sHVsTGNcCwf9EXWE+45O25XynWgdcofn61D2+xQAAAAAAAAAgIeB/tlfv4JQ /zauYVytVltcXPQbFxYWBgYGNB+0v7rrX8tT0V7FfNAyEVvP5TvRkEWHJyPR R5tq8iUjkf6l2czMTGrloxxaOpcGPjfcMjqqTyjtmg/qIilNcBrR1/b5aMli lEb88E/56eMqy00aGZaA2HK2W/W6xluaWWgzW4dlodsq5oPZp4zm7juZSe78 icubjS42/Wxw0J5o2lM+aMO7Ha3dS5VO3vgg9el4NaVtuTY4mBqY7jUZPffV pz+5Swhle0+LB/Wr+i5ev2bjtPlps9QutE5FjdIaG5rac7a9RWkyPy211Ghs /MUX3rv8z5qRDRU8p7c8H7QOc+klsHzQlgmXtBc+H8yekQ5ARqKncOCdt1MB XG4dskdZYRH02aSyi4Wk/rx0hDpV7EplOykfIQAAAAAAAAAAj4Bms2lfQSgs fZubm/OPDJV/pvJB2VF7aCWjva754JkzZ6Sf/c6W0VELGfdFdPuRI0f0kaFb x8a0Q13tOD4+Lsd6YvNmDf4sidB8ULboIseGW28o7S0fzF2OZOdiUUIqH8zG DdlQrDyXeSbZ3tas2S6aOWrcpmNYxXxQG/ioJXffg8mzToVBsou0+SoO127V 67bqqno+6I/72eBgbh1Sw9Dsz7Ycj6qXSpk1pLMc2TbOZqLGXhcPaupkS+2y WZUVR99sn9jll/Jle9aB/eJ3l+zxmDqBNRqTLY0NTV2xqF+ulwouK+aDucW3 AaTywa75l4WeJf3bKWi3OpN9Ptj1+ZyWDy6jCLLl9B8u+8WA2cNpoVTLPf7U V7J8hAAAAAAAAAAAPAIsQRsaGtKvF5yYmBgYGDh06JA9MlS/fPD+o/lWIx/M kt2H4+8f9GQA8/PzOh7tUJ8Uao/3tO891CTi5s2b+uWGcjo2Bn2v+eD58+dz B5YlDbL5YGrH3HytpGff4YH+/twIwy9WWpV88Fa97r/xcDJK0DbE39iYzTdn kwvrsuHRhuiLGq2N5nSNZApZPR88Gyd9vg6p4uu3N2aXczbib+7zpbOQzo7l lxB+un69dNXT4kHLBydff61ilKbrDU//4XKVKE2X2mm8ZdGY7KgPIM19wOYP Nh9sxV//t/fI4ZXng7KL1Lx6EWzLtud2VAz7yAcBAAAAAAAAAGtTK/4Kwq1j Y5oJavqmWaGu5tPleLLR54D2p/5e80HpUL8wzp6lqY21E/tIlwGObnvKf9eh PvXUnkV55MgRWyooDeTQ0ol8pN+HKNttLaHmg0UDyy3LMvLB8vWDXTtMyeaD ttDM5C7c8/ngtcHB47WatbGv82sVrH/02d+6det8EGyjWt18UI/rG7ei74JM tem1etZVdgmhjwvLFw+OJBOrKgdNRW8lUVpqqZ3lg89O7dZbY/aLz/VLDFOL Fn+w+aBstIemrjAf1CLILroksEoRss8yLT9WbifkgwAAAAAAAACAtaAVfwXh zMyMPlPU0jd91uj58+dtyV7qKwKtB83pqueDFgvqgTRHsM7t08XFRRuPNNCj yDj940n1gaX2HFTNB+3Ro7Jlfn6+68Byy9JTPnhtcPBsrTZbr2dfz0SJ3grz wVv1+pdDQ1/V67LFv75yyVdRPrhu3Tr56ZvZ9xuW54P2cNFUZVY9H8w2zo6t qHq2bDDLPvJLCP1qyq6LB0eSiVWVyVMxekvlg7oWMhWNjW57KvcBmxXzwdyQ OneQXb+vcMTlg0XfP7hldPTduU/8GLLfP1jyBX/Zatv/UaFiEVaeDzaKv4ex a1cAAAAAAAAAADxc9CsI5+fnFxcXT548qX8nHx4evnDhwo2Ifvng0NDQxMSE PoA0lQ9KS8sQq+SDGv+llsL58FEHoKv/tL00vnLliozwRpJs8YfWfFDIGO7c ueNXIH6n+WDJS/rR3GEl+WCVV0k+6BfN3Y2fMppdo/cw5oNFJXq1+FsI71Ze PDjygPJBuwX+/h/fyT5gsyQfvHj9mmzc8dIeGUP2tXVszPIvHeTsF5/LAA6f fk8OnX1Z+xGXD46/+MKze6Z8tz85cfytD8/pysHf3/pWFw9qlmdDLTmK9GBH SVVbi5D7lNHVzQePX/qtjDB3ePuOTme/cRIAAAAAAAAAgIedfQWhpWn6x3b7 QsA33njDQkNd06d/ute/6m8ZHZWN2WV62cU4zWbT8r5UztJKPqRU/yCvjwwV 9rzTmZkZffqoLT/0kaXlg3Lo8fFx2S5bNCxoRKsLH0g+KPvqGT2ofFBTMB+Q 6VNGZVRV8sHsNyR+D/lgtk1u9UpKpGXXGZhaQng3el9l8eDIg8sH9exke/Yp oyX5YPlL+tdubZDlL2nj87iu7U98/FFjQ9PiOT/UiqPKVluLkH3KaNd8sOuz TEdcPljykgb2q6xrhwAAAAAAAAAAPCxa8VcQLi4u+ocHDg8P6xI8aWPfJqYP +dTvAdy/f/+VK1ekzcLCgn5BoYZ08/Pz/hGganx8XHqomA/q3/Yto5Rd/DcJ 2sKiRrQOTgajKxwtH9Shyhvf+Ht4vmju6+nVyAdL+q+SD+ql+Tr5MFIZwCOf DxYtIZQ+/VQvnwkPKh/UYWefMlqSD859c1M6LHrteGmPZaY2yMcjtfj7QD1L 6EZcPrh9Ytf9JYRTu2U88pIe9LiNDU1Non2VbKjlR2m4/y9BtgjyUfYpo6ub D8oZlQyvyjwBAAAAAAAAAODh0oq/gnB+ft7/aV1+Xr16dWFhwS8IGh4e3r9/ /40bN3Rpoe5lsZ3GcPfyaDbnnxeamw9aWKAbbQmhPgHVZxZKn4O6uLho+aAG ZPKR/ByOaMubN29+d/ng2Vpt3bp1GjF4Pv5YST5Y1H+tcj7YiB4r6hO0p/v6 quSDP+Tni+oEkPe1KO+bcmeUqnC2/hVTpAebD+otkHrKqBSn5PsHNYnL5lyp JM4GmVqQ6+mxUusHLUfTNvJGnyy6a98r/heFXWvLB/XTrEb8JNiialcswgrz waI66P+7gPWDAAAAAAAAAIBHjz7Ez0IB+1u9vLc/ktujGnVj7hKb3E+zf3W3 BDB3DLZkKTUwG57f1w/SN2hlyPAakSpLgZaRD9riqUaSjcd3eKC/v9d8MLf/ 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 UXw1tP3yijDiQmT9VMsuLw1k/Rn5GLcWKxledjYCAAAAAAAAAIBHjOY1w8PD jUZDVzZlIzYfZ5TQHny4YJ2nWtqBfJLYiBStpcq2SW0sysv8CWb7104sJUwN siS266kURTs24i/yy41julZveRe0Kx+bdq1JyTjtBLOrQbV9+dhsGL4Tq2TF ZW4l51J0vbr279ukpmLXiWG7rKQIfhhVrlRP83YZEwYAAAAAAAAAADx0LODQ NyUNusr2kLtvqlkrqfogWxmreILfRSm6tqk4sIp7dW3ZtYemU1ST8vbZXbpe r/KW1Xe39tWvV5XpNJI3Y3udGCssQurstOCaNuZeqV6HV6WwAAAAAAAAAAAA eCQtIy0iYHogKDsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA5NoJAAAAAAAAAAAAYM14 AwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAfO/+BQAAAAAAAAAAAMCa8a8AAAAAAAAAAAAA 1ox/AwAAAAAAAAAAALBm/DsAAAAAAAAAAACANeM/AAAAAAAAAAAAAKwZ/wkA AAAAAAAAAABgzei0O51Ou925/x/93+h/7v/Qf9x/q/9Z+nd7qYG9iXde2pzc 3o47bEf/CE2s9VKj6Hjxgd0+rsHSfzt+VB2/59Ln4eB2bu2278+104/iAdgB ls6+3YmP1w5vlz4M9QmnEXfrxtF2R0zVzZW9k+jSjSiuWXupEKHfxPHCj7BT +iKE6xafi52sbV7q0q5bXG+7JHHp7ZK33TCtvKGOcSM3l8I+S8N1F91qZpWz UoSDWYXc9bTZGy5UouyutPa5v35+9sQzOTGtXVXDJAnzLpx+Ym64qRjfA6na 2blbm0Tv/p5qu6O58XWS7xOjCsXsxLMtDCtxCf1Jtv3phnNzt0coqh9V8l4I V87fxPF2G4ifvskzDL8QbCrHc68d/tdNA3/4RCE7bovNJrsAnXCaHWtqZ2s/ /fQPN2DyctsYE0e1yof6JoYZ5pSfKe6Ojo8TJpi/Vdp2tRJ3qrWw0zLWS3yT +BHZzWaVbYfP3G+BThhBuE06bkDWh7vY4Y7thHslvI3P282tMK/TR+i0XX9h 1OEXRHzwMAHbbuShUPFMcTdhfDw/i8K8CBchDC7c4HYeoS5uNsSn4i+dXf70 Tex+CdmRE9MjzGR/3ds2Yn8Lhg9tqO5ODW3cLHIT3y5QmJZ+xtrUCaOz6+NH mfhtZGdtfVi5rKyh8omZZpfU3dyJS+amnV3TcIKulu4/jk2/+CqHWRsmZvIg 1qv/tRNmok12O2Y4fPqqhyP5m8OOELfv2K7hX3F1wkUKd6KvZrgl3PXrhL3s t4ex0wx3WrudbuFOyCa0n3m2m5+lyYvvjutmTWJ4dj3ju8eK6G7H1NYwncOV 80f2k9qmRmpSd+ydm1OJK9QOEzWeCW6KhpnrrmOYxW1fAz9qf+ptP1y7TxM1 C7d5Yg7YlY1ngJ+V7v5I1MD2CkMJNQ/3XPJOizuzoVsP8Zm3M0O23kPzcD3t EMlZZlciHnTivd1h6donbvH4ZrTpZO3iGy5MFDdjwpj9JLRZGiacDSVZNruT 3fxt+18INpkSY7QauUvsmoYrlyx+x43CX/VOONtw69g1sKtlF9UdONwZYSra lXI3iV3xcEOF2d4JVU1UxS5SmG3u0iQmhl3txOGXKmZzO/wW8PenmxTtdmqs Np64dn5rKGuYF223SzxfO2GANm9SN6K7gOGHlTj03rHTdCcZ5mM7jM0mYVwU d1HdYPw8Skwhq6KvTaiAnzvJ6sYlj29rG1m4ccPo/cRzg0/MSDf57aKGLeFk fdnstN1gQoUTdbIS2z3nr2aY1HZ+1j78OxzeDdj9Imi7Htwg/OzuuGOFKxzu Xnfp4/3DfZiYWnap3Mm6qWxTIdxVndB54ldDO3GyNmg7ms3+9O0SrqzrKlTL Kmr1sqH5OyVZRHfDJiri5mYn7ivUJdw3dvBQqMRst10TZxE3T064MLfDRQqN QnXa/jTjy9q2EVn5fWHi1jZnXDO7E23+2BlZQcKtGCanm4mh4p3ESfipYYNN HDzcgXbIjp1vuJOtTZgXnfiudneWv9385Ai3ie+ynTyrUDZX+cRFsWLbvWCj SN2tHd+x3bjWyF1MmzM22f2daOfqz8hqnLolE1fAdxp6dvepu1MTu4TfB/EN 5foMdfJ1DXMhzGebHMkZ6I4YCpP5PRBvT9yA7maN53C8KXzkLlQYs90z7vra mMKFa4cm7p5uhwOEqeDnfjvRkZt2NkXcpEn8OrBr4npxw/QXNRzCRu/vTnfL ujG7EYY92uF/QqN4loSr0Q7n4k7apmsYqLvqYXKE//EXqG3nljihMJNsGG6A 4bZyt4hNAz8X/P2SOEO7T+L37qpaVf2+4Qq76sTN7dYI1zbcTpkDpu6AduKu DFPA3Y3xvZi4WslboGMF8fVqu9478X0cqmTV9xfXjhVOwK51OE64P21axjM8 rqa7Y0Jjdx5WXHc7hA3uKrjBdJLHS81B17FdUJtGfo7GRwi/R9zUs0KEKx6m WTzz3EXuWD1CUd2d6IYaZmoolTsJq087jMeqGgpjEy7T1g4S/uUnT2Ki2Hji EvgZHW6jeA7ZNUgMNuxlbUM9E3e4u45WTptX+ua/AAAAAAAAAAAAAKwZ/w0A AAAAAAAAAABgzfgfAAAAAAAAAAAAAGvG/wIAAAAAAAAAAABYM/4PAAAAAAAA AAAAwJrx/1oIIGU= "], {{0, 75}, {2400, 0}}, {0, 255}, ColorFunction->RGBColor], BoxForm`ImageTag["Byte", ColorSpace -> "RGB", Interleaving -> True], Selectable->False], BaseStyle->"ImageGraphics", ImageSize->Magnification[1], ImageSizeRaw->{2400, 75}, PlotRange->{{0, 2400}, {0, 75}}]], "hidefromslideshowgraphic", CellChangeTimes->{{3.4483017593296423`*^9, 3.448301769562791*^9}, { 3.4487297016867533`*^9, 3.448729710294153*^9}, {3.449486136735977*^9, 3.449486146926845*^9}, {3.449490735677544*^9, 3.4494907482045183`*^9}, { 3.473785056790244*^9, 3.4737850735465307`*^9}, {3.485608891427413*^9, 3.485608902078108*^9}, {3.516534228793694*^9, 3.516534238460294*^9}, { 3.517925345960129*^9, 3.5179253474520397`*^9}, {3.518187873028657*^9, 3.518187875044894*^9}, {3.5181990234752483`*^9, 3.5181990242399282`*^9}, { 3.518200170676401*^9, 3.5182001710513353`*^9}}, Background->None], Cell[CellGroupData[{ Cell[TextData[{ StyleBox["Effective use of the ", FontSize->36], StyleBox["Mathematica", FontSize->36, FontSlant->"Italic"], StyleBox[" Compiler and Code Generation", FontSize->36] }], "Title", ShowGroupOpener->False, CellChangeTimes->{{3.448190122176695*^9, 3.44819012385317*^9}, { 3.485609127497636*^9, 3.485609133015955*^9}, {3.514308355088097*^9, 3.514308374696691*^9}, 3.5146594348020153`*^9, 3.5146601881617107`*^9, { 3.5274379328065567`*^9, 3.5274380067554493`*^9}}], Cell["Rob Knapp", "Subtitle", CellChangeTimes->{{3.485609136120798*^9, 3.4856091511532907`*^9}, { 3.4856091945334663`*^9, 3.485609199379443*^9}, {3.4951031489375*^9, 3.49510314984375*^9}, {3.495106455296875*^9, 3.495106455453125*^9}, { 3.5143083846926413`*^9, 3.514308395249558*^9}, {3.527437989963686*^9, 3.527437991515068*^9}}], Cell["Wolfram Research, Inc.", "Subsubtitle", CellChangeTimes->{ 3.483202458953512*^9, {3.495105345328125*^9, 3.495105347890625*^9}, { 3.49510644571875*^9, 3.495106448390625*^9}, {3.5143083980990458`*^9, 3.514308409442589*^9}, {3.5274379951320133`*^9, 3.527438002432547*^9}}] }, Open ]], Cell[CellGroupData[{ Cell["", "SlideShowNavigationBar", CellTags->"SlideShowHeader"], Cell[TextData[{ "Even if you have never used the ", StyleBox["Mathematica", FontSlant->"Italic"], " function Compile directly, it has probably been used \ \[OpenCurlyDoubleQuote]under the hood\[CloseCurlyDoubleQuote] for a variety \ of things you have done. " }], "Text", CellChangeTimes->{{3.495209008234375*^9, 3.49520915653125*^9}, 3.495209919765625*^9, 3.4952106014375*^9, {3.4952106824375*^9, 3.495210832234375*^9}, 3.514307848543872*^9, {3.514308058576482*^9, 3.514308065607885*^9}, {3.51430841745117*^9, 3.514308419642997*^9}, { 3.5149152616687326`*^9, 3.514915280523456*^9}, {3.514915328702818*^9, 3.5149153375415287`*^9}, 3.514915444638068*^9, 3.527438157946686*^9, { 3.527981064721572*^9, 3.527981068366074*^9}}], Cell[CellGroupData[{ Cell["\<\ It is used in plotting functions\ \>", "Item", CellChangeTimes->{{3.527438189997725*^9, 3.527438198525998*^9}}], Cell["\<\ It is used for numerical computation functions like NDSolve, FindRoot, etc.\ \>", "Item", CellChangeTimes->{{3.527438200112672*^9, 3.527438211147011*^9}}], Cell[TextData[{ "It is used extensively in the part of ", StyleBox["Mathematica", FontSlant->"Italic"], " system code written in the ", StyleBox["Mathematica", FontSlant->"Italic"], " language." }], "Item", CellChangeTimes->{3.527438211576819*^9}] }, Open ]], Cell["\<\ In all of these cases, the compiler is used to speed up just a part of the \ computation rather than being used for the entirety.\ \>", "Text", CellChangeTimes->{3.527438287430091*^9}], Cell[TextData[{ "The most common difficulty I see with many people\[CloseCurlyQuote]s use of \ the compiler is treating it like a C or Java compiler where an entire program \ has to be compiled. In ", StyleBox["Mathematica", FontSlant->"Italic"], " the compiler is well integrated with the rest of the system via basic \ number types and PackedArrays so it is practical and very often more \ efficient to compile small numerically intensive parts of a computation and \ leave the rest to ordinary ", StyleBox["Mathematica", FontSlant->"Italic"], " evaluation. An additional advantage of this approach is that you can \ concentrate on making small pieces of a computation fast, something that is \ much easier and more likely to produce results than trying to work with the \ whole computation at once." }], "Text", CellChangeTimes->{3.527438299956921*^9}] }, Open ]], Cell[CellGroupData[{ Cell["", "SlideShowNavigationBar", CellTags->"SlideShowHeader"], Cell[CellGroupData[{ Cell[TextData[{ "Some things to keep in mind for effective use of the ", StyleBox["Mathematica", FontSlant->"Italic"], " Compiler" }], "Section", CellChangeTimes->{ 3.483202458955147*^9, {3.51430857274755*^9, 3.514308578875259*^9}, { 3.527438438619381*^9, 3.5274384676537533`*^9}}], Cell["\<\ I\[CloseCurlyQuote]ll keep harping on these throughout the talk, so it seemed \ worthwhile to do a quick summary now.\ \>", "Text", CellChangeTimes->{{3.5274384929989653`*^9, 3.527438521742745*^9}}], Cell[CellGroupData[{ Cell["\<\ You don\[CloseCurlyQuote]t have to compile your whole program (I\ \[CloseCurlyQuote]m repeating myself since I think this is so important)\ \>", "Item", CellChangeTimes->{{3.527438834766431*^9, 3.5274388462559223`*^9}, { 3.527438900531258*^9, 3.5274389183315163`*^9}}], Cell["\<\ The internal data structure for lists in Compile is exactly the same as the \ internal data structure for PackedArray\ \>", "Item", CellChangeTimes->{{3.527438925710775*^9, 3.527438971843677*^9}}], Cell["\<\ This means that passing PackedArray in and out of CompiledFunction is quite \ efficient\ \>", "Subitem", CellChangeTimes->{{3.527438989706245*^9, 3.5274390246663523`*^9}}], Cell["\<\ The template for calling functions in the virtual machine is the same as the \ template for LibraryLink functions\ \>", "Item", CellChangeTimes->{{3.527438925710775*^9, 3.527438971843677*^9}, { 3.527440198529633*^9, 3.527440246928113*^9}}], Cell[CellGroupData[{ Cell["\<\ This means that setting up a LibraryLink function to do a critical part of \ your computation is essentially as fast as if it were functionality that the \ Compiler has built in\ \>", "Subitem", CellChangeTimes->{{3.527438989706245*^9, 3.5274390246663523`*^9}, { 3.5274402715817423`*^9, 3.527440333434313*^9}}], Cell["\<\ An easy way to make a LibraryLink function is to use Compile with \ CompilationTarget->\[CloseCurlyDoubleQuote]C\[CloseCurlyDoubleQuote]\ \>", "Subitem", CellChangeTimes->{{3.527438989706245*^9, 3.5274390246663523`*^9}, { 3.5274402715817423`*^9, 3.527440376102672*^9}}] }, Open ]], Cell["Compiling in listability gives you several advantages", "Item", CellChangeTimes->{{3.527438925710775*^9, 3.527438971843677*^9}, { 3.527439081749404*^9, 3.527439113337948*^9}}], Cell[CellGroupData[{ Cell["Flexibility: a single function can work for lists or scalars", "Subitem", CellChangeTimes->{{3.527438989706245*^9, 3.5274390246663523`*^9}, { 3.52743912509201*^9, 3.527439140080338*^9}}], Cell["\<\ Flexibility: in some cases this can be used to work around the restriction \ that nested lists be rectangular\ \>", "Subitem", CellChangeTimes->{{3.5274392439498043`*^9, 3.5274393142286253`*^9}}], Cell["Speed: parallelization can give some nice speedups", "Subitem", CellChangeTimes->{{3.527439316280932*^9, 3.527439339929199*^9}}] }, Open ]], Cell["\<\ Compiling to C code can make things much faster, but the C compilation can be \ expensive.\ \>", "Item", CellChangeTimes->{{3.5274394772929153`*^9, 3.527439522724181*^9}}], Cell["\<\ I suggest On[\[OpenCurlyDoubleQuote]CompilerWarnings\[CloseCurlyDoubleQuote]]\ \ \>", "Item", CellChangeTimes->{{3.527438925710775*^9, 3.527438971843677*^9}, { 3.527439081749404*^9, 3.527439113337948*^9}, {3.5274394099902487`*^9, 3.527439431438607*^9}, {3.527439463866085*^9, 3.527439463871698*^9}}] }, Open ]], Cell[BoxData[ RowBox[{"On", "[", "\"\\"", "]"}]], "Input", InitializationCell->True, CellChangeTimes->{{3.527441128989551*^9, 3.527441135650887*^9}}], Cell["To see what has fully compiled use CompilePrint", "Item", CellChangeTimes->{{3.527439433137741*^9, 3.527439458842456*^9}, { 3.5274395347573023`*^9, 3.527439539157398*^9}}], Cell[BoxData[ RowBox[{"Needs", "[", "\"\\"", "]"}]], "Input", InitializationCell->True, CellChangeTimes->{{3.5274524323229723`*^9, 3.527452442011588*^9}}] }, Open ]] }, Open ]], Cell[CellGroupData[{ Cell["", "SlideShowNavigationBar", CellTags->"SlideShowHeader"], Cell[CellGroupData[{ Cell["\<\ Example: Chebyshev Approximations\ \>", "Section", CellChangeTimes->{ 3.483202458955147*^9, {3.51430857274755*^9, 3.514308578875259*^9}, { 3.527438438619381*^9, 3.5274384676537533`*^9}, {3.527439561774901*^9, 3.527439564708774*^9}, {3.527439854792202*^9, 3.527439894315713*^9}, { 3.527442762739447*^9, 3.527442765279973*^9}, {3.5274504756644487`*^9, 3.5274504901872377`*^9}, {3.527507332007989*^9, 3.527507335789369*^9}}], Cell[TextData[{ "The goal in this example is to define a function ", StyleBox["Tfun[f, {x0,x1}]", "Code"], " that represents a function ", Cell[BoxData[ FormBox["f", TraditionalForm]], FormatType->"TraditionalForm"], " of ", Cell[BoxData[ FormBox["x", TraditionalForm]], FormatType->"TraditionalForm"], " on an interval ", Cell[BoxData[ FormBox[ RowBox[{"[", RowBox[{ SubscriptBox["x", "0"], ",", " ", SubscriptBox["x", "1"]}], "]"}], TraditionalForm]], FormatType->"TraditionalForm"], " as a sum of Chebyshev polynomials on ", Cell[BoxData[ FormBox[ RowBox[{"[", RowBox[{ RowBox[{"-", "1"}], ",", " ", "1"}], "]"}], TraditionalForm]], FormatType->"TraditionalForm"] }], "Text", CellChangeTimes->{{3.527513016005362*^9, 3.52751305677367*^9}, { 3.527517953820533*^9, 3.527518043500347*^9}, {3.527518808462756*^9, 3.527518868395068*^9}, {3.527589336740261*^9, 3.527589343823709*^9}, { 3.527981589987784*^9, 3.527981610281762*^9}, {3.527981667208625*^9, 3.527981714164937*^9}}], Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"f", "(", "x", ")"}], " ", "=", " ", RowBox[{ UnderoverscriptBox["\[Sum]", RowBox[{"i", "=", "0"}], "n"], RowBox[{ SubscriptBox["a", "i"], RowBox[{ SubscriptBox["T", "i"], "(", "x", ")"}]}]}]}], TraditionalForm]], "DisplayFormula", CellChangeTimes->{{3.527508193934304*^9, 3.527508230210547*^9}, 3.527509335921204*^9, {3.5275113451773167`*^9, 3.527511349359088*^9}, { 3.527513162024131*^9, 3.527513176262046*^9}, {3.527514726288776*^9, 3.527514733847693*^9}, {3.527517824202573*^9, 3.5275178706189413`*^9}, { 3.527518011775104*^9, 3.527518018366531*^9}, {3.5275182140657187`*^9, 3.5275182142968187`*^9}, {3.527518801039955*^9, 3.527518830596054*^9}}], Cell["\<\ A really simple implementation of this is to use\ \>", "Text", CellChangeTimes->{{3.527517900739759*^9, 3.527517938429962*^9}}], Cell[BoxData[{ RowBox[{ RowBox[{"Clear", "[", "Tfun", "]"}], ";"}], "\[IndentingNewLine]", RowBox[{ RowBox[{"SetAttributes", "[", RowBox[{"Tfun", ",", " ", "HoldAll"}], "]"}], ";"}], "\[IndentingNewLine]", RowBox[{ RowBox[{ RowBox[{"Tfun", "[", RowBox[{"fx_", ",", " ", RowBox[{"{", RowBox[{"x_", ",", " ", "x0_", ",", "x1_"}], "}"}], ",", " ", "a_List"}], "]"}], "[", "t_", "]"}], " ", ":=", " ", RowBox[{"Module", "[", RowBox[{ RowBox[{"{", RowBox[{"s", " ", "=", " ", RowBox[{ RowBox[{"(", RowBox[{ RowBox[{"2", "t"}], " ", "-", " ", RowBox[{"(", RowBox[{"x1", "+", "x0"}], ")"}]}], ")"}], "/", RowBox[{"(", RowBox[{"x1", "-", "x0"}], ")"}]}]}], "}"}], ",", RowBox[{"tsum", "[", RowBox[{"a", ",", "s"}], "]"}]}], "]"}]}]}], "Input", CellChangeTimes->{ 3.527517944262064*^9, {3.527518064862892*^9, 3.527518130271592*^9}, { 3.527518781604851*^9, 3.5275187874112463`*^9}, {3.527518910697126*^9, 3.527518945527604*^9}, {3.527519703120479*^9, 3.52751973917719*^9}, { 3.5275197844031153`*^9, 3.527519818109252*^9}, {3.527519848218113*^9, 3.5275198507629128`*^9}, {3.5275200046894827`*^9, 3.527520059514824*^9}, { 3.527520474101507*^9, 3.5275205082599993`*^9}, {3.527520542069387*^9, 3.527520564093081*^9}, 3.5275206434287863`*^9, {3.5275211956449547`*^9, 3.52752119609208*^9}, {3.527521261452407*^9, 3.527521267509849*^9}, { 3.527521335078371*^9, 3.527521382830315*^9}, {3.527525118819008*^9, 3.52752513210469*^9}}], Cell[BoxData[ RowBox[{ RowBox[{ RowBox[{"tsum", "[", RowBox[{"a_", ",", "x_"}], "]"}], " ", ":=", " ", RowBox[{"a", ".", RowBox[{"Table", "[", RowBox[{ RowBox[{"ChebyshevT", "[", RowBox[{"i", ",", "x"}], "]"}], ",", RowBox[{"{", RowBox[{"i", ",", "0", ",", RowBox[{ RowBox[{"Length", "[", "a", "]"}], "-", "1"}]}], "}"}]}], "]"}]}]}], ";"}]], "Input", CellChangeTimes->{{3.527525091811676*^9, 3.527525123304866*^9}, { 3.527525223887529*^9, 3.5275252240081253`*^9}}], Cell[BoxData[ RowBox[{ RowBox[{"Format", "[", RowBox[{"Tfun", "[", RowBox[{"fx_", ",", " ", RowBox[{"{", RowBox[{"x_", ",", "x0_", ",", "x1_"}], "}"}], ",", " ", "a_List"}], "]"}], "]"}], " ", ":=", " ", RowBox[{"Subscript", "[", RowBox[{ RowBox[{"Tfun", "[", RowBox[{"fx", ",", " ", RowBox[{"{", RowBox[{"x", ",", " ", "x0", ",", "x1"}], "}"}]}], "]"}], ",", RowBox[{"\"\<<\>\"", "<>", RowBox[{"ToString", "[", RowBox[{ RowBox[{"Length", "[", "a", "]"}], "-", "1"}], "]"}], "<>", "\"\<>\>\""}]}], "]"}]}]], "Input", CellChangeTimes->{{3.527520192204115*^9, 3.527520267818679*^9}, { 3.527520301504039*^9, 3.5275203350091057`*^9}, {3.527520419711693*^9, 3.527520445520733*^9}, {3.5275204927002*^9, 3.527520496957954*^9}, { 3.527520568578595*^9, 3.5275205735395803`*^9}, {3.5275206225971518`*^9, 3.527520644875217*^9}, {3.527520687168109*^9, 3.527520698744246*^9}, { 3.5275211992110567`*^9, 3.527521199554639*^9}}], Cell[TextData[{ "You can use Fourier cosine transforms to generate sets of coefficients (I \ won\[CloseCurlyQuote]t go into the math behind this, but it is fun).\n", StyleBox["ToTfun", "Code"], " implements this" }], "Text", CellChangeTimes->{{3.527518226479402*^9, 3.527518340339889*^9}, { 3.527518510703761*^9, 3.527518514260714*^9}, {3.527981747213293*^9, 3.527981747340784*^9}}], Cell[BoxData[{ RowBox[{ RowBox[{"Clear", "[", "ToTfun", "]"}], ";"}], "\[IndentingNewLine]", RowBox[{ RowBox[{"ToTfun", "[", RowBox[{"fx_", ",", " ", RowBox[{"{", RowBox[{"x_", ",", " ", "x0_", ",", " ", "x1_"}], "}"}], ",", " ", "n_"}], "]"}], " ", ":=", " ", RowBox[{"Module", "[", RowBox[{ RowBox[{"{", RowBox[{ RowBox[{"cnodes", "=", RowBox[{"N", "[", RowBox[{"Cos", "[", RowBox[{"Pi", " ", RowBox[{ RowBox[{"Range", "[", RowBox[{"0", ",", "n"}], "]"}], "/", "n"}]}], "]"}], "]"}]}], ",", "xnodes", ",", " ", "fnodes", ",", "coeffs", ",", " ", "dx"}], "}"}], ",", "\[IndentingNewLine]", RowBox[{ RowBox[{"xnodes", " ", "=", " ", RowBox[{ RowBox[{"(", RowBox[{"x1", " ", "+", " ", "x0", " ", "+", " ", RowBox[{"cnodes", RowBox[{"(", RowBox[{"x1", "-", "x0"}], ")"}]}]}], ")"}], "/", "2"}]}], ";", "\[IndentingNewLine]", RowBox[{"fnodes", " ", "=", " ", RowBox[{"Table", "[", RowBox[{"fx", ",", RowBox[{"{", RowBox[{"x", ",", "xnodes"}], "}"}]}], "]"}]}], ";", "\[IndentingNewLine]", RowBox[{"coeffs", " ", "=", " ", RowBox[{ RowBox[{"FourierDCT", "[", RowBox[{"fnodes", ",", "1"}], "]"}], "*", RowBox[{"Sqrt", "[", RowBox[{"2", "/", "n"}], "]"}]}]}], ";", "\[IndentingNewLine]", RowBox[{ RowBox[{"coeffs", "[", RowBox[{"[", RowBox[{"{", RowBox[{"1", ",", RowBox[{"-", "1"}]}], "}"}], "]"}], "]"}], "/=", "2"}], ";", "\[IndentingNewLine]", RowBox[{"Tfun", "[", RowBox[{"fx", ",", RowBox[{"{", RowBox[{"x", ",", " ", "x0", ",", " ", "x1"}], "}"}], ",", " ", RowBox[{"Evaluate", "[", "coeffs", "]"}]}], "]"}]}]}], "\[IndentingNewLine]", "]"}]}]}], "Input", CellChangeTimes->{{3.527518310270782*^9, 3.527518368275229*^9}, { 3.5275186385506353`*^9, 3.52751866249681*^9}, {3.527518693755093*^9, 3.527518736442417*^9}, {3.527518962808949*^9, 3.5275189633591843`*^9}, { 3.52751905501009*^9, 3.527519073953731*^9}, {3.527519210448842*^9, 3.527519300235147*^9}, {3.527519348900375*^9, 3.527519369407612*^9}, { 3.527519513213894*^9, 3.5275195629649563`*^9}, {3.527519633989361*^9, 3.5275196456848907`*^9}, 3.527519973175737*^9, {3.527520521511717*^9, 3.527520521833027*^9}, {3.5275205857426033`*^9, 3.5275206087803383`*^9}, { 3.527520641840191*^9, 3.5275206673151827`*^9}}], Cell["\<\ Another possible way to generate them would be to do a polynomial fit with a \ Chebyshev basis to make an approximate function for data.\ \>", "Text", CellChangeTimes->{{3.527521498975555*^9, 3.5275215638961267`*^9}}], Cell["\<\ As a test consider Runge\[CloseCurlyQuote]s function that causes problems for \ regularly spaced interpolation points.\ \>", "Text", CellChangeTimes->{{3.5275207529173393`*^9, 3.527520792797906*^9}}], Cell[BoxData[ RowBox[{ RowBox[{ RowBox[{"runge", "[", "x_", "]"}], " ", ":=", " ", RowBox[{"1", "/", RowBox[{"(", RowBox[{"1", "+", RowBox[{ RowBox[{"(", RowBox[{"5", "x"}], ")"}], "^", "2"}]}], ")"}]}]}], ";"}]], "Input", CellChangeTimes->{{3.527519920892273*^9, 3.5275199293693657`*^9}}], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{"trunge", " ", "=", " ", RowBox[{"ToTfun", "[", RowBox[{ RowBox[{"runge", "[", RowBox[{"x", "-", "3"}], "]"}], ",", RowBox[{"{", RowBox[{"x", ",", "0", ",", RowBox[{"2", " ", "Pi"}]}], "}"}], ",", "47"}], "]"}]}]], "Input", CellChangeTimes->{{3.527519317118634*^9, 3.5275193207481813`*^9}, { 3.5275193763794127`*^9, 3.527519403634614*^9}, {3.527519935257998*^9, 3.527519955864718*^9}, {3.52752007320391*^9, 3.527520073364809*^9}, { 3.5275201530390673`*^9, 3.527520155172535*^9}}], Cell[BoxData[ SubscriptBox[ RowBox[{"Tfun", "[", RowBox[{ FractionBox["1", RowBox[{"1", "+", RowBox[{"25", " ", SuperscriptBox[ RowBox[{"(", RowBox[{ RowBox[{"-", "3"}], "+", "x"}], ")"}], "2"]}]}]], ",", RowBox[{"{", RowBox[{"x", ",", "0", ",", RowBox[{"2", " ", "\[Pi]"}]}], "}"}]}], "]"}], "\<\"<47>\"\>"]], "Output", CellChangeTimes->{3.528034852936953*^9}] }, Open ]], Cell["\<\ Compare the function and its approximation\ \>", "Text", CellChangeTimes->{{3.527520833376134*^9, 3.527520842392034*^9}}], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{"Plot", "[", RowBox[{ RowBox[{"{", RowBox[{ RowBox[{"trunge", "[", "x", "]"}], ",", RowBox[{"runge", "[", RowBox[{"x", "-", "3"}], "]"}]}], "}"}], ",", RowBox[{"{", RowBox[{"x", ",", "0", ",", RowBox[{"2", " ", "Pi"}]}], "}"}], ",", " ", RowBox[{"PlotRange", "\[Rule]", "All"}]}], "]"}]], "Input", CellChangeTimes->{{3.527519395683568*^9, 3.527519417908649*^9}, { 3.527519960986144*^9, 3.527519961352453*^9}, {3.527520086341195*^9, 3.527520106855054*^9}}], Cell[BoxData[ GraphicsBox[{{}, {}, {Hue[0.67, 0.6, 0.6], LineBox[CompressedData[" 1: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 RIS3ixktxmVgj+bYxpo++X7SslLsNRng72MedHhGIiY0ShR7D2RCfuRQhaU1 ifB+tEGlfjUTJlNCMcb2JEL/ffvQA6tM8l6joK7hTiKabJ4p03dlopVK45yq N4k4JikgXcBM5jejKdsdXxLhMuy/e1U2C5LsgS2XQkhE/Ev1ZpnyLDw4FJt7 /hWJmD4iGJ1KkQ1nnpwA0SgSQfOCtXKLKxuVZxrleBNIRKJrfWKITjbkbrN8 3ZZPfh+3H86PaHJgdI8rnrqIRJz4OBrfcJLcmh6dcvlXTCJMO1cHfNRy0GJ0 6/z0FxJxpoE9vaEgB+ovAt83NZMIyrKfXib2uXAMig3+3kbOPwe/5UR2LmIi ckwru0jEwWv0Z98M52IwuVGwYIBEKBwbzvC7mweDSpakiHkSwbIuowOpfPh9 53IPWiYRVgpxIbOO+chuOqX5Yp1E5LSem31fko+FvlsHHaioCAmVW0yPLryH /b/AsEe7qQg/7v2nX18vgK/oLi+e01SEjnT6B4GAImSk7NJ5b0ZFjEt4vtjp XwL3X5+lqKyoCMe1tMtroyVQJxn+d8uOiuCWj1ndd7EUjOrf6ifcqIhBnnyn kuVSPNlpf+ZIKBVhq+ie2yRUhkOWQ6TgQiriJkvf6Q/h5ViOC/rdV0xFFM6X vlj8Uo76nyg4UUZF7E6IIyhmyuFwPFK3tpqKuERH+dD0SgU6f8s3UHZSEcer aPFgvgIhF4vemGxQES+PLPCWSVZC3+SxVSkFNaFuuJGrqV0J6Te7bjHRUBMv 37NOJ7+oxOySAXXKdmpC/l7C770dlZBP5dLvPUhNJPYKf9Mz/gp6lhdn5aWo iYjL9hQMz6tg33O/md+TmjC6uSoQ6VaNhSvn3zx+Tk1k9lgcX4uphkEOx9No P2ri+e2JvTKl1VBz71rbFU5NKMue+Fy0Uo1zfPe415LJ5z9rH3pvWINVC0XT 6hpqYpfAHi2KB7Uw6T0tQaqnJoS+Zr4RdqjFqOxuGskmaoLxP91H5VG1aP+v 6VVWJzUR9Oft5t7uWhSV3ywLG6cmDPxlo3y1vsNy+/Wdj7fTEOICdAxe/nWY suTreMtCQwSXkzLii+rwpI8hvn0vDTFdNXwzo78OSnnVonIHaYjXxyPcMsR/ 4Mw9mQenT9IQ8VOfJPQXfiC94iiv4WkaIk5W7dLq0XocEaCZSxIj6zdyzHxW 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 "]]}, {Hue[0.9060679774997897, 0.6, 0.6], LineBox[CompressedData[" 1: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 "]]}}, AspectRatio->NCache[GoldenRatio^(-1), 0.6180339887498948], Axes->True, AxesOrigin->{0, 0}, PlotRange->{All, All}, PlotRangeClipping->True, PlotRangePadding->{Automatic, Automatic}]], "Output", CellChangeTimes->{3.528034864671516*^9}, ImageCache->GraphicsData["CompressedBitmap", "\<\ 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 zf8olSb0XEXjglZSxNBkSpiWR9ucZXSp7CRdP3COblSdp1Nbj1O+Yyc/u3J6 IeXFldHZ8jO8zE5s99CWjANUnlIm/n+KdUc7csqXCd6V13744UfW6kIbaA3y tlbpTt9/30onT9ymosJzQpOcoq1bLlJtbSO9fv0T+1Nk+Qcf5hDXyXPqDq2O q6KwzwqpZ1AG9bS6qG/PDJrwZSGlJxygM0ev0Xf3m+jZnYfCgLnPzzdevqU1 zO2TV+iaGICtSRW08PM19KV1JY2zOmj2kERaHpZOji/SeZAjgg0ZOK/XUkoJ c9LWucaElc/PElrERdumptAWYaCVjFlFhUJm5o2IpjV9bZQqDL10g3Hw/C+Z d36PXOJXl1Aa4JeCT5ZS6bg4ht81J5N2C9jiWdm0YmQCTbEuo4h+q6l4+Vaq EwoQChHkozstz57T6x9f+x3SLnL9YXgW2MqFSMzk9QPRGDpknV6PIcGZtChy 9/+XsuyX/C0coMbnVHXwOst2/P3Fi1d+jR+DBbvxfTBmMZZxq6royuWHYG1j Gv6I7t//jh/7WNhDGOJJ4Vvo9Imb9PzhU9ZW92qus01zda+HLm49Qmfy9rJ5 fjhhE+1bms/PQjQVCXskqW8ki6QUYW9k9JwlNe3feosj/skUrJQ7YAFtGLaY No6KoaIw4S6MX02l4YmU/dlKWt5nCS0ULkJMv6W08RtD7B5J2sKi8WRWGZ1e v4fOFeyj86VVdMl9lC7vPM621onSo5Rm20Tj+yfTKOEOjApOpMkfZfPzUz5b Rx/2SqWB1mQa1sdFK6Mr6OLpW/TDi+/px1etGJJukgtx+6tXP7IkX+U4SGO+ LKH+fXOYCz8emU+RCyto27ZL0LhSc/gTEN0wM3RKcPT2bbUsHI4cqaemppf+ HmmXWUxJrv8kr8HORaOQXAZL9KA7d55RYcE5Xjbjx5XSmC+K2T9JTjpCx47e hLST/skf048/vmYTYuJXpYw/qGc6zZ5YTMn2XZQVW05JC7aQ7QuhtoJX0xgh eeYPS6KNCwvoWMZOOirctqpVxVQZvYGlzPZpqayqIF0wz9l95hns8AeU29/G 044pB+vsiVpHh1aX0uYlBRT5UQprxfEDUsm1opzOVV+nH14ZkQuY59fqHrOF A46GNEA3hCCWoVjfYRls8poS/N9eeUizZu6UDoLx/UGvNWSPrqTr1x9b/h3f 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 ul/8H2mxNn0=\ \>"]] }, Open ]] }, Open ]] }, Open ]], Cell[CellGroupData[{ Cell["", "SlideShowNavigationBar", CellTags->"SlideShowHeader"], Cell["As currently implemented, Tfun is not very fast:", "Text", CellChangeTimes->{{3.527520878778244*^9, 3.527520894177264*^9}, { 3.527520938188487*^9, 3.5275209484423323`*^9}}], Cell[BoxData[ RowBox[{ RowBox[{"test", " ", "=", " ", RowBox[{"RandomReal", "[", RowBox[{ RowBox[{"{", RowBox[{"0", ",", RowBox[{"2", " ", "Pi"}]}], "}"}], ",", " ", "10000"}], "]"}]}], ";"}]], "Input", CellChangeTimes->{{3.527520983771679*^9, 3.527521028110565*^9}, { 3.527521301506316*^9, 3.527521307673819*^9}}], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{"AbsoluteTiming", "[", RowBox[{ RowBox[{"Map", "[", RowBox[{"trunge", ",", "test"}], "]"}], ";"}], "]"}]], "Input", CellChangeTimes->{{3.527520952661422*^9, 3.527520978316839*^9}, { 3.527521008591157*^9, 3.527521017038611*^9}}], Cell[BoxData[ RowBox[{"{", RowBox[{ "1.9790719999999999423323515657102689147`6.317061507705269", ",", "Null"}], "}"}]], "Output", CellChangeTimes->{3.528034912223*^9}] }, Open ]], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{"AbsoluteTiming", "[", RowBox[{ RowBox[{"trunge", "[", "test", "]"}], ";"}], "]"}]], "Input", CellChangeTimes->{{3.527521115158063*^9, 3.52752111813992*^9}}], Cell[BoxData[ RowBox[{"{", RowBox[{ "1.79573800000000005638867150992155075073`6.2748428862264225", ",", "Null"}], "}"}]], "Output", CellChangeTimes->{3.528034939689546*^9}] }, Open ]], Cell["\<\ To be useful, the approximation needs to be as fast or faster than the \ original function.\ \>", "Text", CellChangeTimes->{{3.527521462317708*^9, 3.527521484053049*^9}}], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{"AbsoluteTiming", "[", RowBox[{ RowBox[{"Map", "[", RowBox[{ RowBox[{ RowBox[{"runge", "[", RowBox[{"#", "-", "3"}], "]"}], "&"}], ",", "test"}], "]"}], ";"}], "]"}]], "Input", CellChangeTimes->{{3.527520952661422*^9, 3.527520978316839*^9}, { 3.527521008591157*^9, 3.527521017038611*^9}, {3.5275210473899803`*^9, 3.5275210852942963`*^9}, {3.527521424386956*^9, 3.527521428338232*^9}}], Cell[BoxData[ RowBox[{"{", RowBox[{ "0.03584699999999999692201768652921600733`4.575052729128277", ",", "Null"}], "}"}]], "Output", CellChangeTimes->{3.5280349856991568`*^9}] }, Open ]], Cell["It looks even worse against:", "Text", CellChangeTimes->{{3.52752467465277*^9, 3.527524720370545*^9}}], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{"AbsoluteTiming", "[", RowBox[{ RowBox[{"runge", "[", RowBox[{"test", "-", "3"}], "]"}], ";"}], "]"}]], "Input", CellChangeTimes->{{3.527521137134234*^9, 3.5275211446636267`*^9}, { 3.527524691440332*^9, 3.5275247031814213`*^9}}], Cell[BoxData[ RowBox[{"{", RowBox[{ "0.0004299999999999999894355340313012448`2.6540683688592104", ",", "Null"}], "}"}]], "Output", CellChangeTimes->{3.528034990092225*^9}] }, Open ]], Cell[TextData[{ "The reason that it is so slow is that it has to evaluate ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["T", "0"], ",", " ", SubscriptBox["T", "1"], ",", " ", RowBox[{"...", " ", SubscriptBox["T", "n"]}]}], TraditionalForm]], FormatType->"TraditionalForm"], " separately.\nThere is a faster and more numerically stable way, via ", ButtonBox["Clenshaw\[CloseCurlyQuote]s algorithm", BaseStyle->"Hyperlink", ButtonData->{ URL["http://en.wikipedia.org/wiki/Clenshaw_algorithm"], None}, ButtonNote->"http://en.wikipedia.org/wiki/Clenshaw_algorithm"], " that uses the recurrence relation of the Chebyshev functions." }], "Text", CellChangeTimes->{{3.5275247286929607`*^9, 3.5275248343637867`*^9}, { 3.527524924703554*^9, 3.527524924706929*^9}}] }, Open ]], Cell[CellGroupData[{ Cell["", "SlideShowNavigationBar", CellTags->"SlideShowHeader"], Cell["\<\ Here is an implementation for Clenshaw\[CloseCurlyQuote]s algorithm\ \>", "Text", CellChangeTimes->{{3.52752501631415*^9, 3.527525057938335*^9}}], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{"clenshawVM", " ", "=", " ", RowBox[{"Compile", "[", RowBox[{ RowBox[{"{", RowBox[{ RowBox[{"{", RowBox[{"coeffs", ",", " ", "_Real", ",", " ", "1"}], "}"}], ",", " ", RowBox[{"{", RowBox[{"x", ",", "_Real"}], "}"}]}], "}"}], ",", " ", RowBox[{"Module", "[", RowBox[{ RowBox[{"{", RowBox[{"n", " ", "=", " ", RowBox[{"Length", "[", "coeffs", "]"}]}], "}"}], ",", " ", "\[IndentingNewLine]", RowBox[{"Which", "[", "\[IndentingNewLine]", RowBox[{ RowBox[{"n", "\[Equal]", "1"}], ",", " ", RowBox[{"coeffs", "[", RowBox[{"[", "1", "]"}], "]"}], ",", "\[IndentingNewLine]", RowBox[{"n", "\[Equal]", "2"}], ",", " ", RowBox[{ RowBox[{"coeffs", "[", RowBox[{"[", "1", "]"}], "]"}], " ", "+", " ", RowBox[{"x", " ", RowBox[{"coeffs", "[", RowBox[{"[", "2", "]"}], "]"}]}]}], ",", "\[IndentingNewLine]", "True", ",", " ", RowBox[{"Module", "[", RowBox[{ RowBox[{"{", RowBox[{"a1", ",", "a2", ",", RowBox[{"twox", " ", "=", " ", RowBox[{"2.", " ", "x"}]}], ",", " ", RowBox[{"t", "=", "x"}]}], "}"}], ",", "\[IndentingNewLine]", RowBox[{ RowBox[{"a2", " ", "=", " ", RowBox[{"coeffs", "[", RowBox[{"[", "n", "]"}], "]"}]}], ";", "\[IndentingNewLine]", RowBox[{"a1", " ", "=", " ", RowBox[{ RowBox[{"twox", "*", "a2"}], " ", "+", " ", RowBox[{"coeffs", "[", RowBox[{"[", RowBox[{"n", " ", "-", " ", "1"}], "]"}], "]"}]}]}], ";", "\[IndentingNewLine]", RowBox[{"Do", "[", RowBox[{ RowBox[{ RowBox[{"t", " ", "=", " ", "a1"}], ";", " ", RowBox[{"a1", " ", "=", " ", RowBox[{ RowBox[{"twox", "*", "a1"}], " ", "-", " ", "a2", " ", "+", " ", RowBox[{"coeffs", "[", RowBox[{"[", "i", "]"}], "]"}]}]}], ";", " ", RowBox[{"a2", " ", "=", " ", "t"}]}], ",", "\[IndentingNewLine]", RowBox[{"{", RowBox[{"i", ",", RowBox[{"n", "-", "2"}], ",", "2", ",", RowBox[{"-", "1"}]}], "}"}]}], "]"}], ";", "\[IndentingNewLine]", RowBox[{ RowBox[{"x", "*", "a1"}], "-", "a2", "+", RowBox[{"coeffs", "[", RowBox[{"[", "1", "]"}], "]"}]}]}]}], "\[IndentingNewLine]", "]"}]}], "\[IndentingNewLine]", "]"}]}], "\[IndentingNewLine]", "]"}], ",", " ", RowBox[{"RuntimeAttributes", "\[Rule]", "Listable"}]}], "]"}]}]], "Input",\ CellChangeTimes->{ 3.527517470207295*^9, {3.52752560244081*^9, 3.527525608141779*^9}, 3.52759088018727*^9}], Cell[BoxData[ TagBox[ RowBox[{"CompiledFunction", "[", RowBox[{ RowBox[{"{", RowBox[{"coeffs", ",", "x"}], "}"}], ",", RowBox[{"Module", "[", RowBox[{ RowBox[{"{", RowBox[{"n", "=", RowBox[{"Length", "[", "coeffs", "]"}]}], "}"}], ",", RowBox[{"Which", "[", RowBox[{ RowBox[{"n", "\[Equal]", "1"}], ",", RowBox[{ "coeffs", "\[LeftDoubleBracket]", "1", "\[RightDoubleBracket]"}], ",", RowBox[{"n", "\[Equal]", "2"}], ",", RowBox[{ RowBox[{ "coeffs", "\[LeftDoubleBracket]", "1", "\[RightDoubleBracket]"}], "+", RowBox[{"x", " ", RowBox[{ "coeffs", "\[LeftDoubleBracket]", "2", "\[RightDoubleBracket]"}]}]}], ",", "True", ",", RowBox[{"Module", "[", RowBox[{ RowBox[{"{", RowBox[{"a1", ",", "a2", ",", RowBox[{"twox", "=", RowBox[{"2.`", " ", "x"}]}], ",", RowBox[{"t", "=", "x"}]}], "}"}], ",", RowBox[{ RowBox[{"a2", "=", RowBox[{ "coeffs", "\[LeftDoubleBracket]", "n", "\[RightDoubleBracket]"}]}], ";", RowBox[{"a1", "=", RowBox[{ RowBox[{"twox", " ", "a2"}], "+", RowBox[{"coeffs", "\[LeftDoubleBracket]", RowBox[{"n", "-", "1"}], "\[RightDoubleBracket]"}]}]}], ";", RowBox[{"Do", "[", RowBox[{ RowBox[{ RowBox[{"t", "=", "a1"}], ";", RowBox[{"a1", "=", RowBox[{ RowBox[{"twox", " ", "a1"}], "-", "a2", "+", RowBox[{ "coeffs", "\[LeftDoubleBracket]", "i", "\[RightDoubleBracket]"}]}]}], ";", RowBox[{"a2", "=", "t"}]}], ",", RowBox[{"{", RowBox[{"i", ",", RowBox[{"n", "-", "2"}], ",", "2", ",", RowBox[{"-", "1"}]}], "}"}]}], "]"}], ";", RowBox[{ RowBox[{"x", " ", "a1"}], "-", "a2", "+", RowBox[{ "coeffs", "\[LeftDoubleBracket]", "1", "\[RightDoubleBracket]"}]}]}]}], "]"}]}], "]"}]}], "]"}], ",", "\<\"-CompiledCode-\"\>"}], "]"}], False, Editable->False]], "Output", CellChangeTimes->{3.528035084385415*^9}] }, Open ]], Cell["\<\ The RuntimeAttribute Listable is given because you want Tfun to be Listable \ -- it also gives some advantages like automatic parallelization\ \>", "Text", CellChangeTimes->{{3.527590191848027*^9, 3.5275902806777563`*^9}}], Cell["\<\ Replace the definition of tsum with this and time ...\ \>", "Text", CellChangeTimes->{{3.5275252894562807`*^9, 3.527525325469398*^9}}], Cell[CellGroupData[{ Cell[BoxData[{ RowBox[{ RowBox[{"Clear", "[", "tsum", "]"}], ";", " ", RowBox[{"tsum", " ", "=", " ", "clenshawVM"}], ";"}], "\[IndentingNewLine]", RowBox[{"AbsoluteTiming", "[", RowBox[{ RowBox[{"Map", "[", RowBox[{"trunge", ",", "test"}], "]"}], ";"}], "]"}]}], "Input", CellChangeTimes->{{3.527525300641346*^9, 3.527525340896523*^9}}], Cell[BoxData[ RowBox[{"{", RowBox[{ "0.20985300000000001174882413579325657338`5.342515095424383", ",", "Null"}], "}"}]], "Output", CellChangeTimes->{3.528035147886791*^9}] }, Open ]], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{"AbsoluteTiming", "[", RowBox[{ RowBox[{"trunge", "[", "test", "]"}], ";"}], "]"}]], "Input"], Cell[BoxData[ RowBox[{"{", RowBox[{ "0.02487299999999999927657867715424799826`4.416328083144268", ",", "Null"}], "}"}]], "Output", CellChangeTimes->{3.5280351669661837`*^9}] }, Open ]] }, Open ]], Cell[CellGroupData[{ Cell["", "SlideShowNavigationBar", CellTags->"SlideShowHeader"], Cell["\<\ So its nearly a factor of 10 faster. We can do better yet by compiling to C:\ \ \>", "Text", CellChangeTimes->{{3.527525363234701*^9, 3.527525384688582*^9}}], Cell[BoxData[ RowBox[{ RowBox[{"clenshawC", " ", "=", " ", RowBox[{"Compile", "[", RowBox[{ RowBox[{"{", RowBox[{ RowBox[{"{", RowBox[{"coeffs", ",", " ", "_Real", ",", " ", "1"}], "}"}], ",", " ", RowBox[{"{", RowBox[{"x", ",", "_Real"}], "}"}]}], "}"}], ",", " ", RowBox[{"Module", "[", RowBox[{ RowBox[{"{", RowBox[{"n", " ", "=", " ", RowBox[{"Length", "[", "coeffs", "]"}]}], "}"}], ",", " ", "\[IndentingNewLine]", RowBox[{"Which", "[", "\[IndentingNewLine]", RowBox[{ RowBox[{"n", "\[Equal]", "1"}], ",", " ", RowBox[{"coeffs", "[", RowBox[{"[", "1", "]"}], "]"}], ",", "\[IndentingNewLine]", RowBox[{"n", "\[Equal]", "2"}], ",", " ", RowBox[{ RowBox[{"coeffs", "[", RowBox[{"[", "1", "]"}], "]"}], " ", "+", " ", RowBox[{"x", " ", RowBox[{"coeffs", "[", RowBox[{"[", "2", "]"}], "]"}]}]}], ",", "\[IndentingNewLine]", "True", ",", " ", RowBox[{"Module", "[", RowBox[{ RowBox[{"{", RowBox[{"a1", ",", "a2", ",", RowBox[{"twox", " ", "=", " ", RowBox[{"2.", " ", "x"}]}], ",", " ", RowBox[{"t", "=", "x"}]}], "}"}], ",", "\[IndentingNewLine]", RowBox[{ RowBox[{"a2", " ", "=", " ", RowBox[{"coeffs", "[", RowBox[{"[", "n", "]"}], "]"}]}], ";", "\[IndentingNewLine]", RowBox[{"a1", " ", "=", " ", RowBox[{ RowBox[{"twox", "*", "a2"}], " ", "+", " ", RowBox[{"coeffs", "[", RowBox[{"[", RowBox[{"n", " ", "-", " ", "1"}], "]"}], "]"}]}]}], ";", "\[IndentingNewLine]", RowBox[{"Do", "[", RowBox[{ RowBox[{ RowBox[{"t", " ", "=", " ", "a1"}], ";", " ", RowBox[{"a1", " ", "=", " ", RowBox[{ RowBox[{"twox", "*", "a1"}], " ", "-", " ", "a2", " ", "+", " ", RowBox[{"coeffs", "[", RowBox[{"[", "i", "]"}], "]"}]}]}], ";", " ", RowBox[{"a2", " ", "=", " ", "t"}]}], ",", "\[IndentingNewLine]", RowBox[{"{", RowBox[{"i", ",", RowBox[{"n", "-", "2"}], ",", "2", ",", RowBox[{"-", "1"}]}], "}"}]}], "]"}], ";", "\[IndentingNewLine]", RowBox[{ RowBox[{"x", "*", "a1"}], "-", "a2", "+", RowBox[{"coeffs", "[", RowBox[{"[", "1", "]"}], "]"}]}]}]}], "\[IndentingNewLine]", "]"}]}], "\[IndentingNewLine]", "]"}]}], "\[IndentingNewLine]", "]"}], ",", " ", RowBox[{"RuntimeAttributes", "\[Rule]", "Listable"}], ",", " ", RowBox[{"CompilationTarget", "\[Rule]", "\"\\""}]}], "]"}]}], ";"}]], "Input", CellChangeTimes->{ 3.527517470207295*^9, {3.527517607151372*^9, 3.5275176188927603`*^9}, { 3.527517651994978*^9, 3.52751766247841*^9}, 3.527525404397168*^9, { 3.52752544648221*^9, 3.5275254522674932`*^9}, 3.5275903581869373`*^9, { 3.527590474606036*^9, 3.5275904768463173`*^9}, 3.527590875740361*^9}], Cell["\<\ Replace the definition of tsum with this and time ...\ \>", "Text", CellChangeTimes->{{3.5275252894562807`*^9, 3.527525325469398*^9}}], Cell[CellGroupData[{ Cell[BoxData[{ RowBox[{ RowBox[{"Clear", "[", "tsum", "]"}], ";", " ", RowBox[{"tsum", " ", "=", " ", "clenshawC"}], ";"}], "\[IndentingNewLine]", RowBox[{"AbsoluteTiming", "[", RowBox[{ RowBox[{"Map", "[", RowBox[{"trunge", ",", "test"}], "]"}], ";"}], "]"}]}], "Input", CellChangeTimes->{{3.527525300641346*^9, 3.527525340896523*^9}, 3.527525409364167*^9}], Cell[BoxData[ RowBox[{"{", RowBox[{ "0.18099699999999999122657357020216295496`5.278271289838073", ",", "Null"}], "}"}]], "Output", CellChangeTimes->{3.5280352845712833`*^9}] }, Open ]], Cell[CellGroupData[{ Cell[BoxData[{ RowBox[{ RowBox[{"Clear", "[", "tsum", "]"}], ";", " ", RowBox[{"tsum", " ", "=", " ", "clenshawC"}], ";"}], "\[IndentingNewLine]", RowBox[{"AbsoluteTiming", "[", RowBox[{ RowBox[{"trunge", "[", "test", "]"}], ";"}], "]"}]}], "Input", CellChangeTimes->{{3.527525300641346*^9, 3.527525340896523*^9}, 3.527525409364167*^9, {3.527525530462892*^9, 3.527525535085134*^9}}], Cell[BoxData[ RowBox[{"{", RowBox[{ "0.00685299999999999971678210641812256654`3.856480645097019", ",", "Null"}], "}"}]], "Output", CellChangeTimes->{3.528035297393319*^9}] }, Open ]] }, Open ]], Cell[CellGroupData[{ Cell["", "SlideShowNavigationBar", CellTags->"SlideShowHeader"], Cell["\<\ Pretty good! However we can go even faster yet. Since the idea here is to \ make an approximation that is as fast as possible, strict accuracy and error \ checking is not necessary. When this is the case, use RuntimeOptions->\ \[CloseCurlyDoubleQuote]Speed\[CloseCurlyDoubleQuote] to get a little bit \ extra:\ \>", "Text", CellChangeTimes->{{3.527590531639873*^9, 3.5275906435671062`*^9}}], Cell[BoxData[ RowBox[{ RowBox[{"clenshawC", " ", "=", " ", RowBox[{"Compile", "[", RowBox[{ RowBox[{"{", RowBox[{ RowBox[{"{", RowBox[{"coeffs", ",", " ", "_Real", ",", " ", "1"}], "}"}], ",", " ", RowBox[{"{", RowBox[{"x", ",", "_Real"}], "}"}]}], "}"}], ",", " ", RowBox[{"Module", "[", RowBox[{ RowBox[{"{", RowBox[{"n", " ", "=", " ", RowBox[{"Length", "[", "coeffs", "]"}]}], "}"}], ",", " ", "\[IndentingNewLine]", RowBox[{"Which", "[", "\[IndentingNewLine]", RowBox[{ RowBox[{"n", "\[Equal]", "1"}], ",", " ", RowBox[{"coeffs", "[", RowBox[{"[", "1", "]"}], "]"}], ",", "\[IndentingNewLine]", RowBox[{"n", "\[Equal]", "2"}], ",", " ", RowBox[{ RowBox[{"coeffs", "[", RowBox[{"[", "1", "]"}], "]"}], " ", "+", " ", RowBox[{"x", " ", RowBox[{"coeffs", "[", RowBox[{"[", "2", "]"}], "]"}]}]}], ",", "\[IndentingNewLine]", "True", ",", " ", RowBox[{"Module", "[", RowBox[{ RowBox[{"{", RowBox[{"a1", ",", "a2", ",", RowBox[{"twox", " ", "=", " ", RowBox[{"2.", " ", "x"}]}], ",", " ", RowBox[{"t", "=", "x"}]}], "}"}], ",", "\[IndentingNewLine]", RowBox[{ RowBox[{"a2", " ", "=", " ", RowBox[{"coeffs", "[", RowBox[{"[", "n", "]"}], "]"}]}], ";", "\[IndentingNewLine]", RowBox[{"a1", " ", "=", " ", RowBox[{ RowBox[{"twox", "*", "a2"}], " ", "+", " ", RowBox[{"coeffs", "[", RowBox[{"[", RowBox[{"n", " ", "-", " ", "1"}], "]"}], "]"}]}]}], ";", "\[IndentingNewLine]", RowBox[{"Do", "[", RowBox[{ RowBox[{ RowBox[{"t", " ", "=", " ", "a1"}], ";", " ", RowBox[{"a1", " ", "=", " ", RowBox[{ RowBox[{"twox", "*", "a1"}], " ", "-", " ", "a2", " ", "+", " ", RowBox[{"coeffs", "[", RowBox[{"[", "i", "]"}], "]"}]}]}], ";", " ", RowBox[{"a2", " ", "=", " ", "t"}]}], ",", "\[IndentingNewLine]", RowBox[{"{", RowBox[{"i", ",", RowBox[{"n", "-", "2"}], ",", "2", ",", RowBox[{"-", "1"}]}], "}"}]}], "]"}], ";", "\[IndentingNewLine]", RowBox[{ RowBox[{"x", "*", "a1"}], "-", "a2", "+", RowBox[{"coeffs", "[", RowBox[{"[", "1", "]"}], "]"}]}]}]}], "\[IndentingNewLine]", "]"}]}], "\[IndentingNewLine]", "]"}]}], "\[IndentingNewLine]", "]"}], ",", " ", RowBox[{"RuntimeAttributes", "\[Rule]", "Listable"}], ",", " ", RowBox[{"CompilationTarget", "\[Rule]", "\"\\""}], ",", " ", RowBox[{"RuntimeOptions", "\[Rule]", "\"\\""}]}], "]"}]}], ";"}]], "Input", CellChangeTimes->{ 3.527517470207295*^9, {3.527517607151372*^9, 3.5275176188927603`*^9}, { 3.527517651994978*^9, 3.52751766247841*^9}, 3.527525404397168*^9, { 3.52752544648221*^9, 3.5275254522674932`*^9}, 3.5275903581869373`*^9, { 3.527590481446315*^9, 3.527590492771682*^9}, 3.527590870412722*^9}], Cell[CellGroupData[{ Cell[BoxData[{ RowBox[{ RowBox[{"Clear", "[", "tsum", "]"}], ";", " ", RowBox[{"tsum", " ", "=", " ", "clenshawC"}], ";"}], "\[IndentingNewLine]", RowBox[{"AbsoluteTiming", "[", RowBox[{ RowBox[{"Map", "[", RowBox[{"trunge", ",", "test"}], "]"}], ";"}], "]"}]}], "Input", CellChangeTimes->{{3.527525300641346*^9, 3.527525340896523*^9}, 3.527525409364167*^9}], Cell[BoxData[ RowBox[{"{", RowBox[{ "0.17484600000000000141753275784139987081`5.263255614564303", ",", "Null"}], "}"}]], "Output", CellChangeTimes->{3.528035450723496*^9}] }, Open ]], Cell[CellGroupData[{ Cell[BoxData[{ RowBox[{ RowBox[{"Clear", "[", "tsum", "]"}], ";", " ", RowBox[{"tsum", " ", "=", " ", "clenshawC"}], ";"}], "\[IndentingNewLine]", RowBox[{"AbsoluteTiming", "[", RowBox[{ RowBox[{"trunge", "[", "test", "]"}], ";"}], "]"}]}], "Input", CellChangeTimes->{{3.527525300641346*^9, 3.527525340896523*^9}, 3.527525409364167*^9, {3.527525530462892*^9, 3.527525535085134*^9}}], Cell[BoxData[ RowBox[{"{", RowBox[{ "0.00188400000000000004095335182086046188`3.2956808117364824", ",", "Null"}], "}"}]], "Output", CellChangeTimes->{3.528035454074348*^9}] }, Open ]] }, Open ]], Cell[CellGroupData[{ Cell["", "SlideShowNavigationBar", CellTags->"SlideShowHeader"], Cell["\<\ Some of the time may be in the scaling, so it makes sense to define a version \ that does that too:\ \>", "Text", CellChangeTimes->{{3.527525650340646*^9, 3.5275256844949617`*^9}, { 3.527526523511429*^9, 3.5275265569176073`*^9}}], Cell[BoxData[ RowBox[{ RowBox[{"sclenshawC", " ", "=", " ", RowBox[{"Compile", "[", RowBox[{ RowBox[{"{", RowBox[{ RowBox[{"{", RowBox[{"coeffs", ",", " ", "_Real", ",", " ", "1"}], "}"}], ",", " ", RowBox[{"{", RowBox[{"s", ",", "_Real"}], "}"}], ",", " ", RowBox[{"{", RowBox[{"x0", ",", " ", "_Real"}], "}"}], ",", RowBox[{"{", RowBox[{"x1", ",", " ", "_Real"}], "}"}]}], "}"}], ",", " ", RowBox[{"Module", "[", RowBox[{ RowBox[{"{", RowBox[{ RowBox[{"n", " ", "=", " ", RowBox[{"Length", "[", "coeffs", "]"}]}], ",", " ", RowBox[{"x", " ", "=", " ", RowBox[{ RowBox[{"(", RowBox[{ RowBox[{"2", "s"}], " ", "-", " ", RowBox[{"(", RowBox[{"x1", "+", "x0"}], ")"}]}], ")"}], "/", RowBox[{"(", RowBox[{"x1", "-", "x0"}], ")"}]}]}]}], "}"}], ",", " ", "\[IndentingNewLine]", RowBox[{"Which", "[", "\[IndentingNewLine]", RowBox[{ RowBox[{"n", "\[Equal]", "1"}], ",", " ", RowBox[{"coeffs", "[", RowBox[{"[", "1", "]"}], "]"}], ",", "\[IndentingNewLine]", RowBox[{"n", "\[Equal]", "2"}], ",", " ", RowBox[{ RowBox[{"coeffs", "[", RowBox[{"[", "1", "]"}], "]"}], " ", "+", " ", RowBox[{"x", " ", RowBox[{"coeffs", "[", RowBox[{"[", "2", "]"}], "]"}]}]}], ",", "\[IndentingNewLine]", "True", ",", " ", RowBox[{"Module", "[", RowBox[{ RowBox[{"{", RowBox[{"a1", ",", "a2", ",", RowBox[{"twox", " ", "=", " ", RowBox[{"2.", " ", "x"}]}], ",", " ", RowBox[{"t", "=", "x"}]}], "}"}], ",", "\[IndentingNewLine]", RowBox[{ RowBox[{"a2", " ", "=", " ", RowBox[{"coeffs", "[", RowBox[{"[", "n", "]"}], "]"}]}], ";", "\[IndentingNewLine]", RowBox[{"a1", " ", "=", " ", RowBox[{ RowBox[{"twox", "*", "a2"}], " ", "+", " ", RowBox[{"coeffs", "[", RowBox[{"[", RowBox[{"n", " ", "-", " ", "1"}], "]"}], "]"}]}]}], ";", "\[IndentingNewLine]", RowBox[{"Do", "[", RowBox[{ RowBox[{ RowBox[{"t", " ", "=", " ", "a1"}], ";", " ", RowBox[{"a1", " ", "=", " ", RowBox[{ RowBox[{"twox", "*", "a1"}], " ", "-", " ", "a2", " ", "+", " ", RowBox[{"coeffs", "[", RowBox[{"[", "i", "]"}], "]"}]}]}], ";", " ", RowBox[{"a2", " ", "=", " ", "t"}]}], ",", "\[IndentingNewLine]", RowBox[{"{", RowBox[{"i", ",", RowBox[{"n", "-", "2"}], ",", "2", ",", RowBox[{"-", "1"}]}], "}"}]}], "]"}], ";", "\[IndentingNewLine]", RowBox[{ RowBox[{"x", "*", "a1"}], "-", "a2", "+", RowBox[{"coeffs", "[", RowBox[{"[", "1", "]"}], "]"}]}]}]}], "\[IndentingNewLine]", "]"}]}], "\[IndentingNewLine]", "]"}]}], "\[IndentingNewLine]", "]"}], " ", ",", RowBox[{"RuntimeAttributes", "\[Rule]", "Listable"}], ",", " ", RowBox[{"CompilationTarget", "\[Rule]", "\"\\""}], ",", " ", RowBox[{"RuntimeOptions", "\[Rule]", "\"\\""}], ",", " ", RowBox[{"Parallelization", "\[Rule]", "False"}]}], "]"}]}], ";"}]], "Input", CellChangeTimes->{ 3.527517470207295*^9, {3.527517607151372*^9, 3.5275176188927603`*^9}, { 3.527517651994978*^9, 3.52751766247841*^9}, 3.527525404397168*^9, { 3.52752544648221*^9, 3.5275254522674932`*^9}, {3.5275265623127527`*^9, 3.5275266132175617`*^9}, {3.527526651977936*^9, 3.527526681142264*^9}, { 3.5275906818299093`*^9, 3.527590688784931*^9}, 3.527590864245738*^9, { 3.528036410188445*^9, 3.528036422551263*^9}}], Cell[BoxData[{ RowBox[{ RowBox[{"Clear", "[", "Tfun", "]"}], ";"}], "\[IndentingNewLine]", RowBox[{ RowBox[{"SetAttributes", "[", RowBox[{"Tfun", ",", " ", "HoldAll"}], "]"}], ";"}], "\[IndentingNewLine]", RowBox[{ RowBox[{ RowBox[{"Tfun", "[", RowBox[{"fx_", ",", " ", RowBox[{"{", RowBox[{"x_", ",", " ", "x0_", ",", "x1_"}], "}"}], ",", " ", "a_List"}], "]"}], "[", "t_", "]"}], " ", ":=", RowBox[{"sclenshawC", "[", RowBox[{"a", ",", "t", ",", "x0", ",", "x1"}], "]"}]}]}], "Input", CellChangeTimes->{ 3.527517944262064*^9, {3.527518064862892*^9, 3.527518130271592*^9}, { 3.527518781604851*^9, 3.5275187874112463`*^9}, {3.527518910697126*^9, 3.527518945527604*^9}, {3.527519703120479*^9, 3.52751973917719*^9}, { 3.5275197844031153`*^9, 3.527519818109252*^9}, {3.527519848218113*^9, 3.5275198507629128`*^9}, {3.5275200046894827`*^9, 3.527520059514824*^9}, { 3.527520474101507*^9, 3.5275205082599993`*^9}, {3.527520542069387*^9, 3.527520564093081*^9}, 3.5275206434287863`*^9, {3.5275211956449547`*^9, 3.52752119609208*^9}, {3.527521261452407*^9, 3.527521267509849*^9}, { 3.527521335078371*^9, 3.527521382830315*^9}, {3.527525118819008*^9, 3.52752513210469*^9}, {3.527526724875925*^9, 3.527526746290271*^9}, { 3.5275267851453133`*^9, 3.527526801365044*^9}}], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{"AbsoluteTiming", "[", RowBox[{ RowBox[{"Map", "[", RowBox[{"trunge", ",", "test"}], "]"}], ";"}], "]"}]], "Input", CellChangeTimes->{{3.527526832270146*^9, 3.527526836180314*^9}}], Cell[BoxData[ RowBox[{"{", RowBox[{ "0.02813500000000000028643754035329038743`4.469846832769635", ",", "Null"}], "}"}]], "Output", CellChangeTimes->{3.52803550775766*^9}] }, Open ]], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{"AbsoluteTiming", "[", RowBox[{ RowBox[{"trunge", "[", "test", "]"}], ";"}], "]"}]], "Input"], Cell[BoxData[ RowBox[{"{", RowBox[{ "0.001662999999999999981709075669300546`3.2414921624991435", ",", "Null"}], "}"}]], "Output", CellChangeTimes->{3.528035516294654*^9}] }, Open ]] }, Open ]], Cell[CellGroupData[{ Cell["", "SlideShowNavigationBar", CellTags->"SlideShowHeader"], Cell["\<\ If you want to make this into a more general function, we want it to work for \ different types and precision. The best way to do this is to set it up to compile as needed.\ \>", "Text", CellChangeTimes->{{3.5275274647406797`*^9, 3.527527500429796*^9}, { 3.527532279173377*^9, 3.5275323109378233`*^9}}], Cell["\<\ Using some tricks, we can do this using a minimal amount of code\ \>", "Text", CellChangeTimes->{{3.527532393081751*^9, 3.527532433129779*^9}, { 3.527532571048665*^9, 3.527532598068965*^9}, {3.527532635162269*^9, 3.5275326455699673`*^9}, {3.527533801686758*^9, 3.527533825491774*^9}}], Cell["\<\ First set up a general definition for the algorithm\ \>", "Text", CellChangeTimes->{{3.527532393081751*^9, 3.527532433129779*^9}, { 3.527532571048665*^9, 3.527532598068965*^9}, {3.527532635162269*^9, 3.5275326455699673`*^9}, {3.527533801686758*^9, 3.527533841179205*^9}}], Cell[BoxData[ RowBox[{ RowBox[{"clenshaw", " ", "=", " ", RowBox[{"Function", "[", RowBox[{ RowBox[{"{", RowBox[{"coeffs", ",", " ", "s", ",", " ", "x0", ",", "x1"}], "}"}], ",", " ", "\[IndentingNewLine]", RowBox[{"Module", "[", RowBox[{ RowBox[{"{", RowBox[{ RowBox[{"n", " ", "=", " ", RowBox[{"Length", "[", "coeffs", "]"}]}], ",", " ", RowBox[{"x", " ", "=", " ", RowBox[{ RowBox[{"(", RowBox[{ RowBox[{"2", "s"}], " ", "-", " ", RowBox[{"(", RowBox[{"x1", "+", "x0"}], ")"}]}], ")"}], "/", RowBox[{"(", RowBox[{"x1", "-", "x0"}], ")"}]}]}]}], "}"}], ",", " ", "\[IndentingNewLine]", RowBox[{"Which", "[", "\[IndentingNewLine]", RowBox[{ RowBox[{"n", "\[Equal]", "1"}], ",", " ", RowBox[{"coeffs", "[", RowBox[{"[", "1", "]"}], "]"}], ",", "\[IndentingNewLine]", RowBox[{"n", "\[Equal]", "2"}], ",", " ", RowBox[{ RowBox[{"coeffs", "[", RowBox[{"[", "1", "]"}], "]"}], " ", "+", " ", RowBox[{"x", " ", RowBox[{"coeffs", "[", RowBox[{"[", "2", "]"}], "]"}]}]}], ",", "\[IndentingNewLine]", "True", ",", " ", RowBox[{"Module", "[", RowBox[{ RowBox[{"{", RowBox[{"a1", ",", "a2", ",", RowBox[{"twox", " ", "=", " ", RowBox[{"2", " ", "x"}]}], ",", " ", "t"}], "}"}], ",", "\[IndentingNewLine]", RowBox[{ RowBox[{"a2", " ", "=", " ", RowBox[{"coeffs", "[", RowBox[{"[", "n", "]"}], "]"}]}], ";", "\[IndentingNewLine]", RowBox[{"a1", " ", "=", " ", RowBox[{ RowBox[{"twox", "*", "a2"}], " ", "+", " ", RowBox[{"coeffs", "[", RowBox[{"[", RowBox[{"n", " ", "-", " ", "1"}], "]"}], "]"}]}]}], ";", "\[IndentingNewLine]", RowBox[{"Do", "[", RowBox[{ RowBox[{ RowBox[{"t", " ", "=", " ", "a1"}], ";", " ", RowBox[{"a1", " ", "=", " ", RowBox[{ RowBox[{"twox", "*", "a1"}], " ", "-", " ", "a2", " ", "+", " ", RowBox[{"coeffs", "[", RowBox[{"[", "i", "]"}], "]"}]}]}], ";", " ", RowBox[{"a2", " ", "=", " ", "t"}]}], ",", "\[IndentingNewLine]", RowBox[{"{", RowBox[{"i", ",", RowBox[{"n", "-", "2"}], ",", "2", ",", RowBox[{"-", "1"}]}], "}"}]}], "]"}], ";", "\[IndentingNewLine]", RowBox[{ RowBox[{"x", "*", "a1"}], "-", "a2", "+", RowBox[{"coeffs", "[", RowBox[{"[", "1", "]"}], "]"}]}]}]}], "\[IndentingNewLine]", "]"}]}], "\[IndentingNewLine]", "]"}]}], "\[IndentingNewLine]", "]"}]}], "]"}]}], ";"}]], "Input", CellChangeTimes->{{3.5275337646637297`*^9, 3.527533793699073*^9}, { 3.527533846212878*^9, 3.527533866559636*^9}, {3.5275346824055567`*^9, 3.527534701607492*^9}, {3.527538033847794*^9, 3.52753803592203*^9}}], Cell["\<\ This sets up a function that takes the function and compiles it\ \>", "Text", CellChangeTimes->{{3.527590896837178*^9, 3.5275909246588097`*^9}}], Cell[BoxData[ RowBox[{ RowBox[{ RowBox[{"HoldPattern", "[", RowBox[{"clenshawCompile", "[", RowBox[{"ctype_", ",", " ", RowBox[{"Function", "[", RowBox[{"args_", ",", " ", "body_"}], "]"}]}], "]"}], "]"}], " ", ":=", " ", RowBox[{"Block", "[", RowBox[{"args", ",", RowBox[{"Module", "[", RowBox[{ RowBox[{"{", RowBox[{"cargs", " ", "=", " ", RowBox[{"Table", "[", RowBox[{ RowBox[{"{", RowBox[{"arg", ",", " ", "_Real"}], "}"}], ",", RowBox[{"{", RowBox[{"arg", ",", "args"}], "}"}]}], "]"}]}], "}"}], ",", RowBox[{ RowBox[{ RowBox[{"cargs", "[", RowBox[{"[", "1", "]"}], "]"}], " ", "=", " ", RowBox[{"{", RowBox[{ RowBox[{"args", "[", RowBox[{"[", "1", "]"}], "]"}], ",", RowBox[{"Blank", "[", "ctype", "]"}], ",", " ", "1"}], "}"}]}], ";", " ", RowBox[{"Compile", "[", RowBox[{ RowBox[{"Evaluate", "[", "cargs", "]"}], ",", " ", "body", ",", " ", RowBox[{"RuntimeAttributes", "\[Rule]", "Listable"}], ",", " ", RowBox[{"CompilationTarget", "\[Rule]", "\"\\""}], ",", " ", RowBox[{"RuntimeOptions", "\[Rule]", "\"\\""}]}], "]"}]}]}], "]"}]}], "]"}]}], ";"}]], "Input", CellChangeTimes->{{3.5275348796522703`*^9, 3.527534924541914*^9}, { 3.527534963004217*^9, 3.527535410908184*^9}, {3.5275910248450203`*^9, 3.5275910271735287`*^9}, {3.527591106978733*^9, 3.527591112201017*^9}, { 3.527591280709404*^9, 3.527591293212947*^9}}], Cell["\<\ Delayed definitions for real and complex versions -- these will only actually \ be compiled if used.\ \>", "Text", CellChangeTimes->{{3.527590974837517*^9, 3.5275910160605927`*^9}}], Cell[BoxData[{ RowBox[{ RowBox[{"clenshawR", " ", ":=", " ", RowBox[{"(", RowBox[{"clenshawR", " ", "=", " ", RowBox[{"clenshawCompile", "[", RowBox[{"Real", ",", " ", "clenshaw"}], "]"}]}], ")"}]}], ";"}], "\[IndentingNewLine]", RowBox[{ RowBox[{"clenshawC", " ", ":=", " ", RowBox[{"(", RowBox[{"clenshawC", " ", "=", " ", RowBox[{"clenshawCompile", "[", RowBox[{"Complex", ",", " ", "clenshaw"}], "]"}]}], ")"}]}], ";"}]}], "Input", CellChangeTimes->{{3.5275355020921803`*^9, 3.527535544159573*^9}, { 3.527536921395994*^9, 3.527536944605282*^9}, {3.5275375904662724`*^9, 3.5275375905591183`*^9}}], Cell[BoxData[ RowBox[{ RowBox[{"Clear", "[", "Tfun", "]"}], ";"}]], "Input", CellChangeTimes->{{3.527536723001791*^9, 3.527536885094172*^9}, 3.527591072891066*^9}], Cell[BoxData[ RowBox[{ RowBox[{"SetAttributes", "[", RowBox[{"Tfun", ",", " ", "HoldAll"}], "]"}], ";"}]], "Input", CellChangeTimes->{{3.527536723001791*^9, 3.527536885094172*^9}, { 3.527591072891066*^9, 3.527591075923245*^9}}], Cell[BoxData[ RowBox[{ RowBox[{ RowBox[{"Tfun", "[", RowBox[{"fx_", ",", " ", RowBox[{"{", RowBox[{"x_", ",", " ", "x0_", ",", "x1_"}], "}"}], ",", " ", "a_List"}], "]"}], "[", "t_", "]"}], " ", ":=", " ", "\[IndentingNewLine]", RowBox[{"Which", "[", "\[IndentingNewLine]", RowBox[{ RowBox[{"Developer`PackedArrayQ", "[", RowBox[{"a", ",", "Real"}], "]"}], ",", RowBox[{"clenshawR", "[", RowBox[{"a", ",", "t", ",", "x0", ",", "x1"}], "]"}], ",", "\[IndentingNewLine]", RowBox[{"Developer`PackedArrayQ", "[", RowBox[{"a", ",", "Complex"}], "]"}], ",", RowBox[{"clenshawC", "[", RowBox[{"a", ",", "t", ",", "x0", ",", "x1"}], "]"}], ",", "\[IndentingNewLine]", "True", ",", " ", RowBox[{"Module", "[", RowBox[{ RowBox[{"{", RowBox[{"prec", " ", "=", " ", RowBox[{"Precision", "[", "a", "]"}]}], "}"}], ",", " ", RowBox[{"Block", "[", RowBox[{ RowBox[{"{", RowBox[{ RowBox[{"$MinPrecision", " ", "=", " ", "prec"}], ",", " ", RowBox[{"$MaxPrecision", " ", "=", " ", "prec"}]}], "}"}], ",", RowBox[{"clenshaw", "[", RowBox[{"a", ",", "t", ",", "x0", ",", "x1"}], "]"}]}], "]"}]}], "]"}]}], "\[IndentingNewLine]", "]"}]}]], "Input", CellChangeTimes->{{3.527536723001791*^9, 3.527536885094172*^9}, { 3.527591072891066*^9, 3.527591075923245*^9}}], Cell[BoxData[ RowBox[{ RowBox[{"Format", "[", RowBox[{"Tfun", "[", RowBox[{"fx_", ",", " ", RowBox[{"{", RowBox[{"x_", ",", "x0_", ",", "x1_"}], "}"}], ",", " ", "a_List"}], "]"}], "]"}], " ", ":=", " ", RowBox[{"Subscript", "[", RowBox[{ RowBox[{"Tfun", "[", RowBox[{"fx", ",", " ", RowBox[{"{", RowBox[{"x", ",", " ", "x0", ",", "x1"}], "}"}]}], "]"}], ",", RowBox[{"\"\<<\>\"", "<>", RowBox[{"ToString", "[", RowBox[{ RowBox[{"Length", "[", "a", "]"}], "-", "1"}], "]"}], "<>", "\"\<>\>\""}]}], "]"}]}]], "Input", CellChangeTimes->{{3.527520192204115*^9, 3.527520267818679*^9}, { 3.527520301504039*^9, 3.5275203350091057`*^9}, {3.527520419711693*^9, 3.527520445520733*^9}, {3.5275204927002*^9, 3.527520496957954*^9}, { 3.527520568578595*^9, 3.5275205735395803`*^9}, {3.5275206225971518`*^9, 3.527520644875217*^9}, {3.527520687168109*^9, 3.527520698744246*^9}, { 3.5275211992110567`*^9, 3.527521199554639*^9}}], Cell["\<\ Now redefine the constructor so that it handles complex valued functions and \ takes a WorkingPrecision option\ \>", "Text", CellChangeTimes->{{3.527535638835723*^9, 3.527535666945311*^9}, { 3.5275357470536137`*^9, 3.5275357530749826`*^9}, 3.527591044196347*^9}], Cell[BoxData[ RowBox[{ RowBox[{"Clear", "[", "ToTfun", "]"}], ";"}]], "Input", CellChangeTimes->{{3.527535762561777*^9, 3.52753577765121*^9}, { 3.527536404575871*^9, 3.527536466446761*^9}, {3.527536513667774*^9, 3.52753651898735*^9}, 3.527536552688743*^9}], Cell[BoxData[ RowBox[{ RowBox[{ RowBox[{"Options", "[", "ToTfun", "]"}], " ", "=", " ", RowBox[{"{", RowBox[{"WorkingPrecision", "\[Rule]", "MachinePrecision"}], "}"}]}], ";"}]], "Input", CellChangeTimes->{{3.527535762561777*^9, 3.52753577765121*^9}, { 3.527536404575871*^9, 3.527536466446761*^9}, {3.527536513667774*^9, 3.52753651898735*^9}, {3.527536552688743*^9, 3.5275365555850487`*^9}}], Cell[BoxData[ RowBox[{ RowBox[{"ToTfun", "[", RowBox[{"fx_", ",", " ", RowBox[{"{", RowBox[{"x_", ",", " ", "x0_", ",", " ", "x1_"}], "}"}], ",", " ", "n_", ",", " ", RowBox[{"OptionsPattern", "[", "]"}]}], "]"}], " ", ":=", " ", RowBox[{"Module", "[", RowBox[{ RowBox[{"{", RowBox[{ "cnodes", ",", "xnodes", ",", " ", "fnodes", ",", "coeffs", ",", " ", "dx", ",", " ", "wprec"}], "}"}], ",", "\[IndentingNewLine]", RowBox[{ RowBox[{"wprec", " ", "=", " ", RowBox[{"OptionValue", "[", "WorkingPrecision", "]"}]}], ";", "\[IndentingNewLine]", RowBox[{"cnodes", "=", RowBox[{"N", "[", RowBox[{ RowBox[{"Cos", "[", RowBox[{"Pi", " ", RowBox[{ RowBox[{"Range", "[", RowBox[{"0", ",", "n"}], "]"}], "/", "n"}]}], "]"}], ",", " ", "wprec"}], "]"}]}], ";", "\[IndentingNewLine]", RowBox[{"xnodes", " ", "=", " ", RowBox[{ RowBox[{"(", RowBox[{"x1", " ", "+", " ", "x0", " ", "+", " ", RowBox[{"cnodes", RowBox[{"(", RowBox[{"x1", "-", "x0"}], ")"}]}]}], ")"}], "/", "2"}]}], ";", "\[IndentingNewLine]", RowBox[{"fnodes", " ", "=", " ", RowBox[{"Table", "[", RowBox[{"fx", ",", RowBox[{"{", RowBox[{"x", ",", "xnodes"}], "}"}]}], "]"}]}], ";", "\[IndentingNewLine]", RowBox[{"Block", "[", RowBox[{ RowBox[{"{", RowBox[{ RowBox[{"$MinPrecision", " ", "=", " ", "wprec"}], ",", " ", RowBox[{"$MaxPrecision", " ", "=", " ", "wprec"}]}], "}"}], ",", "\[IndentingNewLine]", RowBox[{ RowBox[{"coeffs", " ", "=", " ", RowBox[{ RowBox[{"FourierDCT", "[", RowBox[{"fnodes", ",", "1"}], "]"}], "*", RowBox[{"Sqrt", "[", RowBox[{"2", "/", "n"}], "]"}]}]}], ";", "\[IndentingNewLine]", RowBox[{ RowBox[{"coeffs", "[", RowBox[{"[", RowBox[{"{", RowBox[{"1", ",", RowBox[{"-", "1"}]}], "}"}], "]"}], "]"}], "/=", "2"}]}]}], "\[IndentingNewLine]", "]"}], ";", "\[IndentingNewLine]", RowBox[{"Tfun", "[", RowBox[{"fx", ",", RowBox[{"{", RowBox[{"x", ",", " ", "x0", ",", " ", "x1"}], "}"}], ",", " ", RowBox[{"Evaluate", "[", "coeffs", "]"}]}], "]"}]}]}], "\[IndentingNewLine]", "]"}]}]], "Input", CellChangeTimes->{{3.527535762561777*^9, 3.52753577765121*^9}, { 3.527536404575871*^9, 3.527536466446761*^9}, {3.527536513667774*^9, 3.52753651898735*^9}, {3.527536552688743*^9, 3.5275365555850487`*^9}}] }, Open ]], Cell[CellGroupData[{ Cell["", "SlideShowNavigationBar", CellTags->"SlideShowHeader"], Cell["Now try it out ...", "Text", CellChangeTimes->{{3.5275918481678333`*^9, 3.5275918523415327`*^9}}], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{"thyper", " ", "=", " ", RowBox[{"ToTfun", "[", RowBox[{ RowBox[{"HypergeometricPFQ", "[", RowBox[{ RowBox[{"{", RowBox[{"1", ",", "1"}], "}"}], ",", RowBox[{"{", RowBox[{"3", ",", "3", ",", "3"}], "}"}], ",", "x"}], "]"}], ",", RowBox[{"{", RowBox[{"x", ",", RowBox[{"-", "30"}], ",", "30"}], "}"}], ",", "100"}], "]"}]}]], "Input",\ CellChangeTimes->{{3.5275364802328663`*^9, 3.5275365020580072`*^9}, { 3.527536571042528*^9, 3.5275365878793383`*^9}}], Cell[BoxData[ SubscriptBox[ RowBox[{"Tfun", "[", RowBox[{ RowBox[{"HypergeometricPFQ", "[", RowBox[{ RowBox[{"{", RowBox[{"1", ",", "1"}], "}"}], ",", RowBox[{"{", RowBox[{"3", ",", "3", ",", "3"}], "}"}], ",", "x"}], "]"}], ",", RowBox[{"{", RowBox[{"x", ",", RowBox[{"-", "30"}], ",", "30"}], "}"}]}], "]"}], "\<\"<100>\"\>"]], "Output", CellChangeTimes->{3.528035731492249*^9, 3.528037857076255*^9}] }, Open ]], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{"AbsoluteTiming", "[", RowBox[{"thyper", "[", "2.", "]"}], "]"}]], "Input", CellChangeTimes->{{3.5275368953606453`*^9, 3.527536898355134*^9}, { 3.527536962790059*^9, 3.527536962874226*^9}, {3.527591860032159*^9, 3.527591868167913*^9}}], Cell[BoxData[ RowBox[{"{", RowBox[{ "0.13738000000000000211386463888629805297`5.158523425320039", ",", "1.0789344020671885`"}], "}"}]], "Output", CellChangeTimes->{{3.528035734808186*^9, 3.528035752063389*^9}, 3.528037857414427*^9}] }, Open ]], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{"Plot", "[", RowBox[{ RowBox[{ RowBox[{"thyper", "[", "x", "]"}], " ", "-", " ", RowBox[{"HypergeometricPFQ", "[", RowBox[{ RowBox[{"{", RowBox[{"1", ",", "1"}], "}"}], ",", RowBox[{"{", RowBox[{"3", ",", "3", ",", "3"}], "}"}], ",", "x"}], "]"}]}], ",", RowBox[{"{", RowBox[{"x", ",", RowBox[{"-", "30"}], ",", "30"}], "}"}], ",", " ", RowBox[{"PlotRange", "\[Rule]", "All"}]}], "]"}]], "Input", CellChangeTimes->{{3.527536575730953*^9, 3.52753661178386*^9}, { 3.527536974990007*^9, 3.5275369779174767`*^9}}], Cell[BoxData[ GraphicsBox[{{}, {}, {Hue[0.67, 0.6, 0.6], LineBox[CompressedData[" 1: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 f7ctMrTwE+R/dZIXbv5C+zG1kHwbc24a5CvVlR/EDoHn1YeeNEfSoPmvsnx6 bCK0yI7Rm+oshuDpuUHp3b6E2zB3w0reXWmE67HF/Ce7djaAKaU5P29134bm hcRZnVdK6FCumH1/76wVPbK28K5f3/6AG0LmJ0dFGP65EzMYa+37asiA9pk/ jaz8ksaA+rb2x9M//4S+Iz9DaJf2duTp69+vdLhvR3334Ybznx4SbsN8Uu4c b54Cr/911mhk2oEcZKsr91EdTFkpKvjBARzGTcNSd4/wf59n4PjWmteE67Ho gbpV8hA44XHIAC63EzlnD2VGcddONC/l9zWu6C/Y0nX4UO9uRmQOrjbMQowR zQ80Vil1Y4RJpOSrL2XMjAkXYHaSKaKd58AC/ZF8pv7gsfCgPe2RhNuwLDV3 JuOnsM95+hR9Wyn0JRKPUxs2ofvgM0f3/2kehvvlr0mtHFuG/qVnXHON23Yh L9NuDH+UBxuLfS2KU2NFNm9cNbY+DrZ2Z1zgsQM7FGvszblFmIw5W1i0uCaA 3dbd3eTyCNdjPprJeeVtYP/REr1ro9C/Fto8dWgFfLtpQ7SZkw050fJkxpAj OPm3x6EMPza072ly+IhzBOTPx97wLRYSLsCqLrE/of4Dee1uWezjTnaU178+ 0n9PANxsddrfRAncvuGzh00XGe9OiSzrtyZMIvVrZVmkukE+drsrTvw+5JOS PxRnMwmTsR8t1J1FZZCvMCsyYYMwv16qX0hagPM3rc8a1VHtQTltWmykgThh Ms5wOFd6N7YH7ds1Ud3UYwB91vDPF5LOgDmkF+jOeEGft402VziMcD0u5Ml3 dPoR7BdjVZ3Mf47mMek3hmGeVbBPUzufKpSOA9nkE8P1BDOwz9RH34rvHGhf MvfRfjYSJ8o/GNfv92AGs5e/pxTdDy4Pr4mIjgSPVGrNTacTJpHof1Yba5ei HFMUPVic0gi5zUky6/oQOCRKw+/EEuF6/EVNZX8+LRe6X/ev/Qe2cYP/Slak npUjXIBpNb8uVu4E33IvqN92hRs5P32vpMNdwmSsuzv/XmUKYRJJROOFiWc9 9Ot35g4M7OFBOUPh0/mXOLjBT59BkoIPWYDTczmXDuyPJw5KMIPFN6cKJEQJ F2C3Q26bSRyH/EhUXbL4I5TjtRkacmJy/MhcOk4cOWrImNdEJJXYYcJkrOn2 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 A64= "]]}}, AspectRatio->NCache[GoldenRatio^(-1), 0.6180339887498948], Axes->True, AxesOrigin->{0, 0}, PlotRange->{All, All}, PlotRangeClipping->True, PlotRangePadding->{Automatic, Automatic}]], "Output", CellChangeTimes->{3.528037861782462*^9}] }, Open ]], Cell[BoxData[ RowBox[{ RowBox[{"test", " ", "=", " ", RowBox[{"RandomReal", "[", RowBox[{ RowBox[{"{", RowBox[{ RowBox[{"-", "30"}], ",", "30"}], "}"}], ",", "1000"}], "]"}]}], ";"}]], "Input", CellChangeTimes->{{3.527536985859071*^9, 3.527537005259821*^9}}], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{"AbsoluteTiming", "[", RowBox[{ RowBox[{"HypergeometricPFQ", "[", RowBox[{ RowBox[{"{", RowBox[{"1", ",", "1"}], "}"}], ",", RowBox[{"{", RowBox[{"3", ",", "3", ",", "3"}], "}"}], ",", "test"}], "]"}], ";"}], "]"}]], "Input", CellChangeTimes->{{3.5275370091777487`*^9, 3.5275370305808163`*^9}}], Cell[BoxData[ RowBox[{"{", RowBox[{ "0.40611099999999999976552089719916693866`5.629244666312142", ",", "Null"}], "}"}]], "Output", CellChangeTimes->{3.52803787147051*^9}] }, Open ]], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{"AbsoluteTiming", "[", RowBox[{ RowBox[{"thyper", "[", RowBox[{ RowBox[{"{", RowBox[{"1", ",", "1"}], "}"}], ",", RowBox[{"{", RowBox[{"3", ",", "3", ",", "3"}], "}"}], ",", "test"}], "]"}], ";"}], "]"}]], "Input", CellChangeTimes->{{3.527537043046851*^9, 3.527537044460215*^9}}], Cell[BoxData[ RowBox[{"{", RowBox[{ "7.99999999999999963798489460709007`0.9236899002715676*^-6", ",", "Null"}], "}"}]], "Output", CellChangeTimes->{3.528037871561174*^9}] }, Open ]], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{"texp", " ", "=", " ", RowBox[{"ToTfun", "[", RowBox[{ RowBox[{"Exp", "[", RowBox[{"I", " ", "x"}], "]"}], ",", RowBox[{"{", RowBox[{"x", ",", "0", ",", RowBox[{"2", " ", "Pi"}]}], "}"}], ",", "20"}], "]"}]}]], "Input", CellChangeTimes->{{3.527537094716613*^9, 3.527537126901877*^9}, { 3.5275376310149927`*^9, 3.527537643188595*^9}}], Cell[BoxData[ SubscriptBox[ RowBox[{"Tfun", "[", RowBox[{ SuperscriptBox["\[ExponentialE]", RowBox[{"\[ImaginaryI]", " ", "x"}]], ",", RowBox[{"{", RowBox[{"x", ",", "0", ",", RowBox[{"2", " ", "\[Pi]"}]}], "}"}]}], "]"}], "\<\"<20>\"\>"]], "Output", CellChangeTimes->{3.528037871710155*^9}] }, Open ]], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{"AbsoluteTiming", "[", RowBox[{"texp", "[", "1", "]"}], "]"}]], "Input", CellChangeTimes->{{3.527537648769424*^9, 3.527537655524824*^9}}], Cell[BoxData[ RowBox[{"{", RowBox[{"0.34605599999999997473665303004963789135`5.559746296821149", ",", RowBox[{"0.5403023058681398`", "\[VeryThinSpace]", "+", RowBox[{"0.8414709848078957`", " ", "\[ImaginaryI]"}]}]}], "}"}]], "Output", CellChangeTimes->{3.528037872066166*^9}] }, Open ]], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{"ParametricPlot", "[", RowBox[{ RowBox[{"{", RowBox[{ RowBox[{"Re", "[", RowBox[{"texp", "[", "t", "]"}], "]"}], ",", RowBox[{"Im", "[", RowBox[{"texp", "[", "t", "]"}], "]"}]}], "}"}], ",", RowBox[{"{", RowBox[{"t", ",", "0", ",", " ", RowBox[{"2", " ", "Pi"}]}], "}"}]}], "]"}]], "Input", CellChangeTimes->{{3.5275376690336514`*^9, 3.52753769483846*^9}}], Cell[BoxData[ GraphicsBox[{{}, {}, {Hue[0.67, 0.6, 0.6], LineBox[CompressedData[" 1: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 tOKeUhS0IffTZxV69bgMU4I31dx5R0BgwFLUv5cl+OWBACf7BwLcZsrd/M6X 4LFPrr4xHgQcPOx8TJi1BJN+lzhU+xKwu6lIXPpdMSqXfPPOCCXgqI3NJWHP IuSqSb+5PYV8nv6OrF1BBZh0gJL5Io2Af2zfpXZpFWDc8l0TSjoB2hZRD/i4 CpBJxbvG9ScBcv0imssv8nHtqTlnrWICElLr8nna8vB27Tl7q1ICfDsEekuU 8zCm+GHpy3ICbraz5j/Iy0UmDYqqezUBF0OyHIK+5qBVhOZ6oWYCjjcvuvlZ Z2P+9YCnsy0EfJW5+IRpNAu3HF8jld1G7jeT8sJQJwuLbx/yFOwiYE2ziP/G c5nIEXC58O0AAQe4VQ02b0jHK2nXXdkpBMhY/+g89/wHesy/9nAZIoDzo3Kp yUwaOmUHOV4eJaAnNz40tjMVdXSaopxpBJSYhnD2RyVj/pELoal0AnKr4iv7 tiVjQH5UdzeDPL+og2anexK+Csvav3mKgPjQiHrn4e/IiC0Q3/WLgKr48KBr VQkY1KXjIDBN3v8zjitCyd/Qq4p1YN0sASpfxHviHOJww7/Xv2kkV3kTOvqG sWimYKlRPkfA4g2JHRsuxOCtIMtyg3kCfurqFVzmjsL+AY7R3X/I9dwmmrT5 SFSL5FFc+bvKnyZijk69EaicFlS5e5H8/TYxJs/YcByaT6Wnk/zulS/L5o9h +CXGXFN+iQCpDTvn+MdCUOpb5GwZyVq3bz9lSwvCziHRznPLBNjyn5SZdPqM xod6/iaT7DfRQK9RCkD9q5+M+P6ScWazE5Fb/HBc9CyrDcla1cql1n3eOGfx g1ZGsl95zHmZOE8UH+rjIn0cTPj4VKwa/4BrT8c+0iD5gdfIp+fP3mK5wF/e Vyus26g1v+UV+kHtQvLK+pPD14zjnuNdKY6dzSRrzepOfX1mhzwhCU60FRZ3 2mkdZ4kmrPG7F0n+tu5rrU2cAf7//8vV35VStcqPy/kfhjRvqw== "]]}}, Axes->True, AxesOrigin->{0, 0}, PlotRange->{{-0.9999998831351731, 1.0000000000000002`}, {-0.9999998592812054, 0.9999998782744891}}, PlotRangeClipping->True, PlotRangePadding->{ Scaled[0.02], Scaled[0.02]}]], "Output", CellChangeTimes->{3.528037872561805*^9}] }, Open ]], Cell["\<\ It also seamless works for higher precision ...\ \>", "Text", CellChangeTimes->{{3.527543026119279*^9, 3.527543037652028*^9}}], Cell[BoxData[ RowBox[{ RowBox[{ RowBox[{"runge", "[", "x_", "]"}], " ", ":=", " ", RowBox[{"1", "/", RowBox[{"(", RowBox[{"1", "+", RowBox[{ RowBox[{"(", RowBox[{"5", "x"}], ")"}], "^", "2"}]}], ")"}]}]}], ";"}]], "Input", CellChangeTimes->{{3.527519920892273*^9, 3.5275199293693657`*^9}}], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{"trunge", " ", "=", " ", RowBox[{"ToTfun", "[", RowBox[{ RowBox[{"runge", "[", RowBox[{"x", "-", "3"}], "]"}], ",", RowBox[{"{", RowBox[{"x", ",", "0", ",", "10"}], "}"}], ",", "1234", ",", " ", RowBox[{"WorkingPrecision", "\[Rule]", "32"}]}], "]"}]}]], "Input", CellChangeTimes->{{3.527519317118634*^9, 3.5275193207481813`*^9}, { 3.5275193763794127`*^9, 3.527519403634614*^9}, {3.527519935257998*^9, 3.527519955864718*^9}, {3.52752007320391*^9, 3.527520073364809*^9}, { 3.5275201530390673`*^9, 3.527520155172535*^9}, {3.527537779038434*^9, 3.5275377894047194`*^9}, {3.5275378409090548`*^9, 3.5275378410612497`*^9}, { 3.5275380041992693`*^9, 3.5275380043973427`*^9}, {3.5275380581155148`*^9, 3.5275380586185904`*^9}, {3.527538105220543*^9, 3.527538151546565*^9}, { 3.527538224843199*^9, 3.5275382253056726`*^9}, {3.527538269434475*^9, 3.527538277727725*^9}}], Cell[BoxData[ SubscriptBox[ RowBox[{"Tfun", "[", RowBox[{ FractionBox["1", RowBox[{"1", "+", RowBox[{"25", " ", SuperscriptBox[ RowBox[{"(", RowBox[{ RowBox[{"-", "3"}], "+", "x"}], ")"}], "2"]}]}]], ",", RowBox[{"{", RowBox[{"x", ",", "0", ",", "10"}], "}"}]}], "]"}], "\<\"<1234>\"\>"]], "Output", CellChangeTimes->{3.52803787937341*^9}] }, Open ]], Cell["... albeit a bit slower", "Text", CellChangeTimes->{{3.527543046652128*^9, 3.5275430594845953`*^9}}], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{"AbsoluteTiming", "[", RowBox[{"Max", "[", RowBox[{"Table", "[", RowBox[{ RowBox[{"RealExponent", "[", RowBox[{ RowBox[{"runge", "[", RowBox[{"x", "-", " ", "3"}], "]"}], " ", "-", " ", RowBox[{"trunge", "[", "x", "]"}]}], "]"}], ",", RowBox[{"{", RowBox[{"x", ",", RowBox[{"RandomReal", "[", RowBox[{ RowBox[{"{", RowBox[{"0", ",", "10"}], "}"}], ",", "1000", ",", " ", RowBox[{"WorkingPrecision", "\[Rule]", "32"}]}], "]"}]}], "}"}]}], "]"}], "]"}], "]"}]], "Input", CellChangeTimes->{{3.527538164305979*^9, 3.5275382526572247`*^9}, { 3.527538289481656*^9, 3.5275383183527603`*^9}}], Cell[BoxData[ RowBox[{"{", RowBox[{"4.08237999999999967570829539909027516842`6.631513340955623", ",", RowBox[{"-", "23.083003574822342`"}]}], "}"}]], "Output", CellChangeTimes->{3.528037883464219*^9}] }, Open ]] }, Open ]], Cell[CellGroupData[{ Cell["", "SlideShowNavigationBar", CellTags->"SlideShowHeader"], Cell[CellGroupData[{ Cell["\<\ Example: Making a simple fixed step ODE solver for autonomous equations\ \>", "Section", CellChangeTimes->{ 3.483202458955147*^9, {3.51430857274755*^9, 3.514308578875259*^9}, { 3.527438438619381*^9, 3.5274384676537533`*^9}, {3.527439561774901*^9, 3.527439564708774*^9}, {3.527439854792202*^9, 3.527439894315713*^9}, { 3.527442762739447*^9, 3.527442765279973*^9}, {3.5274504756644487`*^9, 3.5274504901872377`*^9}, {3.527451231214588*^9, 3.527451258264559*^9}, 3.52758968560719*^9, {3.5275919382032757`*^9, 3.5275919433073587`*^9}}], Cell["\<\ As a bigger example of what you can do with the compiler and how to use its \ modularity, lets construct a simple ODE solver based on the Heun method (a \ second order RungeKutta method that I\[CloseCurlyQuote]m not particularly \ worried that it will compete with NDSolve.)\ \>", "Text", CellChangeTimes->{{3.5274512636492167`*^9, 3.5274513774511633`*^9}, { 3.527589955410677*^9, 3.527589980496469*^9}}], Cell["\<\ Lets suppose that we have a function f[v] (v a vector) and the ODEs are given \ by v\[CloseCurlyQuote][t]=f[v[t]]\ \>", "Text", CellChangeTimes->{{3.527451407418942*^9, 3.5274514670994387`*^9}, { 3.527591958956397*^9, 3.5275920154291286`*^9}}], Cell["A step is done by ", "Text", CellChangeTimes->{{3.527451514019829*^9, 3.527451524795868*^9}}], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{"heunstep", " ", "=", " ", RowBox[{"Compile", "[", RowBox[{ RowBox[{"{", RowBox[{ RowBox[{"{", RowBox[{"h", ",", " ", "_Real"}], "}"}], ",", RowBox[{"{", RowBox[{"v", ",", "_Real", ",", "1"}], "}"}]}], "}"}], ",", "\[IndentingNewLine]", RowBox[{"Module", "[", RowBox[{ RowBox[{"{", RowBox[{"k0", ",", "k1"}], "}"}], ",", "\[IndentingNewLine]", RowBox[{ RowBox[{"k0", " ", "=", " ", RowBox[{"h", " ", RowBox[{"f", "[", "v", "]"}]}]}], ";", "\[IndentingNewLine]", RowBox[{"k1", "=", RowBox[{"h", " ", RowBox[{"f", "[", RowBox[{"v", "+", "k0"}], "]"}]}]}], ";", "\[IndentingNewLine]", RowBox[{"v", " ", "+", " ", RowBox[{ RowBox[{"(", RowBox[{"k0", "+", "k1"}], ")"}], "/", "2"}]}]}]}], "]"}]}], "]"}]}]], "Input", CellChangeTimes->{{3.527451533715632*^9, 3.527451607894546*^9}, 3.5274516805299807`*^9, {3.527451715625546*^9, 3.5274517342093887`*^9}, { 3.527451783212935*^9, 3.527451832794976*^9}, {3.527452151412421*^9, 3.527452169896069*^9}, {3.5274522638963003`*^9, 3.5274522713250713`*^9}, { 3.52745232740206*^9, 3.527452344262937*^9}, {3.527463270031229*^9, 3.527463282406698*^9}, {3.527589816904758*^9, 3.5275898512641706`*^9}, { 3.527591950337912*^9, 3.527591955209484*^9}, {3.527591992754011*^9, 3.527591999095828*^9}, {3.527596918151436*^9, 3.527596945504931*^9}, { 3.5275986797103233`*^9, 3.527598686388411*^9}}], Cell[BoxData[ RowBox[{ StyleBox[ RowBox[{"Compile", "::", "noinfo"}], "MessageName"], RowBox[{ ":", " "}], "\<\"No information is available for compilation of \ \[NoBreak]\\!\\(f[v]\\)\[NoBreak]. The compiler will use an external \ evaluation and make assumptions about the return type. \ \\!\\(\\*ButtonBox[\\\"\[RightSkeleton]\\\", ButtonStyle->\\\"Link\\\", \ ButtonFrame->None, ButtonData:>\\\"paclet:ref/Compile\\\", ButtonNote -> \ \\\"Compile::noinfo\\\"]\\)\"\>"}]], "Message", "MSG", CellChangeTimes->{3.5280379265192537`*^9}], Cell[BoxData[ RowBox[{ StyleBox[ RowBox[{"Compile", "::", "noinfo"}], "MessageName"], RowBox[{ ":", " "}], "\<\"No information is available for compilation of \ \[NoBreak]\\!\\(f[\\(\\(v + k0\\)\\)]\\)\[NoBreak]. The compiler will use an \ external evaluation and make assumptions about the return type. \ \\!\\(\\*ButtonBox[\\\"\[RightSkeleton]\\\", ButtonStyle->\\\"Link\\\", \ ButtonFrame->None, ButtonData:>\\\"paclet:ref/Compile\\\", ButtonNote -> \ \\\"Compile::noinfo\\\"]\\)\"\>"}]], "Message", "MSG", CellChangeTimes->{3.528037926522964*^9}], Cell[BoxData[ TagBox[ RowBox[{"CompiledFunction", "[", RowBox[{ RowBox[{"{", RowBox[{"h", ",", "v"}], "}"}], ",", RowBox[{"Module", "[", RowBox[{ RowBox[{"{", RowBox[{"k0", ",", "k1"}], "}"}], ",", RowBox[{ RowBox[{"k0", "=", RowBox[{"h", " ", RowBox[{"f", "[", "v", "]"}]}]}], ";", RowBox[{"k1", "=", RowBox[{"h", " ", RowBox[{"f", "[", RowBox[{"v", "+", "k0"}], "]"}]}]}], ";", RowBox[{"v", "+", FractionBox[ RowBox[{"k0", "+", "k1"}], "2"]}]}]}], "]"}], ",", "\<\"-CompiledCode-\"\>"}], "]"}], False, Editable->False]], "Output", CellChangeTimes->{3.528037926527934*^9}] }, Open ]], Cell["Now lets try it on the Lorenz equations", "Text", CellChangeTimes->{{3.527451849681418*^9, 3.52745187448048*^9}, { 3.527463294785296*^9, 3.527463299542612*^9}, {3.527468586440114*^9, 3.527468596370904*^9}}], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{"f", " ", "=", " ", RowBox[{"Function", "[", RowBox[{ RowBox[{"{", "v", "}"}], ",", RowBox[{"Module", "[", RowBox[{ RowBox[{"{", RowBox[{"x", ",", "y", ",", "z"}], "}"}], ",", RowBox[{ RowBox[{ RowBox[{"{", RowBox[{"x", ",", "y", ",", "z"}], "}"}], "=", "v"}], ";", RowBox[{"{", RowBox[{ RowBox[{ RowBox[{"-", "3"}], " ", RowBox[{"(", RowBox[{"x", "-", "y"}], ")"}]}], ",", RowBox[{ RowBox[{ RowBox[{"-", "x"}], " ", "z"}], "+", RowBox[{"26.5", " ", "x"}], "-", "y"}], ",", RowBox[{ RowBox[{"x", " ", "y"}], "-", "z"}]}], "}"}]}]}], "]"}]}], "]"}]}]], "Input", CellChangeTimes->{{3.527451879574092*^9, 3.527451970196233*^9}, { 3.5274633061546392`*^9, 3.52746333038645*^9}, {3.527463448859211*^9, 3.527463449025242*^9}, {3.527463497159047*^9, 3.527463546512205*^9}, { 3.527468611035828*^9, 3.527468776652281*^9}, {3.527469604763925*^9, 3.527469615338442*^9}, {3.5275919866673183`*^9, 3.527591987016699*^9}}], Cell[BoxData[ RowBox[{"Function", "[", RowBox[{ RowBox[{"{", "v", "}"}], ",", RowBox[{"Module", "[", RowBox[{ RowBox[{"{", RowBox[{"x", ",", "y", ",", "z"}], "}"}], ",", RowBox[{ RowBox[{ RowBox[{"{", RowBox[{"x", ",", "y", ",", "z"}], "}"}], "=", "v"}], ";", RowBox[{"{", RowBox[{ RowBox[{ RowBox[{"-", "3"}], " ", RowBox[{"(", RowBox[{"x", "-", "y"}], ")"}]}], ",", RowBox[{ RowBox[{ RowBox[{"-", "x"}], " ", "z"}], "+", RowBox[{"26.5`", " ", "x"}], "-", "y"}], ",", RowBox[{ RowBox[{"x", " ", "y"}], "-", "z"}]}], "}"}]}]}], "]"}]}], "]"}]], "Output", CellChangeTimes->{3.528037926739169*^9}] }, Open ]], Cell["And try a step ...", "Text", CellChangeTimes->{{3.52745237786983*^9, 3.5274523850863657`*^9}}], Cell[BoxData[{ RowBox[{ RowBox[{"x0", " ", "=", " ", RowBox[{"{", RowBox[{"0.", ",", "1.", ",", "0."}], "}"}]}], ";"}], "\[IndentingNewLine]", RowBox[{ RowBox[{"h", " ", "=", " ", "0.01"}], ";"}]}], "Input", CellChangeTimes->{{3.527452620530074*^9, 3.527452622001418*^9}, { 3.5274633428967133`*^9, 3.527463349993553*^9}, {3.527468786610979*^9, 3.527468787366761*^9}}], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{"heunstep", "[", RowBox[{"h", ",", "x0"}], "]"}]], "Input", CellChangeTimes->{{3.527452242878736*^9, 3.527452255869467*^9}, { 3.527589925726215*^9, 3.5275899261078053`*^9}, {3.527598708636735*^9, 3.527598709124254*^9}}], Cell[BoxData[ RowBox[{"{", RowBox[{"0.0294`", ",", "0.994025`", ",", "0.00014849999999999998`"}], "}"}]], "Output", CellChangeTimes->{3.5280379268603773`*^9}] }, Open ]] }, Open ]] }, Open ]], Cell[CellGroupData[{ Cell["", "SlideShowNavigationBar", CellTags->"SlideShowHeader"], Cell["\<\ Seems to work, so maybe that warning was just so much noise ...\ \>", "Text", CellChangeTimes->{{3.5274633594735203`*^9, 3.527463374279089*^9}, { 3.527589935650152*^9, 3.5275899360019913`*^9}}], Cell["\<\ This iterates a solution for n steps \ \>", "Text", CellChangeTimes->{{3.5274689937541533`*^9, 3.527469007656617*^9}, { 3.527598741801977*^9, 3.527598747505818*^9}, {3.527598791324698*^9, 3.5275988005958643`*^9}, 3.527598917954833*^9}], Cell[CellGroupData[{ Cell[BoxData[{ RowBox[{ RowBox[{"n", " ", "=", " ", "20000"}], ";"}], "\[IndentingNewLine]", RowBox[{"AbsoluteTiming", "[", RowBox[{ RowBox[{"solution", " ", "=", " ", RowBox[{"Module", "[", RowBox[{ RowBox[{"{", RowBox[{"x", " ", "=", " ", "x0"}], "}"}], ",", RowBox[{"Table", "[", RowBox[{ RowBox[{"x", " ", "=", " ", RowBox[{"heunstep", "[", RowBox[{"h", ",", "x"}], "]"}]}], ",", RowBox[{"{", "n", "}"}]}], "]"}]}], "]"}]}], ";"}], "]"}]}], "Input", CellChangeTimes->{{3.5274520455962763`*^9, 3.527452209166729*^9}, { 3.527463393740787*^9, 3.527463428046851*^9}, 3.527463461137973*^9, { 3.527468817408824*^9, 3.527468833999897*^9}, 3.527468873474533*^9, { 3.5275899464724607`*^9, 3.527589946838167*^9}, {3.527596399753311*^9, 3.527596414898148*^9}, {3.527598750245969*^9, 3.5275987541339407`*^9}, { 3.5275988034953327`*^9, 3.527598878300819*^9}, {3.5275989220884037`*^9, 3.5275989431012506`*^9}}], Cell[BoxData[ RowBox[{"{", RowBox[{ "0.93639300000000003088018729613395407796`5.99205807175067", ",", "Null"}], "}"}]], "Output", CellChangeTimes->{3.528037935856571*^9}] }, Open ]], Cell["\<\ Its not terribly fast, but it looks like you\[CloseCurlyQuote]d expect\ \>", "Text", CellChangeTimes->{{3.527469115682888*^9, 3.527469130696432*^9}}], Cell[BoxData[ RowBox[{"Graphics3D", "[", RowBox[{"Line", "[", "solution", "]"}], "]"}]], "Input", CellChangeTimes->{{3.527469087375823*^9, 3.527469102777132*^9}, { 3.527469135635393*^9, 3.527469161757039*^9}}], Cell["\<\ It is more than a little slower than NDSolve (with less numerical accuracy)\ \>", "Text", CellChangeTimes->{{3.5274690438278217`*^9, 3.527469066699654*^9}, 3.527469181899892*^9, {3.527590009510339*^9, 3.5275900172633753`*^9}}], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{"AbsoluteTiming", "[", RowBox[{"s", "=", RowBox[{"First", "[", RowBox[{"NDSolve", "[", RowBox[{ RowBox[{"{", RowBox[{ RowBox[{ RowBox[{ SuperscriptBox["x", "\[Prime]", MultilineFunction->None], "[", "t", "]"}], "\[Equal]", RowBox[{ RowBox[{"-", "3"}], " ", RowBox[{"(", RowBox[{ RowBox[{"x", "[", "t", "]"}], "-", RowBox[{"y", "[", "t", "]"}]}], ")"}]}]}], ",", RowBox[{ RowBox[{ SuperscriptBox["y", "\[Prime]", MultilineFunction->None], "[", "t", "]"}], "\[Equal]", RowBox[{ RowBox[{ RowBox[{"-", RowBox[{"x", "[", "t", "]"}]}], " ", RowBox[{"z", "[", "t", "]"}]}], "+", RowBox[{"26.5", " ", RowBox[{"x", "[", "t", "]"}]}], "-", RowBox[{"y", "[", "t", "]"}]}]}], ",", RowBox[{ RowBox[{ SuperscriptBox["z", "\[Prime]", MultilineFunction->None], "[", "t", "]"}], "\[Equal]", RowBox[{ RowBox[{ RowBox[{"x", "[", "t", "]"}], " ", RowBox[{"y", "[", "t", "]"}]}], "-", RowBox[{"z", "[", "t", "]"}]}]}], ",", RowBox[{ RowBox[{"x", "[", "0", "]"}], "\[Equal]", RowBox[{"z", "[", "0", "]"}], "\[Equal]", "0"}], ",", RowBox[{ RowBox[{"y", "[", "0", "]"}], "\[Equal]", "1"}]}], "}"}], ",", RowBox[{"{", RowBox[{"x", ",", "y", ",", "z"}], "}"}], ",", RowBox[{"{", RowBox[{"t", ",", "0", ",", "200"}], "}"}], ",", RowBox[{"MaxSteps", "\[Rule]", "\[Infinity]"}]}], "]"}], "]"}]}], "]"}]], "Input", CellChangeTimes->{{3.527468904408368*^9, 3.52746892287109*^9}}], Cell[BoxData[ RowBox[{"{", RowBox[{ "0.13034799999999999164934649797942256555`5.1357042852195125", ",", RowBox[{"{", RowBox[{ RowBox[{"x", "\[Rule]", TagBox[ RowBox[{"InterpolatingFunction", "[", RowBox[{ RowBox[{"{", RowBox[{"{", RowBox[{"0.`", ",", "200.`"}], "}"}], "}"}], ",", "\<\"<>\"\>"}], "]"}], False, Editable->False]}], ",", RowBox[{"y", "\[Rule]", TagBox[ RowBox[{"InterpolatingFunction", "[", RowBox[{ RowBox[{"{", RowBox[{"{", RowBox[{"0.`", ",", "200.`"}], "}"}], "}"}], ",", "\<\"<>\"\>"}], "]"}], False, Editable->False]}], ",", RowBox[{"z", "\[Rule]", TagBox[ RowBox[{"InterpolatingFunction", "[", RowBox[{ RowBox[{"{", RowBox[{"{", RowBox[{"0.`", ",", "200.`"}], "}"}], "}"}], ",", "\<\"<>\"\>"}], "]"}], False, Editable->False]}]}], "}"}]}], "}"}]], "Output", CellChangeTimes->{3.528037936558114*^9}] }, Open ]], Cell["Lets see if we can get this to work a bit faster", "Text", CellChangeTimes->{{3.5274689663763723`*^9, 3.5274689750383043`*^9}}] }, Open ]], Cell[CellGroupData[{ Cell["", "SlideShowNavigationBar", CellTags->"SlideShowHeader"], Cell["\<\ One of the first things to do when a CompiledFunction is running slower than \ expected is to see what it does with CompilePrint\ \>", "Text", CellChangeTimes->{{3.5274692501749067`*^9, 3.5274692973905907`*^9}}], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{"CompilePrint", "[", "heunstep", "]"}]], "Input", CellChangeTimes->{{3.527469299994066*^9, 3.5274693097716703`*^9}, { 3.52759004510215*^9, 3.5275900468140173`*^9}}], Cell[BoxData["\<\"\\n\\t\\t2 arguments\\n\\t\\t1 Integer register\\n\\t\\t3 \ Real registers\\n\\t\\t5 Tensor registers\\n\\t\\tUnderflow checking \ off\\n\\t\\tOverflow checking off\\n\\t\\tInteger overflow checking \ on\\n\\t\\tRuntimeAttributes -> {}\\n\\n\\t\\tR0 = A1\\n\\t\\tT(R1)0 = \ A2\\n\\t\\tI0 = 2\\n\\t\\tResult = T(R1)3\\n\\n1\\tT(R1)1 = MainEvaluate[ \ Hold[f][ T(R1)0]]\\n2\\tT(R1)2 = R0 * T(R1)1\\n3\\tT(R1)1 = T(R1)0 + \ T(R1)2\\n4\\tT(R1)3 = MainEvaluate[ Hold[f][ T(R1)1]]\\n5\\tT(R1)1 = R0 * \ T(R1)3\\n6\\tT(R1)3 = T(R1)2 + T(R1)1\\n7\\tR1 = I0\\n8\\tR2 = Reciprocal[ \ R1]\\n9\\tT(R1)4 = R2 * T(R1)3\\n10\\tT(R1)3 = T(R1)0 + \ T(R1)4\\n11\\tReturn\\n\"\>"], "Output", CellChangeTimes->{3.528037945042488*^9}] }, Open ]] }, Open ]], Cell[CellGroupData[{ Cell["", "SlideShowNavigationBar", CellTags->"SlideShowHeader"], Cell["\<\ The speed killers here are the MainEvaluates to evaluate the function \ \>", "Text", CellChangeTimes->{3.5274700173463173`*^9}], Cell[CellGroupData[{ Cell["MainEvaluate", "Subsection", CellChangeTimes->{{3.527595653251274*^9, 3.52759565789924*^9}}], Cell[TextData[{ "MainEvaluate indicates that the compiler resorts to ", StyleBox["Mathematica", FontSlant->"Italic"], " to evaluate an expression that it could not compile. \nThere is nothing \ really wrong with this, but a ", StyleBox["Mathematica", FontSlant->"Italic"], " evaluation is much slower than interpreting an instruction in the virtual \ machine." }], "Text", CellChangeTimes->{{3.527595663841548*^9, 3.527595701977908*^9}, { 3.5275957516186447`*^9, 3.527595854179287*^9}}], Cell["\<\ Sometimes it is unavoidable -- in those cases it is occasionally possible to \ restructure code so the evaluation is done once instead of many times in a \ loop.\ \>", "Text", CellChangeTimes->{{3.527595663841548*^9, 3.527595701977908*^9}, { 3.5275957516186447`*^9, 3.527595902547635*^9}}], Cell["\<\ Many times, however, it is avoidable and we\[CloseCurlyQuote]ll investigate \ that.\ \>", "Text", CellChangeTimes->{{3.527595920026457*^9, 3.527595949562317*^9}}], Cell["\<\ If the function called is a LibraryFunction or CompiledFunction, the virtual \ machine can avoid the evaluation adaptively\ \>", "Text", CellChangeTimes->{{3.527595974589293*^9, 3.527596037597933*^9}, { 3.527596133034008*^9, 3.527596139102913*^9}}], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{"cf", " ", "=", " ", RowBox[{"Compile", "[", RowBox[{ RowBox[{"{", RowBox[{"{", RowBox[{"v", ",", " ", "_Real", ",", " ", "1"}], "}"}], "}"}], ",", RowBox[{"Module", "[", RowBox[{ RowBox[{"{", RowBox[{"x", ",", "y", ",", "z"}], "}"}], ",", RowBox[{ RowBox[{ RowBox[{"{", RowBox[{"x", ",", "y", ",", "z"}], "}"}], "=", "v"}], ";", RowBox[{"{", RowBox[{ RowBox[{ RowBox[{"-", "3"}], " ", RowBox[{"(", RowBox[{"x", "-", "y"}], ")"}]}], ",", RowBox[{ RowBox[{ RowBox[{"-", "x"}], " ", "z"}], "+", RowBox[{"26.5", " ", "x"}], "-", "y"}], ",", RowBox[{ RowBox[{"x", " ", "y"}], "-", "z"}]}], "}"}]}]}], "]"}]}], "]"}]}]], "Input", CellChangeTimes->{{3.527596066622332*^9, 3.527596084142324*^9}, 3.527596313213683*^9}], Cell[BoxData[ TagBox[ RowBox[{"CompiledFunction", "[", RowBox[{ RowBox[{"{", "v", "}"}], ",", RowBox[{"Block", "[", RowBox[{ RowBox[{"{", "Compile`$1", "}"}], ",", RowBox[{"Module", "[", RowBox[{ RowBox[{"{", RowBox[{"x", ",", "y", ",", "z"}], "}"}], ",", RowBox[{ RowBox[{ RowBox[{"{", RowBox[{"x", ",", "y", ",", "z"}], "}"}], "=", "v"}], ";", RowBox[{"(", RowBox[{ RowBox[{"Compile`$1", "=", RowBox[{"-", "y"}]}], ";", RowBox[{"{", RowBox[{ RowBox[{ RowBox[{"-", "3"}], " ", RowBox[{"(", RowBox[{"x", "+", "Compile`$1"}], ")"}]}], ",", RowBox[{ RowBox[{ RowBox[{"-", "x"}], " ", "z"}], "+", RowBox[{"26.5`", " ", "x"}], "+", "Compile`$1"}], ",", RowBox[{ RowBox[{"x", " ", "y"}], "-", "z"}]}], "}"}]}], ")"}]}]}], "]"}]}], "]"}], ",", "\<\"-CompiledCode-\"\>"}], "]"}], False, Editable->False]], "Output", CellChangeTimes->{3.528037951430757*^9}] }, Open ]], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{"AbsoluteTiming", "[", RowBox[{"Block", "[", RowBox[{ RowBox[{"{", RowBox[{"f", " ", "=", " ", "cf"}], "}"}], ",", RowBox[{ RowBox[{"solution", " ", "=", " ", RowBox[{"Module", "[", RowBox[{ RowBox[{"{", RowBox[{"x", " ", "=", " ", "x0"}], "}"}], ",", RowBox[{"Table", "[", RowBox[{ RowBox[{"x", " ", "=", " ", RowBox[{"heunstep", "[", RowBox[{"h", ",", "x"}], "]"}]}], ",", RowBox[{"{", "n", "}"}]}], "]"}]}], "]"}]}], ";"}]}], "]"}], "]"}]], "Input", CellChangeTimes->{{3.5274520455962763`*^9, 3.527452209166729*^9}, { 3.527463393740787*^9, 3.527463428046851*^9}, 3.527463461137973*^9, { 3.527468817408824*^9, 3.527468833999897*^9}, 3.527468873474533*^9, { 3.5275899464724607`*^9, 3.527589946838167*^9}, {3.527596322286854*^9, 3.52759633296511*^9}, 3.527598985649521*^9}], Cell[BoxData[ RowBox[{"{", RowBox[{ "0.08077900000000000357847085297180456109`4.927898385817851", ",", "Null"}], "}"}]], "Output", CellChangeTimes->{3.5280379517590113`*^9}] }, Open ]] }, Open ]] }, Open ]], Cell[CellGroupData[{ Cell["", "SlideShowNavigationBar", CellTags->"SlideShowHeader"], Cell["So we get a huge speedup here", "Text", CellChangeTimes->{{3.5275961624635077`*^9, 3.52759617326348*^9}}], Cell["\<\ Note that it has to be explicitly assigned to a CompiledFunction -- this does \ the evaluation\ \>", "Text", CellChangeTimes->{{3.52759619361798*^9, 3.527596236072505*^9}, { 3.527596481004848*^9, 3.527596486123925*^9}}], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{"AbsoluteTiming", "[", RowBox[{"Block", "[", RowBox[{ RowBox[{"{", "f", "}"}], ",", RowBox[{ RowBox[{ RowBox[{"f", "[", "v_", "]"}], " ", ":=", " ", RowBox[{"cf", "[", "v", "]"}]}], ";", RowBox[{"solution", " ", "=", " ", RowBox[{"Module", "[", RowBox[{ RowBox[{"{", RowBox[{"x", " ", "=", " ", "x0"}], "}"}], ",", RowBox[{"Table", "[", RowBox[{ RowBox[{"x", " ", "=", " ", RowBox[{"heunstep", "[", RowBox[{"h", ",", "x"}], "]"}]}], ",", RowBox[{"{", "n", "}"}]}], "]"}]}], "]"}]}], ";"}]}], "]"}], "]"}]], "Input", CellChangeTimes->{{3.5274520455962763`*^9, 3.527452209166729*^9}, { 3.527463393740787*^9, 3.527463428046851*^9}, 3.527463461137973*^9, { 3.527468817408824*^9, 3.527468833999897*^9}, 3.527468873474533*^9, { 3.5275899464724607`*^9, 3.527589946838167*^9}, {3.527596322286854*^9, 3.527596367528081*^9}, {3.527599004243177*^9, 3.527599017704507*^9}}], Cell[BoxData[ RowBox[{"{", RowBox[{ "0.17768200000000000660094201521133072674`5.270243347294126", ",", "Null"}], "}"}]], "Output", CellChangeTimes->{3.528037982878914*^9}] }, Open ]], Cell[TextData[{ "Generated code can not be as adaptive, so if we want to use code \ generation, we need to compile the step function after the rhs function is \ compiled and using the definition. \nYou can have ", StyleBox["Mathematica", FontSlant->"Italic"], " inline the definition using" }], "Text", CellChangeTimes->{{3.527596499018341*^9, 3.527596614885964*^9}}], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{"cheunstep", " ", "=", " ", RowBox[{"Compile", "[", RowBox[{ RowBox[{"{", RowBox[{ RowBox[{"{", RowBox[{"h", ",", " ", "_Real"}], "}"}], ",", RowBox[{"{", RowBox[{"v", ",", "_Real", ",", "1"}], "}"}]}], "}"}], ",", "\[IndentingNewLine]", RowBox[{"Module", "[", RowBox[{ RowBox[{"{", RowBox[{"k0", ",", "k1", ",", "k2", ",", "k3"}], "}"}], ",", "\[IndentingNewLine]", RowBox[{ RowBox[{"k0", " ", "=", " ", RowBox[{"h", " ", RowBox[{"cf", "[", "v", "]"}]}]}], ";", "\[IndentingNewLine]", RowBox[{"k1", "=", RowBox[{"h", " ", RowBox[{"cf", "[", RowBox[{"v", "+", "k0"}], "]"}]}]}], ";", "\[IndentingNewLine]", RowBox[{"v", " ", "+", " ", RowBox[{ RowBox[{"(", RowBox[{"k0", "+", "k1"}], ")"}], "/", "2"}]}]}]}], "]"}], ",", " ", RowBox[{"CompilationOptions", "\[Rule]", RowBox[{"{", RowBox[{"\"\\"", "\[Rule]", "True"}], "}"}]}]}], "]"}]}]], "Input", CellChangeTimes->{{3.527596671570661*^9, 3.5275967186921387`*^9}, 3.527599068761858*^9}], Cell[BoxData[ TagBox[ RowBox[{"CompiledFunction", "[", RowBox[{ RowBox[{"{", RowBox[{"h", ",", "v"}], "}"}], ",", RowBox[{"Module", "[", RowBox[{ RowBox[{"{", RowBox[{"k0", ",", "k1", ",", "k2", ",", "k3"}], "}"}], ",", RowBox[{ RowBox[{"k0", "=", RowBox[{"h", " ", RowBox[{ TagBox[ RowBox[{"CompiledFunction", "[", RowBox[{ RowBox[{"{", "v", "}"}], ",", RowBox[{"Block", "[", RowBox[{ RowBox[{"{", "Compile`$1", "}"}], ",", RowBox[{"Module", "[", RowBox[{ RowBox[{"{", RowBox[{"x", ",", "y", ",", "z"}], "}"}], ",", RowBox[{ RowBox[{ RowBox[{"{", RowBox[{"x", ",", "y", ",", "z"}], "}"}], "=", "v"}], ";", RowBox[{"(", RowBox[{ RowBox[{"Compile`$1", "=", RowBox[{"-", "y"}]}], ";", RowBox[{"{", RowBox[{ RowBox[{ RowBox[{"-", "3"}], " ", RowBox[{"(", RowBox[{"x", "+", "Compile`$1"}], ")"}]}], ",", RowBox[{ RowBox[{ RowBox[{"-", "x"}], " ", "z"}], "+", RowBox[{"26.5`", " ", "x"}], "+", "Compile`$1"}], ",", RowBox[{ RowBox[{"x", " ", "y"}], "-", "z"}]}], "}"}]}], ")"}]}]}], "]"}]}], "]"}], ",", "\<\"-CompiledCode-\"\>"}], "]"}], False, Editable->False], "[", "v", "]"}]}]}], ";", RowBox[{"k1", "=", RowBox[{"h", " ", RowBox[{ TagBox[ RowBox[{"CompiledFunction", "[", RowBox[{ RowBox[{"{", "v", "}"}], ",", RowBox[{"Block", "[", RowBox[{ RowBox[{"{", "Compile`$1", "}"}], ",", RowBox[{"Module", "[", RowBox[{ RowBox[{"{", RowBox[{"x", ",", "y", ",", "z"}], "}"}], ",", RowBox[{ RowBox[{ RowBox[{"{", RowBox[{"x", ",", "y", ",", "z"}], "}"}], "=", "v"}], ";", RowBox[{"(", RowBox[{ RowBox[{"Compile`$1", "=", RowBox[{"-", "y"}]}], ";", RowBox[{"{", RowBox[{ RowBox[{ RowBox[{"-", "3"}], " ", RowBox[{"(", RowBox[{"x", "+", "Compile`$1"}], ")"}]}], ",", RowBox[{ RowBox[{ RowBox[{"-", "x"}], " ", "z"}], "+", RowBox[{"26.5`", " ", "x"}], "+", "Compile`$1"}], ",", RowBox[{ RowBox[{"x", " ", "y"}], "-", "z"}]}], "}"}]}], ")"}]}]}], "]"}]}], "]"}], ",", "\<\"-CompiledCode-\"\>"}], "]"}], False, Editable->False], "[", RowBox[{"v", "+", "k0"}], "]"}]}]}], ";", RowBox[{"v", "+", FractionBox[ RowBox[{"k0", "+", "k1"}], "2"]}]}]}], "]"}], ",", "\<\"-CompiledCode-\"\>"}], "]"}], False, Editable->False]], "Output", CellChangeTimes->{3.528037983099678*^9}] }, Open ]], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{"CompilePrint", "[", "cheunstep", "]"}]], "Input", CellChangeTimes->{{3.527596725104816*^9, 3.527596729876918*^9}}], Cell[BoxData["\<\"\\n\\t\\t2 arguments\\n\\t\\t1 Integer register\\n\\t\\t3 \ Real registers\\n\\t\\t5 Tensor registers\\n\\t\\tUnderflow checking \ off\\n\\t\\tOverflow checking off\\n\\t\\tInteger overflow checking \ on\\n\\t\\tRuntimeAttributes -> {}\\n\\n\\t\\tR0 = A1\\n\\t\\tT(R1)0 = \ A2\\n\\t\\tI0 = 2\\n\\t\\tResult = T(R1)3\\n\\n1\\tT(R1)1 = \ CompiledFunctionCall[ Hold[CompiledFunction[{v}, Block[{Compile`$1}, \ Module[{x, y, z}, {x, y, z} = v; (Compile`$1 = -y; {-3 (x + Compile`$1), -x z \ + 26.5 x + Compile`$1, x y - z})]], -CompiledCode-]][ T(R1)0]]\\n2\\tT(R1)2 = \ R0 * T(R1)1\\n3\\tT(R1)1 = T(R1)0 + T(R1)2\\n4\\tT(R1)3 = \ CompiledFunctionCall[ Hold[CompiledFunction[{v}, Block[{Compile`$1}, \ Module[{x, y, z}, {x, y, z} = v; (Compile`$1 = -y; {-3 (x + Compile`$1), -x z \ + 26.5 x + Compile`$1, x y - z})]], -CompiledCode-]][ T(R1)1]]\\n5\\tT(R1)1 = \ R0 * T(R1)3\\n6\\tT(R1)3 = T(R1)2 + T(R1)1\\n7\\tR1 = I0\\n8\\tR2 = \ Reciprocal[ R1]\\n9\\tT(R1)4 = R2 * T(R1)3\\n10\\tT(R1)3 = T(R1)0 + \ T(R1)4\\n11\\tReturn\\n\"\>"], "Output", CellChangeTimes->{3.528037983168782*^9}] }, Open ]], Cell["\<\ This is comparable in timing to adaptively using the CompiledFunction, but \ you have lost the flexibility\ \>", "Text", CellChangeTimes->{{3.5275967659853477`*^9, 3.5275968008331957`*^9}}], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{"AbsoluteTiming", "[", RowBox[{ RowBox[{"solution", " ", "=", " ", RowBox[{"Module", "[", RowBox[{ RowBox[{"{", RowBox[{"x", " ", "=", " ", "x0"}], "}"}], ",", RowBox[{"Table", "[", RowBox[{ RowBox[{"x", " ", "=", " ", RowBox[{"cheunstep", "[", RowBox[{"h", ",", "x"}], "]"}]}], ",", RowBox[{"{", "n", "}"}]}], "]"}]}], "]"}]}], ";"}], "]"}]], "Input", CellChangeTimes->{{3.5274520455962763`*^9, 3.527452209166729*^9}, { 3.527463393740787*^9, 3.527463428046851*^9}, 3.527463461137973*^9, { 3.527468817408824*^9, 3.527468833999897*^9}, 3.527468873474533*^9, { 3.5275899464724607`*^9, 3.527589946838167*^9}, {3.527596322286854*^9, 3.52759633296511*^9}, 3.5275967609193172`*^9, {3.527599049131372*^9, 3.5275990536984367`*^9}, {3.527599096736944*^9, 3.527599101954544*^9}}], Cell[BoxData[ RowBox[{"{", RowBox[{ "0.08563800000000000578470604750691563822`4.953266429455665", ",", "Null"}], "}"}]], "Output", CellChangeTimes->{3.528037983272573*^9}] }, Open ]], Cell["\<\ However, what you have gained is that you can effectively compile to C\ \>", "Text", CellChangeTimes->{{3.527596807473134*^9, 3.527596829601516*^9}}], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{"AbsoluteTiming", "[", RowBox[{ RowBox[{"cheunstep", " ", "=", " ", RowBox[{"Compile", "[", RowBox[{ RowBox[{"{", RowBox[{ RowBox[{"{", RowBox[{"h", ",", " ", "_Real"}], "}"}], ",", RowBox[{"{", RowBox[{"v", ",", "_Real", ",", "1"}], "}"}]}], "}"}], ",", "\[IndentingNewLine]", RowBox[{"Module", "[", RowBox[{ RowBox[{"{", RowBox[{"k0", ",", "k1", ",", "k2", ",", "k3"}], "}"}], ",", "\[IndentingNewLine]", RowBox[{ RowBox[{"k0", " ", "=", " ", RowBox[{"h", " ", RowBox[{"cf", "[", "v", "]"}]}]}], ";", "\[IndentingNewLine]", RowBox[{"k1", "=", RowBox[{"h", " ", RowBox[{"cf", "[", RowBox[{"v", "+", "k0"}], "]"}]}]}], ";", "\[IndentingNewLine]", RowBox[{"v", " ", "+", " ", RowBox[{ RowBox[{"(", RowBox[{"k0", "+", "k1"}], ")"}], "/", "2"}]}]}]}], "]"}], ",", " ", RowBox[{"CompilationOptions", "\[Rule]", RowBox[{"{", RowBox[{"\"\\"", "\[Rule]", "True"}], "}"}]}], ",", " ", RowBox[{"CompilationTarget", "\[Rule]", "\"\\""}], ",", " ", RowBox[{"RuntimeOptions", "\[Rule]", "\"\\""}]}], "]"}]}], ";"}], "]"}]], "Input", CellChangeTimes->{{3.527596840961772*^9, 3.5275968669068613`*^9}, { 3.5275980016999607`*^9, 3.527598007984064*^9}, 3.5275990912521467`*^9}], Cell[BoxData[ RowBox[{"{", RowBox[{ "0.14054400000000000225952589971711859107`5.168412223041565", ",", "Null"}], "}"}]], "Output", CellChangeTimes->{3.528037983422791*^9}] }, Open ]], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{"AbsoluteTiming", "[", RowBox[{ RowBox[{"solution", " ", "=", " ", RowBox[{"Module", "[", RowBox[{ RowBox[{"{", RowBox[{"x", " ", "=", " ", "x0"}], "}"}], ",", RowBox[{"Table", "[", RowBox[{ RowBox[{"x", " ", "=", " ", RowBox[{"cheunstep", "[", RowBox[{"h", ",", "x"}], "]"}]}], ",", RowBox[{"{", "n", "}"}]}], "]"}]}], "]"}]}], ";"}], "]"}]], "Input", CellChangeTimes->{{3.5274520455962763`*^9, 3.527452209166729*^9}, { 3.527463393740787*^9, 3.527463428046851*^9}, 3.527463461137973*^9, { 3.527468817408824*^9, 3.527468833999897*^9}, 3.527468873474533*^9, { 3.5275899464724607`*^9, 3.527589946838167*^9}, {3.527596322286854*^9, 3.52759633296511*^9}, 3.5275967609193172`*^9, 3.5275991189561443`*^9}], Cell[BoxData[ RowBox[{"{", RowBox[{ "0.07047000000000000485833595575968502089`4.868604184776893", ",", "Null"}], "}"}]], "Output", CellChangeTimes->{3.528037983504389*^9}] }, Open ]] }, Open ]], Cell[CellGroupData[{ Cell["", "SlideShowNavigationBar", CellTags->"SlideShowHeader"], Cell["\<\ If the function being called is not terribly big, it may be advantageous to \ inline the code and not just the CompiledFunction\ \>", "Text", CellChangeTimes->{{3.527596978080435*^9, 3.527597048214583*^9}}], Cell[BoxData[ RowBox[{ RowBox[{"cheunstep", " ", "=", " ", RowBox[{"Compile", "[", RowBox[{ RowBox[{"{", RowBox[{ RowBox[{"{", RowBox[{"h", ",", " ", "_Real"}], "}"}], ",", RowBox[{"{", RowBox[{"v", ",", "_Real", ",", "1"}], "}"}]}], "}"}], ",", "\[IndentingNewLine]", RowBox[{"Module", "[", RowBox[{ RowBox[{"{", RowBox[{"k0", ",", "k1", ",", "k2", ",", "k3"}], "}"}], ",", "\[IndentingNewLine]", RowBox[{ RowBox[{"k0", " ", "=", " ", RowBox[{"h", " ", RowBox[{"cf", "[", "v", "]"}]}]}], ";", "\[IndentingNewLine]", RowBox[{"k1", "=", RowBox[{"h", " ", RowBox[{"cf", "[", RowBox[{"v", "+", "k0"}], "]"}]}]}], ";", "\[IndentingNewLine]", RowBox[{"v", " ", "+", " ", RowBox[{ RowBox[{"(", RowBox[{"k0", "+", "k1"}], ")"}], "/", "2"}]}]}]}], "]"}], ",", " ", RowBox[{"CompilationOptions", "\[Rule]", RowBox[{"{", RowBox[{ RowBox[{"\"\\"", "\[Rule]", "True"}], ",", " ", RowBox[{"\"\\"", "\[Rule]", "True"}]}], "}"}]}], ",", " ", RowBox[{"CompilationTarget", "\[Rule]", "\"\\""}], ",", " ", RowBox[{"RuntimeOptions", "\[Rule]", "\"\\""}]}], "]"}]}], ";"}]], "Input", CellChangeTimes->{{3.527597061015324*^9, 3.527597075126195*^9}, { 3.527597109369672*^9, 3.527597117769496*^9}, {3.52759916599306*^9, 3.5275991675738707`*^9}}], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{"AbsoluteTiming", "[", RowBox[{ RowBox[{"solution", " ", "=", " ", RowBox[{"Module", "[", RowBox[{ RowBox[{"{", RowBox[{"x", " ", "=", " ", "x0"}], "}"}], ",", RowBox[{"Table", "[", RowBox[{ RowBox[{"x", " ", "=", " ", RowBox[{"cheunstep", "[", RowBox[{"h", ",", "x"}], "]"}]}], ",", RowBox[{"{", "n", "}"}]}], "]"}]}], "]"}]}], ";"}], "]"}]], "Input"], Cell[BoxData[ RowBox[{"{", RowBox[{ "0.04602099999999999940802908326986653265`4.683555964591028", ",", "Null"}], "}"}]], "Output", CellChangeTimes->{3.52803799407097*^9}] }, Open ]], Cell["Is effectively equivalent to", "Text", CellChangeTimes->{{3.52759715341098*^9, 3.527597158938999*^9}}], Cell[BoxData[ RowBox[{ RowBox[{"heunstep", " ", "=", " ", RowBox[{"Compile", "[", RowBox[{ RowBox[{"{", RowBox[{ RowBox[{"{", RowBox[{"h", ",", " ", "_Real"}], "}"}], ",", RowBox[{"{", RowBox[{"v", ",", "_Real", ",", "1"}], "}"}]}], "}"}], ",", "\[IndentingNewLine]", RowBox[{"Module", "[", RowBox[{ RowBox[{"{", RowBox[{"k0", ",", "k1", ",", "k2", ",", "k3"}], "}"}], ",", "\[IndentingNewLine]", RowBox[{ RowBox[{"k0", " ", "=", " ", RowBox[{"h", " ", RowBox[{"f", "[", "v", "]"}]}]}], ";", "\[IndentingNewLine]", RowBox[{"k1", "=", RowBox[{"h", " ", RowBox[{"f", "[", RowBox[{"v", "+", "k0"}], "]"}]}]}], ";", "\[IndentingNewLine]", RowBox[{"v", " ", "+", " ", RowBox[{ RowBox[{"(", RowBox[{"k0", "+", "k1"}], ")"}], "/", "2"}]}]}]}], "]"}], ",", " ", RowBox[{"CompilationOptions", "\[Rule]", RowBox[{"{", RowBox[{"\"\\"", "\[Rule]", "True"}], "}"}]}], ",", " ", RowBox[{"CompilationTarget", "\[Rule]", "\"\\""}], ",", " ", RowBox[{"RuntimeOptions", "\[Rule]", "\"\\""}]}], "]"}]}], ";"}]], "Input", CellChangeTimes->{{3.527597061015324*^9, 3.527597075126195*^9}, { 3.527597109369672*^9, 3.527597136952437*^9}, 3.5275991709997387`*^9}], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{"AbsoluteTiming", "[", RowBox[{ RowBox[{"solution", " ", "=", " ", RowBox[{"Module", "[", RowBox[{ RowBox[{"{", RowBox[{"x", " ", "=", " ", "x0"}], "}"}], ",", RowBox[{"Table", "[", RowBox[{ RowBox[{"x", " ", "=", " ", RowBox[{"heunstep", "[", RowBox[{"h", ",", "x"}], "]"}]}], ",", RowBox[{"{", "n", "}"}]}], "]"}]}], "]"}]}], ";"}], "]"}]], "Input", CellChangeTimes->{3.5275991912454653`*^9}], Cell[BoxData[ RowBox[{"{", RowBox[{ "0.04681300000000000044453329905991267879`4.690966386957746", ",", "Null"}], "}"}]], "Output", CellChangeTimes->{3.528037994277766*^9}] }, Open ]] }, Open ]], Cell[CellGroupData[{ Cell["", "SlideShowNavigationBar", CellTags->"SlideShowHeader"], Cell["\<\ Now the stepcode is fast enough that it is worth compiling the iteration too. I\[CloseCurlyQuote]ve done this for a generic step function for now\ \>", "Text", CellChangeTimes->{{3.527597234488461*^9, 3.5275972773415937`*^9}, { 3.527597494005135*^9, 3.527597521681307*^9}}], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{"AbsoluteTiming", "[", RowBox[{ RowBox[{"citerate", " ", "=", " ", RowBox[{"Compile", "[", RowBox[{ RowBox[{"{", RowBox[{ RowBox[{"{", RowBox[{"h", ",", " ", "_Real"}], "}"}], ",", " ", RowBox[{"{", RowBox[{"n", ",", " ", "_Integer"}], "}"}], ",", RowBox[{"{", RowBox[{"x0", ",", "_Real", ",", "1"}], "}"}]}], "}"}], ",", RowBox[{"Module", "[", RowBox[{ RowBox[{"{", RowBox[{"x", " ", "=", " ", "x0"}], "}"}], ",", " ", RowBox[{"Table", "[", RowBox[{ RowBox[{"x", " ", "=", " ", RowBox[{"step", "[", RowBox[{"h", ",", "x"}], "]"}]}], ",", RowBox[{"{", "n", "}"}]}], "]"}]}], "]"}], ",", " ", RowBox[{"{", RowBox[{"{", RowBox[{"_step", ",", " ", "_Real", ",", " ", "1"}], "}"}], "}"}]}], "]"}]}], ";"}], "]"}]], "Input", CellChangeTimes->{{3.527597283208346*^9, 3.527597324874536*^9}, { 3.527597392460939*^9, 3.527597489391355*^9}, {3.5275979572170753`*^9, 3.5275979622577677`*^9}, {3.527599223001603*^9, 3.527599251530834*^9}}], Cell[BoxData[ RowBox[{"{", RowBox[{ "0.00020200000000000000398812927127067951`2.325951282726248", ",", "Null"}], "}"}]], "Output", CellChangeTimes->{3.5280380038431797`*^9}] }, Open ]], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{ RowBox[{"Timing", "[", RowBox[{ RowBox[{"solution", " ", "=", " ", RowBox[{"Block", "[", RowBox[{ RowBox[{"{", RowBox[{"step", " ", "=", " ", "cheunstep"}], "}"}], ",", " ", RowBox[{"citerate", "[", RowBox[{"h", ",", " ", "n", ",", "x0"}], "]"}]}], "]"}]}], ";"}], "]"}], " "}]], "Input", CellChangeTimes->{{3.5275975258460827`*^9, 3.527597552609371*^9}, { 3.5275975986237707`*^9, 3.527597614534265*^9}, {3.52759764633314*^9, 3.5275976696426983`*^9}, {3.5275977097733173`*^9, 3.527597711267445*^9}, 3.527982668172723*^9}], Cell[BoxData[ RowBox[{"{", RowBox[{ "0.01871700000000000099764640992816566722`4.29283615362965", ",", "Null"}], "}"}]], "Output", CellChangeTimes->{3.528038004143239*^9}] }, Open ]], Cell["\<\ Now we could get a tiny bit of extra speed by inlining everything, but at the \ cost of extra compilation time.\ \>", "Text", CellChangeTimes->{{3.527597752001601*^9, 3.527597791871421*^9}}], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{"AbsoluteTiming", "[", RowBox[{ RowBox[{"citerateinline", " ", "=", " ", RowBox[{"Compile", "[", RowBox[{ RowBox[{"{", RowBox[{ RowBox[{"{", RowBox[{"h", ",", " ", "_Real"}], "}"}], ",", " ", RowBox[{"{", RowBox[{"n", ",", " ", "_Integer"}], "}"}], ",", RowBox[{"{", RowBox[{"x0", ",", "_Real", ",", "1"}], "}"}]}], "}"}], ",", RowBox[{"Module", "[", RowBox[{ RowBox[{"{", RowBox[{"x", " ", "=", " ", "x0"}], "}"}], ",", " ", RowBox[{"Prepend", "[", RowBox[{ RowBox[{"Table", "[", RowBox[{ RowBox[{"x", " ", "=", " ", RowBox[{"cheunstep", "[", RowBox[{"h", ",", "x"}], "]"}]}], ",", RowBox[{"{", RowBox[{"t", ",", "0", ",", "200", ",", "h"}], "}"}]}], "]"}], ",", "x0"}], "]"}]}], "]"}], ",", " ", RowBox[{"CompilationOptions", "\[Rule]", RowBox[{"{", RowBox[{ RowBox[{"\"\\"", "\[Rule]", "True"}], ",", " ", RowBox[{"\"\\"", "\[Rule]", "True"}]}], "}"}]}], ",", " ", RowBox[{"CompilationTarget", "\[Rule]", "\"\\""}]}], "]"}]}], ";"}], "]"}]], "Input", CellChangeTimes->{{3.52759782323811*^9, 3.5275978945299597`*^9}, { 3.5275981712758007`*^9, 3.527598199586948*^9}, 3.527599264300131*^9}], Cell[BoxData[ RowBox[{"{", RowBox[{ "0.19606399999999998828847935783414868638`5.312997771931484", ",", "Null"}], "}"}]], "Output", CellChangeTimes->{3.528038004348812*^9}] }, Open ]], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{ RowBox[{"Timing", "[", RowBox[{ RowBox[{"solution", " ", "=", " ", RowBox[{"citerateinline", "[", RowBox[{"h", ",", " ", "n", ",", "x0"}], "]"}]}], ";"}], "]"}], " "}]], "Input", CellChangeTimes->{{3.527597910444024*^9, 3.527597919122943*^9}, 3.527982665163248*^9}], Cell[BoxData[ RowBox[{"{", RowBox[{ "0.01554799999999999932098759813925425988`4.212274445238853", ",", "Null"}], "}"}]], "Output", CellChangeTimes->{3.528038004431892*^9}] }, Open ]], Cell["\<\ So you gain .002 second at the extra cost of .18 second!\ \>", "Text", CellChangeTimes->{{3.52759793531516*^9, 3.527597977544598*^9}, 3.527599277853615*^9}] }, Open ]], Cell[CellGroupData[{ Cell["", "SlideShowNavigationBar", CellTags->"SlideShowHeader"], Cell["\<\ So the thing to do now is to put together a function that solves an \ autonomous ODE specified by a function\ \>", "Text", CellChangeTimes->{{3.527598054242288*^9, 3.527598097493724*^9}}], Cell[BoxData[ RowBox[{ RowBox[{"asolve", "[", RowBox[{ "f_Function", ",", " ", "v0_", ",", " ", "h_", ",", " ", "n_", ",", " ", "opts___"}], "]"}], " ", ":=", " ", "\[IndentingNewLine]", RowBox[{"Module", "[", RowBox[{ RowBox[{"{", RowBox[{"citerate", ",", " ", "cstep"}], "}"}], ",", "\[IndentingNewLine]", RowBox[{ RowBox[{"cstep", " ", "=", " ", RowBox[{"Compile", "[", RowBox[{ RowBox[{"{", RowBox[{ RowBox[{"{", RowBox[{"hh", ",", " ", "_Real"}], "}"}], ",", RowBox[{"{", RowBox[{"v", ",", "_Real", ",", "1"}], "}"}]}], "}"}], ",", "\[IndentingNewLine]", RowBox[{"Module", "[", RowBox[{ RowBox[{"{", RowBox[{"k0", ",", "k1", ",", "k2", ",", "k3"}], "}"}], ",", "\[IndentingNewLine]", RowBox[{ RowBox[{"k0", " ", "=", " ", RowBox[{"hh", " ", RowBox[{"f", "[", "v", "]"}]}]}], ";", "\[IndentingNewLine]", RowBox[{"k1", "=", RowBox[{"hh", " ", RowBox[{"f", "[", RowBox[{"v", "+", "k0"}], "]"}]}]}], ";", "\[IndentingNewLine]", RowBox[{"v", " ", "+", " ", RowBox[{ RowBox[{"(", RowBox[{"k0", "+", "k1"}], ")"}], "/", "2"}]}]}]}], "]"}], ",", " ", "opts", ",", " ", RowBox[{"CompilationOptions", "\[Rule]", RowBox[{"\"\\"", "\[Rule]", "True"}]}]}], "]"}]}], ";", "\[IndentingNewLine]", RowBox[{"citerate", " ", "=", " ", RowBox[{"Compile", "[", RowBox[{ RowBox[{"{", RowBox[{ RowBox[{"{", RowBox[{"hh", ",", " ", "_Real"}], "}"}], ",", " ", RowBox[{"{", RowBox[{"nn", ",", " ", "_Integer"}], "}"}], ",", RowBox[{"{", RowBox[{"x0", ",", "_Real", ",", "1"}], "}"}]}], "}"}], ",", RowBox[{"Module", "[", RowBox[{ RowBox[{"{", RowBox[{"x", " ", "=", " ", "x0"}], "}"}], ",", " ", RowBox[{"Prepend", "[", RowBox[{ RowBox[{"Table", "[", RowBox[{ RowBox[{"x", " ", "=", " ", RowBox[{"cstep", "[", RowBox[{"hh", ",", "x"}], "]"}]}], ",", RowBox[{"{", "nn", "}"}]}], "]"}], ",", "x0"}], "]"}]}], "]"}], ",", " ", "opts", ",", " ", RowBox[{"CompilationOptions", "\[Rule]", RowBox[{"{", RowBox[{"\"\\"", "\[Rule]", "True"}], "}"}]}]}], "]"}]}], ";", "\[IndentingNewLine]", RowBox[{"citerate", "[", RowBox[{"h", ",", "n", ",", "v0"}], "]"}]}]}], "\[IndentingNewLine]", "]"}]}]], "Input", CellChangeTimes->{{3.527598104449051*^9, 3.527598149114253*^9}, { 3.527598230052177*^9, 3.527598311192319*^9}, {3.527598345085682*^9, 3.5275984137161922`*^9}, {3.52759844905188*^9, 3.5275986251545553`*^9}, 3.52759931512778*^9, 3.527599378716762*^9, {3.52759994763719*^9, 3.527599952113652*^9}}], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{"AbsoluteTiming", "[", RowBox[{ RowBox[{"solution", " ", "=", " ", RowBox[{"asolve", "[", RowBox[{"f", ",", "x0", ",", "h", ",", "n", ",", " ", RowBox[{"RuntimeOptions", "\[Rule]", "\"\\""}]}], "]"}]}], ";"}], "]"}]], "Input", CellChangeTimes->{{3.52759862950809*^9, 3.5275986565091763`*^9}, { 3.5275994406581287`*^9, 3.5275994763257637`*^9}, 3.527982719433221*^9}], Cell[BoxData[ RowBox[{"{", RowBox[{ "0.0320640000000000022217783168798632687`4.526617613130757", ",", "Null"}], "}"}]], "Output", CellChangeTimes->{3.5280380158326483`*^9}] }, Open ]], Cell["Has it got it correct?", "Text", CellChangeTimes->{{3.527599414580161*^9, 3.5275994184340467`*^9}}], Cell[BoxData[ RowBox[{"Graphics3D", "[", RowBox[{"Line", "[", "solution", "]"}], "]"}]], "Input"], Cell["Compare to the C compilation", "Text", CellChangeTimes->{{3.52759942802603*^9, 3.527599434713704*^9}}], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{"AbsoluteTiming", "[", RowBox[{ RowBox[{"solution", " ", "=", " ", RowBox[{"asolve", "[", RowBox[{"f", ",", "x0", ",", "h", ",", "20000", ",", " ", RowBox[{"CompilationTarget", "\[Rule]", "\"\\""}], ",", " ", RowBox[{"RuntimeOptions", "\[Rule]", "\"\\""}]}], "]"}]}], ";"}], "]"}]], "Input", CellChangeTimes->{{3.527599450750886*^9, 3.527599486765049*^9}}], Cell[BoxData[ RowBox[{"{", RowBox[{ "0.46244000000000001771027768882049713284`5.685655305794055", ",", "Null"}], "}"}]], "Output", CellChangeTimes->{3.5280380285416737`*^9}] }, Open ]], Cell["Doesn\[CloseCurlyQuote]t make sense to use C!!", "Text", CellChangeTimes->{{3.5280380460051613`*^9, 3.528038053122925*^9}}] }, Open ]], Cell[CellGroupData[{ Cell["", "SlideShowNavigationBar", CellTags->"SlideShowHeader"], Cell["Rossler Equation", "Text", CellChangeTimes->{{3.527599498834618*^9, 3.5275995193545113`*^9}, { 3.5275997117605886`*^9, 3.5275997144223423`*^9}}], Cell[BoxData[{ RowBox[{ RowBox[{"r", " ", "=", " ", RowBox[{"With", "[", RowBox[{ RowBox[{"{", RowBox[{ RowBox[{"a", " ", "=", " ", ".1"}], ",", " ", RowBox[{"b", " ", "=", " ", ".1"}], ",", " ", RowBox[{"c", " ", "=", " ", "14"}]}], "}"}], ",", RowBox[{"Function", "[", RowBox[{ RowBox[{"{", "v", "}"}], ",", " ", RowBox[{"Module", "[", RowBox[{ RowBox[{"{", RowBox[{"x", ",", "y", ",", "z"}], "}"}], ",", RowBox[{ RowBox[{ RowBox[{"{", RowBox[{"x", ",", "y", ",", "z"}], "}"}], " ", "=", " ", "v"}], ";", " ", RowBox[{"{", RowBox[{ RowBox[{ RowBox[{"-", "y"}], "-", "z"}], ",", RowBox[{"x", " ", "+", " ", RowBox[{"a", " ", "y"}]}], ",", " ", RowBox[{"b", " ", "+", " ", RowBox[{"z", RowBox[{"(", RowBox[{"x", " ", "-", " ", "c"}], ")"}]}]}]}], "}"}]}]}], "]"}]}], "]"}]}], "]"}]}], ";"}], "\[IndentingNewLine]", RowBox[{ RowBox[{"r0", " ", "=", " ", RowBox[{"{", RowBox[{"0.", ",", "0.", ",", "0."}], "}"}]}], ";"}]}], "Input", CellChangeTimes->{{3.527599761713593*^9, 3.527599841551673*^9}, { 3.527599919925926*^9, 3.527599926428288*^9}, {3.527599968687592*^9, 3.5275999991424303`*^9}, {3.527600065314601*^9, 3.527600087319718*^9}}], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{"AbsoluteTiming", "[", RowBox[{ RowBox[{"solution", " ", "=", " ", RowBox[{"asolve", "[", RowBox[{"r", ",", "x0", ",", "h", ",", "n", ",", " ", RowBox[{"RuntimeOptions", "\[Rule]", "\"\\""}]}], "]"}]}], ";"}], "]"}]], "Input", CellChangeTimes->{{3.527599612071772*^9, 3.527599673792186*^9}, { 3.5275998500659122`*^9, 3.5275999325189333`*^9}, {3.52760000968607*^9, 3.527600012613668*^9}, {3.527600139377872*^9, 3.52760014548905*^9}, 3.527982758049095*^9}], Cell[BoxData[ RowBox[{"{", RowBox[{ "0.03302999999999999686250973240930761676`4.539508486971038", ",", "Null"}], "}"}]], "Output", CellChangeTimes->{3.5280380654211483`*^9}] }, Open ]], Cell[BoxData[ RowBox[{"Graphics3D", "[", RowBox[{"Line", "[", "solution", "]"}], "]"}]], "Input", CellChangeTimes->{{3.5276001165596657`*^9, 3.527600131305759*^9}, 3.528038074366177*^9}] }, Open ]], Cell[CellGroupData[{ Cell["", "SlideShowNavigationBar", CellTags->"SlideShowHeader"], Cell[CellGroupData[{ Cell["Example: Symplectic Euler Method", "Section", CellChangeTimes->{ 3.483202458955147*^9, {3.51430857274755*^9, 3.514308578875259*^9}, { 3.527438438619381*^9, 3.5274384676537533`*^9}, {3.527439561774901*^9, 3.527439564708774*^9}, {3.527439854792202*^9, 3.527439894315713*^9}, { 3.527442762739447*^9, 3.527442765279973*^9}, {3.5274504756644487`*^9, 3.5274504901872377`*^9}}], Cell["\<\ This uses n steps of size h of the symplectic Euler method starting with init \ to approximate a solution of the pendulum equation.\ \>", "Text", CellChangeTimes->{{3.527439902883762*^9, 3.527439926483832*^9}, { 3.527440582642486*^9, 3.527440596714466*^9}, {3.527440630316432*^9, 3.5274406697868032`*^9}, {3.527443591638702*^9, 3.527443605209263*^9}, { 3.527588352660939*^9, 3.527588481046389*^9}}], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{"psolve", " ", "=", " ", RowBox[{"Function", "[", RowBox[{ RowBox[{"{", RowBox[{"h", ",", " ", "n", ",", " ", "init"}], "}"}], ",", " ", RowBox[{"Module", "[", RowBox[{ RowBox[{"{", RowBox[{"x", ",", " ", "y"}], "}"}], ",", " ", RowBox[{ RowBox[{ RowBox[{"{", RowBox[{"x", ",", "y"}], "}"}], " ", "=", " ", "init"}], ";", RowBox[{"Table", "[", RowBox[{ RowBox[{ RowBox[{"x", " ", "=", " ", RowBox[{"Mod", "[", RowBox[{ RowBox[{"x", " ", "+", " ", RowBox[{"h", " ", "y"}]}], ",", " ", RowBox[{"2", " ", "\[Pi]"}]}], "]"}]}], ";", RowBox[{"y", " ", "=", " ", RowBox[{"y", " ", "+", " ", RowBox[{"h", " ", RowBox[{"Sin", "[", "x", "]"}]}]}]}], ";", RowBox[{"{", RowBox[{"x", ",", "y"}], "}"}]}], ",", RowBox[{"{", "n", "}"}]}], "]"}]}]}], "]"}]}], "]"}]}]], "Input", CellChangeTimes->{{3.527439953071615*^9, 3.5274400997164707`*^9}, { 3.527440415443226*^9, 3.527440576549185*^9}, {3.527440687363759*^9, 3.527440698624576*^9}, {3.52744357963319*^9, 3.527443580501453*^9}, { 3.527587314023181*^9, 3.527587314811778*^9}, {3.527587377632621*^9, 3.527587383126977*^9}, {3.527588181684936*^9, 3.52758820117305*^9}, { 3.527588325962134*^9, 3.527588331368648*^9}}], Cell[BoxData[ RowBox[{"Function", "[", RowBox[{ RowBox[{"{", RowBox[{"h", ",", "n", ",", "init"}], "}"}], ",", RowBox[{"Module", "[", RowBox[{ RowBox[{"{", RowBox[{"x", ",", "y"}], "}"}], ",", RowBox[{ RowBox[{ RowBox[{"{", RowBox[{"x", ",", "y"}], "}"}], "=", "init"}], ";", RowBox[{"Table", "[", RowBox[{ RowBox[{ RowBox[{"x", "=", RowBox[{"Mod", "[", RowBox[{ RowBox[{"x", "+", RowBox[{"h", " ", "y"}]}], ",", RowBox[{"2", " ", "\[Pi]"}]}], "]"}]}], ";", RowBox[{"y", "=", RowBox[{"y", "+", RowBox[{"h", " ", RowBox[{"Sin", "[", "x", "]"}]}]}]}], ";", RowBox[{"{", RowBox[{"x", ",", "y"}], "}"}]}], ",", RowBox[{"{", "n", "}"}]}], "]"}]}]}], "]"}]}], "]"}]], "Output", CellChangeTimes->{3.52803655163396*^9, 3.528038087922963*^9}] }, Open ]], Cell["Run the function ", "Text", CellChangeTimes->{{3.527441814676857*^9, 3.527441819939424*^9}}], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{"AbsoluteTiming", "[", RowBox[{ RowBox[{"s1", " ", "=", " ", RowBox[{"psolve", "[", RowBox[{".00025", ",", "100000", ",", RowBox[{"{", RowBox[{".001", ",", "0"}], "}"}]}], "]"}]}], ";"}], "]"}]], "Input", CellChangeTimes->{{3.527440745050757*^9, 3.5274407843681583`*^9}, { 3.527440870104909*^9, 3.5274409120095387`*^9}, {3.527441415918221*^9, 3.527441445482932*^9}, {3.5274414757251987`*^9, 3.5274415849669228`*^9}, 3.5274416275601053`*^9, {3.5275882318293543`*^9, 3.5275882327538548`*^9}}], Cell[BoxData[ RowBox[{"{", RowBox[{ "1.05013099999999992562038642063271254301`6.04184339237662", ",", "Null"}], "}"}]], "Output", CellChangeTimes->{3.528036567510673*^9, 3.528038089129718*^9}] }, Open ]], Cell[BoxData[ RowBox[{"ListPlot", "[", RowBox[{"s1", ",", " ", RowBox[{"PlotRange", "\[Rule]", "All"}]}], "]"}]], "Input", CellChangeTimes->{{3.527440706217113*^9, 3.527440725772852*^9}, { 3.527440793320293*^9, 3.5274407934528093`*^9}, {3.527441454388096*^9, 3.527441459038904*^9}}] }, Open ]] }, Open ]], Cell[CellGroupData[{ Cell["", "SlideShowNavigationBar", CellTags->"SlideShowHeader"], Cell[TextData[{ "Just with ", StyleBox["Mathematica", FontSlant->"Italic"], " this is not too terribly slow, though it is not really fast either -- you \ can do better" }], "Text", CellChangeTimes->{{3.527441760890491*^9, 3.527441791690175*^9}}], Cell["\<\ All you have to do to compile it is to replace Function with Compile and give \ types for the arguments ...\ \>", "Text", CellChangeTimes->{{3.52744200751009*^9, 3.527442036595766*^9}}], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{"vmpsolve", " ", "=", " ", RowBox[{"Compile", "[", RowBox[{ RowBox[{"{", RowBox[{ RowBox[{"{", RowBox[{"h", ",", "_Real"}], "}"}], ",", RowBox[{"{", " ", RowBox[{"n", ",", "_Integer"}], "}"}], ",", " ", RowBox[{"{", RowBox[{"init", ",", " ", "_Real", ",", " ", "1"}], "}"}]}], "}"}], ",", " ", RowBox[{"Module", "[", RowBox[{ RowBox[{"{", RowBox[{"x", ",", " ", "y"}], "}"}], ",", " ", RowBox[{ RowBox[{ RowBox[{"{", RowBox[{"x", ",", "y"}], "}"}], " ", "=", " ", "init"}], ";", RowBox[{"Table", "[", RowBox[{ RowBox[{ RowBox[{"x", " ", "=", " ", RowBox[{"Mod", "[", RowBox[{ RowBox[{"x", " ", "+", " ", RowBox[{"h", " ", "y"}]}], ",", " ", RowBox[{"2", " ", "\[Pi]"}]}], "]"}]}], ";", RowBox[{"y", " ", "=", " ", RowBox[{"y", " ", "+", " ", RowBox[{"h", " ", RowBox[{"Sin", "[", "x", "]"}]}]}]}], ";", RowBox[{"{", RowBox[{"x", ",", "y"}], "}"}]}], ",", RowBox[{"{", "n", "}"}]}], "]"}]}]}], "]"}]}], "]"}]}]], "Input", CellChangeTimes->{{3.527440940198431*^9, 3.5274410195940437`*^9}, { 3.527441108851099*^9, 3.52744111025004*^9}, {3.527587398552127*^9, 3.527587404527165*^9}, {3.527588535564167*^9, 3.527588551066243*^9}}], Cell[BoxData[ TagBox[ RowBox[{"CompiledFunction", "[", RowBox[{ RowBox[{"{", RowBox[{"h", ",", "n", ",", "init"}], "}"}], ",", RowBox[{"Module", "[", RowBox[{ RowBox[{"{", RowBox[{"x", ",", "y"}], "}"}], ",", RowBox[{ RowBox[{ RowBox[{"{", RowBox[{"x", ",", "y"}], "}"}], "=", "init"}], ";", RowBox[{"Table", "[", RowBox[{ RowBox[{ RowBox[{"x", "=", RowBox[{"Mod", "[", RowBox[{ RowBox[{"x", "+", RowBox[{"h", " ", "y"}]}], ",", RowBox[{"2", " ", "\[Pi]"}]}], "]"}]}], ";", RowBox[{"y", "=", RowBox[{"y", "+", RowBox[{"h", " ", RowBox[{"Sin", "[", "x", "]"}]}]}]}], ";", RowBox[{"{", RowBox[{"x", ",", "y"}], "}"}]}], ",", RowBox[{"{", "n", "}"}]}], "]"}]}]}], "]"}], ",", "\<\"-CompiledCode-\"\>"}], "]"}], False, Editable->False]], "Output", CellChangeTimes->{3.528036577301341*^9, 3.5280381007160873`*^9}] }, Open ]], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{"AbsoluteTiming", "[", RowBox[{ RowBox[{"s2", " ", "=", " ", RowBox[{"vmpsolve", "[", RowBox[{".00025", ",", "100000", ",", RowBox[{"{", RowBox[{"0.001", ",", "0"}], "}"}]}], "]"}]}], ";"}], "]"}]], "Input", CellChangeTimes->{{3.527440745050757*^9, 3.5274407843681583`*^9}, { 3.527440870104909*^9, 3.5274409120095387`*^9}, {3.527441036582954*^9, 3.527441066540344*^9}, {3.5274411153476133`*^9, 3.527441117522135*^9}, 3.5274417040731297`*^9, {3.527588580579179*^9, 3.5275885814628687`*^9}}], Cell[BoxData[ RowBox[{"{", RowBox[{ "0.02558300000000000157251989207907172386`4.428551384112297", ",", "Null"}], "}"}]], "Output", CellChangeTimes->{3.528036579359089*^9, 3.5280381009686193`*^9}] }, Open ]] }, Open ]], Cell[CellGroupData[{ Cell["", "SlideShowNavigationBar", CellTags->"SlideShowHeader"], Cell["Not much work for a big jump in speed.", "Text", CellChangeTimes->{{3.527442042420233*^9, 3.527442053620502*^9}}], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{"Timing", "[", RowBox[{"cpsolve", " ", "=", " ", RowBox[{"Compile", "[", RowBox[{ RowBox[{"{", RowBox[{ RowBox[{"{", RowBox[{"h", ",", "_Real"}], "}"}], ",", RowBox[{"{", " ", RowBox[{"n", ",", "_Integer"}], "}"}], ",", " ", RowBox[{"{", RowBox[{"init", ",", " ", "_Real", ",", " ", "1"}], "}"}]}], "}"}], ",", " ", RowBox[{"Module", "[", RowBox[{ RowBox[{"{", RowBox[{"x", ",", " ", "y"}], "}"}], ",", " ", RowBox[{ RowBox[{ RowBox[{"{", RowBox[{"x", ",", "y"}], "}"}], " ", "=", " ", "init"}], ";", RowBox[{"Table", "[", RowBox[{ RowBox[{ RowBox[{"x", " ", "=", " ", RowBox[{"Mod", "[", RowBox[{ RowBox[{"x", " ", "+", " ", RowBox[{"h", " ", "y"}]}], ",", " ", RowBox[{"2", "\[Pi]"}]}], "]"}]}], ";", RowBox[{"y", " ", "=", " ", RowBox[{"y", " ", "+", " ", RowBox[{"h", " ", RowBox[{"Sin", "[", "x", "]"}]}]}]}], ";", RowBox[{"{", RowBox[{"x", ",", "y"}], "}"}]}], ",", RowBox[{"{", "n", "}"}]}], "]"}]}]}], "]"}], ",", " ", RowBox[{"CompilationTarget", "\[Rule]", "\"\\""}]}], "]"}]}], "]"}]], "Input", CellChangeTimes->{{3.527440940198431*^9, 3.5274410195940437`*^9}, { 3.527441108851099*^9, 3.52744111025004*^9}, {3.5274411555190687`*^9, 3.527441202881013*^9}, {3.527441672138002*^9, 3.527441678995041*^9}, { 3.527441731665064*^9, 3.52744173262992*^9}, {3.52758749762405*^9, 3.527587501663127*^9}, {3.5275885634926453`*^9, 3.527588571867725*^9}, { 3.527588667640973*^9, 3.5275886679114227`*^9}}], Cell[BoxData[ RowBox[{"{", RowBox[{"0.04655700000000000116084919454806367867`4.688584901128031", ",", TagBox[ RowBox[{"CompiledFunction", "[", RowBox[{ RowBox[{"{", RowBox[{"h", ",", "n", ",", "init"}], "}"}], ",", RowBox[{"Module", "[", RowBox[{ RowBox[{"{", RowBox[{"x", ",", "y"}], "}"}], ",", RowBox[{ RowBox[{ RowBox[{"{", RowBox[{"x", ",", "y"}], "}"}], "=", "init"}], ";", RowBox[{"Table", "[", RowBox[{ RowBox[{ RowBox[{"x", "=", RowBox[{"Mod", "[", RowBox[{ RowBox[{"x", "+", RowBox[{"h", " ", "y"}]}], ",", RowBox[{"2", " ", "\[Pi]"}]}], "]"}]}], ";", RowBox[{"y", "=", RowBox[{"y", "+", RowBox[{"h", " ", RowBox[{"Sin", "[", "x", "]"}]}]}]}], ";", RowBox[{"{", RowBox[{"x", ",", "y"}], "}"}]}], ",", RowBox[{"{", "n", "}"}]}], "]"}]}]}], "]"}], ",", "\<\"-CompiledCode-\"\>"}], "]"}], False, Editable->False]}], "}"}]], "Output", CellChangeTimes->{3.52803659072753*^9, 3.528038106637123*^9}] }, Open ]], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{"AbsoluteTiming", "[", RowBox[{ RowBox[{"s3", " ", "=", " ", RowBox[{"cpsolve", "[", RowBox[{".00025", ",", "100000", ",", RowBox[{"{", RowBox[{"0.001", ",", "0"}], "}"}]}], "]"}]}], ";"}], "]"}]], "Input", CellChangeTimes->{{3.527441219905634*^9, 3.5274412228661423`*^9}, 3.527441714467187*^9, {3.527588586913355*^9, 3.5275885876971483`*^9}}], Cell[BoxData[ RowBox[{"{", RowBox[{ "0.00919599999999999931366012617672822671`3.9841988758768654", ",", "Null"}], "}"}]], "Output", CellChangeTimes->{3.528036593060622*^9, 3.528038106792292*^9}] }, Open ]], Cell["Now its fast enough to be somewhat interactive", "Text", CellChangeTimes->{{3.5274507390916033`*^9, 3.527450754088825*^9}}], Cell[BoxData[ RowBox[{"Manipulate", "[", RowBox[{ RowBox[{"Show", "[", RowBox[{"Graphics", "[", RowBox[{ RowBox[{"{", RowBox[{ RowBox[{"PointSize", "[", "0", "]"}], ",", RowBox[{"Point", "[", RowBox[{"cpsolve", "[", RowBox[{ RowBox[{"10.", "^", "lh"}], ",", " ", "100000", ",", " ", "init"}], "]"}], "]"}]}], "}"}], ",", " ", RowBox[{"PlotRange", "\[Rule]", RowBox[{"{", RowBox[{ RowBox[{"{", RowBox[{"0", ",", RowBox[{"2", "\[Pi]"}]}], "}"}], ",", RowBox[{"{", RowBox[{ RowBox[{"-", "3"}], ",", "3"}], "}"}]}], "}"}]}], ",", " ", RowBox[{"Axes", "\[Rule]", "True"}]}], "]"}], "]"}], ",", RowBox[{"{", RowBox[{ RowBox[{"{", RowBox[{"init", ",", RowBox[{"{", RowBox[{"0.001", ",", "0"}], "}"}]}], "}"}], ",", "Locator"}], "}"}], ",", RowBox[{"{", RowBox[{ RowBox[{"{", RowBox[{"lh", ",", "0"}], "}"}], ",", RowBox[{"-", "5"}], ",", "0"}], "}"}]}], "]"}]], "Input", CellChangeTimes->{{3.5274467768775*^9, 3.527446968295431*^9}, 3.527447030157131*^9, {3.5274471321453323`*^9, 3.527447136419091*^9}, { 3.527587491589847*^9, 3.5275874918656263`*^9}, {3.5275885977236032`*^9, 3.52758861858179*^9}, {3.527588652286695*^9, 3.527588655493352*^9}, { 3.528038133880066*^9, 3.528038138921802*^9}}] }, Open ]], Cell[CellGroupData[{ Cell["", "SlideShowNavigationBar", CellTags->"SlideShowHeader"], Cell["\<\ It\[CloseCurlyQuote]ll be nice to make an image with a bunch of initial \ conditions\ \>", "Text", CellChangeTimes->{{3.527448564547265*^9, 3.527448579649437*^9}, { 3.527448629832287*^9, 3.527448641582678*^9}, {3.5274502263004436`*^9, 3.527450244202506*^9}, {3.527588831565674*^9, 3.527588840397574*^9}, 3.527982903326165*^9}], Cell[BoxData[{ RowBox[{ RowBox[{"init", " ", "=", " ", RowBox[{"Table", "[", RowBox[{ RowBox[{"{", RowBox[{"x", ",", "0."}], "}"}], ",", RowBox[{"{", RowBox[{"x", ",", " ", "0.01", ",", "1", ",", "0.01"}], "}"}]}], "]"}]}], ";"}], "\[IndentingNewLine]", RowBox[{ RowBox[{"colors", " ", "=", " ", RowBox[{"Map", "[", RowBox[{ RowBox[{"ColorData", "[", "\"\\"", "]"}], ",", RowBox[{ RowBox[{"Range", "[", RowBox[{"Length", "[", "init", "]"}], "]"}], "/", RowBox[{"Length", "[", "init", "]"}]}]}], "]"}]}], ";"}], "\[IndentingNewLine]", RowBox[{ RowBox[{"np", " ", "=", RowBox[{"10000", RowBox[{"Ceiling", "[", RowBox[{"Table", "[", RowBox[{ RowBox[{"1", "/", RowBox[{"(", RowBox[{"Pi", "-", "x"}], ")"}]}], ",", RowBox[{"{", RowBox[{"x", ",", "0.01", ",", "1", ",", "0.01"}], "}"}]}], "]"}], "]"}]}]}], ";"}]}], "Input", CellChangeTimes->{{3.5274487252857113`*^9, 3.52744884285109*^9}, { 3.5274495609643517`*^9, 3.5274495927455873`*^9}, {3.527449756058563*^9, 3.5274497605447407`*^9}, {3.5274498466799994`*^9, 3.527449850697628*^9}, { 3.527450066002077*^9, 3.527450166906674*^9}, {3.527588759801865*^9, 3.527588780493589*^9}, 3.527588811613188*^9, 3.52758885280317*^9, { 3.52758893682661*^9, 3.527588940785097*^9}, {3.527588976663554*^9, 3.527588981466804*^9}, {3.5275890600819473`*^9, 3.527589152703959*^9}}], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{"AbsoluteTiming", "[", RowBox[{ RowBox[{"data", " ", "=", " ", RowBox[{"MapThread", "[", RowBox[{ RowBox[{ RowBox[{"cpsolve", "[", RowBox[{"1", ",", "#1", ",", "#2"}], "]"}], "&"}], ",", " ", RowBox[{"{", RowBox[{"np", ",", " ", "init"}], "}"}]}], "]"}]}], ";"}], "]"}]], "Input", CellChangeTimes->{{3.527450788155061*^9, 3.5274508524391747`*^9}}], Cell[BoxData[ RowBox[{"{", RowBox[{ "0.10502200000000000423838741880899760872`5.041880197852384", ",", "Null"}], "}"}]], "Output", CellChangeTimes->{3.5280366441145163`*^9, 3.5280381551068087`*^9}] }, Open ]], Cell["\<\ It is possible to make the computation faster at the expense of some overhead:\ \>", "Text", CellChangeTimes->{{3.52745096212398*^9, 3.5274509683456593`*^9}, { 3.527587865772196*^9, 3.52758793462929*^9}, {3.527587979533144*^9, 3.527587996348774*^9}, {3.527588074127075*^9, 3.527588078180402*^9}, 3.527588827733575*^9, {3.527589263394904*^9, 3.527589277991562*^9}}], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{"Timing", "[", RowBox[{"lsolve", " ", "=", " ", RowBox[{"Compile", "[", RowBox[{ RowBox[{"{", RowBox[{ RowBox[{"{", RowBox[{"h", ",", "_Real"}], "}"}], ",", RowBox[{"{", " ", RowBox[{"n", ",", "_Integer"}], "}"}], ",", " ", RowBox[{"{", RowBox[{"init", ",", " ", "_Real", ",", " ", "1"}], "}"}]}], "}"}], ",", " ", RowBox[{"Module", "[", RowBox[{ RowBox[{"{", RowBox[{"x", ",", " ", "y"}], "}"}], ",", " ", RowBox[{ RowBox[{ RowBox[{"{", RowBox[{"x", ",", "y"}], "}"}], " ", "=", " ", "init"}], ";", RowBox[{"Table", "[", RowBox[{ RowBox[{ RowBox[{"x", " ", "=", " ", RowBox[{"Mod", "[", RowBox[{ RowBox[{"x", " ", "+", " ", RowBox[{"h", " ", "y"}]}], ",", " ", RowBox[{"2", " ", "Pi"}]}], "]"}]}], ";", RowBox[{"y", " ", "=", " ", RowBox[{"y", " ", "+", " ", RowBox[{"h", " ", RowBox[{"Sin", "[", "x", "]"}]}]}]}], ";", RowBox[{"{", RowBox[{"x", ",", "y"}], "}"}]}], ",", RowBox[{"{", "n", "}"}]}], "]"}]}]}], "]"}], ",", " ", RowBox[{"CompilationTarget", "\[Rule]", "\"\\""}], ",", " ", RowBox[{"RuntimeAttributes", "\[Rule]", "Listable"}]}], "]"}]}], "]"}]], "Input", CellChangeTimes->{{3.527448675946848*^9, 3.5274487180995626`*^9}, { 3.527450972657653*^9, 3.527450999425126*^9}, {3.527587604155044*^9, 3.5275876086483593`*^9}, {3.5275878084116163`*^9, 3.527587856298205*^9}, { 3.527588082635293*^9, 3.527588089002761*^9}, {3.527588744843318*^9, 3.527588749763482*^9}, {3.527588864236979*^9, 3.527588864500684*^9}}], Cell[BoxData[ RowBox[{"{", RowBox[{ "0.04192099999999999992983390484369010665`4.6430315472100165", ",", TagBox[ RowBox[{"CompiledFunction", "[", RowBox[{ RowBox[{"{", RowBox[{"h", ",", "n", ",", "init"}], "}"}], ",", RowBox[{"Module", "[", RowBox[{ RowBox[{"{", RowBox[{"x", ",", "y"}], "}"}], ",", RowBox[{ RowBox[{ RowBox[{"{", RowBox[{"x", ",", "y"}], "}"}], "=", "init"}], ";", RowBox[{"Table", "[", RowBox[{ RowBox[{ RowBox[{"x", "=", RowBox[{"Mod", "[", RowBox[{ RowBox[{"x", "+", RowBox[{"h", " ", "y"}]}], ",", RowBox[{"2", " ", "\[Pi]"}]}], "]"}]}], ";", RowBox[{"y", "=", RowBox[{"y", "+", RowBox[{"h", " ", RowBox[{"Sin", "[", "x", "]"}]}]}]}], ";", RowBox[{"{", RowBox[{"x", ",", "y"}], "}"}]}], ",", RowBox[{"{", "n", "}"}]}], "]"}]}]}], "]"}], ",", "\<\"-CompiledCode-\"\>"}], "]"}], False, Editable->False]}], "}"}]], "Output", CellChangeTimes->{3.5280366645841923`*^9, 3.528038155223724*^9}] }, Open ]], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{"AbsoluteTiming", "[", RowBox[{ RowBox[{"data", "=", RowBox[{"lsolve", "[", RowBox[{"1", ",", " ", "np", ",", " ", "init"}], "]"}]}], ";"}], "]"}]], "Input", CellChangeTimes->{{3.52744884840419*^9, 3.527448890243679*^9}, { 3.527449768446515*^9, 3.527449773103619*^9}, {3.527449907876737*^9, 3.527449925077529*^9}, {3.527449980848566*^9, 3.527449983464327*^9}, { 3.527450171289027*^9, 3.527450171545292*^9}, {3.527450862268034*^9, 3.5274508838741293`*^9}}], Cell[BoxData[ RowBox[{"{", RowBox[{ "0.05812300000000000105293551655449846294`4.784947935454492", ",", "Null"}], "}"}]], "Output", CellChangeTimes->{3.5280366755622787`*^9, 3.528038155294382*^9}] }, Open ]], Cell["Ans now a nice image:", "Text", CellChangeTimes->{{3.527451056321661*^9, 3.5274510633378487`*^9}, { 3.527600221785534*^9, 3.5276002222245502`*^9}}], Cell[BoxData[ RowBox[{"Show", "[", RowBox[{ RowBox[{"Graphics", "[", RowBox[{"{", "\[IndentingNewLine]", RowBox[{ RowBox[{"PointSize", "[", "0", "]"}], ",", RowBox[{"MapThread", "[", RowBox[{ RowBox[{ RowBox[{"{", RowBox[{"#1", ",", RowBox[{"Point", "[", "#2", "]"}]}], "}"}], "&"}], ",", " ", RowBox[{"{", RowBox[{"colors", ",", " ", "data"}], "}"}]}], "]"}]}], "}"}], "]"}], ",", " ", RowBox[{"PlotRange", "\[Rule]", RowBox[{"{", RowBox[{ RowBox[{"{", RowBox[{"0", ",", RowBox[{"2", "\[Pi]"}]}], "}"}], ",", RowBox[{"{", RowBox[{ RowBox[{"-", "3"}], ",", "3"}], "}"}]}], "}"}]}], ",", " ", RowBox[{"Axes", "\[Rule]", "True"}]}], "]"}]], "Input", CellChangeTimes->{{3.5274488978961067`*^9, 3.527448926911551*^9}, { 3.5274489597668657`*^9, 3.527448970057522*^9}, {3.527449114273041*^9, 3.5274491341016903`*^9}, {3.527449270846272*^9, 3.527449283593561*^9}, { 3.527449453085623*^9, 3.5274494864899178`*^9}, 3.527588886133278*^9}] }, Open ]], Cell[CellGroupData[{ Cell["", "SlideShowNavigationBar", CellTags->"SlideShowHeader"], Cell[CellGroupData[{ Cell["Summary", "Section", CellChangeTimes->{ 3.483202458955147*^9, {3.51430857274755*^9, 3.514308578875259*^9}, { 3.527591914558612*^9, 3.52759191561163*^9}}], Cell[TextData[{ "Effective use of the ", StyleBox["Mathematica", FontSlant->"Italic"], " compiler and code generation can speed up calculations tremendously." }], "Text", CellChangeTimes->{{3.527592081617165*^9, 3.527592113482985*^9}, { 3.527592213698515*^9, 3.527592214263172*^9}}], Cell["Some things to consider are:", "Text", CellChangeTimes->{{3.5275922298216753`*^9, 3.527592267113269*^9}}], Cell[CellGroupData[{ Cell["Be aware of types", "Item", CellChangeTimes->{{3.5275922812146683`*^9, 3.5275922820770693`*^9}}], Cell["\<\ Use CompiledFunctionTools and PrintCompile to see what a CompiledFunction is \ doing\ \>", "Item", CellChangeTimes->{{3.527592291089828*^9, 3.527592303540798*^9}, { 3.527592352509157*^9, 3.5275923525144453`*^9}}], Cell["\<\ Speed things up. Here are things to try:\ \>", "Item", CellChangeTimes->{3.527592303795127*^9}], Cell[CellGroupData[{ Cell[TextData[{ "Try to avoid ", StyleBox["Mathematica", FontSlant->"Italic"], " evaluations" }], "Subitem", CellChangeTimes->{{3.527592323110897*^9, 3.527592324293597*^9}}], Cell["Check that types are as consistent as possible", "Subitem", CellChangeTimes->{{3.5275923306464777`*^9, 3.527592339276628*^9}}], Cell["\<\ If you want to run many instances think about using \ RuntimeAttributes->Listable possibly with Parallelization->True\ \>", "Subitem", CellChangeTimes->{{3.52759234012393*^9, 3.5275923477953997`*^9}}], Cell["\<\ If you expect to use the function many times, try CompilationTarget->\ \[CloseCurlyDoubleQuote]C\[CloseCurlyDoubleQuote]\ \>", "Subitem", CellChangeTimes->{3.527592348028419*^9}] }, Open ]], Cell["\<\ Here is what I think is the most important thing of all: For most \ computations, you\[CloseCurlyQuote]ll have far better success in using the \ compiler to speed up parts of the computation rather than trying to use \ Compile to generate one function that does it all.\ \>", "Item", CellChangeTimes->{{3.527592371559371*^9, 3.527592373395837*^9}}], Cell[TextData[{ "For lots more information, go to the ", ButtonBox["The ", BaseStyle->"Link", ButtonData->"paclet:Compile/tutorial/Overview"], StyleBox[ButtonBox["Mathematica", BaseStyle->"Link", ButtonData->"paclet:Compile/tutorial/Overview"], FontSlant->"Italic"], ButtonBox[" Compiler User Guide", BaseStyle->"Link", ButtonData->"paclet:Compile/tutorial/Overview"] }], "Item", CellChangeTimes->{3.527592381215692*^9}] }, Open ]] }, Open ]] }, Open ]] }, AutoGeneratedPackage->None, ScreenStyleEnvironment->"SlideShow", WindowSize->{1400, 915}, WindowMargins->{{0, Automatic}, {Automatic, 0}}, PrintingCopies->1, PrintingPageRange->{1, Automatic}, ShowSelection->True, CellContext->Notebook, Magnification:>FEPrivate`If[ FEPrivate`Equal[FEPrivate`$VersionNumber, 6.], 1.5, 1.5 Inherited], FrontEndVersion->"8.0 for Mac OS X x86 (32-bit, 64-bit Kernel) (October 5, \ 2011)", StyleDefinitions->Notebook[{ Cell[ StyleData[StyleDefinitions -> "Default.nb"]], Cell[ CellGroupData[{ Cell["Style Environment Names", "Section"], Cell[ StyleData[All, "Condensed"], MenuSortingValue -> None], Cell[ StyleData[All, "SlideShow"], DockedCells -> { FEPrivate`FrontEndResource["FEExpressions", "SlideshowToolbar"], Cell[ BoxData[ GraphicsBox[ TagBox[ RasterBox[CompressedData[" 1:eJzt3U9oXGe65/HAgEBSIVllV1UQjkEkyGAnYNyy2w43ThzjONyOO3YTbDqI 65tO0rG5gY7s0Ol0B4duQRbugAlO2pmFMY17Ydkh2Wnh3cVcr41hGBjMLGYx i6rFLGYxi4FhHp9H53mf854/daokOXL0/dxqR64657zv+5z36EL9/J4z85vf /eo3/+mpp556W/73r6NPPfXo5w4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAACwubWdNTlI4QErPvoRaU9aA/KjGGLHsm74o5VVyW9W XcaKLesfZIgW64xiuJ7U7OQQRys8lfkj5Hu73kNrZz2GHddEu7a12rHvvuva 7fUzULsbsP8AAAAAAAAAgDV39OjR559/XtMH//7BRP79vXv3yi47ZmbsW2LZ fX5+/pNPPjl79qzssm3btmgvbaLiK2U52tFy2g05QuGnsm++RX9Y62o0Ovmo OnPRkRYe2TvdbN4Y/HWx2dy6dascfOgd29mobue2be9NTfktrzab8o68H9Vn f/aA+aP5w150W8qOcijdUv70DVUcJH+c0+440WY6iqvZHhaOorD+hcWpQ7aX 41zKFlCOdmTr1joHlE+lOOdzJ0veiXouf17NblBxfNn3Ro26VfTquV27jpx6 61f/dk5e8sPufXNlZYx2FHOvHv7FO2d035+9fGh6+/bqfaUt2UWaqF//3Qd+ Lrvkr1B9f+6Vl6Xdvi/ZzC7k4XbURh/tWLmvDNAqUPjbRnev2boczVqPSlen ejpSf5DC8ygb/NPxN/Qk/vOZf5F2bb7l9+pbAf8a6EQDAAAAAAAAADaUdrt9 9+7da9euRSGFvv/w4UNN3/z7i4uL8r5sL+/Lp/pXcf/+ff3h1q1bzz//vA+S 5M1PPvmkIgc5evTow3JyQNlXjlC2gfRBepKPzLRv8/Pz2rT/6Pbt2/KR9FM+ KovGtALNylBG3j/fbD4Y/HWj2dyyZUtz2B19t3du23Zpaqpil4vN5jNTUzoK cWTrVv/pxMRERRFuuC1lR+mwVlI+8gc5n/SqrFDRcQo3llFcrBy4jNFGUVb/ fHH60mTwXmXB99dI8Wr2POrwveTURPPTOuZPq25p9e87qCOn3vrTP/5+5T/+ PXot/nBbPqoYjlxKv/q3c3+9s5zf952/XHx2drYwJZS/yl6yjewo29Q5BY9K 8Z//JrtYaBW9X/+l00mOMNyOel7qbC/Vk2FqVBoNcO7VwwM1Lcexs6Clk9fu fXOFk6GsdP4g0QbSn8JqyAkqHELNCthLDq6zkYgQAAAAAAAAAJ447Xb7q6++ un//vqYq9r30wYMHNXo7fvy4foVu2y8vL9+6dUuzLflZtvn4448709MTifn5 +fuJ6e3bNSOQY2o+WBHcaD54+PDhiZwtKc0Ho0+f27VLWteIMAry5AeNLJeW lqKmLR+8fPlyWaolA9EKSCsVoczQ+eD1yclGoyGtD7ejdWl/s3mnMhzU1/fJ Ejw9xVE+qN0oHKAub7QtXxwbs3LJR1ET+5Nsrs5xPmw0olBS+vZ9jVHISC2q K6x/VJy+ogyu4nW62SxMQ/ZXZouFPX9masrv8mFS//wklJpEm1WcKW/HzMy5 Ly9ZGCQ///KD9+UlP1jqt/DtN4Up3u59c4s/3LYs7Mznn8mOpy8sfHrjugVD /3zmX/Kl8CGXHLxOSmsh1wsHD0S/ZPR96cBHV7/W10LFK21OjqA7Sm8H2lHn s3a+bEd5x0dsO/fsiYK8uVderj5C9Dp08oTFmlY66flApTtx7oP89vLzr39/ wXorbekEkLPpT64NQfe1CtSsnsyKin8SAAAAAAAAAADYyNrttgZh+/bts+hB 3jx79qwuCVxcXPRRzo6ZGQ0ENQrU1XlRkCeH8tGb0F00Usx/mSzv+HxwS1YS yzRt/WAjiZaibTQifG7XLh8MnTx5UnND+fPZ2VkfrMgPt27d0vgv+si6pAGi tlgRyvy4+WAUIVW//pjUTU5HlA+Ojo7WzwdtMuTzwe+npsqWIubzQR2Cblkz HNSXLbiz1alRPlgxnPy5q16xGL2OjY83s8ljzXAw6rk4n32/NToaHTm/zFC2 8UUrI1eoLRv85Qfvb23LfqMN57X5tzUl1IV+Pt/ZvW/OPnrpxJvRjnJky8g0 lorieAu55CWt9A2PbLmf5YMWVOn70v/RRKOS/kLw+eDuAz8faEefD1bvKGWx EnWmp/08tHxwZGSkb9PWuj5Z0pdORl2/dLKx/gMGfyLeXfyzHurcl5fkrFln ZEv589DJEzaEA68fsyFYBWQa1K8e+SAAAAAAAAAAPInaydMDHz58ePbsWfuq XFy7dm15efny5cvyp//+WUM3DfKWlpbu3r1r4aB+Py9/ys+yo628k3csUqyZ D+qaGk/esXxQQ0N9U1u03W0Vkq6LlO7JzzY6H0DcunVLbx96/vz5/LfcunxS N6jOm2Qv2Vc2kI6NOh82Gj60Gkn4DewLdh8hvTg2lt8y0kgX30Whmzbkj3Bs fNxyty8mJnQg65cPPihfCleRD+ZDuu8mJ6XnhaPQ15XJSX9byKHzwagO95KO tUZHtd3ZsTEpWnU0GXWsov7yOjU+rtWTnvddQphfPGinryKO8QvHLODbkrNz z57FH25/euN6Z3racskdMzMaG8n7mirmg3h558znn+nxXzh4wGeaUT4oh5ID NisXcvp80CfLUT6Y70aeXg4+H2wU/UOCsh2jfLCwaL56WigphZ+HP3v5UM0j qGa63jnKB+UlTWypnMO+RA2XGsufb/zmX6MJYHVoJit8Hx356aflLOsqSGso 5INJutq3es1hn/UJAAAAAAAAAPjRabyljyDc4pbSaKKnKwRthV07faKfZoKy 1+XLl6NVJHpAXX7YmZ7Wr5Hr54NbSu6tJ+/Y/UWjb86j3bUnus5RutFoNKST 0tUtbvWi5oNLS0vy0f37931K0nH3XD1//nzffFCPpqmol88H84HF1uRxflE+ WOebef1afn923y8mJjSWst3lh9boqLyv4WAjDaHWLx98UHKX0Yp8cOe2bVE4 2MrmpzoKqaHfbDa506nOyeHywXb2kYj3kmNGp0l+ODU+7tt9b2rK5tjpGvWX o2nIKMfRj0KSVbSEsHBRpF88WD2u53btsuV71hNt0VIwjbNlzreefnqL+ycB v3jnjO6rK870avVJvaX/C8kqwk9vXPehnuWDv/vbFb0Z6UdXvy67nG1W9M0H bdK2KukQogNquers2HHpmD9NeVq9QydPaAZqv9OifLDiCPmm86WLaltRunw+ qNnluS8v2SWfnwCyvUwAOdH+5sktlw8OWj0AAAAAAAAAwBOn1WppHGbRm8Vt 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 az7Yzt5lVCqjpYvyQYtuXzrxZn6a5Y/pPyUfBAAAAAAAAABgNYbOB7+YmPiw 0ZB9K16n08c7Rkvn9HVpako2OJIEczeymZpFhI8nH+yU32XU8sFHmUtubeCD ZBfpf34UD9LFg5ayRfngnampvgU8nxRQRAGr7n4+qd7ppJLRp3oerQJyhIu1 6/8gXTxYdgPJNckHpWO2xCwKsKIt313885FTb9mzNYUtjjvz+Weak+bjIXln 7pWXLaLyY6kTcnVydxnVtYRRILUx88FO5RLC9c4HO7m7jGrpohJJfyzB1NuQ tkqexCpnX+aAf7gq+SAAAAAAAAAAAKsxdD5Y53UjXSSo6dulogV6ha8/Juvj ZMfHlg9qiLY/1xOfD2rqIX2rOYovJiZGRkb8Y+/O19vRvzT/EvuT5LTOLt9N TrZGRy2+0Qo0k2WDNRvVWLMweVmTfFDP1+59c/pwwE9vXH92draZW4u6Y2ZG QzR5yQZ2d1A5U5pSaUTYmZ72SynVkVNv2cF1LJZM1Qy5Otm7jBYGUmubD1bz +/bNByuWEObzwb4rWNvu3qT1S2d3GfUprZVIa6vnSP6UOjSTNDyaALoCVF5y QvUsd0rywZrVAwAAAAAAAAAA7fXMB6+nT8prJeSwdcI1v+buseWDnTRSiSI8 nw920tSj8E6k+WBxZGTEh3TtofJBPYKUQiPCO/2avp6Eg9GtQdtJpibvfNGv /vdcONgsWtPXXqN8UKu9c88eTYjk9c5fLh54/djPXj6kr1///oJ9dOjkCR/w adyp4ZcuT5ONbccjp96yVPHTG9e3tltWw0HzwXb2LqOPAql9c2ubD742//YL Bw9Y58tec6+8nF891zehK1xC6PPB3Qd+Xqf153btsjk8UOnsLqPyeuP9d32J bAOLXxe+/UbOXeEEOH1hYSL5NwNRPlizenLWChcnAgAAAAAAAACwOeXzwbKv /YfLB+3hfRZRvTg2dmVysnD7LyYmZsfGfDi1mnzQApGa+WAnjf/8OrsPG41o 6ZmOQvpZlrXJ6HQU+VhqiHzQ355UuvFMclfSwoWE301Onhoft1AyWvrn63+9 qP73svWvut9jNh+szokq6IienZ1dSJ5PV/j66OrXz+3aFY3IxnLg9WN+cV/0 +uUH71s46KtRP+TqpDnm6QsLfdcP+nlSZ+wWYtZ8+flcJx/0SwjltWNmxq5E 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 AGDT+H8AAAAAAAAAAAAANo3/D2zci8M= "], {{0, 90}, {2400, 0}}, {0, 255}, ColorFunction -> RGBColor], BoxForm`ImageTag[ "Byte", ColorSpace -> "RGB", Interleaving -> True], Selectable -> False], BaseStyle -> "ImageGraphics", ImageSize -> Magnification[1], ImageSizeRaw -> {2400, 90}, PlotRange -> {{0, 2400}, {0, 90}}]], "", CellMargins -> 0, CellChangeTimes -> {{3.516548605022827*^9, 3.516548633085456*^9}, { 3.516616961864057*^9, 3.516616982571135*^9}, 3.518187891728025*^9, {3.518199033657151*^9, 3.5181990340305967`*^9}}]}, CellMargins -> 0, CellBracketOptions -> { "Color" -> RGBColor[0.739193, 0.750317, 0.747173]}], Cell[ BoxData[ GraphicsBox[ TagBox[ RasterBox[CompressedData[" 1:eJzt3U9oXGe65/HAgEBSIVllV1UQjkEkyGAnYNyy2w43ThzjONyOO3YTbDqI 65tO0rG5gY7s0Ol0B4duQRbugAlO2pmFMY17Ydkh2Wnh3cVcr41hGBjMLGYx i6rFLGYxi4FhHp9H53mf854/daokOXL0/dxqR64657zv+5z36EL9/J4z85vf /eo3/+mpp556W/73r6NPPfXo5w4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAACwubWdNTlI4QErPvoRaU9aA/KjGGLHsm74o5VVyW9W XcaKLesfZIgW64xiuJ7U7OQQRys8lfkj5Hu73kNrZz2GHddEu7a12rHvvuva 7fUzULsbsP8AAAAAAAAAgDV39OjR559/XtMH//7BRP79vXv3yi47ZmbsW2LZ fX5+/pNPPjl79qzssm3btmgvbaLiK2U52tFy2g05QuGnsm++RX9Y62o0Ovmo OnPRkRYe2TvdbN4Y/HWx2dy6dascfOgd29mobue2be9NTfktrzab8o68H9Vn f/aA+aP5w150W8qOcijdUv70DVUcJH+c0+440WY6iqvZHhaOorD+hcWpQ7aX 41zKFlCOdmTr1joHlE+lOOdzJ0veiXouf17NblBxfNn3Ro26VfTquV27jpx6 61f/dk5e8sPufXNlZYx2FHOvHv7FO2d035+9fGh6+/bqfaUt2UWaqF//3Qd+ Lrvkr1B9f+6Vl6Xdvi/ZzC7k4XbURh/tWLmvDNAqUPjbRnev2boczVqPSlen ejpSf5DC8ygb/NPxN/Qk/vOZf5F2bb7l9+pbAf8a6EQDAAAAAAAAADaUdrt9 9+7da9euRSGFvv/w4UNN3/z7i4uL8r5sL+/Lp/pXcf/+ff3h1q1bzz//vA+S 5M1PPvmkIgc5evTow3JyQNlXjlC2gfRBepKPzLRv8/Pz2rT/6Pbt2/KR9FM+ KovGtALNylBG3j/fbD4Y/HWj2dyyZUtz2B19t3du23Zpaqpil4vN5jNTUzoK cWTrVv/pxMRERRFuuC1lR+mwVlI+8gc5n/SqrFDRcQo3llFcrBy4jNFGUVb/ fHH60mTwXmXB99dI8Wr2POrwveTURPPTOuZPq25p9e87qCOn3vrTP/5+5T/+ PXot/nBbPqoYjlxKv/q3c3+9s5zf952/XHx2drYwJZS/yl6yjewo29Q5BY9K 8Z//JrtYaBW9X/+l00mOMNyOel7qbC/Vk2FqVBoNcO7VwwM1Lcexs6Clk9fu fXOFk6GsdP4g0QbSn8JqyAkqHELNCthLDq6zkYgQAAAAAAAAAJ447Xb7q6++ un//vqYq9r30wYMHNXo7fvy4foVu2y8vL9+6dUuzLflZtvn4448709MTifn5 +fuJ6e3bNSOQY2o+WBHcaD54+PDhiZwtKc0Ho0+f27VLWteIMAry5AeNLJeW lqKmLR+8fPlyWaolA9EKSCsVoczQ+eD1yclGoyGtD7ejdWl/s3mnMhzU1/fJ Ejw9xVE+qN0oHKAub7QtXxwbs3LJR1ET+5Nsrs5xPmw0olBS+vZ9jVHISC2q K6x/VJy+ogyu4nW62SxMQ/ZXZouFPX9masrv8mFS//wklJpEm1WcKW/HzMy5 Ly9ZGCQ///KD9+UlP1jqt/DtN4Up3u59c4s/3LYs7Mznn8mOpy8sfHrjugVD /3zmX/Kl8CGXHLxOSmsh1wsHD0S/ZPR96cBHV7/W10LFK21OjqA7Sm8H2lHn s3a+bEd5x0dsO/fsiYK8uVderj5C9Dp08oTFmlY66flApTtx7oP89vLzr39/ wXorbekEkLPpT64NQfe1CtSsnsyKin8SAAAAAAAAAADYyNrttgZh+/bts+hB 3jx79qwuCVxcXPRRzo6ZGQ0ENQrU1XlRkCeH8tGb0F00Usx/mSzv+HxwS1YS yzRt/WAjiZaibTQifG7XLh8MnTx5UnND+fPZ2VkfrMgPt27d0vgv+si6pAGi tlgRyvy4+WAUIVW//pjUTU5HlA+Ojo7WzwdtMuTzwe+npsqWIubzQR2Cblkz HNSXLbiz1alRPlgxnPy5q16xGL2OjY83s8ljzXAw6rk4n32/NToaHTm/zFC2 8UUrI1eoLRv85Qfvb23LfqMN57X5tzUl1IV+Pt/ZvW/OPnrpxJvRjnJky8g0 lorieAu55CWt9A2PbLmf5YMWVOn70v/RRKOS/kLw+eDuAz8faEefD1bvKGWx EnWmp/08tHxwZGSkb9PWuj5Z0pdORl2/dLKx/gMGfyLeXfyzHurcl5fkrFln ZEv589DJEzaEA68fsyFYBWQa1K8e+SAAAAAAAAAAPInaydMDHz58ePbsWfuq XFy7dm15efny5cvyp//+WUM3DfKWlpbu3r1r4aB+Py9/ys+yo628k3csUqyZ D+qaGk/esXxQQ0N9U1u03W0Vkq6LlO7JzzY6H0DcunVLbx96/vz5/LfcunxS N6jOm2Qv2Vc2kI6NOh82Gj60Gkn4DewLdh8hvTg2lt8y0kgX30Whmzbkj3Bs fNxyty8mJnQg65cPPihfCleRD+ZDuu8mJ6XnhaPQ15XJSX9byKHzwagO95KO tUZHtd3ZsTEpWnU0GXWsov7yOjU+rtWTnvddQphfPGinryKO8QvHLODbkrNz z57FH25/euN6Z3racskdMzMaG8n7mirmg3h558znn+nxXzh4wGeaUT4oh5ID NisXcvp80CfLUT6Y70aeXg4+H2wU/UOCsh2jfLCwaL56WigphZ+HP3v5UM0j qGa63jnKB+UlTWypnMO+RA2XGsufb/zmX6MJYHVoJit8Hx356aflLOsqSGso 5INJutq3es1hn/UJAAAAAAAAAPjRabyljyDc4pbSaKKnKwRthV07faKfZoKy 1+XLl6NVJHpAXX7YmZ7Wr5Hr54NbSu6tJ+/Y/UWjb86j3bUnus5RutFoNKST 0tUtbvWi5oNLS0vy0f37931K0nH3XD1//nzffFCPpqmol88H84HF1uRxflE+ WOebef1afn923y8mJjSWst3lh9boqLyv4WAjDaHWLx98UHKX0Yp8cOe2bVE4 2MrmpzoKqaHfbDa506nOyeHywXb2kYj3kmNGp0l+ODU+7tt9b2rK5tjpGvWX o2nIKMfRj0KSVbSEsHBRpF88WD2u53btsuV71hNt0VIwjbNlzreefnqL+ycB v3jnjO6rK870avVJvaX/C8kqwk9vXPehnuWDv/vbFb0Z6UdXvy67nG1W9M0H bdK2KukQogNquers2HHpmD9NeVq9QydPaAZqv9OifLDiCPmm86WLaltRunw+ qNnluS8v2SWfnwCyvUwAOdH+5sktlw8OWj0AAAAAAAAAwBOn1WppHGbRm8Vt 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 az7Yzt5lVCqjpYvyQYtuXzrxZn6a5Y/pPyUfBAAAAAAAAABgNYbOB7+YmPiw 0ZB9K16n08c7Rkvn9HVpako2OJIEczeymZpFhI8nH+yU32XU8sFHmUtubeCD ZBfpf34UD9LFg5ayRfngnampvgU8nxRQRAGr7n4+qd7ppJLRp3oerQJyhIu1 6/8gXTxYdgPJNckHpWO2xCwKsKIt313885FTb9mzNYUtjjvz+Weak+bjIXln 7pWXLaLyY6kTcnVydxnVtYRRILUx88FO5RLC9c4HO7m7jGrpohJJfyzB1NuQ tkqexCpnX+aAf7gq+SAAAAAAAAAAAKsxdD5Y53UjXSSo6dulogV6ha8/Juvj ZMfHlg9qiLY/1xOfD2rqIX2rOYovJiZGRkb8Y+/O19vRvzT/EvuT5LTOLt9N TrZGRy2+0Qo0k2WDNRvVWLMweVmTfFDP1+59c/pwwE9vXH92draZW4u6Y2ZG QzR5yQZ2d1A5U5pSaUTYmZ72SynVkVNv2cF1LJZM1Qy5Otm7jBYGUmubD1bz +/bNByuWEObzwb4rWNvu3qT1S2d3GfUprZVIa6vnSP6UOjSTNDyaALoCVF5y QvUsd0rywZrVAwAAAAAAAAAA7fXMB6+nT8prJeSwdcI1v+buseWDnTRSiSI8 nw920tSj8E6k+WBxZGTEh3TtofJBPYKUQiPCO/2avp6Eg9GtQdtJpibvfNGv /vdcONgsWtPXXqN8UKu9c88eTYjk9c5fLh54/djPXj6kr1///oJ9dOjkCR/w adyp4ZcuT5ONbccjp96yVPHTG9e3tltWw0HzwXb2LqOPAql9c2ubD742//YL Bw9Y58tec6+8nF891zehK1xC6PPB3Qd+Xqf153btsjk8UOnsLqPyeuP9d32J bAOLXxe+/UbOXeEEOH1hYSL5NwNRPlizenLWChcnAgAAAAAAAACwOeXzwbKv /YfLB+3hfRZRvTg2dmVysnD7LyYmZsfGfDi1mnzQApGa+WAnjf/8OrsPG41o 6ZmOQvpZlrXJ6HQU+VhqiHzQ355UuvFMclfSwoWE301Onhoft1AyWvrn63+9 qP73svWvut9jNh+szokq6IienZ1dSJ5PV/j66OrXz+3aFY3IxnLg9WN+cV/0 +uUH71s46KtRP+TqpDnm6QsLfdcP+nlSZ+wWYtZ8+flcJx/0SwjltWNmxq5E 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 AGDT+H8AAAAAAAAAAAAANo3/D2zci8M= "], {{0, 90}, {2400, 0}}, {0, 255}, ColorFunction -> RGBColor], BoxForm`ImageTag["Byte", ColorSpace -> "RGB", Interleaving -> True], Selectable -> False], BaseStyle -> "ImageGraphics", ImageSize -> Magnification[1], ImageSizeRaw -> {2400, 90}, PlotRange -> {{0, 2400}, {0, 90}}]], "", CellMargins -> 0, CellChangeTimes -> {{3.516548605022827*^9, 3.516548633085456*^9}, { 3.516616961864057*^9, 3.516616982571135*^9}, 3.518187891728025*^9, { 3.518199033657151*^9, 3.5181990340305967`*^9}}], Cell[ BoxData[ RowBox[{ RowBox[{"(*", RowBox[{"Evaluate", " ", "the", " ", "following", " ", "to", " ", "copy", " ", "the", " ", "style", " ", "of", " ", "the", " ", "cell", " ", "above", " ", "into", " ", "\[IndentingNewLine]", "the", " ", "docked", " ", "cell", " ", "style", " ", "of", " ", RowBox[{"the", " ", "'"}], RowBox[{"Notebook", "'"}], " ", "definition", " ", RowBox[{"(", RowBox[{"2", " ", "cells", " ", "above"}], ")"}], " ", "\[IndentingNewLine]", "These", " ", "two", " ", "cell", " ", "can", " ", "be", " ", "removed", " ", "once", " ", "the", " ", "docked", " ", "cell", " ", "is", " ", RowBox[{"created", "."}]}], "\[IndentingNewLine]", "*)"}], "\[IndentingNewLine]", RowBox[{ RowBox[{ RowBox[{"SelectionMove", "[", RowBox[{ RowBox[{"SelectedNotebook", "[", "]"}], ",", "Previous", ",", "Cell", ",", "2"}], "]"}], ";"}], "\[IndentingNewLine]", RowBox[{ RowBox[{"celldata", "=", RowBox[{"NotebookRead", "[", RowBox[{"SelectedNotebook", "[", "]"}], "]"}]}], ";"}], "\[IndentingNewLine]", RowBox[{ RowBox[{"SelectionMove", "[", RowBox[{ RowBox[{"SelectedNotebook", "[", "]"}], ",", "Previous", ",", "Cell", ",", "1"}], "]"}], ";"}], "\[IndentingNewLine]", RowBox[{ RowBox[{"SetOptions", "[", RowBox[{ RowBox[{"NotebookSelection", "[", RowBox[{"SelectedNotebook", "[", "]"}], "]"}], ",", RowBox[{"DockedCells", "\[Rule]", RowBox[{"{", RowBox[{ RowBox[{"FEPrivate`FrontEndResource", "[", RowBox[{ "\"FEExpressions\"", ",", "\"SlideshowToolbar\""}], "]"}], ",", "celldata"}], "}"}]}]}], "]"}], ";"}]}]}]], "Input", FontWeight -> "Bold"]}, Open]], Cell[ CellGroupData[{ Cell["Notebook Options Settings", "Section"], Cell[ StyleData["Notebook"], CellBracketOptions -> { "Color" -> RGBColor[0.739193, 0.750317, 0.747173]}]}, Open]], Cell[ CellGroupData[{ Cell["Styles for Title and Section Cells", "Section"], Cell[ CellGroupData[{ Cell[ StyleData["Title"], ShowCellBracket -> Automatic, ShowGroupOpener -> False, CellMargins -> {{58, 0}, {30, 0}}, CellBracketOptions -> {"Margins" -> {0, 0}}, CellGroupingRules -> {"TitleGrouping", 0}, PageBreakBelow -> False, CellFrameMargins -> {{20, 20}, {20, 20}}, DefaultNewInlineCellStyle -> "None", InputAutoReplacements -> {"TeX" -> StyleBox[ RowBox[{"T", AdjustmentBox[ "E", BoxMargins -> {{-0.075, -0.085}, {0, 0}}, BoxBaselineShift -> 0.5], "X"}]], "LaTeX" -> StyleBox[ RowBox[{"L", StyleBox[ AdjustmentBox[ "A", BoxMargins -> {{-0.36, -0.1}, {0, 0}}, BoxBaselineShift -> -0.2], FontSize -> Smaller], "T", AdjustmentBox[ "E", BoxMargins -> {{-0.075, -0.085}, {0, 0}}, BoxBaselineShift -> 0.5], "X"}]], "mma" -> "Mathematica", "Mma" -> "Mathematica", "MMA" -> "Mathematica", "gridMathematica" -> FormBox[ RowBox[{"grid", AdjustmentBox[ StyleBox["Mathematica", FontSlant -> "Italic"], BoxMargins -> {{-0.175, 0}, {0, 0}}]}], TextForm], "webMathematica" -> FormBox[ RowBox[{"web", AdjustmentBox[ StyleBox["Mathematica", FontSlant -> "Italic"], BoxMargins -> {{-0.175, 0}, {0, 0}}]}], TextForm], Inherited}, CellChangeTimes -> {3.479211616867702*^9, 3.483202458952606*^9}, TextAlignment -> Left, LineSpacing -> {1, 0}, LanguageCategory -> "NaturalLanguage", CounterIncrements -> "Title", CounterAssignments -> {{"Section", 0}, {"Equation", 0}, { "Figure", 0}, {"Subtitle", 0}, {"Subsubtitle", 0}}, FontFamily -> "Helvetica", FontSize -> 48, FontWeight -> "Plain", FontSlant -> "Plain", FontTracking -> "Plain", FontVariations -> { "Masked" -> False, "Outline" -> False, "Shadow" -> False, "StrikeThrough" -> False, "Underline" -> False}, FontColor -> RGBColor[ 0.8156862745098039, 0.07058823529411765, 0.07058823529411765], Background -> None], Cell[ StyleData["Title", "Presentation", StyleDefinitions -> None], CellMargins -> {{55, 3}, {14, 125}}, LineSpacing -> {1, 5}, FontSize -> 28], Cell[ StyleData[ "Title", "SlideShow", StyleDefinitions -> StyleData["Title", "Presentation"]], CellMargins -> {{55, 3}, {14, 35}}, FontSize -> 55], Cell[ StyleData["Title", "Printout", StyleDefinitions -> None], CellMargins -> {{2, 0}, {0, 10}}, LineSpacing -> {1, 18}, FontSize -> 15]}, Open]], Cell[ CellGroupData[{ Cell[ StyleData["Subtitle"], ShowCellBracket -> False, CellMargins -> {{58, 0}, {0, 5}}, CellBracketOptions -> {"Margins" -> {0, 0}}, CellGroupingRules -> {"TitleGrouping", 10}, PageBreakBelow -> False, DefaultNewInlineCellStyle -> "None", InputAutoReplacements -> {"TeX" -> StyleBox[ RowBox[{"T", AdjustmentBox[ "E", BoxMargins -> {{-0.075, -0.085}, {0, 0}}, BoxBaselineShift -> 0.5], "X"}]], "LaTeX" -> StyleBox[ RowBox[{"L", StyleBox[ AdjustmentBox[ "A", BoxMargins -> {{-0.36, -0.1}, {0, 0}}, BoxBaselineShift -> -0.2], FontSize -> Smaller], "T", AdjustmentBox[ "E", BoxMargins -> {{-0.075, -0.085}, {0, 0}}, BoxBaselineShift -> 0.5], "X"}]], "mma" -> "Mathematica", "Mma" -> "Mathematica", "MMA" -> "Mathematica", "gridMathematica" -> FormBox[ RowBox[{"grid", AdjustmentBox[ StyleBox["Mathematica", FontSlant -> "Italic"], BoxMargins -> {{-0.175, 0}, {0, 0}}]}], TextForm], "webMathematica" -> FormBox[ RowBox[{"web", AdjustmentBox[ StyleBox["Mathematica", FontSlant -> "Italic"], BoxMargins -> {{-0.175, 0}, {0, 0}}]}], TextForm], Inherited}, TextAlignment -> Left, LanguageCategory -> "NaturalLanguage", CounterIncrements -> "Subtitle", CounterAssignments -> {{"Section", 0}, {"Equation", 0}, { "Figure", 0}, {"Subsubtitle", 0}}, FontFamily -> "Helvetica", FontSize -> 20, FontWeight -> "Plain", FontSlant -> "Plain", FontColor -> RGBColor[ 0.34901960784313724`, 0.5254901960784314, 0.5176470588235295], Background -> None], Cell[ StyleData["Subtitle", "Presentation", StyleDefinitions -> None], CellMargins -> {{58, 0}, {0, 5}}, FontSize -> 20], Cell[ StyleData[ "Subtitle", "SlideShow", StyleDefinitions -> StyleData["Subtitle", "Presentation"]]], Cell[ StyleData["Subtitle", "Printout", StyleDefinitions -> None], CellMargins -> {{2, 0}, {0, 5}}, FontSize -> 14, Background -> GrayLevel[1]]}, Open]], Cell[ CellGroupData[{ Cell[ StyleData["Subsubtitle", StyleDefinitions -> StyleData["Subtitle"]], FontSize -> Inherited + 3], Cell[ StyleData["Subsubtitle", "Presentation"], FontSize -> Inherited + 3], Cell[ StyleData[ "Subsubtitle", "SlideShow", StyleDefinitions -> StyleData["Subsubtitle", "Presentation"]]], Cell[ StyleData["Subsubtitle", "Printout"], FontSize -> Inherited + 0]}, Open]], Cell[ CellGroupData[{ Cell[ StyleData["Section"], CellFrame -> {{0, 0}, {0.2, 0}}, ShowGroupOpener -> False, CellMargins -> {{88, 50}, {10, 25}}, FontSize -> 36, FontWeight -> "Plain", FontColor -> RGBColor[ 0.8156862745098039, 0.07058823529411765, 0.07058823529411765]], Cell[ StyleData["Section", "Presentation"], CellFrame -> {{0, 0}, {0.2, 0}}, CellMargins -> {{58, 50}, {10, 35}}], Cell[ StyleData[ "Section", "SlideShow", StyleDefinitions -> StyleData["Section", "Presentation"]], CellMargins -> {{58, 50}, {10, 35}}], Cell[ StyleData["Section", "Printout"], ShowGroupOpener -> False, CellMargins -> {{2, 0}, {7, 22}}, FontSize -> 14]}, Open]], Cell[ CellGroupData[{ Cell[ StyleData["Subsection"], CellDingbat -> None, ShowGroupOpener -> True, CellMargins -> {{60, Inherited}, {0, 12}}, CellGroupingRules -> {"SectionGrouping", 40}, PageBreakBelow -> False, DefaultNewInlineCellStyle -> "None", InputAutoReplacements -> {"TeX" -> StyleBox[ RowBox[{"T", AdjustmentBox[ "E", BoxMargins -> {{-0.075, -0.085}, {0, 0}}, BoxBaselineShift -> 0.5], "X"}]], "LaTeX" -> StyleBox[ RowBox[{"L", StyleBox[ AdjustmentBox[ "A", BoxMargins -> {{-0.36, -0.1}, {0, 0}}, BoxBaselineShift -> -0.2], FontSize -> Smaller], "T", AdjustmentBox[ "E", BoxMargins -> {{-0.075, -0.085}, {0, 0}}, BoxBaselineShift -> 0.5], "X"}]], "mma" -> "Mathematica", "Mma" -> "Mathematica", "MMA" -> "Mathematica", "gridMathematica" -> FormBox[ RowBox[{"grid", AdjustmentBox[ StyleBox["Mathematica", FontSlant -> "Italic"], BoxMargins -> {{-0.175, 0}, {0, 0}}]}], TextForm], "webMathematica" -> FormBox[ RowBox[{"web", AdjustmentBox[ StyleBox["Mathematica", FontSlant -> "Italic"], BoxMargins -> {{-0.175, 0}, {0, 0}}]}], TextForm], Inherited}, LanguageCategory -> "NaturalLanguage", CounterIncrements -> "Subsection", CounterAssignments -> {{"Subsubsection", 0}}, FontFamily -> "Helvetica", FontSize -> 24, FontWeight -> "Plain", FontSlant -> "Plain", FontColor -> RGBColor[ 0.34901960784313724`, 0.5254901960784314, 0.5176470588235295]], Cell[ StyleData["Subsection", "Presentation"], CellMargins -> {{60, 50}, {6, 15}}, LineSpacing -> {1, 0}, FontFamily -> "Helvetica"], Cell[ StyleData["Subsection", "SlideShow"], CellMargins -> {{60, 50}, {8, 12}}, LineSpacing -> {1, 0}, FontFamily -> "Helvetica"], Cell[ StyleData["Subsection", "Printout"], ShowGroupOpener -> False, CellMargins -> {{2, 0}, {2, 22}}, FontSize -> 12]}, Open]], Cell[ CellGroupData[{ Cell[ StyleData["Subsubsection"], CellDingbat -> None, ShowGroupOpener -> True, CellMargins -> {{60, Inherited}, {0, 12}}, CellGroupingRules -> {"SectionGrouping", 50}, PageBreakBelow -> False, DefaultNewInlineCellStyle -> "None", InputAutoReplacements -> {"TeX" -> StyleBox[ RowBox[{"T", AdjustmentBox[ "E", BoxMargins -> {{-0.075, -0.085}, {0, 0}}, BoxBaselineShift -> 0.5], "X"}]], "LaTeX" -> StyleBox[ RowBox[{"L", StyleBox[ AdjustmentBox[ "A", BoxMargins -> {{-0.36, -0.1}, {0, 0}}, BoxBaselineShift -> -0.2], FontSize -> Smaller], "T", AdjustmentBox[ "E", BoxMargins -> {{-0.075, -0.085}, {0, 0}}, BoxBaselineShift -> 0.5], "X"}]], "mma" -> "Mathematica", "Mma" -> "Mathematica", "MMA" -> "Mathematica", "gridMathematica" -> FormBox[ RowBox[{"grid", AdjustmentBox[ StyleBox["Mathematica", FontSlant -> "Italic"], BoxMargins -> {{-0.175, 0}, {0, 0}}]}], TextForm], "webMathematica" -> FormBox[ RowBox[{"web", AdjustmentBox[ StyleBox["Mathematica", FontSlant -> "Italic"], BoxMargins -> {{-0.175, 0}, {0, 0}}]}], TextForm], Inherited}, LanguageCategory -> "NaturalLanguage", CounterIncrements -> "Subsubsection", FontFamily -> "Helvetica", FontSize -> 24, FontWeight -> "Plain", FontSlant -> "Plain", FontColor -> RGBColor[ 0.34901960784313724`, 0.5254901960784314, 0.5176470588235295]], Cell[ StyleData["Subsubsection", "Presentation"], CellMargins -> {{60, 50}, {6, 20}}, LineSpacing -> {1, 0}], Cell[ StyleData[ "Subsubsection", "SlideShow", StyleDefinitions -> StyleData["Subsubsection", "Presentation"]]], Cell[ StyleData["Subsubsection", "Printout"], ShowGroupOpener -> False, CellMargins -> {{2, 0}, {2, 22}}, FontSize -> 11]}, Open]]}, Open]], Cell[ CellGroupData[{ Cell["Styles for Body Text", "Section"], Cell[ CellGroupData[{ Cell["Standard", "Subsection"], Cell[ CellGroupData[{ Cell[ StyleData["Text"], CellMargins -> {{60, 10}, {7, 7}}, InputAutoReplacements -> {"TeX" -> StyleBox[ RowBox[{"T", AdjustmentBox[ "E", BoxMargins -> {{-0.075, -0.085}, {0, 0}}, BoxBaselineShift -> 0.5], "X"}]], "LaTeX" -> StyleBox[ RowBox[{"L", StyleBox[ AdjustmentBox[ "A", BoxMargins -> {{-0.36, -0.1}, {0, 0}}, BoxBaselineShift -> -0.2], FontSize -> Smaller], "T", AdjustmentBox[ "E", BoxMargins -> {{-0.075, -0.085}, {0, 0}}, BoxBaselineShift -> 0.5], "X"}]], "mma" -> "Mathematica", "Mma" -> "Mathematica", "MMA" -> "Mathematica", "gridMathematica" -> FormBox[ RowBox[{"grid", AdjustmentBox[ StyleBox["Mathematica", FontSlant -> "Italic"], BoxMargins -> {{-0.175, 0}, {0, 0}}]}], TextForm], "webMathematica" -> FormBox[ RowBox[{"web", AdjustmentBox[ StyleBox["Mathematica", FontSlant -> "Italic"], BoxMargins -> {{-0.175, 0}, {0, 0}}]}], TextForm], Inherited}, LineSpacing -> {1, 3}, CounterIncrements -> "Text", FontFamily -> "Helvetica", FontSize -> 17], Cell[ StyleData["Text", "Presentation"], CellMargins -> {{60, 50}, {10, 10}}, FontSize -> 17], Cell[ StyleData[ "Text", "SlideShow", StyleDefinitions -> StyleData["Text", "Presentation"]]], Cell[ StyleData["Text", "Printout"], CellMargins -> {{2, 2}, {6, 6}}, TextJustification -> 0.5, Hyphenation -> True, FontSize -> 10]}, Open]]}, Open]], Cell[ CellGroupData[{ Cell["Display", "Subsection"], Cell[ CellGroupData[{ Cell[ StyleData["Item", StyleDefinitions -> StyleData["Text"]], CellDingbat -> Cell["\[FilledSmallCircle]", FontWeight -> "Bold"], CellMargins -> {{84, 10}, {7, 7}}, ReturnCreatesNewCell -> True, CellGroupingRules -> {"GroupTogetherNestedGrouping", 15000}, CounterIncrements -> "Item"], Cell[ StyleData["Item", "Presentation"], CellMargins -> {{124, 10}, {7, 7}}], Cell[ StyleData[ "Item", "SlideShow", StyleDefinitions -> StyleData["Item", "Presentation"]]], Cell[ StyleData["Item", "Printout"], CellMargins -> {{2, 2}, {0, 6}}]}, Open]], Cell[ CellGroupData[{ Cell[ StyleData["Subitem", StyleDefinitions -> StyleData["Item"]], CellMargins -> {{108, 10}, {7, 7}}, ReturnCreatesNewCell -> True, CellGroupingRules -> {"GroupTogetherNestedGrouping", 15150}, CounterIncrements -> "Subitem"], Cell[ StyleData["Subitem", "Presentation"], CellMargins -> {{146, 10}, {7, 7}}], Cell[ StyleData[ "Subitem", "SlideShow", StyleDefinitions -> StyleData["Subitem", "Presentation"]]], Cell[ StyleData["Subitem", "Printout"], CellMargins -> {{30, 2}, {0, 6}}]}, Open]], Cell[ CellGroupData[{ Cell[ StyleData["ItemNumbered", StyleDefinitions -> StyleData["Text"]], CellDingbat -> Cell[ TextData[{ CounterBox["ItemNumbered"], "."}]], CellMargins -> {{84, 10}, {7, 7}}, ReturnCreatesNewCell -> True, CellGroupingRules -> {"GroupTogetherNestedGrouping", 15000}, CounterIncrements -> "ItemNumbered"], Cell[ StyleData["ItemNumbered", "Presentation"], CellMargins -> {{124, 10}, {7, 7}}], Cell[ StyleData[ "ItemNumbered", "SlideShow", StyleDefinitions -> StyleData["ItemNumbered", "Presentation"]]], Cell[ StyleData["ItemNumbered", "Printout"], CellMargins -> {{2, 2}, {0, 6}}]}, Open]], Cell[ CellGroupData[{ Cell[ StyleData[ "SubitemNumbered", StyleDefinitions -> StyleData["ItemNumbered"]], CellDingbat -> Cell[ TextData[{ CounterBox["SubitemNumbered", CounterFunction :> (Part[ CharacterRange["a", "z"], #]& )], "."}]], CellMargins -> {{108, 10}, {7, 7}}, ReturnCreatesNewCell -> True, CellGroupingRules -> {"GroupTogetherNestedGrouping", 15150}, CounterIncrements -> "SubitemNumbered"], Cell[ StyleData["SubitemNumbered", "Presentation"], CellMargins -> {{146, 10}, {7, 7}}], Cell[ StyleData[ "SubitemNumbered", "SlideShow", StyleDefinitions -> StyleData["SubitemNumbered", "Presentation"]]], Cell[ StyleData["SubitemNumbered", "Printout"], CellMargins -> {{30, 2}, {0, 6}}]}, Open]], Cell[ CellGroupData[{ Cell[ StyleData[ "ItemParagraph", StyleDefinitions -> StyleData["Item"]], CellDingbat -> None, CellMargins -> {{84, 10}, {7, 7}}, ReturnCreatesNewCell -> True, CellGroupingRules -> {"GroupTogetherNestedGrouping", 15100}, CounterIncrements -> "ItemParagraph"], Cell[ StyleData["ItemParagraph", "Presentation"], CellMargins -> {{124, 10}, {7, 7}}], Cell[ StyleData[ "ItemParagraph", "SlideShow", StyleDefinitions -> StyleData["ItemParagraph", "Presentation"]]], Cell[ StyleData["ItemParagraph", "Printout"], CellMargins -> {{14, 2}, {0, 6}}]}, Open]], Cell[ CellGroupData[{ Cell[ StyleData[ "SubitemParagraph", StyleDefinitions -> StyleData["Subitem"]], CellDingbat -> None, ReturnCreatesNewCell -> True, CellGroupingRules -> {"GroupTogetherNestedGrouping", 15200}, CounterIncrements -> "SubitemParagraph"], Cell[ StyleData["SubitemParagraph", "Presentation"]], Cell[ StyleData[ "SubitemParagraph", "SlideShow", StyleDefinitions -> StyleData["SubitemParagraph", "Presentation"]]], Cell[ StyleData["SubitemParagraph", "Printout"]]}, Open]]}, Open]]}, Open]], Cell[ CellGroupData[{ Cell["Styles for Formulas and Programming", "Section"], Cell[ CellGroupData[{ Cell[ StyleData["DisplayFormula"]], Cell[ StyleData["DisplayFormula", "Presentation"], CellMargins -> {{60, Inherited}, {Inherited 1.5, Inherited 1.5}}, FontSize -> 17], Cell[ StyleData[ "DisplayFormula", "SlideShow", StyleDefinitions -> StyleData["DisplayFormula", "Presentation"]]], Cell[ StyleData["DisplayFormula", "Printout"], CellMargins -> {{39, Inherited}, {Inherited, Inherited}}, FontSize -> 10]}, Open]], Cell[ CellGroupData[{ Cell[ StyleData[ "DisplayFormulaNumbered", StyleDefinitions -> StyleData["DisplayFormula"]], CellFrameLabels -> {{None, Cell[ TextData[{"(", CounterBox["DisplayFormulaNumbered"], ")"}]]}, {None, None}}, CounterIncrements -> "DisplayFormulaNumbered"], Cell[ StyleData["DisplayFormulaNumbered", "Presentation"], CellMargins -> {{60, Inherited}, {Inherited 1.5, Inherited 1.5}}, FontSize -> 17], Cell[ StyleData[ "DisplayFormulaNumbered", "SlideShow", StyleDefinitions -> StyleData["DisplayFormulaNumbered", "Presentation"]]], Cell[ StyleData["DisplayFormulaNumbered", "Printout"], CellMargins -> {{39, Inherited}, {Inherited, Inherited}}]}, Open]]}, Open]], Cell[ CellGroupData[{ Cell["Styles for Inline Formatting", "Section"], Cell[ CellGroupData[{ Cell[ StyleData["InlineFormula"]], Cell[ StyleData["InlineFormula", "Presentation"], FontSize -> 17], Cell[ StyleData[ "InlineFormula", "SlideShow", StyleDefinitions -> StyleData["InlineFormula", "Presentation"]]], Cell[ StyleData["InlineFormula", "Printout"]]}, Open]]}, Open]], Cell[ CellGroupData[{ Cell["Styles for Input and Output Cells", "Section"], Cell[ CellGroupData[{ Cell[ StyleData["Input"], ShowCellBracket -> True, CellMargins -> {{103, 10}, {5, 7}}, CellBracketOptions -> { "Color" -> RGBColor[0.734936, 0.713848, 0.694041]}, Evaluatable -> True, CellGroupingRules -> "InputGrouping", CellHorizontalScrolling -> True, PageBreakWithin -> False, GroupPageBreakWithin -> False, DefaultFormatType -> DefaultInputFormatType, "TwoByteSyntaxCharacterAutoReplacement" -> True, HyphenationOptions -> {"HyphenationCharacter" -> "\[Continuation]"}, AutoItalicWords -> {}, LanguageCategory -> "Mathematica", FormatType -> InputForm, ShowStringCharacters -> True, NumberMarks -> True, LinebreakAdjustments -> {0.85, 2, 10, 0, 1}, CounterIncrements -> "Input", FontWeight -> "Bold"], Cell[ StyleData["Input", "Presentation"], CellMargins -> {{110, 50}, {8, 10}}, LineSpacing -> {1, 0}, FontSize -> 17], Cell[ StyleData[ "Input", "SlideShow", StyleDefinitions -> StyleData["Input", "Presentation"]]], Cell[ StyleData["Input", "Printout"], CellMargins -> {{39, 0}, {4, 6}}, LinebreakAdjustments -> {0.85, 2, 10, 1, 1}, FontSize -> 9]}, Open]], Cell[ CellGroupData[{ Cell[ StyleData["InputOnly"], ShowCellBracket -> True, CellMargins -> {{103, 10}, {7, 7}}, CellBracketOptions -> { "Color" -> RGBColor[0.734936, 0.713848, 0.694041]}, Evaluatable -> True, CellGroupingRules -> "InputGrouping", CellHorizontalScrolling -> True, DefaultFormatType -> DefaultInputFormatType, "TwoByteSyntaxCharacterAutoReplacement" -> True, HyphenationOptions -> {"HyphenationCharacter" -> "\[Continuation]"}, AutoItalicWords -> {}, LanguageCategory -> "Mathematica", FormatType -> InputForm, ShowStringCharacters -> True, NumberMarks -> True, LinebreakAdjustments -> {0.85, 2, 10, 0, 1}, CounterIncrements -> "Input", MenuSortingValue -> 1550, FontWeight -> "Bold"], Cell[ StyleData["InputOnly", "Presentation"], CellMargins -> {{110, Inherited}, {8, 10}}, LineSpacing -> {1, 0}, FontSize -> 17], Cell[ StyleData[ "InputOnly", "SlideShow", StyleDefinitions -> StyleData["InputOnly", "Presentation"]]], Cell[ StyleData["InputOnly", "Printout"], CellMargins -> {{39, 0}, {4, 6}}, LinebreakAdjustments -> {0.85, 2, 10, 1, 1}, FontSize -> 9]}, Open]], Cell[ CellGroupData[{ Cell[ StyleData["Output"], ShowCellBracket -> True, CellMargins -> {{103, 10}, {7, 5}}, CellBracketOptions -> { "Color" -> RGBColor[0.734936, 0.713848, 0.694041]}, CellEditDuplicate -> True, CellGroupingRules -> "OutputGrouping", CellHorizontalScrolling -> True, PageBreakWithin -> False, GroupPageBreakWithin -> False, GeneratedCell -> True, CellAutoOverwrite -> True, DefaultFormatType -> DefaultOutputFormatType, "TwoByteSyntaxCharacterAutoReplacement" -> True, HyphenationOptions -> { "HyphenationCharacter" -> "\[Continuation]"}, AutoItalicWords -> {}, LanguageCategory -> None, FormatType -> InputForm, CounterIncrements -> "Output"], Cell[ StyleData["Output", "Presentation"], CellMargins -> {{110, 50}, {10, 8}}, LineSpacing -> {1, 0}, FontSize -> 17], Cell[ StyleData[ "Output", "SlideShow", StyleDefinitions -> StyleData["Output", "Presentation"]]], Cell[ StyleData["Output", "Printout"], CellMargins -> {{39, 0}, {6, 4}}, FontSize -> 9]}, Open]], Cell[ CellGroupData[{ Cell[ StyleData["Code"], CellMargins -> {{103, 10}, {5, 10}}], Cell[ StyleData["Code", "Presentation"], CellMargins -> {{110, 50}, {8, 10}}, LineSpacing -> {1, 0}, FontSize -> 17], Cell[ StyleData[ "Code", "SlideShow", StyleDefinitions -> StyleData["Code", "Presentation"]]], Cell[ StyleData["Code", "Printout"], CellMargins -> {{39, 0}, {4, 6}}, LinebreakAdjustments -> {0.85, 2, 10, 1, 1}, FontSize -> 9]}, Open]], Cell[ CellGroupData[{ Cell[ StyleData["Print"], CellMargins -> {{103, Inherited}, {Inherited, Inherited}}, FontSize -> 14], Cell[ StyleData["Print", "Presentation"], CellMargins -> {{70, Inherited}, {Inherited 1.5, Inherited 1.5}}, FontSize -> 17, Magnification -> Inherited 1.5], Cell[ StyleData[ "Print", "SlideShow", StyleDefinitions -> StyleData["Print", "Presentation"]]], Cell[ StyleData["Print", "Printout"], CellMargins -> {{39, Inherited}, {Inherited, Inherited}}]}, Open]], Cell[ CellGroupData[{ Cell[ StyleData[ "WolframAlphaShortInput", StyleDefinitions -> StyleData["Input"]], CellMargins -> {{98, 10}, {5, 7}}, EvaluationMode -> "WolframAlphaShort", CellEventActions -> {"ReturnKeyDown" :> FrontEndTokenExecute[ EvaluationNotebook[], "HandleShiftReturn"]}, CellFrameLabels -> {{ Cell[ BoxData[ DynamicBox[ FEPrivate`FrontEndResource["WABitmaps", "Equal"]]], CellBaseline -> Baseline], None}, {None, None}}, FormatType -> TextForm, FontFamily -> "Helvetica"], Cell[ StyleData["WolframAlphaShortInput", "Presentation"], CellMargins -> {{107, 50}, {8, 10}}], Cell[ StyleData[ "WolframAlphaShortInput", "SlideShow", StyleDefinitions -> StyleData["WolframAlphaShortInput", "Presentation"]]], Cell[ StyleData["WolframAlphaShortInput", "Printout"], CellFrameLabelMargins -> 3]}, Open]], Cell[ CellGroupData[{ Cell[ StyleData[ "WolframAlphaLong", StyleDefinitions -> StyleData["Input"]], CellMargins -> {{100, 10}, {5, 7}}, StyleKeyMapping -> { "=" -> "Input", "Backspace" -> "WolframAlphaShort"}, EvaluationMode -> "WolframAlphaLong", CellEventActions -> {"ReturnKeyDown" :> FrontEndTokenExecute[ EvaluationNotebook[], "HandleShiftReturn"]}, CellFrameLabels -> {{ Cell[ BoxData[ DynamicBox[ FEPrivate`FrontEndResource["WABitmaps", "SpikeyEqual"]]]], None}, {None, None}}, DefaultFormatType -> TextForm, FormatType -> TextForm, FontFamily -> "Helvetica"], Cell[ StyleData["WolframAlphaLong", "Presentation"], CellMargins -> {{107, 50}, {8, 10}}], Cell[ StyleData[ "WolframAlphaLong", "SlideShow", StyleDefinitions -> StyleData["WolframAlphaLong", "Presentation"]], CellMargins -> {{107, 50}, {8, 10}}], Cell[ StyleData["WolframAlphaLong", "Printout"], CellFrameLabelMargins -> 3]}, Open]], Cell[ CellGroupData[{ Cell[ StyleData["Program"], CellMargins -> {{60, 4}, {6, 8}}], Cell[ StyleData["Program", "Presentation"], CellMargins -> {{60, 50}, {8, 10}}, LineSpacing -> {1, 0}, FontSize -> 17], Cell[ StyleData[ "Program", "SlideShow", StyleDefinitions -> StyleData["Program", "Presentation"]]], Cell[ StyleData["Program", "Printout"], FontSize -> 9]}, Open]], Cell[ CellGroupData[{ Cell[ StyleData["CellLabel"]], Cell[ StyleData["CellLabel", "Presentation"], FontSize -> 12], Cell[ StyleData[ "CellLabel", "SlideShow", StyleDefinitions -> StyleData["CellLabel", "Presentation"]]], Cell[ StyleData["CellLabel", "Printout"], FontSize -> 8, FontColor -> GrayLevel[0.]]}, Open]], Cell[ CellGroupData[{ Cell[ StyleData["ManipulateLabel"]], Cell[ StyleData["ManipulateLabel", "Presentation"], FontSize -> 15], Cell[ StyleData[ "ManipulateLabel", "SlideShow", StyleDefinitions -> StyleData["ManipulateLabel", "Presentation"]]], Cell[ StyleData["ManipulateLabel", "Printout"], FontSize -> 8]}, Open]], Cell[ CellGroupData[{ Cell[ StyleData["GraphicsLabel"]], Cell[ StyleData["GraphicsLabel", "Presentation"], FontSize -> 14], Cell[ StyleData[ "GraphicsLabel", "SlideShow", StyleDefinitions -> StyleData["GraphicsLabel", "Presentation"]]], Cell[ StyleData["GraphicsLabel", "Printout"], FontSize -> 8]}, Open]], Cell[ CellGroupData[{ Cell[ StyleData["Graphics3DLabel"]], Cell[ StyleData["Graphics3DLabel", "Presentation"], FontSize -> 14], Cell[ StyleData[ "Graphics3DLabel", "SlideShow", StyleDefinitions -> StyleData["Graphics3DLabel", "Presentation"]]], Cell[ StyleData["Graphics3DLabel", "Printout"], FontSize -> 8]}, Open]]}, Open]], Cell[ CellGroupData[{ Cell[ "Styles for SlideShow", "Section", CellChangeTimes -> {{3.514665148412793*^9, 3.5146651505550737`*^9}}], Cell[ StyleData["slideshowheader"], ShowCellBracket -> False, CellMargins -> {{0, 0}, {0, -2}}, Evaluatable -> False, CellHorizontalScrolling -> False, PageBreakBelow -> False, CellFrameMargins -> 0, ImageMargins -> {{0, 0}, {0, 0}}, ImageRegion -> {{0, 1}, {0, 1}}, Magnification -> 1, Background -> GrayLevel[1], CellPadding -> 0, CellFramePadding -> 0], Cell[ CellGroupData[{ Cell[ StyleData["hidefromslideshowgraphic"], ShowCellBracket -> False, CellMargins -> {{0, 0}, {0, 0}}, Evaluatable -> False, CellHorizontalScrolling -> False, PageBreakBelow -> False, CellFrameMargins -> 0, ImageMargins -> {{0, 0}, {0, 0}}, ImageRegion -> {{0, 1}, {0, 1}}, Magnification -> 1, Background -> GrayLevel[1], CellPadding -> 0], Cell[ StyleData["hidefromslideshowgraphic", "SlideShow"], ShowCellBracket -> False, CellElementSpacings -> { "CellMinHeight" -> 0, "ClosedCellHeight" -> 0, "ClosedGroupTopMargin" -> 0}, CellOpen -> False, CellHorizontalScrolling -> False]}, Open]], Cell[ CellGroupData[{ Cell[ StyleData["slideshowheader2"], ShowCellBracket -> False, CellMargins -> {{0, 0}, {0, 0}}, Evaluatable -> False, CellHorizontalScrolling -> False, PageBreakBelow -> False, ImageMargins -> {{0, 0}, {0, 0}}, ImageRegion -> {{0, 1}, {0, 1}}, Magnification -> 1, Background -> GrayLevel[1]], Cell[ StyleData["ConferenceGraphicCell", "SlideShow"], ShowCellBracket -> False, CellElementSpacings -> { "CellMinHeight" -> 0, "ClosedCellHeight" -> 0, "ClosedGroupTopMargin" -> 0}, CellOpen -> False, CellHorizontalScrolling -> True], Cell[ StyleData["slideshowheader", "Printout"], FontSize -> 8, Magnification -> 0.75]}, Open]], Cell[ StyleData[ "ConferenceGraphicCellSlideShowOnly", StyleDefinitions -> StyleData["ConferenceCellGraphic"]], ShowCellBracket -> False, CellMargins -> 0, CellElementSpacings -> { "CellMinHeight" -> 0, "ClosedCellHeight" -> 0, "ClosedGroupTopMargin" -> 0}, CellOpen -> False], Cell[ CellGroupData[{ Cell[ StyleData["SlideShowNavigationBar"], Editable -> True, Selectable -> False, CellFrame -> 0, ShowGroupOpener -> False, CellMargins -> {{0, 0}, {3, 3}}, CellOpen -> True, CellFrameMargins -> 0, CellFrameColor -> None, Background -> None], Cell[ StyleData["SlideShowNavigationBar", "Printout"], PageBreakAbove -> Automatic]}, Open]]}, Open]]}, Visible -> False, FrontEndVersion -> "8.0 for Mac OS X x86 (32-bit, 64-bit Kernel) (October 5, 2011)", StyleDefinitions -> "Default.nb"] ] (* End of Notebook Content *) (* Internal cache information *) (*CellTagsOutline CellTagsIndex->{ "SlideShowHeader"->{ Cell[14246, 264, 64, 1, 1, "SlideShowNavigationBar", CellTags->"SlideShowHeader"], Cell[16755, 335, 64, 1, 1, "SlideShowNavigationBar", CellTags->"SlideShowHeader"], Cell[20821, 455, 64, 1, 1, "SlideShowNavigationBar", CellTags->"SlideShowHeader"], Cell[105318, 1984, 64, 1, 1, "SlideShowNavigationBar", CellTags->"SlideShowHeader"], Cell[109105, 2111, 64, 1, 1, "SlideShowNavigationBar", CellTags->"SlideShowHeader"], Cell[116110, 2315, 64, 1, 1, "SlideShowNavigationBar", CellTags->"SlideShowHeader"], Cell[121113, 2455, 64, 1, 1, "SlideShowNavigationBar", CellTags->"SlideShowHeader"], Cell[126273, 2594, 64, 1, 1, "SlideShowNavigationBar", CellTags->"SlideShowHeader"], Cell[132864, 2765, 64, 1, 1, "SlideShowNavigationBar", CellTags->"SlideShowHeader"], Cell[146466, 3122, 64, 1, 1, "SlideShowNavigationBar", CellTags->"SlideShowHeader"], Cell[187245, 3952, 64, 1, 1, "SlideShowNavigationBar", CellTags->"SlideShowHeader"], Cell[195276, 4182, 64, 1, 1, "SlideShowNavigationBar", CellTags->"SlideShowHeader"], Cell[200780, 4348, 64, 1, 1, "SlideShowNavigationBar", CellTags->"SlideShowHeader"], Cell[202068, 4380, 64, 1, 1, "SlideShowNavigationBar", CellTags->"SlideShowHeader"], Cell[207016, 4538, 64, 1, 1, "SlideShowNavigationBar", CellTags->"SlideShowHeader"], Cell[219414, 4880, 64, 1, 1, "SlideShowNavigationBar", CellTags->"SlideShowHeader"], Cell[224296, 5030, 64, 1, 1, "SlideShowNavigationBar", CellTags->"SlideShowHeader"], Cell[229547, 5195, 64, 1, 1, "SlideShowNavigationBar", CellTags->"SlideShowHeader"], Cell[234756, 5342, 64, 1, 1, "SlideShowNavigationBar", CellTags->"SlideShowHeader"], Cell[237418, 5422, 64, 1, 1, "SlideShowNavigationBar", CellTags->"SlideShowHeader"], Cell[242022, 5553, 64, 1, 1, "SlideShowNavigationBar", CellTags->"SlideShowHeader"], Cell[245958, 5676, 64, 1, 1, "SlideShowNavigationBar", CellTags->"SlideShowHeader"], Cell[251499, 5838, 64, 1, 1, "SlideShowNavigationBar", CellTags->"SlideShowHeader"], Cell[259651, 6071, 64, 1, 1, "SlideShowNavigationBar", CellTags->"SlideShowHeader"]} } *) (*CellTagsIndex CellTagsIndex->{ {"SlideShowHeader", 328323, 7491} } *) (*NotebookFileOutline Notebook[{ Cell[545, 20, 12512, 209, 2, "hidefromslideshowgraphic"], Cell[CellGroupData[{ Cell[13082, 233, 496, 13, 189, "Title"], Cell[13581, 248, 340, 5, 37, "Subtitle"], Cell[13924, 255, 285, 4, 29, "Subsubtitle"] }, Open ]], Cell[CellGroupData[{ Cell[14246, 264, 64, 1, 1, "SlideShowNavigationBar", CellTags->"SlideShowHeader"], Cell[14313, 267, 750, 14, 132, "Text"], Cell[CellGroupData[{ Cell[15088, 285, 122, 3, 69, "Item"], Cell[15213, 290, 165, 3, 69, "Item"], Cell[15381, 295, 257, 9, 69, "Item"] }, Open ]], Cell[15653, 307, 195, 4, 132, "Text"], Cell[15851, 313, 867, 17, 375, "Text"] }, Open ]], Cell[CellGroupData[{ Cell[16755, 335, 64, 1, 1, "SlideShowNavigationBar", CellTags->"SlideShowHeader"], Cell[CellGroupData[{ Cell[16844, 340, 292, 8, 321, "Section"], Cell[17139, 350, 209, 4, 82, "Text"], Cell[CellGroupData[{ Cell[17373, 358, 281, 5, 69, "Item"], Cell[17657, 365, 207, 4, 118, "Item"], Cell[17867, 371, 182, 4, 69, "Subitem"], Cell[18052, 377, 252, 5, 118, "Item"], Cell[CellGroupData[{ Cell[18329, 386, 323, 6, 118, "Subitem"], Cell[18655, 394, 282, 5, 69, "Subitem"] }, Open ]], Cell[18952, 402, 184, 2, 69, "Item"], Cell[CellGroupData[{ Cell[19161, 408, 195, 2, 69, "Subitem"], Cell[19359, 412, 206, 4, 118, "Subitem"], Cell[19568, 418, 135, 1, 69, "Subitem"] }, Open ]], Cell[19718, 422, 182, 4, 69, "Item"], Cell[19903, 428, 315, 6, 69, "Item"] }, Open ]], Cell[20233, 437, 171, 3, 78, "Input", InitializationCell->True], Cell[20407, 442, 180, 2, 69, "Item"], Cell[20590, 446, 182, 3, 78, "Input", InitializationCell->True] }, Open ]] }, Open ]], Cell[CellGroupData[{ Cell[20821, 455, 64, 1, 1, "SlideShowNavigationBar", CellTags->"SlideShowHeader"], Cell[CellGroupData[{ Cell[20910, 460, 448, 8, 208, "Section"], Cell[21361, 470, 1043, 31, 135, "Text"], Cell[22407, 503, 754, 17, 124, "DisplayFormula"], Cell[23164, 522, 138, 3, 82, "Text"], Cell[23305, 527, 1587, 37, 223, "Input"], Cell[24895, 566, 544, 16, 78, "Input"], Cell[25442, 584, 1018, 24, 127, "Input"], Cell[26463, 610, 391, 8, 180, "Text"], Cell[26857, 620, 2580, 64, 463, "Input"], Cell[29440, 686, 228, 4, 132, "Text"], Cell[29671, 692, 210, 4, 82, "Text"], Cell[29884, 698, 334, 10, 78, "Input"], Cell[CellGroupData[{ Cell[30243, 712, 545, 12, 78, "Input"], Cell[30791, 726, 444, 15, 133, "Output"] }, Open ]], Cell[31250, 744, 132, 3, 82, "Text"], Cell[CellGroupData[{ Cell[31407, 751, 532, 14, 78, "Input"], Cell[31942, 767, 73315, 1210, 547, 53682, 886, "CachedBoxData", "BoxData", \ "Output"] }, Open ]] }, Open ]] }, Open ]], Cell[CellGroupData[{ Cell[105318, 1984, 64, 1, 1, "SlideShowNavigationBar", CellTags->"SlideShowHeader"], Cell[105385, 1987, 181, 2, 82, "Text"], Cell[105569, 1991, 352, 10, 78, "Input"], Cell[CellGroupData[{ Cell[105946, 2005, 264, 6, 78, "Input"], Cell[106213, 2013, 177, 5, 78, "Output"] }, Open ]], Cell[CellGroupData[{ Cell[106427, 2023, 187, 4, 78, "Input"], Cell[106617, 2029, 183, 5, 78, "Output"] }, Open ]], Cell[106815, 2037, 181, 4, 82, "Text"], Cell[CellGroupData[{ Cell[107021, 2045, 446, 11, 78, "Input"], Cell[107470, 2058, 183, 5, 78, "Output"] }, Open ]], Cell[107668, 2066, 109, 1, 82, "Text"], Cell[CellGroupData[{ Cell[107802, 2071, 265, 6, 78, "Input"], Cell[108070, 2079, 181, 5, 78, "Output"] }, Open ]], Cell[108266, 2087, 802, 19, 183, "Text"] }, Open ]], Cell[CellGroupData[{ Cell[109105, 2111, 64, 1, 1, "SlideShowNavigationBar", CellTags->"SlideShowHeader"], Cell[109172, 2114, 156, 3, 82, "Text"], Cell[CellGroupData[{ Cell[109353, 2121, 2996, 75, 703, "Input"], Cell[112352, 2198, 2402, 65, 271, "Output"] }, Open ]], Cell[114769, 2266, 233, 4, 132, "Text"], Cell[115005, 2272, 145, 3, 82, "Text"], Cell[CellGroupData[{ Cell[115175, 2279, 357, 8, 127, "Input"], Cell[115535, 2289, 181, 5, 78, "Output"] }, Open ]], Cell[CellGroupData[{ Cell[115753, 2299, 122, 3, 78, "Input"], Cell[115878, 2304, 183, 5, 78, "Output"] }, Open ]] }, Open ]], Cell[CellGroupData[{ Cell[116110, 2315, 64, 1, 1, "SlideShowNavigationBar", CellTags->"SlideShowHeader"], Cell[116177, 2318, 169, 4, 82, "Text"], Cell[116349, 2324, 3346, 78, 703, "Input"], Cell[119698, 2404, 145, 3, 82, "Text"], Cell[CellGroupData[{ Cell[119868, 2411, 385, 10, 127, "Input"], Cell[120256, 2423, 183, 5, 78, "Output"] }, Open ]], Cell[CellGroupData[{ Cell[120476, 2433, 404, 9, 127, "Input"], Cell[120883, 2444, 181, 5, 78, "Output"] }, Open ]] }, Open ]], Cell[CellGroupData[{ Cell[121113, 2455, 64, 1, 1, "SlideShowNavigationBar", CellTags->"SlideShowHeader"], Cell[121180, 2458, 404, 7, 180, "Text"], Cell[121587, 2467, 3416, 79, 751, "Input"], Cell[CellGroupData[{ Cell[125028, 2550, 385, 10, 127, "Input"], Cell[125416, 2562, 181, 5, 78, "Output"] }, Open ]], Cell[CellGroupData[{ Cell[125634, 2572, 404, 9, 127, "Input"], Cell[126041, 2583, 183, 5, 78, "Output"] }, Open ]] }, Open ]], Cell[CellGroupData[{ Cell[126273, 2594, 64, 1, 1, "SlideShowNavigationBar", CellTags->"SlideShowHeader"], Cell[126340, 2597, 242, 5, 82, "Text"], Cell[126585, 2604, 4117, 96, 799, "Input"], Cell[130705, 2702, 1345, 26, 175, "Input"], Cell[CellGroupData[{ Cell[132075, 2732, 215, 5, 78, "Input"], Cell[132293, 2739, 180, 5, 78, "Output"] }, Open ]], Cell[CellGroupData[{ Cell[132510, 2749, 122, 3, 78, "Input"], Cell[132635, 2754, 180, 5, 78, "Output"] }, Open ]] }, Open ]], Cell[CellGroupData[{ Cell[132864, 2765, 64, 1, 1, "SlideShowNavigationBar", CellTags->"SlideShowHeader"], Cell[132931, 2768, 317, 6, 132, "Text"], Cell[133251, 2776, 300, 5, 82, "Text"], Cell[133554, 2783, 287, 5, 82, "Text"], Cell[133844, 2790, 3341, 80, 703, "Input"], Cell[137188, 2872, 155, 3, 82, "Text"], Cell[137346, 2877, 1662, 41, 271, "Input"], Cell[139011, 2920, 192, 4, 82, "Text"], Cell[139206, 2926, 662, 17, 127, "Input"], Cell[139871, 2945, 171, 4, 78, "Input"], Cell[140045, 2951, 237, 5, 78, "Input"], Cell[140285, 2958, 1449, 36, 415, "Input"], Cell[141737, 2996, 1018, 24, 127, "Input"], Cell[142758, 3022, 276, 5, 132, "Text"], Cell[143037, 3029, 267, 5, 78, "Input"], Cell[143307, 3036, 415, 9, 78, "Input"], Cell[143725, 3047, 2704, 70, 607, "Input"] }, Open ]], Cell[CellGroupData[{ Cell[146466, 3122, 64, 1, 1, "SlideShowNavigationBar", CellTags->"SlideShowHeader"], Cell[146533, 3125, 104, 1, 82, "Text"], Cell[CellGroupData[{ Cell[146662, 3130, 543, 15, 78, "Input"], Cell[147208, 3147, 471, 14, 81, "Output"] }, Open ]], Cell[CellGroupData[{ Cell[147716, 3166, 267, 5, 78, "Input"], Cell[147986, 3173, 247, 6, 78, "Output"] }, Open ]], Cell[CellGroupData[{ Cell[148270, 3184, 604, 16, 127, "Input"], Cell[148877, 3202, 13711, 230, 535, "Output"] }, Open ]], Cell[162603, 3435, 293, 9, 78, "Input"], Cell[CellGroupData[{ Cell[162921, 3448, 357, 10, 78, "Input"], Cell[163281, 3460, 180, 5, 78, "Output"] }, Open ]], Cell[CellGroupData[{ Cell[163498, 3470, 342, 10, 78, "Input"], Cell[163843, 3482, 180, 5, 99, "Output"] }, Open ]], Cell[CellGroupData[{ Cell[164060, 3492, 394, 10, 78, "Input"], Cell[164457, 3504, 331, 10, 100, "Output"] }, Open ]], Cell[CellGroupData[{ Cell[164825, 3519, 164, 3, 78, "Input"], Cell[164992, 3524, 292, 6, 78, "Output"] }, Open ]], Cell[CellGroupData[{ Cell[165321, 3535, 431, 12, 78, "Input"], Cell[165755, 3549, 18492, 309, 832, "Output"] }, Open ]], Cell[184262, 3861, 137, 3, 82, "Text"], Cell[184402, 3866, 334, 10, 78, "Input"], Cell[CellGroupData[{ Cell[184761, 3880, 935, 17, 78, "Input"], Cell[185699, 3899, 415, 14, 133, "Output"] }, Open ]], Cell[186129, 3916, 107, 1, 82, "Text"], Cell[CellGroupData[{ Cell[186261, 3921, 723, 19, 175, "Input"], Cell[186987, 3942, 209, 4, 78, "Output"] }, Open ]] }, Open ]], Cell[CellGroupData[{ Cell[187245, 3952, 64, 1, 1, "SlideShowNavigationBar", CellTags->"SlideShowHeader"], Cell[CellGroupData[{ Cell[187334, 3957, 561, 9, 321, "Section"], Cell[187898, 3968, 417, 7, 180, "Text"], Cell[188318, 3977, 256, 5, 82, "Text"], Cell[188577, 3984, 100, 1, 82, "Text"], Cell[CellGroupData[{ Cell[188702, 3989, 1559, 36, 271, "Input"], Cell[190264, 4027, 547, 11, 187, "Message"], Cell[190814, 4040, 562, 11, 187, "Message"], Cell[191379, 4053, 722, 24, 207, "Output"] }, Open ]], Cell[192116, 4080, 218, 3, 82, "Text"], Cell[CellGroupData[{ Cell[192359, 4087, 1133, 30, 127, "Input"], Cell[193495, 4119, 764, 25, 127, "Output"] }, Open ]], Cell[194274, 4147, 101, 1, 82, "Text"], Cell[194378, 4150, 392, 10, 127, "Input"], Cell[CellGroupData[{ Cell[194795, 4164, 251, 5, 78, "Input"], Cell[195049, 4171, 166, 4, 78, "Output"] }, Open ]] }, Open ]] }, Open ]], Cell[CellGroupData[{ Cell[195276, 4182, 64, 1, 1, "SlideShowNavigationBar", CellTags->"SlideShowHeader"], Cell[195343, 4185, 206, 4, 82, "Text"], Cell[195552, 4191, 253, 5, 82, "Text"], Cell[CellGroupData[{ Cell[195830, 4200, 1010, 22, 175, "Input"], Cell[196843, 4224, 180, 5, 78, "Output"] }, Open ]], Cell[197038, 4232, 160, 3, 82, "Text"], Cell[197201, 4237, 216, 4, 78, "Input"], Cell[197420, 4243, 241, 4, 82, "Text"], Cell[CellGroupData[{ Cell[197686, 4251, 1818, 50, 274, "Input"], Cell[199507, 4303, 1087, 36, 175, "Output"] }, Open ]], Cell[200609, 4342, 134, 1, 82, "Text"] }, Open ]], Cell[CellGroupData[{ Cell[200780, 4348, 64, 1, 1, "SlideShowNavigationBar", CellTags->"SlideShowHeader"], Cell[200847, 4351, 222, 4, 132, "Text"], Cell[CellGroupData[{ Cell[201094, 4359, 190, 3, 78, "Input"], Cell[201287, 4364, 732, 10, 1327, "Output"] }, Open ]] }, Open ]], Cell[CellGroupData[{ Cell[202068, 4380, 64, 1, 1, "SlideShowNavigationBar", CellTags->"SlideShowHeader"], Cell[202135, 4383, 138, 3, 82, "Text"], Cell[CellGroupData[{ Cell[202298, 4390, 99, 1, 108, "Subsection"], Cell[202400, 4393, 499, 12, 229, "Text"], Cell[202902, 4407, 302, 6, 132, "Text"], Cell[203207, 4415, 173, 4, 82, "Text"], Cell[203383, 4421, 261, 5, 132, "Text"], Cell[CellGroupData[{ Cell[203669, 4430, 945, 29, 127, "Input"], Cell[204617, 4461, 1177, 35, 175, "Output"] }, Open ]], Cell[CellGroupData[{ Cell[205831, 4501, 938, 23, 175, "Input"], Cell[206772, 4526, 183, 5, 78, "Output"] }, Open ]] }, Open ]] }, Open ]], Cell[CellGroupData[{ Cell[207016, 4538, 64, 1, 1, "SlideShowNavigationBar", CellTags->"SlideShowHeader"], Cell[207083, 4541, 112, 1, 82, "Text"], Cell[207198, 4544, 232, 5, 82, "Text"], Cell[CellGroupData[{ Cell[207455, 4553, 1039, 25, 127, "Input"], Cell[208497, 4580, 181, 5, 78, "Output"] }, Open ]], Cell[208693, 4588, 374, 8, 180, "Text"], Cell[CellGroupData[{ Cell[209092, 4600, 1208, 33, 319, "Input"], Cell[210303, 4635, 3508, 92, 528, "Output"] }, Open ]], Cell[CellGroupData[{ Cell[213848, 4732, 139, 2, 78, "Input"], Cell[213990, 4736, 1098, 15, 1615, "Output"] }, Open ]], Cell[215103, 4754, 200, 4, 82, "Text"], Cell[CellGroupData[{ Cell[215328, 4762, 894, 19, 127, "Input"], Cell[216225, 4783, 181, 5, 78, "Output"] }, Open ]], Cell[216421, 4791, 160, 3, 82, "Text"], Cell[CellGroupData[{ Cell[216606, 4798, 1534, 39, 367, "Input"], Cell[218143, 4839, 181, 5, 78, "Output"] }, Open ]], Cell[CellGroupData[{ Cell[218361, 4849, 820, 18, 127, "Input"], Cell[219184, 4869, 181, 5, 78, "Output"] }, Open ]] }, Open ]], Cell[CellGroupData[{ Cell[219414, 4880, 64, 1, 1, "SlideShowNavigationBar", CellTags->"SlideShowHeader"], Cell[219481, 4883, 217, 4, 132, "Text"], Cell[219701, 4889, 1590, 42, 415, "Input"], Cell[CellGroupData[{ Cell[221316, 4935, 459, 13, 127, "Input"], Cell[221778, 4950, 180, 5, 78, "Output"] }, Open ]], Cell[221973, 4958, 109, 1, 82, "Text"], Cell[222085, 4961, 1451, 38, 367, "Input"], Cell[CellGroupData[{ Cell[223561, 5003, 502, 14, 127, "Input"], Cell[224066, 5019, 181, 5, 78, "Output"] }, Open ]] }, Open ]], Cell[CellGroupData[{ Cell[224296, 5030, 64, 1, 1, "SlideShowNavigationBar", CellTags->"SlideShowHeader"], Cell[224363, 5033, 289, 5, 132, "Text"], Cell[CellGroupData[{ Cell[224677, 5042, 1171, 30, 175, "Input"], Cell[225851, 5074, 183, 5, 78, "Output"] }, Open ]], Cell[CellGroupData[{ Cell[226071, 5084, 617, 15, 78, "Input"], Cell[226691, 5101, 180, 5, 78, "Output"] }, Open ]], Cell[226886, 5109, 201, 4, 82, "Text"], Cell[CellGroupData[{ Cell[227112, 5117, 1487, 38, 319, "Input"], Cell[228602, 5157, 181, 5, 78, "Output"] }, Open ]], Cell[CellGroupData[{ Cell[228820, 5167, 320, 9, 78, "Input"], Cell[229143, 5178, 181, 5, 78, "Output"] }, Open ]], Cell[229339, 5186, 171, 4, 82, "Text"] }, Open ]], Cell[CellGroupData[{ Cell[229547, 5195, 64, 1, 1, "SlideShowNavigationBar", CellTags->"SlideShowHeader"], Cell[229614, 5198, 198, 4, 132, "Text"], Cell[229815, 5204, 3146, 78, 655, "Input"], Cell[CellGroupData[{ Cell[232986, 5286, 428, 9, 78, "Input"], Cell[233417, 5297, 182, 5, 78, "Output"] }, Open ]], Cell[233614, 5305, 106, 1, 82, "Text"], Cell[233723, 5308, 101, 2, 78, "Input"], Cell[233827, 5312, 109, 1, 82, "Text"], Cell[CellGroupData[{ Cell[233961, 5317, 427, 9, 175, "Input"], Cell[234391, 5328, 183, 5, 78, "Output"] }, Open ]], Cell[234589, 5336, 130, 1, 82, "Text"] }, Open ]], Cell[CellGroupData[{ Cell[234756, 5342, 64, 1, 1, "SlideShowNavigationBar", CellTags->"SlideShowHeader"], Cell[234823, 5345, 153, 2, 82, "Text"], Cell[234979, 5349, 1456, 39, 223, "Input"], Cell[CellGroupData[{ Cell[236460, 5392, 525, 11, 78, "Input"], Cell[236988, 5405, 183, 5, 78, "Output"] }, Open ]], Cell[237186, 5413, 195, 4, 78, "Input"] }, Open ]], Cell[CellGroupData[{ Cell[237418, 5422, 64, 1, 1, "SlideShowNavigationBar", CellTags->"SlideShowHeader"], Cell[CellGroupData[{ Cell[237507, 5427, 393, 6, 208, "Section"], Cell[237903, 5435, 416, 7, 132, "Text"], Cell[CellGroupData[{ Cell[238344, 5446, 1449, 35, 175, "Input"], Cell[239796, 5483, 965, 29, 127, "Output"] }, Open ]], Cell[240776, 5515, 99, 1, 82, "Text"], Cell[CellGroupData[{ Cell[240900, 5520, 557, 11, 78, "Input"], Cell[241460, 5533, 202, 5, 78, "Output"] }, Open ]], Cell[241677, 5541, 296, 6, 78, "Input"] }, Open ]] }, Open ]], Cell[CellGroupData[{ Cell[242022, 5553, 64, 1, 1, "SlideShowNavigationBar", CellTags->"SlideShowHeader"], Cell[242089, 5556, 251, 7, 82, "Text"], Cell[242343, 5565, 196, 4, 82, "Text"], Cell[CellGroupData[{ Cell[242564, 5573, 1463, 39, 175, "Input"], Cell[244030, 5614, 1078, 33, 127, "Output"] }, Open ]], Cell[CellGroupData[{ Cell[245145, 5652, 556, 11, 78, "Input"], Cell[245704, 5665, 205, 5, 78, "Output"] }, Open ]] }, Open ]], Cell[CellGroupData[{ Cell[245958, 5676, 64, 1, 1, "SlideShowNavigationBar", CellTags->"SlideShowHeader"], Cell[246025, 5679, 120, 1, 82, "Text"], Cell[CellGroupData[{ Cell[246170, 5684, 1796, 45, 271, "Input"], Cell[247969, 5731, 1241, 35, 127, "Output"] }, Open ]], Cell[CellGroupData[{ Cell[249247, 5771, 403, 9, 78, "Input"], Cell[249653, 5782, 205, 5, 78, "Output"] }, Open ]], Cell[249873, 5790, 130, 1, 82, "Text"], Cell[250006, 5793, 1456, 40, 223, "Input"] }, Open ]], Cell[CellGroupData[{ Cell[251499, 5838, 64, 1, 1, "SlideShowNavigationBar", CellTags->"SlideShowHeader"], Cell[251566, 5841, 348, 7, 82, "Text"], Cell[251917, 5850, 1504, 38, 175, "Input"], Cell[CellGroupData[{ Cell[253446, 5892, 428, 12, 78, "Input"], Cell[253877, 5906, 207, 5, 78, "Output"] }, Open ]], Cell[254099, 5914, 386, 6, 82, "Text"], Cell[CellGroupData[{ Cell[254510, 5924, 1819, 45, 271, "Input"], Cell[256332, 5971, 1248, 36, 127, "Output"] }, Open ]], Cell[CellGroupData[{ Cell[257617, 6012, 509, 11, 78, "Input"], Cell[258129, 6025, 205, 5, 78, "Output"] }, Open ]], Cell[258349, 6033, 156, 2, 82, "Text"], Cell[258508, 6037, 1106, 29, 175, "Input"] }, Open ]], Cell[CellGroupData[{ Cell[259651, 6071, 64, 1, 1, "SlideShowNavigationBar", CellTags->"SlideShowHeader"], Cell[CellGroupData[{ Cell[259740, 6076, 165, 3, 208, "Section"], Cell[259908, 6081, 290, 7, 82, "Text"], Cell[260201, 6090, 112, 1, 82, "Text"], Cell[CellGroupData[{ Cell[260338, 6095, 103, 1, 69, "Item"], Cell[260444, 6098, 225, 5, 69, "Item"], Cell[260672, 6105, 107, 3, 69, "Item"], Cell[CellGroupData[{ Cell[260804, 6112, 179, 6, 69, "Subitem"], Cell[260986, 6120, 133, 1, 69, "Subitem"], Cell[261122, 6123, 211, 4, 118, "Subitem"], Cell[261336, 6129, 189, 4, 69, "Subitem"] }, Open ]], Cell[261540, 6136, 360, 6, 166, "Item"], Cell[261903, 6144, 439, 13, 69, "Item"] }, Open ]] }, Open ]] }, Open ]] } ] *) (* End of internal cache information *)