{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 }{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 4 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 8 0 0 0 0 0 0 -1 0 }{PSTYLE "Title" 0 18 1 {CSTYLE "" -1 -1 "" 1 18 0 0 0 0 0 1 1 0 0 0 0 0 0 }3 0 0 -1 12 12 0 0 0 0 0 0 19 0 }{PSTYLE "Title 1" 18 256 1 {CSTYLE "" -1 -1 "" 1 12 0 0 0 0 0 2 2 0 0 0 0 0 0 }0 0 0 -1 -1 6 0 0 0 0 2 0 3 0 }} {SECT 0 {EXCHG {PARA 18 "" 0 "" {TEXT -1 41 "\334bungsblatt 9, Abgabet ermin: 20. Jan 2000" }}}{EXCHG {PARA 256 "" 0 "" {TEXT -1 41 "Autor: F abian Wleklinski\nMatr-Nr: 1730612" }}}{SECT 0 {PARA 3 "" 0 "" {TEXT -1 11 "Aufgabe 9.1" }}{EXCHG {PARA 0 "" 0 "" {TEXT -1 19 "Wir resetten Maple:" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 8 "restart;" }}} {EXCHG {PARA 0 "" 0 "" {TEXT -1 43 "Jetzt implementieren wir die Haupt funktion:" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 2196 "EinzelSchrit tVerfahren := proc( N::posint, delta::numeric, maxSteps::posint, toler ance::numeric, a::numeric, b::numeric, alpha::numeric, beta::numeric ) \n\n local difference,h,i,j,p,x,u,u_old,z;\n\n x := array( 0..N ); \n u := array( 0..N );\n u_old := array( 0..N );\n\n # h berechn en. dieser Wert wird sich nicht mehr ver\344ndern.\n h := ( b - a ) \+ / N;\n\n # x[0]...x[N] k\366nnen wir au\337erhalb der Schleife setze n, weil sie \374ber\n # alle Iterationen hinweg konstant sind\n fo r i from 0 to N do\n x[ i ] := a + i * h;\n od;\n\n # die u's f\374r die erste Staffel berechnen wir getrennt, weil hier eine\n # andere Vorschrift gilt\n u[ 0 ] := alpha;\n u[ N ] := beta;\n f or j from 1 to N-1 do\n z := ((x[ j ] - a) / (b - a));\n u[ \+ j ] := alpha + (beta - alpha) * z + delta * z * (1 - z);\n od;\n\n \+ # die Werte umkopieren, neue Iterationsstufe vorbereiten\n u_old := copy( u );\n\n # die Differenz initial sehr hoch setzen, um zu gew \344hrleisten, dass\n # das Abbruchkriterium nicht erf\374llt wird\n difference := 100000;\n\n # Jetzt die gew\374nschte Anzahl Iterat ionen ausf\374hren\n for i from 2 to maxSteps do\n\n # der \"li nke\" und \"rechte\" Wert ist immer gleich:\n u[ 0 ] := alpha;\n \+ u[ N ] := beta;\n\n # die Werte \"dazwischen\" m\374ssen ber echnet werden:\n for j from 1 to N-1 do\n u[ j ] := 0.5 * ( u_old[ j+1 ] + u[ j-1 ] - h^2 * ( 3/2 * u_old[ j ]^2 ) );\n od ;\n\n # die Norm der Differenz zum letzten Wert berechnen\n \+ difference := 0;\n for j from 0 to N do\n difference := m ax( difference, abs( u[ j ] - u_old[ j ] ) );\n od;\n\n # St atus ausgeben\n if (i mod 10) = 0 then\n printf( \"t=%d \+ ||u[t] - u[t-1]||=%015.13f\\n\", i, difference );\n fi;\n\n \+ # Abbruchkriterium auswerten\n if difference < tolerance then\n \+ break;\n fi;\n\n # die Werte umkopieren, neue Iterati onsstufe vorbereiten\n u_old := copy( u );\n od;\n\n # letzte N\344herung ausgeben\n printf( \"\\nLetzte N\344herung:\\n t=%d | |u[t] - u[t-1]||=%015.13f\\n\", i, difference );\n for i from 0 to N do\n printf(\" u[%d]=%f\\n\", i, u[i] );\n od;\n\n plots[ d isplay ]( [plot( [seq( [a + j * h, u_old[j] ], j=0..N ) ] ) ] );\nend: " }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 69 "Jetzt rufen wir die Hauptfunk tion mit den gew\374nschten Parametern auf:" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 55 "EinzelSchrittVerfahren( 10, 0, 100, 1E-5, 0, 1, 4, 1 );" }}}}}{MARK "0 0 0" 0 }{VIEWOPTS 1 1 0 1 1 1803 }