{VERSION 3 0 "IBM INTEL NT" "3.0" } {USTYLETAB {CSTYLE "Maple Input" -1 0 "Courier" 0 1 255 0 0 1 0 1 0 0 1 0 0 0 0 }{CSTYLE "2D Math" -1 2 "Times" 0 1 0 0 0 0 0 0 2 0 0 0 0 0 0 }{CSTYLE "2D Comment" 2 18 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 } {CSTYLE "2D Output" 2 20 "" 0 1 0 0 255 1 0 0 0 0 0 0 0 0 0 }{CSTYLE " " -1 256 "" 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 257 "" 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 258 "" 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 259 "" 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 260 "" 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 261 "" 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 262 "" 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 263 "Helvetica" 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 } {CSTYLE "" -1 264 "" 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 265 "" 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 266 "" 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 267 "" 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 } {CSTYLE "" -1 268 "" 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 269 "" 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 270 "" 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 271 "" 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 } {CSTYLE "" -1 272 "" 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 273 "Helvetica" 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 }{CSTYLE "" -1 274 "Helvetic a" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 275 "" 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 276 "" 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 } {CSTYLE "" -1 277 "" 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 278 "" 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 279 "" 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 280 "" 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 } {CSTYLE "" -1 281 "" 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 282 "" 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 283 "" 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 284 "" 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 } {CSTYLE "" -1 285 "" 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 286 "" 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 287 "" 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 288 "" 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 } {CSTYLE "" -1 289 "Helvetica" 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 }{CSTYLE " " -1 290 "" 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 }{CSTYLE "" -1 291 "Helvetic a" 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 }{CSTYLE "" -1 292 "" 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 293 "" 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 } {CSTYLE "" -1 294 "" 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 295 "" 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 296 "" 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 297 "" 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 } {CSTYLE "" -1 298 "" 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 299 "" 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 300 "" 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 301 "" 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 } {CSTYLE "" -1 302 "" 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 303 "" 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 304 "" 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 305 "" 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 } {CSTYLE "" -1 306 "" 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 307 "" 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 308 "" 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 309 "" 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 } {CSTYLE "" -1 310 "" 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 311 "" 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 312 "Helvetica" 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 }{CSTYLE "" -1 313 "" 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 314 "" 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 315 "Helvetica" 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 }{CSTYLE "" -1 316 " " 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 317 "Helvetica" 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 }{CSTYLE "" -1 318 "Helvetica" 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 }{CSTYLE "" -1 319 "" 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 } {CSTYLE "" -1 320 "" 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 321 "" 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 322 "" 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 323 "" 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 } {CSTYLE "" -1 324 "Helvetica" 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 }{CSTYLE " " -1 325 "Helvetica" 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 }{CSTYLE "" -1 326 "" 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 327 "Helvetica" 1 18 128 0 0 1 0 1 0 0 0 0 0 0 0 }{CSTYLE "" -1 328 "" 1 10 0 0 0 0 0 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 329 "Helvetica" 1 14 0 0 0 0 0 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 330 "Helvetica" 1 14 0 0 0 0 0 0 0 0 0 0 0 0 0 } {CSTYLE "" -1 331 "" 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 332 "" 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 333 "Helvetica" 1 14 0 0 0 0 0 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 334 "Helvetica" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 336 "Helvetica" 1 14 0 0 0 0 0 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 337 "Helvetica" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 338 "Helvetica" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 } {CSTYLE "" -1 339 "Helvetica" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 }{PSTYLE " Normal" -1 0 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "Text Output" -1 2 1 {CSTYLE "" -1 -1 "Courier" 1 10 0 0 255 1 0 0 0 0 0 1 3 0 3 }1 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "Heading 1" 0 3 1 {CSTYLE "" -1 -1 "" 1 18 0 0 0 0 0 1 0 0 0 0 0 0 0 }1 0 0 0 8 4 0 0 0 0 0 0 -1 0 }{PSTYLE "" 2 6 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 2 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "Warning" 2 7 1 {CSTYLE "" -1 -1 "" 0 1 0 0 255 1 0 0 0 0 0 0 1 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "Error" 7 8 1 {CSTYLE "" -1 -1 "" 0 1 255 0 255 1 0 0 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "Maple Output" 0 11 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 }3 3 0 -1 -1 -1 0 0 0 0 0 0 -1 0 } {PSTYLE "" 11 12 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 } 1 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 0 256 1 {CSTYLE "" -1 -1 " " 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 }3 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 } {PSTYLE "" 0 257 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 } 3 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 3 258 1 {CSTYLE "" -1 -1 " Helvetica" 1 14 0 0 0 0 0 0 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }} {SECT 0 {PARA 256 "" 0 "" {TEXT 327 39 "Graphische Programmierung mit \+ Maple V 5" }}{PARA 257 "" 0 "" {TEXT 328 46 "April-Mai 98 - Fabian Hus t - VHumorus@aol.com\n" }}{PARA 0 "" 0 "" {TEXT -1 1001 "Maple bietet \+ eine breite Palette von Kommandos, um sowohl zwei- als auch dreidimens ionale Grafiken zu erzeugen. F\374r mathematische Ausdr\374cke gibt es spezielle Packages, die z. B. bei Statistik oder Differenzial-Gleichu ngen hilfreich sind. Dieser Teil des Referates \"Graphiken mit Maple V 5\" (http://www.ikg.rt.bw.schule.de/virkla/names/schuels/maplegr/) so ll Dir helfen, selber Deine eigenen graphischen Prozeduren zu programm ieren. Das Kapitel enth\344lt grundlegende Informationen \374ber die B efehle und ihre Konventionen, Einstellungsm\366glichkeiten und das Ein stellen von Plot-Optionen. Beispiele sollen die M\366glichkeiten von M aple anschaulich darstellen.\nDieses Worksheet richtet sich an Maple-B enutzer, die sich bereits gut mit der Syntax auskennen. Auch lassen si ch bestimmte Teile leider nicht in niedrigeren Versionen von Maple ver wenden. Anstattdessen muss man sich teilweise der neuen Syntax anpasse n. Maple weist den Benutzer allerdings beim Schreiben darauf hin, da \337 sich der Syntax ge\344ndert hat." }}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}}{SECT 1 {PARA 3 "" 0 "" {TEXT 329 31 "1. Grundleg ende Plot-Funktionen" }}{PARA 0 "" 0 "" {TEXT -1 112 "Einige der Maple -Plot-Funktionen nehmen mathematische Funktionen als Input an. Hierzu \+ geh\366ren z. B. die Befehle " }{TEXT 257 4 "plot" }{TEXT -1 2 ", " } {TEXT 258 6 "plot3d" }{TEXT -1 2 ", " }{TEXT 259 7 "animate" }{TEXT -1 2 ", " }{TEXT 260 9 "animate3d" }{TEXT -1 5 " und " }{TEXT 261 13 " complexplot.\n" }{TEXT -1 120 "Maple plottet einfache 2D-Plots, in dem man vorher eine Funktion definiert oder diese direkt in den Plotbefeh l schreibt:" }}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 37 "f:=x->x^2;\np lot(f(x),x);\nplot(x^2,x);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"fGR6 #%\"xG6\"6$%)operatorG%&arrowGF(*$)9$\"\"#\"\"\"F(F(F(" }}}{PARA 0 "" 0 "" {TEXT -1 184 "F\374r 3D-Plots ben\366tigt Maple zwei verschiedene Variablen, bzw. zwei verschieden Funktionen. Dies k\366nnen z. B. zwe i Sinus-Funktionen sein, denen unterschiedliche Werte zugewiesen werde n:" }}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 44 "plot3d(sin(x)*sin(y),x =-10..Pi,y=-2*Pi..Pi);" }}}{PARA 0 "" 0 "" {TEXT -1 683 "Die beiden Fu nktionen k\366nnen nat\374rlich auch wieder vorher definiert werden un d m\374ssen nicht direkt im Plot-Befehl stehen.\nMeistens ist es jedoc h von Vorteil, wenn man die Funktion abspeichert. Dies ist insbesonder e bei komplexen Rechenvorg\344ngen (z. B. beim Integrieren) unerl\344 \337lich, da die Rechenzeit beim Anpassen der darzustellenden Bereiche zu gro\337 w\344re. So wird die mathematische Funktion einmal berechn et, im Speicher gehalten und man hat die M\366glichkeit, an Anpassunge n an den Plots zu arbeiten ohne allzuviel Rechenzeit zu verschwenden. \+ Auch das Schreiben von Prozeduren l\344\337t sich nur \"au\337erhalb\" vom Plot-Syntax realisieren. Dies gilt z. B. f\374r die bekannte Mand elbrotmengen:" }}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 146 "mandelbrot menge:=proc(x,y)\n local z, m;\n z:=evalf(x+y*I);\n m:=0;\n to 100 while abs(z) < 2 do\n z:=z^2+(x+y*I);\n m:=m+1;\n od:\n m; \nend;" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%0mandelbrotmengeGR6$%\"xG% \"yG6$%\"zG%\"mG6\"F,C&>8$-%&evalfG6#,&9$\"\"\"*&%\"IGF59%F5F5>8%\"\"! ?(F,F5F5\"$+\"2-%$absG6#F/\"\"#C$>F/,(*$)F/FB\"\"\"F5F4F5F6F5>F:,&F:F5 F5F5F:F,F,F," }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 57 "plot3d(mand elbrotmenge,-3/2..3/2,-3/2..3/2,grid=[50,50]);" }}}{PARA 0 "" 0 "" {TEXT -1 473 "Hat man sich eine Grafik erzeugt, so kann man diese bere its im Plot-Fenster ver\344ndern. Dazu z\344hlen die Darstellung (1:1) , die Art der Achsen, der Beleuchtung (bei 3D-Graphiken), der Ablauf v on Animationen oder der Ansichtswinkel bei 3D-Grafiken. Aber auch durc h den Einsatz von optionalen Argumenten in der Syntax kann man Einflus s auf die Darstellung von Grafiken nehmen. Grunds\344tzlich lassen sic h alle manuell einstellbaren Optionen auch direkt im Maple-Syntax einb inden:" }}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 73 "plot3d(sin(x)*sin( y),x=-10..Pi,y=-2*Pi..Pi,style=patchnogrid,axes=frame);" }}}{PARA 0 " " 0 "" {TEXT -1 261 "Bei diesem Beispiel wurden das Gitter aus der Zei chnung entfernt, die Eingrenzungen der Wertebereiche also unsichtbar g emacht. Dies erh\366ht die Darstellungsqualit\344t in manchen F\344lle n. Besonders bei der Mandelbrotmenge sehen die Grafiken wesentlich \"w eicher\" aus:" }}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 86 "plot3d(mand elbrotmenge,-3/2..3/2,-3/2..3/2,grid=[50,50],style=patchnogrid,axes=fr ame);" }}}{PARA 0 "" 0 "" {TEXT -1 141 "Genau das Gegenteil l\344sst s ich auch realisieren, in dem man das Gitter darstellt und ganz auf die F\374llung verzichtet (Wireframe-Darstellung)." }}{EXCHG {PARA 0 "> \+ " 0 "" {MPLTEXT 1 0 84 "plot3d(mandelbrotmenge,-3/2..3/2,-3/2..3/2,gri d=[50,50],style=wireframe,axes=frame);" }}}{PARA 0 "" 0 "" {TEXT -1 54 "Diese optionalen Argumente lassen sich mit der Syntax " }{TEXT 262 11 "Name=Option" }{TEXT -1 418 " realisieren. Sie erh\366hen oft d en Informationswert der mathematischen Funktion. Du kannst verschieden e \304nderungen vornehmen, wenn Du Dir einmal definiert hast, was Du p lotten willst. Die Axen-Art, Schattierungen, Linienarten und Farben si nd nur ein paar Beispiele an dieser Stelle. Weiter Optionen werden im \+ Laufe dieses Worksheets erl\344utert. Eine komplette Referenz erh\344l st Du, wenn Du die folgenden Inputs ausf\374hrts:" }}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 13 "?plot,options" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 15 "?plot3d,options" }}}}{SECT 1 {PARA 258 "" 0 "" {TEXT -1 40 "2. Programmierung mit Hilfe von Packages" }}{PARA 0 "" 0 "" {TEXT -1 229 "Wenn Du eine graphische Routine programmieren willst, so sollte diese so weit wie m\366glich interaktiv sein, damit der Benutz er die M\366glichkeit hat, mit Deinem \"Programm\" zu experimentieren \+ und es auf seine Bed\374rfnisse anzupassen.\n" }}{PARA 0 "" 0 "" {TEXT 263 30 "Einen \"Looping\" programmieren\n" }{TEXT -1 177 "Es sol len mehrere Strecken geplottet werden, die sp\344ter wieder zusammenla ufen. Man definiert sich also einfach verschieden Koordinaten, die nac hher miteinander verbunden werden:" }}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 45 "Punkte:=[[4,4],[8,4],[11,23],[11,36],[9,35]];" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#>%'PunkteG7'7$\"\"%F'7$\"\")F'7$\"#6\" #B7$F+\"#O7$\"\"*\"#N" }}}{PARA 0 "" 0 "" {TEXT -1 37 "Dies l\344sst s ich ganz einfach plotten:" }}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 13 "plot(Punkte);" }}}{PARA 0 "" 0 "" {TEXT -1 182 "Jedoch haben wir noch keinen \"Looping\", da die Verbindung vom letzten zum ersten Punkt fe hlt. Diese l\344\337t sich realisieren, in dem man den ersten Punkt no ch in die Liste dazuschreibt:" }}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 51 "Punkte:=[[4,4],[8,4],[11,23],[11,36],[9,35],[4,4]];" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%'PunkteG7(7$\"\"%F'7$\"\")F'7$\"#6\"#B7$F+\"# O7$\"\"*\"#NF&" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 13 "plot(Punk te);" }}}{PARA 0 "" 0 "" {TEXT -1 260 "Doch das dies nicht die geeigne te Methode ist, um automatisierte Worksheets zu erstellen, ist klar. W ird der erste Wert ge\344ndert, so m\374\337te auch der letzte Wert ge \344ndert werden. Maple kann dies aber automatisch erledigen, wenn man eine kleine Prozedur schreibt:" }}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 45 "Punkte:=[[4,4],[8,4],[11,23],[11,36],[9,35]];" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%'PunkteG7'7$\"\"%F'7$\"\")F'7$\"#6\"#B7$F+\"#O7$ \"\"*\"#N" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 58 "loopingplot:=p roc(L)\n plot([op[Punkte],Punkte[1]]);\nend;" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%,loopingplotGR6#%\"LG6\"F(F(-%%plotG6#7$&%#opG6#%'Pun kteG&F06#\"\"\"F(F(F(" }}}{PARA 0 "" 0 "" {TEXT -1 22 "Die Prozedur pl ottet (" }{TEXT 270 4 "plot" }{TEXT -1 45 ") alle sich in der Liste be findenden Punkte (" }{TEXT 271 9 "op[Punkte" }{TEXT -1 45 "]) und setz t den ersten Punkte in der Liste (" }{TEXT 272 9 "Punkte[1]" }{TEXT -1 157 ") an den Schlu\337 der Liste hinzu, damit das Vieleck geschlos sen wird. \nDas Problem an dieser Prozedur ist jedoch, dass sie nicht \+ kontrolliert, ob es sich bei " }{TEXT 264 0 "" }{TEXT -1 10 "der Liste " }{TEXT 265 6 "Punkte" }{TEXT -1 341 " wirklich um eine geeignete Li ste handelt, also eine Liste mit jeweils zwei numerischen Werten (also Zahlen und keine Variablen, denen kein Wert zugewiesen ist). Das kann man jedoch abfragen ([constant,constant]). Au\337erdem l\344sst die o bige Form keine Plotoptionen zu. Deshalb mu\337 man dies in die Prozed ur noch einbauen. In einer Prozedur ist " }{TEXT 266 4 "args" }{TEXT -1 46 " die Folge von Aufrufen in einer Prozedur und " }{TEXT 267 5 "n args" }{TEXT -1 67 " die Anzahl der Argumente. So \374bergibt die Proz edur mit dem Zusatz " }{TEXT 268 14 "args[2..nargs]" }{TEXT -1 204 " d ie Optionen an den Plot-Befehl. Dabei darf nat\374rlich nicht das erst e Argument als Plotoption interpretiert werden, da es sich ja hier um \+ die zu plottenden Punkte handelt. Deshalb muss man als Startwert " } {TEXT 269 1 "2" }{TEXT -1 9 " angeben:" }}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 105 "loopingplot:=proc(Punkte::list([constant,constant])) \n plot([op(Punkte),Punkte[1]],args[2..nargs]);\nend;" }}{PARA 11 " " 1 "" {XPPMATH 20 "6#>%,loopingplotGR6#'%'PunkteG-%%listG6#7$%)consta ntGF-6\"F.F.-%%plotG6$7$-%#opG6#9$&F66#\"\"\"&9\"6#;\"\"#9#F.F.F." }}} {PARA 0 "" 0 "" {TEXT -1 133 "Gibt man jetzt keine korrekte Zahl ein, \+ sondern z. B. eine unbelegte Variable wie hier a, so gibt es die passe nde Fehlermeldung dazu:" }}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 27 "l oopingplot([[1,2],[a,2]]);" }}{PARA 8 "" 1 "" {TEXT -1 124 "Error, loo pingplot expects its 1st argument, Punkte, to be of type list([constan t, constant]), but received [[1, 2], [a, 2]]" }}}{PARA 0 "" 0 "" {TEXT -1 59 "Entweder man gibt jetzt eine korrekte Art von Punkten an. .." }}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 34 "loopingplot([[1,2],[5, 8],[6,10]]);" }}}{PARA 0 "" 0 "" {TEXT -1 54 "...oder man nimmt eine z uvor definierte Liste (s. o.):" }}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 20 "loopingplot(Punkte);" }}}{PARA 0 "" 0 "" {TEXT -1 135 "Der Vorte il dieser etwas komplizierteren Prozedur liegt aber auch darin, dass s ie den Einsatz von beliebig vielen Plotoptionen zul\344sst:" }}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 32 "loopingplot(Punkte,color=green);" } }}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 56 "loopingplot(Punkte,color=g reen,linestyle=6,thickness=3);" }}}{PARA 0 "" 0 "" {TEXT -1 180 "Hier \+ sieht man, da\337 man manchmal sich selbst durch das Schreiben von Pro zeduren eine Menge Arbeit ersparen kann, bzw. erst interaktive und aut omatisierte Worksheets schreiben kann." }}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}}{PARA 0 "" 0 "" {TEXT 273 28 "Eine \"Ribbon\" Plo t Prozedur\n" }{TEXT 274 0 "" }{TEXT -1 84 "Ein \"Ribbon\" Plot ist di e dreidimensionale Ausgabe von zweidimensionalen Funktionen:" }} {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 143 "ribbonplot:=proc(Flist,r1) \n local i, m, p, y;\n m:=nops(Flist);\n p:=seq(plot3d(Flist[i], r1,y=(i-1)..i),i=1..m);\n plots[display](p);\nend;" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%+ribbonplotGR6$%&FlistG%#r1G6&%\"iG%\"mG%\"pG%\"yG 6\"F.C%>8%-%%nopsG6#9$>8&-%$seqG6$-%'plot3dG6%&F56#8$9%/8';,&F@\"\"\"! \"\"FFF@/F@;FFF1-&%&plotsG6#%(displayG6#F7F.F.F." }}}{PARA 0 "" 0 "" {TEXT -1 47 "Zum Darstellen der Plots benutzen wir hier die " }{TEXT 275 7 "display" }{TEXT -1 66 " Prozedur von Maple. Nun kann man mal pr obieren, etwas zu plotten:" }}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 31 "ribbonplot([x^2,-x^2],x=-2..2);" }}}{PARA 0 "" 0 "" {TEXT -1 48 "E ine etwas kompliziertere Funktionenkombination:" }}{EXCHG {PARA 0 "> \+ " 0 "" {MPLTEXT 1 0 56 "ribbonplot([cos(x),cos(4*x),sin(x),sin(4*x)],x =-Pi..Pi);" }}}{PARA 0 "" 0 "" {TEXT -1 51 "Die obere Version verwende t zu viele Gitterpunkte (" }{TEXT 276 4 "grid" }{TEXT -1 109 ") in der y-Richtung, die wir jetzt auf zwei reduzieren wollen. Also ben\366tig en wir in den Optionen den Syntax " }{TEXT 277 18 "grid=[numpoints,2] " }{TEXT -1 2 ". " }{TEXT 278 9 "Numpoints" }{TEXT -1 104 " steht hier f\374r die Anzahl der Gitterpunkte in der x-Richtung die man auch ver \344ndern sollte. Der Befehl " }{TEXT 279 9 "hasoption" }{TEXT -1 95 " hilft einem dabei, festzustellen, ob eine Option angegeben ist, oder \+ nicht. Ist also der Wert " }{TEXT 280 10 "numpoints " }{TEXT -1 43 "an gegeben, so wird die Option als Variable " }{TEXT 281 1 "n" }{TEXT -1 54 " als viertes Argument in die Plotoptionen eingebracht:" }}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 395 "ribbonplot:=proc(Flist,r1::name=ra nge)\n local i, m, p, y, n, opts;\n opts:=[args[3..nargs]];\n if not hasoption(opts,'numpoints','n','opts')\n then n:=25 # falls num points nicht angegeben wird, werden standardm\344\337ig 25 genommen\n \+ fi;\n\n m:=nops(Flist); #Anzahl der Elemente in der Liste Flist\n \+ p:=seq(plot3d(Flist[i],r1,y=(i-1)..i,grid=[n,2],op(opts)),i=1..m);\n plots[display](p);\nend:" }}}{PARA 0 "" 0 "" {TEXT -1 46 "Nun kann \+ der Benutzer das Gitter beeinflussen:" }}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 68 "ribbonplot([cos(x),cos(4*x),sin(x),sin(4*x)],x=-Pi..P i,numpoints=2);" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 69 "ribbonpl ot([cos(x),cos(4*x),sin(x),sin(4*x)],x=-Pi..Pi,numpoints=80);" }}} {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 71 "ribbonplot([cos(x),cos(4*x), sin(x),sin(4*x)],x=-Pi..Pi,numpoints=1000);" }}}{PARA 0 "" 0 "" {TEXT -1 286 "Nun kann die Prozedur aber nur mit Ausdr\374cken arbeiten und \+ nicht mit einer Liste von Funktionen. Hierzu m\374ssen wir den Ausdruc k mittels einer externen Prozedur in eine Funktion umwandeln, die mit \+ zwei Variablen arbeitet, damit wir sie in der Hauptprozedur (3D) weite rverarbeiten k\366nnen:" }}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 54 "e xtend:=proc(f)\n local x,y;\n unapply(f(x),x,y);\nend:" }}}{PARA 0 " " 0 "" {TEXT -1 6 "Z. B.:" }}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 22 "f:=x->x;\nq:=extend(f);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"fGR6#% \"xG6\"6$%)operatorG%&arrowGF(9$F(F(F(" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"qGR6$%\"xG%\"yG6\"6$%)operatorG%&arrowGF)9$F)F)F)" }}}{PARA 0 "" 0 "" {TEXT -1 43 "Die neue Prozedur sieht dann wie folgt aus:" }} {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 589 "ribbonplot:=proc(Flist,r1:: \{range,name=range\})\n local i, m, p, n, opts, newFlist;\n opts:= [args[3..nargs]];\n if type(r1,range) then\n if not hasoption(o pts,'numpoints','n','opts')\n then n:=25 # falls numpoints nicht \+ angegeben wird, werden standardm\344\337ig 25 genommen\n fi;\n m:= nops(Flist); #Anzahl der Elemente in der Liste Flist\n p:=seq(plot3d (extend(Flist[i]),r1,(i-1)..i,grid=[n,2],op(opts)),i=1..m);\n plots[ display](p);\nelse\n newFlist:=map(unapply,Flist,lhs(r1));\n opts: =['labels'=[lhs(r1),\"\",\"\"],args[3..nargs]];\n ribbonplot(newFlis t,rhs(r1),op(opts))\nfi\nend:" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 51 "ribbonplot([cos,si n,cos+sin],-Pi..Pi,numpoints=80);" }}}}{SECT 1 {PARA 3 "" 0 "" {TEXT 330 29 "3. Die Plot-Struktur in Maple" }}{PARA 0 "" 0 "" {TEXT -1 292 "Maple generiert Plots, in dem die Anweisungen, die der Benutzer dem P rogramm \374ber die Eingabe des Syntax mitteilt, an die Grafik-Engine \+ schickt. Dabei werden vorprogrammierte Packages verwendet. In diesen s ind sogennante Kommandos abgespeichert, die Maple dann interpretiert. \+ Wir das Package " }{TEXT 256 5 "plots" }{TEXT -1 65 " geladen, so steh en einem dann folgende Kommandos zur Verf\374gung.\010" }}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 12 "with(plots);" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#7U%(animateG%*animate3dG%-animatecurveG%-changecoordsG% ,complexplotG%.complexplot3dG%*conformalG%,contourplotG%.contourplot3d G%*coordplotG%,coordplot3dG%-cylinderplotG%,densityplotG%(displayG%*di splay3dG%*fieldplotG%,fieldplot3dG%)gradplotG%+gradplot3dG%-implicitpl otG%/implicitplot3dG%(inequalG%-listcontplotG%/listcontplot3dG%0listde nsityplotG%)listplotG%+listplot3dG%+loglogplotG%(logplotG%+matrixplotG %(odeplotG%'paretoG%*pointplotG%,pointplot3dG%*polarplotG%,polygonplot G%.polygonplot3dG%4polyhedra_supportedG%.polyhedraplotG%'replotG%*root locusG%,semilogplotG%+setoptionsG%-setoptions3dG%+spacecurveG%1sparsem atrixplotG%+sphereplotG%)surfdataG%)textplotG%+textplot3dG%)tubeplotG " }}}{PARA 0 "" 0 "" {TEXT -1 36 "Weitere oft verwandte Packages sind \+ " }{TEXT 331 9 "plottools" }{TEXT -1 5 " und " }{TEXT 332 7 "student" }{TEXT -1 1 ":" }}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 16 "with(plott ools);" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#7F%$arcG%&arrowG%'circleG%%c oneG%'cuboidG%&curveG%&cutinG%'cutoutG%)cylinderG%%diskG%-dodecahedron G%(ellipseG%,ellipticArcG%+hemisphereG%+hexahedronG%*homothetyG%*hyper bolaG%,icosahedronG%%lineG%+octahedronG%)piesliceG%&pointG%(polygonG%( projectG%*rectangleG%(reflectG%'rotateG%&scaleG%*semitorusG%'sphereG%) stellateG%,tetrahedronG%&torusG%*transformG%*translateG%%vrmlG" }}} {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 14 "with(student);" }}{PARA 12 " " 1 "" {XPPMATH 20 "6#7F%\"DG%%DiffG%*DoubleintG%$IntG%&LimitG%(Linein tG%(ProductG%$SumG%*TripleintG%*changevarG%(combineG%/completesquareG% )distanceG%'equateG%(extremaG%*integrandG%*interceptG%)intpartsG%(isol ateG%(leftboxG%(leftsumG%)makeprocG%)maximizeG%*middleboxG%*middlesumG %)midpointG%)minimizeG%(powsubsG%)rightboxG%)rightsumG%,showtangentG%( simpsonG%&slopeG%(summandG%*trapezoidG%&valueG" }}}{PARA 0 "" 0 "" {TEXT -1 98 "Auch ohne dieses Package geladen zu haben, kann man berei ts Plots erstellen, aber z. B. nicht den " }{TEXT 282 7 "display" } {TEXT -1 83 "-Befehl verwenden. Man kann sogar Eingaben die Maple inte rpretiert sichtbar machen:" }}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 57 "lprint(plot(x^2,x,title=`x^2`, color=blue, thickness=2));" }} {PARA 6 "" 1 "" {TEXT -1 2049 "PLOT(CURVES([[-10., 100.], [-9.56405691 6666667, 91.47118470523951], [-9.184745170833333, 84.35954385314622], \+ [-8.758169441666666, 76.70553196894380], [-8.328766091666667, 69.36834 460969645], [-7.901403620833333, 62.43217917931811], [-7.5051839041666 67, 56.32778543536241], [-7.094921337500001, 50.33790878531280], [-6.6 70627204166666, 44.49726729696840], [-6.247693787499999, 39.0336776623 6609], [-5.812654783333333, 33.78695563020787], [-5.429472191666666, 2 9.47916828008163], [-4.998099349999999, 24.98099711247042], [-4.564955 250000000, 20.83881643450256], [-4.147540650000000, 17.20209344340242] , [-3.768488204166666, 14.20150334494330], [-3.317758183333333, 11.007 51936307530], [-2.935930733333333, 8.619689270931200], [-2.49177463750 0000, 6.208940844088255], [-2.098621233333334, 4.404211080997523], [-1 .667269637499999, 2.779788044129377], [-1.256520912499999, 1.578844803 549831], [-.8279477083333315, .6854974077344155], [-.4343837208333330, .1886892169250110], [-.9871791666666851e-2, .9745227071007309e-4], [. 4310767958333344, .1858272039059342], [.8149238375000003, .66410086092 57270], [1.229489158333335, 1.511643590459212], [1.657775700000000, 2. 748220271510490], [2.076770525000001, 4.312975813508778], [2.482169562 500001, 6.161165737001447], [2.932296075000000, 8.598360271460406], [3 .336754766666665, 11.13393237287271], [3.768600750000001, 14.202351612 90057], [4.159917395833332, 17.30491274015677], [4.587729850000002, 21 .04726517658104], [4.990268029166666, 24.90277500292296], [5.411036412 500001, 29.27931505740089], [5.822414416666666, 33.90050963940783], [6 .253089062499999, 39.10112282355712], [6.667879933333335, 44.460622805 34936], [7.092063508333336, 50.29736480623335], [7.512734629166669, 56 .44118160828005], [7.899287700000002, 62.39874616737132], [8.342321141 666670, 69.59432203069869], [8.738575533333336, 76.36270235177199], [9 .161065362500000, 83.92511857599726], [9.565442037500002, 91.497681372 77219], [10., 100.]]),THICKNESS(2),COLOUR(RGB,0,0,1.00000000),TITLE(`x ^2`),AXESLABELS(\"x\",``),VIEW(-10. .. 10.,DEFAULT))" }}}{PARA 0 "" 0 "" {TEXT -1 178 "Um Deine eigenen 2D- und 3D-Plots zu machen, kannst D u diese Plot-Struktur ver\344ndern. Du musst lediglich wissen, wie Du \+ geometrischen Funktionen korrekt im Syntax anwenden musst." }}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 20 "plot([[0,0],[4,4]]);" }}}{PARA 0 " " 0 "" {TEXT -1 397 "Maple zeichnet eine Gerade vom Ursprung zum Punkt [4,4]. Dies funktioniert, weil Maple sich eine Liste von Punkten bere chnet, die zwischen diesen beiden Punkten liegen. Im Klartext hei\337t das f\374r Maple einen hohen Rechenaufwand, weil eine gro\337e Anzahl von Punkten berechnet werden m\374ssen. Gibt man z. B. eine andere Li nienart an, so mu\337 Maple zus\344tzlich noch die Punkteliste dements prechend \344ndern:" }}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 32 "plot( [[0,0],[4,4]],linestyle=6);" }}}{PARA 0 "" 0 "" {TEXT -1 98 "Eine h \344ufige Fehlerquelle liegt beim Einsatz von Variablen. Diese m\374ss en unbedingt numerisch sein:" }}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 3 "Pi;" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#%#PiG" }}}{EXCHG {PARA 0 "> \+ " 0 "" {MPLTEXT 1 0 10 "evalf(Pi);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6# $\"+aEfTJ!\"*" }}}{PARA 0 "" 0 "" {TEXT -1 14 "Mit dem Befehl" }{TEXT 283 6 " evalf" }{TEXT -1 19 ", ist die Variable " }{XPPEDIT 18 0 "Pi; " "6#%#PiG" }{TEXT -1 82 " in den numerischen Wert umgewandelt worden. Dies vermeidet diese Fehlermeldung: \"" }{TEXT 284 28 "Non-numeric ve rtex definitio" }{TEXT -1 2 "n\"" }}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 88 "restart:\npoints:=[seq([2*cos(i*Pi/200),sin(i*Pi/200)],i=0 .. \+ 200)]:\nplot(evalf(points));" }}}{PARA 0 "" 0 "" {TEXT -1 83 "Ob es si ch um einen numerischen Wert handelt kann ganz einfach so \374berpr \374ft werden:" }}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 24 "type(sin(P i/n),numeric);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#%&falseG" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}}{PARA 0 "" 0 "" {TEXT -1 61 "Im allgemeinen ist die Plot-Struktur immer gleich aufgebaut:\n" }{TEXT 285 48 "ObjectName(ObjectInformation, LocalInformation)\n" }{TEXT -1 274 "Der ObjectName ist der Name der Funktion, also z. B. einer Kurve, eines Polygons (Vieleck), Punktes oder Textes. Die ObjectInformation \+ enth\344lt die Informationen \374ber das einzelne Objekt. Die ObjectIn formationen sind damit vom ObjectName abh\344ngig. Wenn z. B. der Obje ctName \"" }{TEXT 286 6 "points" }{TEXT -1 119 "\" ist, dann mu\337 di e ObjectInformation auch eine oder mehrere Listen zweidimensionaler Pu nkte sein. Ist der ObjectName \"" }{TEXT 287 7 "polygon" }{TEXT -1 139 "\", so erwartet Maple in der ObjectInformation eine Liste von Koo rdinaten, die je einer Ecke des Vielecks entspricht. Wenn der ObjectN ame \"" }{TEXT 288 4 "text" }{TEXT -1 466 "\" heisst, so enth\344lt di e Objectinformation die Koordinaten und den zu plottenden Text. In den LocalInformation k\366nnen den einzelnen ObjectNames Optionen zugewie sen werden. Dabei ist zu beachten, da\337 bereits bestehende, standard m\344\337ige Optionen (z. B. Farbe, Linienart, Axen, etc.) automatisch \374berschrieben werden.\nHier ist ein kleines Beispiel, wie man eine Sinuskurve mit Polygonen \"schraffieren\" kann. Dabei verwendet Maple als Farbe den aktuellen Wert von cos(x)." }}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 74 "p := i->[[(i-1)/10,0],[(i-1)/10,sin((i-1)/10)],[i/10, sin(i/10)],[i/10,0]]:" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 5 "p(2 );" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7&7$#\"\"\"\"#5\"\"!7$F%-%$sinG6 #F%7$#F&\"\"&-F+6#F.7$F.F(" }}}{PARA 0 "" 0 "" {TEXT -1 88 "Jetzt mu \337 noch eine Funktion definiert werden, die der Schraffierung die Fa rbe verleiht." }}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 86 "h:=i->abs(c os(i/10)):\nPLOT(seq(POLYGONS(evalf(p(i)),COLOR(HUE,evalf(h(i)))),i=1. .63));" }}}{PARA 0 "" 0 "" {TEXT -1 0 "" }{TEXT 289 19 "Plotten von Su mmen\n" }{TEXT -1 39 "Wir definieren uns eine Summenfunktion:" }} {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 8 "restart:" }}}{EXCHG {PARA 0 " > " 0 "" {MPLTEXT 1 0 22 "s:=Sum(1/k^2,k=1..10);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"sG-%$SumG6$*&\"\"\"F)*$)%\"kG\"\"#F)!\"\"/F,;\"\"\" \"#5" }}}{PARA 0 "" 0 "" {TEXT -1 144 "Man kann die Summenfunktion in \+ seine einzelnen Bestandteile zerlegen. Dies kann besonders wichtig sei n, wenn man einzelne Werte \374berpr\374fen will:" }}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 76 "typematch(s,'Sum'(ueberpruefung::algebraic,n: :name=a::integer..b::integer));" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#%%t rueG" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 20 "ueberpruefung,n,a,b ;" }}{PARA 11 "" 1 "" {XPPMATH 20 "6&*&\"\"\"F$*$)%\"kG\"\"#F$!\"\"F' \"\"\"\"#5" }}}{PARA 0 "" 0 "" {TEXT -1 45 "So kann man jetzt teilweis e die Summe ziehen:" }}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 28 "sum(u eberpruefung,n=a..a+2);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6##\"#\\\"#O " }}}{PARA 0 "" 0 "" {TEXT -1 278 "Jetzt wird es etwas komplizierter. \+ Der folgende Syntax erzeugt eine Prozedur namens \"psum\", mit der Du \+ die Summe bis zu einem beliebigen Punkt berechnen kannst. Der Clou ist , dass Du Dir alle Zwischenschritte ausgeben lassen kannst und so z. B . Treppenfunktionen plotten kannst." }}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 54 "psum:=evalf @unapply(Sum(ueberpruefung,n=a..(a+m)),m) ;" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%%psumG-%\"@G6$%&evalfGR6#%\"mG6 \"6$%)operatorG%&arrowGF,-%$SumG6$*&\"\"\"F4*$)%\"kG\"\"#F4!\"\"/F7;\" \"\",&F " 0 "" {MPLTEXT 1 0 54 "punkte:=[seq([[i,psum(i)], [i+1,psum(i)]],i=1..(b-a))];" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#>%'pun kteG7+7$7$\"\"\"$\"++++]7!\"*7$\"\"#F)7$7$F-$\"+666h8F+7$\"\"$F07$7$F3 $\"+66hB9F+7$\"\"%F67$7$F9$\"+66hj9F+7$\"\"&F<7$7$F?$\"+*)))Q\"\\\"F+7 $\"\"'FB7$7$FE$\"+_qz6:F+7$\"\"(FH7$7$FK$\"+_?UF:F+7$\"\")FN7$7$FQ$\"+ JxwR:F+7$\"\"*FT7$7$FW$\"+Jxw\\:F+7$\"#5FZ" }}}{PARA 0 "" 0 "" {TEXT -1 88 "Dies wandeln wir uns schnell in einen Punkteplot um, um die Tre ppenfunktion zu erhalten:" }}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 21 "plot(map(op,punkte));" }}}{PARA 0 "" 0 "" {TEXT -1 200 "Maple w\344re nicht Maple, wenn man f\374r diese doch recht komplizierten Schritte \+ nicht auch noch eine noch kompliziertere Prozedur (\"sumplot\") schrei ben k\366nnte, die uns die m\374hsame Arbeit ganz abnimmt ;-)" }} {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 36 "restart:with(plots):with(plo ttools):" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 360 "sumplot:=proc( s)\nlocal term,n,a,b,psum,m,punkte,i;\nif typematch(s,'Sum'(ueberpruef ung::algebraic,n::name=a::integer..b::integer)) then\n psum:=evalf @ unapply(Sum(ueberpruefung,n=a..(a+m)),m);\n punkte:=[seq([[i,psum(i )],[i+1,psum(i)]],i=1..(b-a))];\n punkte:=map(op,points);\n plot(C URVES(points));\nelse\n ERROR(\"Erwarte eine Summe als Eingabe!\")\n fi\nend:" }}}{PARA 0 "" 0 "" {TEXT -1 154 "Jetzt haben wir ein geniale s Werkzeug an der Hand. Wir m\374ssen nur noch die Summe angeben und d en Bereich, den wir st\374ckweise berechnen und plotten wollen:" }} {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 32 "#sumplot:=Sum((-1)^k/k,k=1.. 25);" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 31 "sumplot(Sum((-1)^k/ k,k=1..25));" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#--%$SumG6$*&)!\"\"%\"k G\"\"\"F*!\"\"/F*;\"\"\"\"#D6#F$" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}}{PARA 0 "" 0 "" {TEXT 290 14 "Plotten in 3D\n" } {TEXT -1 261 "Die dreidimensionale Plotstruktur ist der zweidimensiona len Plotstruktur sehr \344hnlich und so ist es kein Problem, sich auch einmal in die dritte Dimension zu begeben. Die folgende Prozedur erst ellt eine dreidimensionale Box, deren Seiten gelb eingef\344rbt werden ." }}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 20 "restart:with(plots):" } }}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 335 "box:=proc(x,y,z,u)\n# (x, y,0) = die Koordinaten der Box\n# z = die H\366he der Box\n# u = die s eitliche L\344nge der Box\nPOLYGONS(\n [[x,y,0],[x+u,y,0],[x+u,y,z], [x,y,z]],\n [[x,y,0],[x,y+u,0],[x,y+u,z],[x,y,z]],\n [[x+u,y,0],[x +u,y+u,0],[x+u,y+u,z],[x+u,y,z]],\n [[x+u,y+u,0],[x,y+u,0],[x,y+u,z] ,[x+u,y+u,z]],\n COLOR(RGB,1,1,0));\nend:" }}}{PARA 0 "" 0 "" {TEXT -1 99 "Um das richtige dreidimensionale Feeling zu bekommen, erh \344lt die Box jetzt noch einen roten Deckel:" }}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 110 "redtop:=proc(x,y,z,u)\nPOLYGONS(\n [[x,y,z],[ x+u,y,z],[x+u,y+u,z],[x,y+u,z]],\n COLOR(RGB,1,0,0));\nend:" } }}{PARA 0 "" 0 "" {TEXT -1 66 "Der Benutzer kann das Aussehen der Box \+ jetzt interaktiv ver\344ndern:" }}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 54 "PLOT3D(box(1,2,3,0.5),redtop(1,2,3,0.5),STYLE(PATCH));" }}} {PARA 0 "" 0 "" {TEXT -1 71 "Je nach Lust und Laune kann man jetzt auc h ein Histogramm plotten. Mit " }{TEXT 323 8 "sequence" }{TEXT -1 47 " ist das nicht viel Arbeit - und sieht gut aus." }}{EXCHG {PARA 0 "> \+ " 0 "" {MPLTEXT 1 0 113 "sides:=seq(seq(box(i,j,1/(i+j+4),0.75),j=0..4 ),i=0..4):\ntops:=seq(seq(redtop(i,j,1/(i+j+4),0.75),j=0..4),i=0..4): " }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 49 "PLOT3D(sides,tops,STYLE (PATCH),AXESSTYLE(BOXED));" }}}}{SECT 1 {PARA 3 "" 0 "" {TEXT 333 41 " 4. Programmieren mit Plot Data Structures" }}{PARA 0 "" 0 "" {TEXT -1 314 "Diese Kapitel beschreibt einen Teil der M\366glichkeiten, wie man mit Maple per Programmierung verschiedene Werkzeuge zur zweidimension alen und dreidimensionalen Plotterzeugung verwenden kann. Maple bietet durch die Verwendung von Plot Data Structures eine vereinfachte Art u nd Weise, komplexe Grafiken zu erstellen.\n" }{TEXT 291 31 "Leichte Gr afiken programmieren\n" }{TEXT -1 123 "Du kannst Prozeduren schreiben, die Dir tiefere Eingriffe in Maple erlauben. Zum Beispiel erm\366glic hen es Dir die Kommandos " }{TEXT 292 4 "line" }{TEXT -1 5 " und " } {TEXT 293 4 "disk" }{TEXT -1 200 ", verschiedene Modelle, wie Punkte, \+ Linien, Kurven, Kreise, Vielecke sowohl im zweidimensionalen als auch \+ im dreidimensionalen Bereich zu plotten. Um diese Befehle zur Verf\374 gung zu haben, mu\337t Du das " }{TEXT 294 9 "plottools" }{TEXT -1 23 "-Package geladen haben:" }}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 24 " restart:with(plottools);" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#7F%$arcG%& arrowG%'circleG%%coneG%'cuboidG%&curveG%&cutinG%'cutoutG%)cylinderG%%d iskG%-dodecahedronG%(ellipseG%,ellipticArcG%+hemisphereG%+hexahedronG% *homothetyG%*hyperbolaG%,icosahedronG%%lineG%+octahedronG%)piesliceG%& pointG%(polygonG%(projectG%*rectangleG%(reflectG%'rotateG%&scaleG%*sem itorusG%'sphereG%)stellateG%,tetrahedronG%&torusG%*transformG%*transla teG%%vrmlG" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 144 "line:=proc(x ::list,y::list)\n local opts;\n opts:=[args[3..nargs]];\n opts:= convert(opts,PLOToptions);\n CURVES(evalf([x,y]),op(opts));\nend:" } }}{PARA 0 "" 0 "" {TEXT -1 31 "Innerhalb einer Prozedur steht " } {TEXT 295 5 "nargs" }{TEXT -1 57 " f\374r die Anzahl der verwendeten A rgumente (Optionen) und " }{TEXT 296 4 "args" }{TEXT -1 56 " steht f \374r das aktuelle verwendete Argument. Der Syntax " }{TEXT 297 16 "[a rgs[3..nargs]]" }{TEXT -1 78 " enth\344lt alle vom Benutzer eingegeben en Optionen. Diese stehen bekanntlich im " }{TEXT 300 4 "plot" }{TEXT -1 40 "-Befehl nach der Funktion. Deshalb wird " }{TEXT 298 4 "opts" } {TEXT -1 65 " mit dem folgenden Befehl in die richtige Form gebracht, \+ die der " }{TEXT 299 4 "plot" }{TEXT -1 19 "-Befehl \"versteht\"." }} {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 44 "convert([axes=boxes,color=re d],PLOToptions);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7$-%*AXESSTYLEG6#% &boxesG-%'COLOURG6&%$RGBG$\"*++++\"!\")\"\"!F/" }}}{PARA 0 "" 0 "" {TEXT -1 13 "Anstelle von " }{TEXT 301 4 "opts" }{TEXT -1 29 " habe ic h jetzt als Beispiel " }{TEXT 302 11 "axes=boxes " }{TEXT -1 4 "und " }{TEXT 303 9 "color=red" }{TEXT -1 51 " genommen. Die richtige Struktu r wird erzeugt.\nDer " }{TEXT 304 4 "disk" }{TEXT -1 29 "-Befehl wird \+ \344hnlich wie der " }{TEXT 305 4 "line" }{TEXT -1 141 "-Befehl verwen det. Man kann zus\344tzlich allerdings die Anzahl der Punkte bestimmen , aus der Maple die \"Scheibe\" generieren soll. Deshalb muss " } {TEXT 306 4 "disc" }{TEXT -1 5 " die " }{TEXT 307 9 "numpoints" } {TEXT -1 40 "-Option gesondert behandeln. Der Befehl " }{TEXT 308 9 "h asoption" }{TEXT -1 172 " kontrolliert, ob eine bestimmte Option vorha nden ist oder nicht und kann so den Verlauf einer Prozedur beeinflusse n. Wenn beim Aufruf dieser Prozedur im Syntax die Option " }{TEXT 309 9 "numpoints" }{TEXT -1 73 " nicht vorhanden ist, so setzt die Prozedu r als Standard den Wert 50 f\374r " }{TEXT 310 10 "numpoints " }{TEXT -1 4 "ein." }}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 351 "disk:=proc(x: :list,r::algebraic)\n # r steht f\374r den Radius der \"Scheibe\"\n \+ local i, n, opts, vertices;\n opts:=[args[3..nargs]];\n if not h asoption(opts,numpoints,n,'opts')\n then n:=50;\n fi;\n opts:=co nvert(opts,PLOToptions);\n vertices:=seq(evalf([x[1]+r*cos(2*Pi*i/n) ,x[2]+r*sin(2*Pi*i/n)]),i=0..n);\n POLYGONS([vertices],op(opts));\ne nd:" }}}{PARA 0 "" 0 "" {TEXT -1 17 "Insofern man das " }{TEXT 311 5 " plots" }{TEXT -1 85 "-package geladen hat, hat man dank dieser Prozedu r eine sehr gro\337e Handlungsfreiheit:" }}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 12 "with(plots):" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 143 "display(disk([-1,0],1/2,color=yellow),line([-1,1/2],[1,1/2],col or=red,linestyle=2),disk([1,0],1/2,thickness=5,color=grey),scaling=con strained);" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 172 "display(disk ([-1,1/2],1/2,color=grey,thickness=5),line([-1,1/2],[1,-1/2],color=red ,thickness=5,linestyle=2),disk([1,-1/2],-1/2,thickness=5,color=grey),s caling=constrained);" }}}{PARA 0 "" 0 "" {TEXT 334 0 "" }{TEXT 312 20 "\"Zahnr\344der\" plotten\n" }{TEXT -1 163 "Dieses Beispiel soll zeige n, wie man zweidimensionale Plots in dreidimensionale Plots verwandeln kann. Zuerst plotten wir uns einmal ein zweidimensionales Zahnrad:" } }{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 36 "restart:with(plots):with(pl ottools):" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 185 "outside:=proc (a,r,n)\n local p1,p2;\n p1:=evalf([cos(a*Pi/n),sin(a*Pi/n)]);\n \+ p2:=evalf([cos((a+1)*Pi/n),sin((a+1)*Pi/n)]);\n if r=1 then p1, p2; else p1, r*p1, r*p2, p2;\n fi\nend:" }}}{PARA 0 "" 0 "" {TEXT -1 13 "Zum Beispiel:" }}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 21 "outside (Pi/4,1.1,16);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6&7$$\"+#)yK\"))*!#5$ \"+/1-O:F&7$$\"+ng%p3\"!\"*$\"+kEi*o\"F&7$$\"++y4L5F,$\"+BOoxPF&7$$\"+ #=)z\"R*F&$\"+RyDMMF&" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 39 "PL OT(CURVES([%]),SCALING(CONSTRAINED));" }}}{PARA 0 "" 0 "" {TEXT -1 77 "Wenn man diese St\374cke aneinanderreiht, so erh\344lt man ein Zahnra d. Den Befehl " }{TEXT 313 11 "constrained" }{TEXT -1 103 " ben\366tig t man, um die Darstellung 1:1 zu erhalten, also da\337 das Zahnrad wir klich rund dargestellt wird." }}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 102 "points:=[seq(outside(2*a,1.1,16),a=0..16)]:\nPLOT(CURVES(points), AXESSTYLE(NONE),SCALING(CONSTRAINED));" }}}{PARA 0 "" 0 "" {TEXT -1 120 "Jetzt kann man z. B. das Zahnrad mit Polygonen f\374llen. Wir plo tten also Dreiecke, die von den Zacken bis zu Mitte gehen:" }}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 149 "a:=seq([[0,0],outside(2*j,1.1,16)] ,j=0..15):\nb:=seq([[0,0],outside(2*j+1,1,16)],j=0..15):\nPLOT(POLYGON S(a,b), AXESSTYLE(NONE), SCALING(CONSTRAINED));" }}}{PARA 0 "" 0 "" {TEXT -1 20 "Wenn wir jetzt noch " }{TEXT 314 18 "style(patchnogrid)" }{TEXT -1 210 " zu der obigen Struktur hinzuf\374gen, so k\366nnen wir das Zahnrad plastischer erscheinen lassen. Um es dann schlie\337lich \+ in der dritten Dimension zu plotten, f\374gen wir noch die Variable zu r folgenden Prozedur hinzu." }}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 92 "double:=proc(L,t)\n local u;\n [seq([u[1],u[2],0],u=L)],\n [ seq([u[1],u[2],t],u=L)];\nend:" }}}{PARA 0 "" 0 "" {TEXT -1 123 "Diese Prozedur klont die vorhergegangene Figur und stellt sie im dreidimens ionalen Raum mit der H\366hre 0 und der H\366he t dar." }}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 129 "border:=proc(L1,L2)\n local i, n ;\n n:=nops(L1);\n seq([L1[i],L2[i],L2[i+1],L1[i+1]],i=1..n-1),[L1 [n],L2[n],L2[1],L1[1]];\nend:" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 113 "faces:=seq(double(p,1/2),p=[seq([outside(2*a+1,1.1,16),[0,0]],a =0..16),\nseq([outside(2*a,1,16),[0,0]],a=0..16)]):" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 24 "PLOT3D(POLYGONS(faces));" }}}{PARA 0 "" 0 "" {TEXT -1 48 "Wie oben, ergibt dies die Punkte der Zahnrandes:" }} {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 102 "points:=[seq(outside(2*a,1. 1,16),a=0..16)]:\nPLOT(CURVES(points),AXESSTYLE(NONE),SCALING(CONSTRAI NED));" }}}{PARA 0 "" 0 "" {TEXT -1 99 "Wenn wir jetzt diese Punkte ve rdoppeln und diese verbinden, bekommen wir eine weitere 3D-Version... " }}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 63 "bord:=border(double([seq (outside(2*a+1,1.1,16),a=0..15)],1/2)):" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 32 "PLOT3D(seq(POLYGONS(b),b=bord));" }}}{PARA 0 "" 0 "" {TEXT -1 221 "Wir haben jetzt also das flache Zahnrad (Anfang) und jet zt den Rahmen. Wenn wir diese beiden Plots zusammenf\374hre, erhalten \+ wir das \"massive\" Zahnrad. Dieses Vorgehen l\344\337t sich nat\374rl ich auch auf andere Objekte \374bertragen." }}{EXCHG {PARA 0 "> " 0 " " {MPLTEXT 1 0 101 "PLOT3D(POLYGONS(faces,STYLE(PATCHNOGRID)),seq(POLY GONS(b),b=bord),STYLE(PATCH),SCALING(CONSTRAINED));" }}}{PARA 0 "" 0 " " {TEXT -1 0 "" }{TEXT 315 16 "Gitter mit Maple" }}{PARA 0 "" 0 "" {TEXT -1 91 "Auf sehr einfache Weise kann man auch \"Gitter\" mit Mapl e erstellen. Na ja, wer's braucht..." }}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 36 "restart:with(plots):with(plottools):" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 112 "polygongrid:=proc(gridlist,i,j)\n \+ gridlist[j][i],gridlist[j][i+1],\n gridlist[j+1][i+1],gridlist[j+1 ][i];\nend:" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 171 "makePolygon grid:=proc(gridlist)\n local m,n,i,j;\n n:=nops(gridlist);\n m:= nops(gridlist[1]);\n POLYGONS(seq(seq([polygongrid(gridlist,i,j)],i= 1..m-1),j=1..n-1));\nend:" }}}{PARA 0 "" 0 "" {TEXT -1 233 "Im folgend en erstellen wir uns eine Liste von Punkten. Jeder Punkt steht f\374r \+ eine Stelle, an denen sich zwei Strecken kreuzen. Die Prozedur entwick elt daraus das Gitter, in dem die Linien zur x- und y-Achse parallel v erbunden werden." }}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 41 "L:=[seq( [seq([i-1,j-1],i=1..3)],j=1..4)];" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#> %\"LG7&7%7$\"\"!F(7$\"\"\"F(7$\"\"#F(7%7$F(F*7$F*F*7$F,F*7%7$F(F,7$F*F ,7$F,F,7%7$F(\"\"$7$F*F77$F,F7" }}}{PARA 0 "" 0 "" {TEXT -1 51 "Jetzt \+ braucht man die Prozedur nur noch aufzurufen:" }}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 26 "grid1:=makePolygongrid(L);" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#>%&grid1G-%)POLYGONSG6(7&7$\"\"!F*7$\"\"\"F*7$F,F,7$F*F ,7&F+7$\"\"#F*7$F1F,F-7&F.F-7$F,F17$F*F17&F-F27$F1F1F47&F5F47$F,\"\"$7 $F*F:7&F4F77$F1F:F9" }}}{PARA 0 "" 0 "" {TEXT -1 15 "Und zu plotten:" }}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 12 "PLOT(grid1);" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}}}{SECT 1 {PARA 3 "" 0 "" {TEXT 336 39 "5. Mit plottools-Packages programmieren" }}{PARA 0 "" 0 "" {TEXT -1 247 "Nicht immer ist es n\366tig, so tief in die Maple-Plot-E ngine einzugreifen, wie wir dies in Kapitel 4 getan haben. Stattdessen kann man vorgefertigte Hilfsmittel zum plotten verwenden, sogenannte \+ Packages.\nEin erstes Beispiel soll dies verdeutlichen:" }}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 92 "with(plots):with(plottools):\ndispl ay(sphere([0,0,2]),torus([0,0,0]),style=patch,axes=frame);" }}}{PARA 0 "" 0 "" {TEXT -1 327 "Nat\374rlich hatte man diese dreidimensionale \+ Figur auch von Hand erzeugen k\366nnen, in dem man mehrere Polygone an einanderreiht. Dies ist jedoch nicht n\366tig, da Maple f\374r eine Vi elzahl von Aufgaben leistungsf\344hgige Packages bereith\344lt. Auch e ine so aufwendige Berechnung wie das Drehen dreidimensionaler Objekte \+ ist mit dem Befehl " }{TEXT 316 6 "rotate" }{TEXT -1 34 " schnell und \+ komfortabel erledigt." }}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 26 "rot ate(%,Pi/4,-Pi/4,Pi/4);" }}}{PARA 0 "" 0 "" {TEXT 337 0 "" }{TEXT 317 19 "Ein Kuchendiagramm\n" }{TEXT -1 334 "Gibt es mal keine vorgefertig te Prozedur, so mu\337 man sich doch eben eine selberbasteln. Im folge nden wollen wir ein Kuchendiagramm automatisch von der Prozedur erzeug en lassen. Zum Schlu\337 braucht man nur noch die verschiedenen St\374 cke und ihre relative Gr\366\337e anzugeben und die Prozedur erzeugt d ann ganz automatisch das Kuchendiagramm." }}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 36 "restart:with(plots):with(plottools):" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 63 "partialsum:=proc(d,i)\n local j;\n evalf(Sum(d[J],j=1..i))\nend:" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 462 "piechart:=proc(data::list(integer))\n local b,c,i,n,x,y,tot al;\n n:=nops(data);\n total:=partialsum(data,n);\n b:=0, seq(evalf (2*Pi*partialsum(data,i)/total),i=1..n);\n x:=seq((cos(b[i])+cos(b[i+ 1]))/3,i=1..n):\n y:=seq((sin(b[i])+sin(b[i+1]))/3,i=1..n):\n c:=(i, n) -> COLOR(HUE,i/(n+1)):\n PLOT(seq(plottools[pieslice]([0,0],1,b[i] ..b[i+1],color=c(i,n)),i=1..n),\n seq(TEXT([x[i],y[i]],convert(data[i ],name)),i=1..n),AXESSTYLE(NONE),SCALING(CONSTRAINED));\nend:" }}} {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 29 "piechart([8,10,15,10,12,16]) ;" }}}{PARA 0 "" 0 "" {TEXT -1 20 "Weil's so sch\366n ist:" }}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 158 "piechart([1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]);" }}}{PARA 0 "" 0 "" {TEXT 338 0 "" }{TEXT 318 38 "Dreidimensionale Graphik mit Schatt en\n" }{TEXT -1 202 "Die bestehenden Prozeduren kann man auch verwende n, um andere Plotarten zu erstellen, die in der graphischen Bibliothek in Maple so nicht zu finden sind. Z. B. wie folgt: Es wird eine Funkt ion der Form " }{TEXT 319 8 "z=f(x,y)" }{TEXT -1 193 " im dreidimensio nalen Raum geplottet. Der Clou ist, da\337 die Funktion geklont wird, \+ und quasi ein Schatten auf dem \"Boden\" des Raumes entsteht. Um den S chatten zu erzeugen, ben\366tigt man aus dem " }{TEXT 320 9 "plottools " }{TEXT -1 21 "-Package die Befehle " }{TEXT 321 11 "contourplot" } {TEXT -1 5 " und " }{TEXT 322 13 "contourplot3d" }{TEXT -1 1 "." }} {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 36 "restart:with(plottools):with (plots):" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 762 "dropshadowplot :=proc(F::algebraic,r1::name=range,r2::name=range,r3::name=range)\n \+ local minz,p2,p3,coption,opts,f,g,x,y;\n\n # gibt die Anzahl der Umr isse an\n opts:=[args[5..nargs]];\n if not hasoption(opts,'contour s',coption,'opts')\n then coption:=8;\n fi;\n\n # bestimmt die B asis der Achsen mit dem dritten Argument \n minz:= lhs(`if`(r3::rang e, r3, rhs(r3)));\n minz:= evalf(minz);\n\n # erzeugt die 2D und 3 D Umriss-Plots f\374r die Funktion F\n p3:=plots[contourplot3d](F,r1 ,r2,'contours'=coption,op(opts));\n p2:=plots[contourplot](F,r1,r2,' contours'=coption,op(opts));\n\n # bettet den Umriss-Plot in den 3D- Raum mit dem Befehl plottools[transform]\n g:=unapply([x,y,minz],x,y );\n f:=plottools[transform](g);\n plots[display]([f(p2),p3]);\nen d:" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 23 "expr:=-5*x/(x^2+y^2+1 );" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%%exprG,$*&%\"xG\"\"\",(*$)F'\" \"#F(\"\"\"*$)%\"yGF,F(F-F-F-!\"\"!\"&" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 79 "dropshadowplot(expr,x=-3..3,y=-3..3,z=-4..3,filled=tr ue,contours=3,axes=frame);" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}}{PARA 0 "" 0 "" {TEXT -1 0 "" }{TEXT 324 30 "Plotstrukturen ve rvielf\344ltigen" }}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 36 "restart: with(plots):with(plottools):" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 162 "a:=rectangle([0,0],[1,1]),\narc([0,0],0.5,0..Pi/2),\narc([1,1], 0.5,Pi..3*Pi/2):\nb:=rectangle([1.5,0],[2.5,1]),\narc([1.5,1],0.5,-Pi/ 2..0),\narc([2.5,0],0.5,Pi/2..Pi):" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 43 "display(a,b,axes=none,scaling=constrained);" }}} {PARA 0 "" 0 "" {TEXT -1 100 "Wenn man jetzt diese Viertelkreise verfi elf\344ltigt und nebeneinander setzt, erh\344lt man sch\366ne Muster. " }}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 504 "tiling:=proc(g,m,n)\n \+ local i, j, r, h, boundary, tiles;\n \n # definiert eine a-Spalte \n r[0]:=plottools[arc]([0,0],0.5,0..Pi/2),\n plottools[arc] ([1,1],0.5,Pi..3*Pi/2);\n # definiert eine b-Spalte\n r[1]:=plotto ols[arc]([0,1],0.5,-Pi/2..0),\n plottools[arc]([1,0],0.5,Pi/2. .Pi);\n\n boundary:=plottools[curve]([[0,0],[0,n],[m,n],[m,0],[0,0]] );\n tiles:=seq(seq(seq(plottools[translate](h,i,j),h=r[g(i,j)]),i=0 ..m-1),j=0..n-1);\n plots[display](tiles,boundary,args[4..nargs]);\n end:" }}}{PARA 0 "" 0 "" {TEXT -1 299 "Wir k\366nnen die Prozedur nun \+ anwenden. Dabei soll entweder der erste Plot (Viertelkreise links unte n und rechts oben) bzw. der zweite Plot (Viertelkreise links oben und \+ rechts unten) in das Plotfenster eingef\374gt werden. Dies erreichen w ir, in dem wir uns einen kleinen Zufallsgenerator programmieren:" }} {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 32 "zufall:=proc() rand() mod 2 \+ end:" }}}{PARA 0 "" 0 "" {TEXT -1 148 "Jetzt machen wir uns ein Feld d er Gr\366\337e 20x20 und dieses soll dann mit den zwei verschiedenen V iertelkreisfiguren per Zufallsprinzip gef\374llt werden:" }}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 51 "tiling(zufall,20,20,scaling=constra ined,axes=none);" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}} {PARA 0 "" 0 "" {TEXT 339 0 "" }{TEXT 325 17 "Polygon-Grafiken\n" } {TEXT -1 128 "Polygon hei\337t im Englischen Vieleck. Im folgenden wol len wir uns Prozeduren erstellen, mit denen man nette Figuren plotten \+ kann." }}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 36 "restart:with(plots) :with(plottools):" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 528 "cutou tPolygon:=proc(vlist_in::\{list,hfarray\},scale::numeric)\n local vl ist, i, center, outside, inside, n, edges, polys;\n vlist:=`if`(vlis t_in::hfarray,op(3,eval(vlist_in)),vlist_in);\n n:=nops(vlist);\n \+ center:=add(i,i=vlist)/n;\n inside:=seq(scale*(vlist[i]-center)+cent er,i=1..n);\n outside:=seq([inside[i],vlist[i],vlist[i+1],inside[i+1 ]],i=1..n-1):\n polys:=POLYGONS(outside,[inside[n],vlist[n],vlist[1] ,inside[1]],STYLE(PATCHNOGRID));\n edges:=CURVES([op(vlist),vlist[1] ],[inside,inside[1]]);\n polys,edges;\nend:" }}}{PARA 0 "" 0 "" {TEXT -1 48 "Nun geben wir die Koordinaten eines Dreiecks an." }} {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 30 "triangle:=[[0,2],[2,2],[1,0] ];" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%)triangleG7%7$\"\"!\"\"#7$F(F( 7$\"\"\"F'" }}}{PARA 0 "" 0 "" {TEXT -1 69 "Die \"cutoutPolygon\"-Proz edur wandelt das Dreieck in drei Vielecke um:" }}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 28 "cutoutPolygon(triangle,1/2);" }}{PARA 12 "" 1 " " {XPPMATH 20 "6$-%)POLYGONSG6&7&7$#\"\"\"\"\"##\"\"&\"\"$7$\"\"!F*7$F *F*7$#F-F*F+7&F1F07$F)F/7$F)#F*F-7&F5F4F.F'-%&STYLEG6#%,PATCHNOGRIDG-% 'CURVESG6$7&F.F0F4F.7&F'F1F5F'" }}}{PARA 0 "" 0 "" {TEXT -1 12 "Und mi t dem " }{TEXT 326 7 "display" }{TEXT -1 33 "-Befehl kann man es auch \+ plotten:" }}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 28 "plots[display](% ,color=red);" }}}{PARA 0 "" 0 "" {TEXT -1 119 "Jetzt machen wir uns ei ne Prozedur, die das obere Polygon in verschiedener Weise zusammenf \374gt und neue Figuren schafft." }}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 99 "cutout:=proc(polyhedron,scale)\n local v;\n seq(cutoutPoly gon(v,evalf(scale)),v=polyhedron);\nend:" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 63 "display(cutout(dodecahedron([1,2,3]),3/4),scaling=con strained);" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}}}{MARK "0 0" 0 }{VIEWOPTS 1 1 0 1 1 1803 }