1000)){ $dur=60; } # #Anfangswert: $x0=800; # k-Wert $kw=mt_rand(1,100)/100; # Funktion definieren function funcdxdt ($x) { global $kw; return -$kw*$x; } # stroke-dasharray-Weglaenge $ssum = 0; # values und Pfad berechnen $x=$x0; $values="$x"; $px=round(100+$x); $pfad="M$px,100L"; $dash="0,1E6"; $dt=$dur/$anz; $vorherx=$x0; $vorhery=0; # for ($j = 1; $j <= $anz; $j++) { $y=800/$anz*$j; $kutta1=funcdxdt($x); $kutta2=funcdxdt($x+$dt*$kutta1/2.0); $kutta3=funcdxdt($x+$dt*$kutta2/2.0); $kutta4=funcdxdt($x+$dt*$kutta3); $x=$x +$dt*($kutta1+$kutta4+2.0*$kutta2+2.0*$kutta3)/6; #$x=(1-$kw*$dt)*$x ; $px=round(100+$x); $ppx=round($x); $py=round(100+$y); $values .=";$ppx"; $pfad .=" $px,$py"; $hx=$x-$vorherx; $hy=$y-$vorhery; $ssum = $ssum+sqrt($hx*$hx+$hy*$hy); $vorherx=$x; $vorhery=$y; $psum=round($ssum); $dash .=";$psum,1E6"; } # exakte Punkte: $eanz=10.0*$anz; $dt=$dur/$eanz; $px=round(100+$x0); $epfad="M$px,100L"; for ($j = 1; $j <= $eanz; $j++) { $y=800/$eanz*$j; $ex=$x0*exp(-$kw*$j*$dt); $px=round(100+$ex); $py=round(100+$y); $epfad .=" $px,$py"; } # svg-header senden: $content="Content-type: image/svg+xml"; header($content); # Automatisches Neuladen, muss nicht funktionieren! if ($auto=="ja") { $dura=$dur+5; $content="refresh: $dura; url=dgl1.php?auto=ja&anz=$anz"; } # Sicherstellen dass dann auch neu vom server geladen wird: header($content); # xml-Zeile ausgeben echo ""; # und jetzt das Dokument ?> Numerische Lösung einer Differentialgleichung Eine Exponentialfunktion als Lösung einer numerischen Berechnung einer Differentialgleichung dx/dt = -k x. k wird zufällig gewählt. Es handelt sich um ein Anfangswertproblem, welches mit dem Runge-Kutta-Verfahren bearbeitet wird. Die exakte Lösung ist eine Exponentialfunktion, in rot unterlegt. Es werden verschiedene Schrittweiten gewählt, um direkt zu sehen, wie die Qualität der numerischen Lösung von der Schrittweite abhängt. Mittels der Knöpfe rechts unten (oder der entsprechenden GET-Parameter) kann Einfluß drauf genommen werden, welche Schrittweite verwendet wird und ob automatisch nach Ablauf einer Animation eine neue dargestellt werden soll oder nicht. Die Dauer der Animation kann nur über den GET-Parameter dur beeinflußt werden. 2) { ?> " xlink:title="Schrittzahl um 1 erniedrigen"> " xlink:title="Schrittzahl um 1 erhöhen"> " xlink:title="Neu starten und dann jeweils nach Ablauf der Animation automatisch neu starten (muß nicht bei allen Darstellungsprogrammen funktionieren)"> " xlink:title="Neue Animation starten, weiteren automatischen Neustart unterbinden"> O H 2006