├── .travis.yml ├── docs └── images │ ├── n-9baedbc330.png │ ├── t-fc93da6f4d.png │ ├── y-720f311276.png │ ├── k_n-d413726dee.png │ ├── l_2-23fd536b11.png │ ├── t10-b3a7f6176e.png │ ├── t15-27f16b808b.png │ ├── delta-t-a20a5fe4f2.png │ ├── l-infty-2f936b4f00.png │ ├── l_infty-c904452e37.png │ ├── 1-cdot-10-8-9ceae48083.png │ ├── 1-cdot-10-8-ec70e94376.png │ ├── begineqnarray-yt-ft-yt-yt_0-y_0-endeqnarray-0298eae3db.png │ ├── begineqnarray-k_1-ft_n-y_n-k_2-ft_n-fracdelta-35d808c6ef.png │ └── begineqnarray-y_n1-fracdelta-t6leftk_1-2k_2-2-41157480a7.png ├── .editorconfig ├── examples ├── 1xcos1x.js ├── plot.gp ├── erf.js ├── rkck.dat ├── rk4.dat └── plot.ps ├── .gitignore ├── package.json ├── LICENSE ├── gulpfile.js ├── README.mdtex ├── README.md ├── test └── test.js └── lib └── index.js /.travis.yml: -------------------------------------------------------------------------------- 1 | language: node_js 2 | node_js: 3 | - "0.12" 4 | - "0.11" 5 | - "0.10" 6 | -------------------------------------------------------------------------------- /docs/images/n-9baedbc330.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scijs/ode45-cash-karp/HEAD/docs/images/n-9baedbc330.png -------------------------------------------------------------------------------- /docs/images/t-fc93da6f4d.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scijs/ode45-cash-karp/HEAD/docs/images/t-fc93da6f4d.png -------------------------------------------------------------------------------- /docs/images/y-720f311276.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scijs/ode45-cash-karp/HEAD/docs/images/y-720f311276.png -------------------------------------------------------------------------------- /docs/images/k_n-d413726dee.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scijs/ode45-cash-karp/HEAD/docs/images/k_n-d413726dee.png -------------------------------------------------------------------------------- /docs/images/l_2-23fd536b11.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scijs/ode45-cash-karp/HEAD/docs/images/l_2-23fd536b11.png -------------------------------------------------------------------------------- /docs/images/t10-b3a7f6176e.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scijs/ode45-cash-karp/HEAD/docs/images/t10-b3a7f6176e.png -------------------------------------------------------------------------------- /docs/images/t15-27f16b808b.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scijs/ode45-cash-karp/HEAD/docs/images/t15-27f16b808b.png -------------------------------------------------------------------------------- /docs/images/delta-t-a20a5fe4f2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scijs/ode45-cash-karp/HEAD/docs/images/delta-t-a20a5fe4f2.png -------------------------------------------------------------------------------- /docs/images/l-infty-2f936b4f00.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scijs/ode45-cash-karp/HEAD/docs/images/l-infty-2f936b4f00.png -------------------------------------------------------------------------------- /docs/images/l_infty-c904452e37.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scijs/ode45-cash-karp/HEAD/docs/images/l_infty-c904452e37.png -------------------------------------------------------------------------------- /docs/images/1-cdot-10-8-9ceae48083.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scijs/ode45-cash-karp/HEAD/docs/images/1-cdot-10-8-9ceae48083.png -------------------------------------------------------------------------------- /docs/images/1-cdot-10-8-ec70e94376.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scijs/ode45-cash-karp/HEAD/docs/images/1-cdot-10-8-ec70e94376.png -------------------------------------------------------------------------------- /docs/images/begineqnarray-yt-ft-yt-yt_0-y_0-endeqnarray-0298eae3db.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scijs/ode45-cash-karp/HEAD/docs/images/begineqnarray-yt-ft-yt-yt_0-y_0-endeqnarray-0298eae3db.png -------------------------------------------------------------------------------- /docs/images/begineqnarray-k_1-ft_n-y_n-k_2-ft_n-fracdelta-35d808c6ef.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scijs/ode45-cash-karp/HEAD/docs/images/begineqnarray-k_1-ft_n-y_n-k_2-ft_n-fracdelta-35d808c6ef.png -------------------------------------------------------------------------------- /docs/images/begineqnarray-y_n1-fracdelta-t6leftk_1-2k_2-2-41157480a7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scijs/ode45-cash-karp/HEAD/docs/images/begineqnarray-y_n1-fracdelta-t6leftk_1-2k_2-2-41157480a7.png -------------------------------------------------------------------------------- /.editorconfig: -------------------------------------------------------------------------------- 1 | root = true 2 | 3 | [*] 4 | indent_style = space 5 | indent_size = 2 6 | end_of_line = lf 7 | charset = utf-8 8 | trim_trailing_whitespace = true 9 | insert_final_newline = true 10 | 11 | [*.md] 12 | trim_trailing_whitespace = false 13 | -------------------------------------------------------------------------------- /examples/1xcos1x.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | 3 | var rkck = require('../lib') 4 | 5 | var evaluations = 0 6 | var deriv = function(dydt, y, t) { 7 | evaluations ++ 8 | dydt[0] = 1/t * Math.cos(1/t) 9 | } 10 | 11 | var ta = 0.01 12 | var tb = 1 13 | 14 | var i = rkck( [-1], deriv, ta, 1e-8, { 15 | tol: 5e-8, 16 | maxIncreaseFactor: 2 17 | }) 18 | 19 | var rkck_y0 = i.y[0] 20 | i.steps( Infinity, tb ) 21 | var rkck_y1 = i.y[0] 22 | 23 | var actual = -0.34255274804359265 24 | console.log('Absolute error:',Math.abs( actual - (rkck_y1-rkck_y0) )) 25 | console.log('Derivative evaluations:', evaluations ) 26 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | build 2 | 3 | # Logs 4 | logs 5 | *.log 6 | 7 | # Runtime data 8 | pids 9 | *.pid 10 | *.seed 11 | 12 | # Directory for instrumented libs generated by jscoverage/JSCover 13 | lib-cov 14 | 15 | # Coverage directory used by tools like istanbul 16 | coverage 17 | 18 | # Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) 19 | .grunt 20 | 21 | # Compiled binary addons (http://nodejs.org/api/addons.html) 22 | build/Release 23 | build 24 | 25 | # Dependency directory 26 | # Deployed apps should consider commenting this line out: 27 | # see https://npmjs.org/doc/faq.html#Should-I-check-my-node_modules-folder-into-git 28 | node_modules 29 | -------------------------------------------------------------------------------- /examples/plot.gp: -------------------------------------------------------------------------------- 1 | set terminal postscript 2 | set output "plot.ps" 3 | 4 | set xtics font "Verdana,8" 5 | set ytics font "Verdana,8" 6 | 7 | set multiplot 8 | 9 | set origin 0,0 10 | set yrange [-1.1:1.1] 11 | set size 1, 0.5 12 | set notitle 13 | set grid 14 | set nokey 15 | set xtics 1 16 | set ytics 1 17 | set style line 1 lc rgb '#0060ad' lt 1 lw 1 pt 6 pi -1 ps 0.5 18 | set pointintervalbox 0.4 19 | set title "Fifth Order Runge-Kutta Cash-Karp (RKCK)" 20 | plot "rkck.dat" using 1:2 with linespoints ls 1 21 | 22 | set origin 0,0.5 23 | 24 | set size 1, 0.5 25 | set yrange [-1.1:1.1] 26 | set notitle 27 | set grid 28 | set nokey 29 | set xtics 1 30 | set ytics 1 31 | set style line 1 lc rgb '#0060ad' lt 1 lw 1 pt 6 pi -1 ps 0.5 32 | set pointintervalbox 0.4 33 | set title "Fourth Order Runge-Kutta (RK4)" 34 | plot "rk4.dat" using 1:2 with linespoints ls 1 35 | 36 | 37 | set nomultiplot 38 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "ode45-cash-karp", 3 | "version": "1.1.0", 4 | "description": "Integrate a system of Ordinary Differential Equations using the Fifth Order Adaptive Cash-Karp method", 5 | "main": "lib/index.js", 6 | "scripts": { 7 | "test": "mocha" 8 | }, 9 | "repository": { 10 | "type": "git", 11 | "url": "git://github.com/scijs/ode45-cash-karp.git" 12 | }, 13 | "keywords": [ 14 | "scijs", 15 | "ode", 16 | "rk4", 17 | "runge-kutta", 18 | "adaptive", 19 | "rk45", 20 | "cash-karp", 21 | "ode45", 22 | "integration", 23 | "differential-equations", 24 | "calculus" 25 | ], 26 | "author": "Ricky Reusser", 27 | "license": "MIT", 28 | "devDependencies": { 29 | "chai": "^3.2.0", 30 | "gulp-filter": "^2.0.2", 31 | "gulp-latex": "^1.0.1", 32 | "gulp-markdown-equations": "^1.2.3", 33 | "gulp-pdftocairo": "^0.2.0", 34 | "gulp-tap": "^0.1.3", 35 | "mdtex-cli": "0.0.3", 36 | "mocha": "^2.2.5", 37 | "ode-rk4": "^1.1.2", 38 | "richardson-extrapolation": "^1.0.2" 39 | }, 40 | "dependencies": {} 41 | } 42 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2015 Ricky Reusser 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in 13 | all copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 21 | THE SOFTWARE. 22 | -------------------------------------------------------------------------------- /gulpfile.js: -------------------------------------------------------------------------------- 1 | var gulp = require('gulp') 2 | , mdEqs = require('gulp-markdown-equations') 3 | , tap = require('gulp-tap') 4 | , filter = require('gulp-filter') 5 | , latex = require('gulp-latex') 6 | , pdftocairo = require('gulp-pdftocairo') 7 | 8 | 9 | gulp.task('mdtex',function() { 10 | var texFilter = filter('*.tex') 11 | var mdFilter = filter('*.md') 12 | 13 | var transform = mdEqs({ 14 | defaults: { 15 | display: { margin: '1pt 1pt 1pt -10pt' }, 16 | inline: { margin: '1pt 1pt 1pt -5pt' } 17 | } 18 | }) 19 | 20 | return gulp.src('*.mdtex') 21 | .pipe(transform) 22 | .pipe(texFilter) 23 | .pipe(latex()) 24 | .pipe(pdftocairo({format: 'png'})) 25 | .pipe(gulp.dest('docs/images')) 26 | .pipe(tap(function(file) { 27 | transform.completeSync(file,function() { 28 | var img = ''+this.alt+'' 30 | return this.inline ? img : '

'+img+'

' 31 | }) 32 | })) 33 | .pipe(texFilter.restore()).pipe(mdFilter) 34 | .pipe(gulp.dest('./')) 35 | }) 36 | -------------------------------------------------------------------------------- /examples/erf.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | 3 | var fs = require('fs') 4 | , rkckOut = fs.openSync('rkck.dat','w') 5 | , rk4Out = fs.openSync('rk4.dat','w') 6 | , rk4 = require('ode-rk4') 7 | , rkck = require('../lib') 8 | 9 | var deriv = function(dydt, y, t) { 10 | dydt[0] = Math.exp(-t*t * 100) * 2/Math.sqrt(Math.PI/100) 11 | } 12 | 13 | var t0 = -10 14 | var tmax = 10 15 | 16 | var i1 = rkck( [-1], deriv, t0, 1e-4, { 17 | tol: 1e-5, 18 | dtMaxMag: 0.8, 19 | maxIncreaseFactor: 2 20 | }) 21 | var i2 = rk4( [-1], deriv, t0, 1e-1 ) 22 | 23 | var rkck_y0 = i1.y[0] 24 | fs.writeSync( rkckOut, i1.t + '\t' + i1.y[0] + '\t' + i1.dt + '\n' ) 25 | while( i1.step( tmax ) ) { 26 | fs.writeSync( rkckOut, i1.t + '\t' + i1.y[0] + '\t' + i1.dt + '\n' ) 27 | } 28 | var rkck_y1 = i1.y[0] 29 | 30 | var rk4_y0 = i2.y[0] 31 | fs.writeSync( rk4Out, i2.t + '\t' + i2.y[0] + '\t' + i2.dt + '\n' ) 32 | for(var i=0; i<(tmax-t0)/i2.dt; i++, i2.step()) { 33 | fs.writeSync( rk4Out, i2.t + '\t' + i2.y[0] + '\t' + i2.dt + '\n' ) 34 | } 35 | var rk4_y1 = i2.y[0] 36 | 37 | console.log('Computed value for RKCK:',rkck_y1-rkck_y0) 38 | console.log('Computed value for RK4:',rk4_y1-rk4_y0) 39 | fs.closeSync( rkckOut ) 40 | fs.closeSync( rk4Out ) 41 | -------------------------------------------------------------------------------- /examples/rkck.dat: -------------------------------------------------------------------------------- 1 | -10 -1 0.0001 2 | -9.9999 -1 0.0002 3 | -9.9997 -1 0.0004 4 | -9.9993 -1 0.0008 5 | -9.9985 -1 0.0016 6 | -9.9969 -1 0.0032 7 | -9.9937 -1 0.0064 8 | -9.987300000000001 -1 0.0128 9 | -9.9745 -1 0.0256 10 | -9.9489 -1 0.0512 11 | -9.8977 -1 0.1024 12 | -9.795300000000001 -1 0.2048 13 | -9.5905 -1 0.4096 14 | -9.180900000000001 -1 0.8192 15 | -8.3809 -1 1.6 16 | -7.580900000000001 -1 1.6 17 | -6.780900000000001 -1 1.6 18 | -5.980900000000001 -1 1.6 19 | -5.180900000000001 -1 1.6 20 | -4.380900000000001 -1 1.6 21 | -3.5809000000000015 -1 1.6 22 | -2.7809000000000017 -1 1.6 23 | -1.9809000000000017 -1 1.6 24 | -1.1809000000000016 -1 1.6 25 | -0.38090000000000157 -0.9999999997640101 1.6 26 | -0.2649482893784474 -0.9998260069577104 0.12790151058038057 27 | -0.19382086731444015 -0.9938828321039379 0.07155001800492485 28 | -0.1222708493095153 -0.9162159191426491 0.06984626799092059 29 | -0.07207056970366268 -0.6919012777331394 0.04997940324426689 30 | -0.022091166459395795 -0.2452748271079545 0.06338484672730997 31 | 0.021835021658481134 0.24252254614281743 0.04390520288247406 32 | 0.0657402245409552 0.6474804220861907 0.06383860031267949 33 | 0.11516967098327338 0.8966368995735338 0.050460123152362285 34 | 0.16562979413563567 0.9808394146295267 0.06431708171714383 35 | 0.2299468758527795 0.9988547221833796 0.07061215263820199 36 | 0.3005590284909815 0.9999812854672542 0.09391984596678296 37 | 0.3944788744577644 1.0000030978855794 0.18783969193356592 38 | 0.5823185663913304 1.0000031353621894 0.37567938386713184 39 | 0.9579979502584622 1.0000031353621903 0.7513587677342637 40 | 1.7093567179927258 1.0000031353621903 1.5027175354685274 41 | 2.509356717992726 1.0000031353621903 1.6 42 | 3.309356717992726 1.0000031353621903 1.6 43 | 4.109356717992726 1.0000031353621903 1.6 44 | 4.9093567179927255 1.0000031353621903 1.6 45 | 5.709356717992725 1.0000031353621903 1.6 46 | 6.509356717992725 1.0000031353621903 1.6 47 | 7.309356717992725 1.0000031353621903 1.6 48 | 8.109356717992725 1.0000031353621903 1.6 49 | 8.909356717992726 1.0000031353621903 1.6 50 | 9.709356717992726 1.0000031353621903 1.6 51 | 10 1.0000031353621903 0.5812865640145475 52 | -------------------------------------------------------------------------------- /examples/rk4.dat: -------------------------------------------------------------------------------- 1 | -10 -1 0.1 2 | -10 -1 0.1 3 | -9.9 -1 0.1 4 | -9.8 -1 0.1 5 | -9.700000000000001 -1 0.1 6 | -9.600000000000001 -1 0.1 7 | -9.500000000000002 -1 0.1 8 | -9.400000000000002 -1 0.1 9 | -9.300000000000002 -1 0.1 10 | -9.200000000000003 -1 0.1 11 | -9.100000000000003 -1 0.1 12 | -9.000000000000004 -1 0.1 13 | -8.900000000000004 -1 0.1 14 | -8.800000000000004 -1 0.1 15 | -8.700000000000005 -1 0.1 16 | -8.600000000000005 -1 0.1 17 | -8.500000000000005 -1 0.1 18 | -8.400000000000006 -1 0.1 19 | -8.300000000000006 -1 0.1 20 | -8.200000000000006 -1 0.1 21 | -8.100000000000007 -1 0.1 22 | -8.000000000000007 -1 0.1 23 | -7.9000000000000075 -1 0.1 24 | -7.800000000000008 -1 0.1 25 | -7.700000000000008 -1 0.1 26 | -7.6000000000000085 -1 0.1 27 | -7.500000000000009 -1 0.1 28 | -7.400000000000009 -1 0.1 29 | -7.30000000000001 -1 0.1 30 | -7.20000000000001 -1 0.1 31 | -7.10000000000001 -1 0.1 32 | -7.000000000000011 -1 0.1 33 | -6.900000000000011 -1 0.1 34 | -6.800000000000011 -1 0.1 35 | -6.700000000000012 -1 0.1 36 | -6.600000000000012 -1 0.1 37 | -6.500000000000012 -1 0.1 38 | -6.400000000000013 -1 0.1 39 | -6.300000000000013 -1 0.1 40 | -6.2000000000000135 -1 0.1 41 | -6.100000000000014 -1 0.1 42 | -6.000000000000014 -1 0.1 43 | -5.900000000000015 -1 0.1 44 | -5.800000000000015 -1 0.1 45 | -5.700000000000015 -1 0.1 46 | -5.600000000000016 -1 0.1 47 | -5.500000000000016 -1 0.1 48 | -5.400000000000016 -1 0.1 49 | -5.300000000000017 -1 0.1 50 | -5.200000000000017 -1 0.1 51 | -5.100000000000017 -1 0.1 52 | -5.000000000000018 -1 0.1 53 | -4.900000000000018 -1 0.1 54 | -4.8000000000000185 -1 0.1 55 | -4.700000000000019 -1 0.1 56 | -4.600000000000019 -1 0.1 57 | -4.5000000000000195 -1 0.1 58 | -4.40000000000002 -1 0.1 59 | -4.30000000000002 -1 0.1 60 | -4.200000000000021 -1 0.1 61 | -4.100000000000021 -1 0.1 62 | -4.000000000000021 -1 0.1 63 | -3.9000000000000212 -1 0.1 64 | -3.800000000000021 -1 0.1 65 | -3.700000000000021 -1 0.1 66 | -3.600000000000021 -1 0.1 67 | -3.500000000000021 -1 0.1 68 | -3.400000000000021 -1 0.1 69 | -3.3000000000000207 -1 0.1 70 | -3.2000000000000206 -1 0.1 71 | -3.1000000000000205 -1 0.1 72 | -3.0000000000000204 -1 0.1 73 | -2.9000000000000203 -1 0.1 74 | -2.8000000000000203 -1 0.1 75 | -2.70000000000002 -1 0.1 76 | -2.60000000000002 -1 0.1 77 | -2.50000000000002 -1 0.1 78 | -2.40000000000002 -1 0.1 79 | -2.30000000000002 -1 0.1 80 | -2.2000000000000197 -1 0.1 81 | -2.1000000000000196 -1 0.1 82 | -2.0000000000000195 -1 0.1 83 | -1.9000000000000195 -1 0.1 84 | -1.8000000000000194 -1 0.1 85 | -1.7000000000000193 -1 0.1 86 | -1.6000000000000192 -1 0.1 87 | -1.500000000000019 -1 0.1 88 | -1.400000000000019 -1 0.1 89 | -1.300000000000019 -1 0.1 90 | -1.2000000000000188 -1 0.1 91 | -1.1000000000000187 -1 0.1 92 | -1.0000000000000187 -1 0.1 93 | -0.9000000000000187 -1 0.1 94 | -0.8000000000000187 -1 0.1 95 | -0.7000000000000187 -1 0.1 96 | -0.6000000000000187 -1 0.1 97 | -0.5000000000000188 -0.9999999999973334 0.1 98 | -0.4000000000000188 -0.9999999776234598 0.1 99 | -0.3000000000000188 -0.9999731479998927 0.1 100 | -0.2000000000000188 -0.9950532521119884 0.1 101 | -0.1000000000000188 -0.8431373121671942 0.1 102 | -1.8790524691780774e-14 -0.00003448212434931097 0.1 103 | 0.09999999999998122 0.8430683479187677 0.1 104 | 0.19999999999998122 0.9949842878637084 0.1 105 | 0.2999999999999812 0.9999041837516206 0.1 106 | 0.39999999999998126 0.9999310133751877 0.1 107 | 0.49999999999998124 0.9999310357490613 0.1 108 | 0.5999999999999812 0.9999310357517279 0.1 109 | 0.6999999999999812 0.9999310357517279 0.1 110 | 0.7999999999999812 0.9999310357517279 0.1 111 | 0.8999999999999811 0.9999310357517279 0.1 112 | 0.9999999999999811 0.9999310357517279 0.1 113 | 1.0999999999999812 0.9999310357517279 0.1 114 | 1.1999999999999813 0.9999310357517279 0.1 115 | 1.2999999999999814 0.9999310357517279 0.1 116 | 1.3999999999999815 0.9999310357517279 0.1 117 | 1.4999999999999816 0.9999310357517279 0.1 118 | 1.5999999999999817 0.9999310357517279 0.1 119 | 1.6999999999999817 0.9999310357517279 0.1 120 | 1.7999999999999818 0.9999310357517279 0.1 121 | 1.899999999999982 0.9999310357517279 0.1 122 | 1.999999999999982 0.9999310357517279 0.1 123 | 2.099999999999982 0.9999310357517279 0.1 124 | 2.199999999999982 0.9999310357517279 0.1 125 | 2.299999999999982 0.9999310357517279 0.1 126 | 2.399999999999982 0.9999310357517279 0.1 127 | 2.4999999999999822 0.9999310357517279 0.1 128 | 2.5999999999999823 0.9999310357517279 0.1 129 | 2.6999999999999824 0.9999310357517279 0.1 130 | 2.7999999999999825 0.9999310357517279 0.1 131 | 2.8999999999999826 0.9999310357517279 0.1 132 | 2.9999999999999827 0.9999310357517279 0.1 133 | 3.0999999999999828 0.9999310357517279 0.1 134 | 3.199999999999983 0.9999310357517279 0.1 135 | 3.299999999999983 0.9999310357517279 0.1 136 | 3.399999999999983 0.9999310357517279 0.1 137 | 3.499999999999983 0.9999310357517279 0.1 138 | 3.599999999999983 0.9999310357517279 0.1 139 | 3.6999999999999833 0.9999310357517279 0.1 140 | 3.7999999999999834 0.9999310357517279 0.1 141 | 3.8999999999999835 0.9999310357517279 0.1 142 | 3.9999999999999836 0.9999310357517279 0.1 143 | 4.099999999999984 0.9999310357517279 0.1 144 | 4.199999999999983 0.9999310357517279 0.1 145 | 4.299999999999983 0.9999310357517279 0.1 146 | 4.399999999999983 0.9999310357517279 0.1 147 | 4.499999999999982 0.9999310357517279 0.1 148 | 4.599999999999982 0.9999310357517279 0.1 149 | 4.6999999999999815 0.9999310357517279 0.1 150 | 4.799999999999981 0.9999310357517279 0.1 151 | 4.899999999999981 0.9999310357517279 0.1 152 | 4.9999999999999805 0.9999310357517279 0.1 153 | 5.09999999999998 0.9999310357517279 0.1 154 | 5.19999999999998 0.9999310357517279 0.1 155 | 5.299999999999979 0.9999310357517279 0.1 156 | 5.399999999999979 0.9999310357517279 0.1 157 | 5.499999999999979 0.9999310357517279 0.1 158 | 5.599999999999978 0.9999310357517279 0.1 159 | 5.699999999999978 0.9999310357517279 0.1 160 | 5.799999999999978 0.9999310357517279 0.1 161 | 5.899999999999977 0.9999310357517279 0.1 162 | 5.999999999999977 0.9999310357517279 0.1 163 | 6.0999999999999766 0.9999310357517279 0.1 164 | 6.199999999999976 0.9999310357517279 0.1 165 | 6.299999999999976 0.9999310357517279 0.1 166 | 6.3999999999999755 0.9999310357517279 0.1 167 | 6.499999999999975 0.9999310357517279 0.1 168 | 6.599999999999975 0.9999310357517279 0.1 169 | 6.699999999999974 0.9999310357517279 0.1 170 | 6.799999999999974 0.9999310357517279 0.1 171 | 6.899999999999974 0.9999310357517279 0.1 172 | 6.999999999999973 0.9999310357517279 0.1 173 | 7.099999999999973 0.9999310357517279 0.1 174 | 7.199999999999973 0.9999310357517279 0.1 175 | 7.299999999999972 0.9999310357517279 0.1 176 | 7.399999999999972 0.9999310357517279 0.1 177 | 7.499999999999972 0.9999310357517279 0.1 178 | 7.599999999999971 0.9999310357517279 0.1 179 | 7.699999999999971 0.9999310357517279 0.1 180 | 7.7999999999999705 0.9999310357517279 0.1 181 | 7.89999999999997 0.9999310357517279 0.1 182 | 7.99999999999997 0.9999310357517279 0.1 183 | 8.09999999999997 0.9999310357517279 0.1 184 | 8.199999999999969 0.9999310357517279 0.1 185 | 8.299999999999969 0.9999310357517279 0.1 186 | 8.399999999999968 0.9999310357517279 0.1 187 | 8.499999999999968 0.9999310357517279 0.1 188 | 8.599999999999968 0.9999310357517279 0.1 189 | 8.699999999999967 0.9999310357517279 0.1 190 | 8.799999999999967 0.9999310357517279 0.1 191 | 8.899999999999967 0.9999310357517279 0.1 192 | 8.999999999999966 0.9999310357517279 0.1 193 | 9.099999999999966 0.9999310357517279 0.1 194 | 9.199999999999966 0.9999310357517279 0.1 195 | 9.299999999999965 0.9999310357517279 0.1 196 | 9.399999999999965 0.9999310357517279 0.1 197 | 9.499999999999964 0.9999310357517279 0.1 198 | 9.599999999999964 0.9999310357517279 0.1 199 | 9.699999999999964 0.9999310357517279 0.1 200 | 9.799999999999963 0.9999310357517279 0.1 201 | 9.899999999999963 0.9999310357517279 0.1 202 | -------------------------------------------------------------------------------- /README.mdtex: -------------------------------------------------------------------------------- 1 | # ode45-cash-karp [![Build Status](https://travis-ci.org/scijs/ode45-cash-karp.svg)](https://travis-ci.org/scijs/ode45-cash-karp) [![npm version](https://badge.fury.io/js/ode45-cash-karp.svg)](http://badge.fury.io/js/ode45-cash-karp) [![Dependency Status](https://david-dm.org/scijs/ode45-cash-karp.svg)](https://david-dm.org/scijs/ode45-cash-karp) 2 | 3 | > Integrate a system of Ordinary Differential Equations using the Fifth Order Adaptive Cash-Karp method 4 | 5 | 6 | ## Introduction 7 | 8 | This module integrates a system of ordinary differential equations of the form 9 | 10 | $$[plain=true] \begin{eqnarray*} y'(t) &=& f(t, y(t)), \\ y(t_0) &=& y_0 \end{eqnarray*} $$ 11 | 12 | where $y$ is a vector of length $n$. Given time step $\Delta t$, the [Cash-Karp](https://en.wikipedia.org/wiki/Cash%E2%80%93Karp_method) method uses a fifth order Runge-Kutta scheme with a fourth order embedded estimator in order to control the error. In other words, the same intermediate values used in calculating the fifth order update can be used to calculate a fourth order estimate. The difference yields an error estimate, and the error estimate controls the timestep $\Delta t$. 13 | 14 | ## Install 15 | 16 | ```bash 17 | $ npm install ode45-cash-karp 18 | ``` 19 | 20 | ## Example 21 | 22 | ### [Van der Pol oscillator](https://en.wikipedia.org/wiki/Van_der_Pol_oscillator) 23 | 24 | ```javascript 25 | var ode45 = require('ode45-cash-karp') 26 | 27 | // The derivative function for a Van der Pol oscillator: 28 | var vanderpol = function(dydt, y, t) { 29 | dydt[0] = y[1] 30 | dydt[1] = 4 * (1-y[0]*y[0])*y[1] - y[0] 31 | } 32 | 33 | // Initialize: 34 | var y0 = [2,0], 35 | t0 = 0, 36 | dt0 = 1e-3, 37 | integrator = ode45( y0, vanderpol, t0, dt0 ) 38 | 39 | // Integrate up to tmax: 40 | var tmax = 10, t = [], y = [] 41 | while( integrator.step( tmax ) ) { 42 | // Store the solution at this timestep: 43 | t.push( integrator.t ) 44 | y.push( integrator.y ) 45 | } 46 | ``` 47 | 48 | ### Common patterns 49 | 50 | A single adaptive step: 51 | ``` 52 | integrator.step() 53 | integrator.y // current state 54 | integrator.t // current time 55 | integrator.dt // newly adapted timestep 56 | ``` 57 | 58 | A single adaptive step, returning false if $t=1.5$ reached: 59 | ``` 60 | integrator.step( 1.5 ) // returns true if t < 1.5 61 | integrator.step( 1.5 ) // returns false if t = 1.5 62 | ``` 63 | 64 | Ten adaptive timesteps in sequence: 65 | ``` 66 | integrator.steps( 10 ) 67 | ``` 68 | 69 | Ten timesteps, halting early and returning false if $t=1.5$ is reached:: 70 | ``` 71 | integrator.steps( 10, 1.5 ) 72 | ``` 73 | 74 | Take any number of timesteps until $t=1.5$: 75 | ``` 76 | integrator.steps( Infinity, 1.5 ) 77 | ``` 78 | 79 | ## API 80 | 81 | #### `require('ode45-cash-karp')( y0, deriv, t0, dt0 [, options] )` 82 | #### Arguments: 83 | - `y0`: an array or typed array containing initial conditions. This vector is updated in-place with each integrator step. 84 | - `deriv`: a function that calculates the derivative. Format is `function( dydt, y, t )`. Inputs are current state `y` and current time `t`, output is the calculated derivative `dydt`. 85 | - `t0`: initial time $t$. 86 | - `dt0`: initial time step $\Delta t$. 87 | - `options`: an optional associative array of options. Valid parameters are: 88 | - `tol`: The target error level to be acheived. Default is: $[margin=1pt 1pt 1pt -3pt] 1 \cdot 10^{-8}$. 89 | - `maxIncreaseFactor`: The maximum factor by which to increase the timestep if the error tolerance is met. Default value is 10. This limit is applied at the end of a successful timestep. 90 | - `maxDecreaseFactor`: The maximum factor by which to decrease the timestep if the error tolerance is not met. Default value is 10. This limit is applied on each trial step until the error tolerance is acheived. 91 | - `dtMinMag`: The minimum allowed magnitude of $\Delta t$. If limit is exceeded during adaptation, a warning is printed to the console and the timestep completes with $\Delta t$ clipped to the the prescribed magnitude. If `undefined`, this limit is ignored. Default value is `undefined`. 92 | - `dtMaxMag`: The maximum allowed magnitude of $\Delta t$. This limit is applied at the beginning of each step. If a timestep larger than this magnitude is requested, the timestep is executed with $\Delta t$ clipped to the prescribed magnitude. If `undefined`, this limit is ignored. Default value is `undefined`. 93 | - `errorScaleFunction`: The function used to compute a normalizing factor for the error in a given dimension. See below for details. 94 | - `errorReduceFunction`: The reduce operation by which errors in each dimension are combined into a single error metric. See below for details. 95 | - `errorPostFunction`: An operation applied to the total error. For example, if using the $L_2$ norm this would be a square root. See below for details. 96 | - `verbose`: Log covergence warnings. Default is `true`. 97 | 98 | #### Returns: 99 | Initialized integrator object. 100 | 101 | #### Properties: 102 | - `n`: dimension of `y0`. 103 | - `y`: current state; a reference to input array `y0`. 104 | - `deriv`: function that calculates the derivative. 105 | - `t`: current time, incremented by `dt` on each time step. 106 | - `dt`: current time step $\Delta t$. Initialized from input `dt0`. May be changed, but will be overwritten with each adaptive step in order to acheive the prescribed error bound. 107 | - all options are copied to properties on the integrator object and may be changed at any time. 108 | 109 | #### Methods: 110 | - `.step( [tLimit] )`: takes a single step of the integrator and stores the result in-place in the `y` property. Returns true if `tLimit` was not provided or if `t` has not reached the limit, otherwise returns false, meaning `t` has reached `tLimit`. 111 | - `.steps( n, [tLimit] )`: takes `n` steps of the integrator, storing the result in-place in the `y` property. Exits early if `tLimit` is reached. Returns true if `tLimit` was not provided or if `t` has not reached the limit, otherwise returns false, meaning `t` has reached `tLimit`. Note that, for example, `.steps( Infinity, 10 )` is valid and will take whatever number of step is required to reach $t=10$. 112 | 113 | ### Error Estimation 114 | Ideally, there would be no choices in error computation since this library would implement the best possible choices, but I've left this configurable. 115 | 116 | ##### `errorScaleFunction: function( i, dt, y, dydt )` 117 | This function receives the dimension number `i`, the current timestep `dt`, the current state `y`, and the derivative calculated at the beginning of the step, `dydt`. It must return a normalization factor by which the error in the given dimension is normalized. It is executed once at the beginning of each timestep and not for subsequent trial steps. By default, it is: 118 | 119 | ``` 120 | function errorScaleFunction( i, dt, y, dydt ) { 121 | return Math.abs(y) + Math.abs(dt * dydt) + 1e-32 122 | } 123 | ``` 124 | 125 | ##### `errorReduceFunction: function( i, accumulatedError, errorEstimate )` 126 | This function performs a reduce operation on the per-dimension error. `accumulatedError` is initially zero. The function must add the error estimate in dimension `i` and return a new error estimate. By default, the error reduce function simply returns the maximum error: 127 | 128 | ``` 129 | function errorReduceFunction( i, accumulatedError, errorEstimate ) { 130 | return Math.max( accumulatedError, Math.abs(errorEstimate)) 131 | } 132 | ``` 133 | 134 | ##### `errorPostFunction: function( accumulatedError, errorEstimate )` 135 | This function applies a mapping to the total reduced error resulting from `errorReduceFunction`. For the $L_2$ norm, this would just be `Math.sqrt`; for the $L_\infty$ norm, this is simply a no-op: 136 | 137 | ``` 138 | function errorPostFunction( accumulatedError ) { 139 | return accumulatedError 140 | } 141 | ``` 142 | 143 | ## Credits 144 | 145 | (c) 2015 Ricky Reusser. MIT License 146 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # ode45-cash-karp [![Build Status](https://travis-ci.org/scijs/ode45-cash-karp.svg)](https://travis-ci.org/scijs/ode45-cash-karp) [![npm version](https://badge.fury.io/js/ode45-cash-karp.svg)](http://badge.fury.io/js/ode45-cash-karp) [![Dependency Status](https://david-dm.org/scijs/ode45-cash-karp.svg)](https://david-dm.org/scijs/ode45-cash-karp) 2 | 3 | > Integrate a system of Ordinary Differential Equations using the Fifth Order Adaptive Cash-Karp method 4 | 5 | 6 | ## Introduction 7 | 8 | This module integrates a system of ordinary differential equations of the form 9 | 10 |

\begin{eqnarray*} y'(t) &=& f(t, y(t)), \\ y(t_0) &=& y_0 \end{eqnarray*}

11 | 12 | where y is a vector of length n. Given time step \Delta t, the [Cash-Karp](https://en.wikipedia.org/wiki/Cash%E2%80%93Karp_method) method uses a fifth order Runge-Kutta scheme with a fourth order embedded estimator in order to control the error. In other words, the same intermediate values used in calculating the fifth order update can be used to calculate a fourth order estimate. The difference yields an error estimate, and the error estimate controls the timestep \Delta t. 13 | 14 | ## Install 15 | 16 | ```bash 17 | $ npm install ode45-cash-karp 18 | ``` 19 | 20 | ## Example 21 | 22 | ### [Van der Pol oscillator](https://en.wikipedia.org/wiki/Van_der_Pol_oscillator) 23 | 24 | ```javascript 25 | var ode45 = require('ode45-cash-karp') 26 | 27 | // The derivative function for a Van der Pol oscillator: 28 | var vanderpol = function(dydt, y, t) { 29 | dydt[0] = y[1] 30 | dydt[1] = 4 * (1-y[0]*y[0])*y[1] - y[0] 31 | } 32 | 33 | // Initialize: 34 | var y0 = [2,0], 35 | t0 = 0, 36 | dt0 = 1e-3, 37 | integrator = ode45( y0, vanderpol, t0, dt0 ) 38 | 39 | // Integrate up to tmax: 40 | var tmax = 10, t = [], y = [] 41 | while( integrator.step( tmax ) ) { 42 | // Store the solution at this timestep: 43 | t.push( integrator.t ) 44 | y.push( integrator.y ) 45 | } 46 | ``` 47 | 48 | ### Common patterns 49 | 50 | A single adaptive step: 51 | ``` 52 | integrator.step() 53 | integrator.y // current state 54 | integrator.t // current time 55 | integrator.dt // newly adapted timestep 56 | ``` 57 | 58 | A single adaptive step, returning false if t=1.5 reached: 59 | ``` 60 | integrator.step( 1.5 ) // returns true if t < 1.5 61 | integrator.step( 1.5 ) // returns false if t = 1.5 62 | ``` 63 | 64 | Ten adaptive timesteps in sequence: 65 | ``` 66 | integrator.steps( 10 ) 67 | ``` 68 | 69 | Ten timesteps, halting early and returning false if t=1.5 is reached:: 70 | ``` 71 | integrator.steps( 10, 1.5 ) 72 | ``` 73 | 74 | Take any number of timesteps until t=1.5: 75 | ``` 76 | integrator.steps( Infinity, 1.5 ) 77 | ``` 78 | 79 | ## API 80 | 81 | #### `require('ode45-cash-karp')( y0, deriv, t0, dt0 [, options] )` 82 | #### Arguments: 83 | - `y0`: an array or typed array containing initial conditions. This vector is updated in-place with each integrator step. 84 | - `deriv`: a function that calculates the derivative. Format is `function( dydt, y, t )`. Inputs are current state `y` and current time `t`, output is the calculated derivative `dydt`. 85 | - `t0`: initial time t. 86 | - `dt0`: initial time step \Delta t. 87 | - `options`: an optional associative array of options. Valid parameters are: 88 | - `tol`: The target error level to be acheived. Default is: 1 \cdot 10^{-8}. 89 | - `maxIncreaseFactor`: The maximum factor by which to increase the timestep if the error tolerance is met. Default value is 10. This limit is applied at the end of a successful timestep. 90 | - `maxDecreaseFactor`: The maximum factor by which to decrease the timestep if the error tolerance is not met. Default value is 10. This limit is applied on each trial step until the error tolerance is acheived. 91 | - `dtMinMag`: The minimum allowed magnitude of \Delta t. If limit is exceeded during adaptation, a warning is printed to the console and the timestep completes with \Delta t clipped to the the prescribed magnitude. If `undefined`, this limit is ignored. Default value is `undefined`. 92 | - `dtMaxMag`: The maximum allowed magnitude of \Delta t. This limit is applied at the beginning of each step. If a timestep larger than this magnitude is requested, the timestep is executed with \Delta t clipped to the prescribed magnitude. If `undefined`, this limit is ignored. Default value is `undefined`. 93 | - `errorScaleFunction`: The function used to compute a normalizing factor for the error in a given dimension. See below for details. 94 | - `errorReduceFunction`: The reduce operation by which errors in each dimension are combined into a single error metric. See below for details. 95 | - `errorPostFunction`: An operation applied to the total error. For example, if using the L_2 norm this would be a square root. See below for details. 96 | - `verbose`: Log covergence warnings. Default is `true`. 97 | 98 | #### Returns: 99 | Initialized integrator object. 100 | 101 | #### Properties: 102 | - `n`: dimension of `y0`. 103 | - `y`: current state; a reference to input array `y0`. 104 | - `deriv`: function that calculates the derivative. 105 | - `t`: current time, incremented by `dt` on each time step. 106 | - `dt`: current time step \Delta t. Initialized from input `dt0`. May be changed, but will be overwritten with each adaptive step in order to acheive the prescribed error bound. 107 | - all options are copied to properties on the integrator object and may be changed at any time. 108 | 109 | #### Methods: 110 | - `.step( [tLimit] )`: takes a single step of the integrator and stores the result in-place in the `y` property. Returns true if `tLimit` was not provided or if `t` has not reached the limit, otherwise returns false, meaning `t` has reached `tLimit`. 111 | - `.steps( n, [tLimit] )`: takes `n` steps of the integrator, storing the result in-place in the `y` property. Exits early if `tLimit` is reached. Returns true if `tLimit` was not provided or if `t` has not reached the limit, otherwise returns false, meaning `t` has reached `tLimit`. Note that, for example, `.steps( Infinity, 10 )` is valid and will take whatever number of step is required to reach t=10. 112 | 113 | ### Error Estimation 114 | Ideally, there would be no choices in error computation since this library would implement the best possible choices, but I've left this configurable. 115 | 116 | ##### `errorScaleFunction: function( i, dt, y, dydt )` 117 | This function receives the dimension number `i`, the current timestep `dt`, the current state `y`, and the derivative calculated at the beginning of the step, `dydt`. It must return a normalization factor by which the error in the given dimension is normalized. It is executed once at the beginning of each timestep and not for subsequent trial steps. By default, it is: 118 | 119 | ``` 120 | function errorScaleFunction( i, dt, y, dydt ) { 121 | return Math.abs(y) + Math.abs(dt * dydt) + 1e-32 122 | } 123 | ``` 124 | 125 | ##### `errorReduceFunction: function( i, accumulatedError, errorEstimate )` 126 | This function performs a reduce operation on the per-dimension error. `accumulatedError` is initially zero. The function must add the error estimate in dimension `i` and return a new error estimate. By default, the error reduce function simply returns the maximum error: 127 | 128 | ``` 129 | function errorReduceFunction( i, accumulatedError, errorEstimate ) { 130 | return Math.max( accumulatedError, Math.abs(errorEstimate)) 131 | } 132 | ``` 133 | 134 | ##### `errorPostFunction: function( accumulatedError, errorEstimate )` 135 | This function applies a mapping to the total reduced error resulting from `errorReduceFunction`. For the L_2 norm, this would just be `Math.sqrt`; for the L_\infty norm, this is simply a no-op: 136 | 137 | ``` 138 | function errorPostFunction( accumulatedError ) { 139 | return accumulatedError 140 | } 141 | ``` 142 | 143 | ## Credits 144 | 145 | (c) 2015 Ricky Reusser. MIT License 146 | -------------------------------------------------------------------------------- /test/test.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | 3 | var ode45 = require('../lib') 4 | , assert = require('chai').assert 5 | , richardson = require('richardson-extrapolation') 6 | 7 | var ctors = { 8 | 'float32': Float32Array, 9 | 'float64': Float64Array, 10 | 'array': function(){ return arguments[0] } 11 | } 12 | 13 | 14 | Object.keys(ctors).forEach(function(dtype) { 15 | var ctor = ctors[dtype] 16 | 17 | describe('ode45 integration (' + dtype + ')', function() { 18 | 19 | describe('setup', function() { 20 | var integrator, f, y0, t0, n 21 | 22 | beforeEach(function() { 23 | f = function(dydt, y) { dydt[0] = -y[0] } 24 | t0 = 1.5 25 | y0 = new ctor([1]) 26 | n = 10 27 | 28 | integrator = ode45( new ctor([1]), function(){}, 1, 1) 29 | }) 30 | 31 | it('creates work arrays of the same type as the input',function() { 32 | assert.equal( integrator._w.constructor, y0.constructor ) 33 | assert.equal( integrator._k1.constructor, y0.constructor ) 34 | assert.equal( integrator._k2.constructor, y0.constructor ) 35 | assert.equal( integrator._k3.constructor, y0.constructor ) 36 | assert.equal( integrator._k4.constructor, y0.constructor ) 37 | assert.equal( integrator._k5.constructor, y0.constructor ) 38 | assert.equal( integrator._k6.constructor, y0.constructor ) 39 | }) 40 | 41 | it('creates work arrays of the same size as the input',function() { 42 | assert.equal( integrator._w.length, y0.length ) 43 | assert.equal( integrator._k1.length, y0.length ) 44 | assert.equal( integrator._k2.length, y0.length ) 45 | assert.equal( integrator._k3.length, y0.length ) 46 | assert.equal( integrator._k4.length, y0.length ) 47 | assert.equal( integrator._k5.length, y0.length ) 48 | assert.equal( integrator._k6.length, y0.length ) 49 | }) 50 | }) 51 | 52 | describe('adaptive timestepping', function() { 53 | 54 | it('is sign-independent in the independent variable', function() { 55 | var f = function(dydt, y) { 56 | dydt[0] = -y[1] 57 | dydt[1] = y[0] 58 | } 59 | // Integrate around a circle and confirm that it doesn't matter 60 | // whether we integrate one way or the other: 61 | var i1 = ode45( new ctor([1,0]), f, 0, 1e4) 62 | i1.step() 63 | var i2 = ode45( new ctor([1,0]), f, 0, -1e4) 64 | i2.step() 65 | 66 | assert.closeTo( i1.y[0], i2.y[0], 1e-6, 'x-coordinates are equal' ) 67 | assert.closeTo( i1.y[1], -i2.y[1], 1e-6, 'y-coordinates are opposite' ) 68 | assert.closeTo( i1.dt, -i2.dt, 1e-6, 'dt has been adapted identically' ) 69 | }) 70 | 71 | it('is scale-independent in calculating the error', function() { 72 | var f = function(dydt, y) { 73 | dydt[0] = -y[1] 74 | dydt[1] = y[0] 75 | } 76 | // Integration around a circle is scale-independent in dt, so 77 | // ensure that the adaptation is the same no matter the radius: 78 | var i1 = ode45( new ctor([1e5,0]), f, 0, 1e4) 79 | i1.step() 80 | var i2 = ode45( new ctor([1e-5,0]), f, 0, 1e4) 81 | i2.step() 82 | assert.closeTo( i1.dt, i2.dt, 1e-2 ) 83 | }) 84 | 85 | it('throws an error if NaN encountered', function() { 86 | var f = function(dydt, y) { dydt[0] = Math.pow(y[0],4) } 87 | assert.throws(function() { 88 | var i = ode45( new ctor([100,0]), f, 0, 1) 89 | i.steps(10) 90 | },Error,/NaN encountered/) 91 | }) 92 | 93 | it('updates dt according to the timestep taken', function() { 94 | // Integrate dy/dt = constant 95 | var c = 5.2 96 | var f = function(dydt, y) { dydt[0] = c } 97 | var i = ode45( new ctor([0]), f, 0, 1) 98 | i.step() 99 | assert.closeTo( i.y[0], i.t * c, 1e-3, 'answer is correct' ) 100 | }) 101 | 102 | it('integrates with dt>0 and a limit', function() { 103 | var c = 5.2 104 | var t0 = 1 105 | var t1 = 3 106 | var dt = 1 107 | var f = function(dydt, y) { dydt[0] = c } 108 | var i = ode45( new ctor([0]), f, t0, dt) 109 | i.step( t1 ) 110 | assert.closeTo( i.y[0], (2-t0) * c, 1e-3, 'answer is correct' ) 111 | assert.closeTo( i.t, 2, 1e-3, 'dt has been clipped') 112 | i.step( t1 ) 113 | assert.closeTo( i.y[0], (t1-t0) * c, 1e-3, 'answer is correct' ) 114 | assert.closeTo( i.t, t1, 1e-3, 'dt has been clipped') 115 | }) 116 | 117 | it('integrates with dt<0 and a limit', function() { 118 | var c = 5.2 119 | var t0 = 3 120 | var t1 = 1 121 | var dt = -1 122 | var f = function(dydt, y) { dydt[0] = c } 123 | var i = ode45( new ctor([0]), f, t0, dt) 124 | 125 | assert.isTrue( i.step( t1 ) ) 126 | assert.closeTo( i.y[0], (2-t0) * c, 1e-3, 'answer is correct' ) 127 | assert.closeTo( i.t, t0+dt, 1e-3, 'dt is updated') 128 | assert.isTrue( i.step( t1 ) ) 129 | assert.closeTo( i.y[0], (t1-t0) * c, 1e-3, 'answer is correct' ) 130 | assert.closeTo( i.t, t1, 1e-3, 'dt has been clipped') 131 | }) 132 | 133 | it('integrates the 0 without incident', function() { 134 | // Just to make sure there aren't any divide-by-zero issues 135 | var f = function(dydt, y) { dydt[0] = 0 } 136 | var i = ode45( new ctor([0]), f, 0, 1) 137 | i.step() 138 | assert.closeTo( i.y[0], 0, 1e-3, 'answer is correct' ) 139 | assert.closeTo( i.dt, 10, 1e-3, 'dt has been increased for the next step' ) 140 | }) 141 | 142 | it('increases the timestep by no more than maxIncreaseFactor if tolerance met', function() { 143 | // Integrating a straight line should increase the timestep by maxIncreaseFactor: 144 | var dt0 = 15 145 | var factor = 11 146 | var f = function(dydt, y) { dydt[0] = 1 } 147 | var i = ode45( new ctor([0]), f, 0, dt0, {maxIncreaseFactor: factor}) 148 | i.step() 149 | assert.closeTo( i.dt, dt0 * factor, 1e-3, 'increased dt by maxIncreaseFactor' ) 150 | }) 151 | }) 152 | 153 | describe('stepsize limiting', function() { 154 | it('doesn\'t decrease the step size past dtMinMag (dt > 0)', function() { 155 | var dtMinMag = 1e-4 156 | var i 157 | var f = function(dydt, y) { dydt[0] = Math.cos(1e5*y[0]) } 158 | i = ode45( new ctor([0]), f, 0, 1, {dtMinMag: dtMinMag}) 159 | i.step() 160 | assert( Number.isFinite(i.y[0]), 'y is finite' ) 161 | assert( i.y[0] !== 0, 'y has been timestepped' ) 162 | assert.closeTo( i.t, dtMinMag, 1e-8, 'dt is at the lower limit' ) 163 | i.step() 164 | assert.closeTo( i.t, 2 * dtMinMag, 1e-8, 'dt is at the lower limit' ) 165 | }) 166 | 167 | it('doesn\'t decrease the step size past dtMinMag (dt < 0)', function() { 168 | var dtMinMag = 1e-4 169 | var i 170 | var f = function(dydt, y) { dydt[0] = Math.cos(1e5*y[0]) } 171 | i = ode45( new ctor([0]), f, 0, -1, {dtMinMag: dtMinMag}) 172 | i.step() 173 | assert( Number.isFinite(i.y[0]), 'y is finite' ) 174 | assert( i.y[0] !== 0, 'y has been timestepped' ) 175 | assert.closeTo( i.t, -dtMinMag, 1e-8, 'dt is at the lower limit' ) 176 | i.step() 177 | assert.closeTo( i.t, -2 * dtMinMag, 1e-8, 'dt is at the lower limit' ) 178 | }) 179 | 180 | it('doesn\'t increase the step size past dtMax (dt > 0)', function() { 181 | var dtMaxMag = 2 182 | var i, dt0 = 1e4 183 | var f = function(dydt, y) { dydt[0] = 1 } 184 | i = ode45( new ctor([0]), f, 0, dt0, {dtMaxMag: dtMaxMag}) 185 | i.step() 186 | assert( Number.isFinite(i.y[0]), 'y is finite' ) 187 | assert( i.y[0] !== 0, 'y has been timestepped' ) 188 | assert.closeTo( i.t, dtMaxMag, 1e-8, 'dt is at the upper limit' ) 189 | i.step() 190 | assert.closeTo( i.t, dtMaxMag * 2, 1e-8, 'dt is at the upper limit' ) 191 | }) 192 | 193 | it('doesn\'t increase the step size past dtMax (dt < 0)', function() { 194 | var dtMaxMag = 2 195 | var i, dt0 = -1e4 196 | var f = function(dydt, y) { dydt[0] = 1 } 197 | i = ode45( new ctor([0]), f, 0, dt0, {dtMaxMag: dtMaxMag}) 198 | i.step() 199 | assert( Number.isFinite(i.y[0]), 'y is finite' ) 200 | assert( i.y[0] !== 0, 'y has been timestepped' ) 201 | assert.closeTo( i.t, -dtMaxMag, 1e-8, 'dt is at the upper limit' ) 202 | i.step() 203 | assert.closeTo( i.t, -dtMaxMag * 2, 1e-8, 'dt is at the upper limit' ) 204 | }) 205 | 206 | }) 207 | 208 | describe('convergence', function() { 209 | it('total accumulated error of high order scheme is order O(h^5)', function() { 210 | 211 | var result = richardson(function(h) { 212 | // Integrate around a circle at an accelerating rate 213 | var f = function(dydt, y, t) { 214 | var s = Math.sin(t * Math.PI) * Math.PI / 2 215 | dydt[0] = -y[1]* 2 * Math.PI * s 216 | dydt[1] = y[0]* 2 * Math.PI * s 217 | } 218 | var i = ode45( new ctor([1,0,0]), f, 0, h ) 219 | 220 | var n = Math.floor(1/h+0.5) 221 | for(var j=0; j 0 ? Math.min : Math.max)(a, b); 19 | } 20 | 21 | function maxMag (a, b) { 22 | return (a > 0 ? Math.max : Math.min)(a, b); 23 | } 24 | 25 | var Integrator = function Integrator( y0, deriv, t0, dt0, options ) { 26 | var opts = options || {} 27 | this.tol = opts.tol===undefined ? 1e-8 : opts.tol 28 | this.maxIncreaseFactor = opts.maxIncreaseFactor===undefined ? 10 : opts.maxIncreaseFactor 29 | this.maxDecreaseFactor = opts.maxDecreaseFactor===undefined ? 10 : opts.maxDecreaseFactor 30 | this.dtMinMag = opts.dtMinMag===undefined ? 0 : Math.abs(opts.dtMinMag) 31 | this.dtMaxMag = opts.dtMaxMag===undefined ? undefined : Math.abs(opts.dtMaxMag) 32 | this.verbose = opts.verbose===undefined ? true : !!opts.verbose; 33 | 34 | var logCnt = 0 35 | var maxLogs = 10 36 | var maxLogWarningIssued = false 37 | this.__log = function (method, msg) { 38 | if (!this.verbose) return; 39 | if (logCnt < maxLogs) { 40 | console.log('ode45-cash-karp::' + method + '(): ' + msg) 41 | logCnt++ 42 | } else { 43 | if (!maxLogWarningIssued) { 44 | console.log('ode45-cash-karp: too many warnings. Silencing further output') 45 | maxLogWarningIssued = true 46 | } 47 | } 48 | }.bind(this) 49 | 50 | this.errorScaleFunction = opts.errorScaleFunction === undefined ? defaultErrorScaleFunction : opts.errorScaleFunction 51 | this.errorReduceFunction = opts.errorReduceFunction === undefined ? defaultErrorReduceFunction : opts.errorReduceFunction 52 | this.errorPostFunction = opts.errorPostFunction === undefined ? defaultErrorPostFunction : opts.errorPostFunction 53 | 54 | // This is technically a parameter, but I think the value of leaving this undocumented exceeds the 55 | // value of documenting this and only adding confusion. I can't imagine this will even need to be 56 | // modified. 57 | this.safetyFactor = opts.safetyFactor===undefined ? 0.9 : opts.safetyFactor 58 | 59 | // Bind variables to this: 60 | this.deriv = deriv 61 | this.y = y0 62 | this.n = this.y.length 63 | this.dt = dt0 64 | this.t = t0 65 | 66 | // Create a scratch array into which we compute the derivative: 67 | this._ctor = this.y.constructor 68 | 69 | this._errorScale = new this._ctor( this.n ) 70 | this._w = new this._ctor( this.n ) 71 | this._k1 = new this._ctor( this.n ) 72 | this._k2 = new this._ctor( this.n ) 73 | this._k3 = new this._ctor( this.n ) 74 | this._k4 = new this._ctor( this.n ) 75 | this._k5 = new this._ctor( this.n ) 76 | this._k6 = new this._ctor( this.n ) 77 | } 78 | 79 | Integrator.prototype._calculateK1 = function() { 80 | this.deriv( this._k1, this.y, this.t ) 81 | 82 | return this 83 | } 84 | 85 | Integrator.prototype._calculateKs = function(dt) { 86 | var i 87 | 88 | //var a21 = 0.200000000000000000 // 1/5 89 | //var a31 = 0.075000000000000000 // 3/40 90 | //var a32 = 0.225000000000000000 // 9/40 91 | //var a41 = 0.300000000000000000 // 3/10 92 | //var a42 = -0.900000000000000000 // -9/10 93 | //var a43 = 1.200000000000000000 // 6/5 94 | //var a51 = -0.203703703703703703 // -11/54 95 | //var a52 = 2.500000000000000000 // 5/2 96 | //var a53 = -2.592592592592592592 // -70/27 97 | //var a54 = 1.296296296296296296 // 35/27 98 | //var a61 = 0.029495804398148148 // 1631/55296 99 | //var a62 = 0.341796875000000000 // 175/512 100 | //var a63 = 0.041594328703703703 // 575/13824 101 | //var a64 = 0.400345413773148148 // 44275/110592 102 | //var a65 = 0.061767578125000000 // 253/4096 103 | 104 | //var b1 = 0.000000000000000000 // 0 105 | //var b2 = 0.200000000000000000 // 1/5 106 | //var b3 = 0.300000000000000000 // 3/10 107 | //var b4 = 0.600000000000000000 // 3/5 108 | //var b5 = 1.000000000000000000 // 1 109 | //var b6 = 0.875000000000000000 // 7/8 110 | 111 | // Same for every step, so don't repeat: 112 | //this.deriv( this._k1, this.y, this.t ) 113 | 114 | for(i=0; i 0 ? Math.min( tLimit - this.t, thisDt ) : Math.max( tLimit - this.t, thisDt ) 231 | } 232 | 233 | // Limit the magnitude of dt to dtMaxMag 234 | if( this.dtMaxMag !== undefined && Math.abs( thisDt ) > this.dtMaxMag ) { 235 | this.__log('step', 'step greater than maximum stepsize requested. dt magnitude has been limited.') 236 | thisDt = thisDt > 0 ? this.dtMaxMag : -this.dtMaxMag 237 | } 238 | 239 | // Limit the magnitude of dt to dtMinMag 240 | if( this.dtMinMag !== undefined && Math.abs( thisDt ) < this.dtMinMag ) { 241 | this.__log('step', 'step smaller than minimum stepsize requested. dt magnitude has been limited.') 242 | thisDt = thisDt > 0 ? this.dtMinMag : -this.dtMinMag 243 | } 244 | 245 | // The first derivative doesn't change even if dt does, so only calculate this once: 246 | this._calculateK1() 247 | 248 | // The scale factor per-dimension probably doesn't need to change either across a single adaptive step: 249 | this._calculateErrorScale(thisDt) 250 | 251 | var error = Infinity 252 | var maxError = 0 253 | var nextDt 254 | var lowerDtLimitReached = false 255 | 256 | while(true) { 257 | 258 | // Calculate intermediate k's for the proposed step: 259 | this._calculateKs(thisDt) 260 | 261 | // Calculate the max error of the proposed step: 262 | error = this._calculateError(thisDt) 263 | 264 | if( error < this.tol || lowerDtLimitReached ) { 265 | // Success! Exit: 266 | break 267 | } 268 | 269 | if( ! Number.isFinite(error) ) { 270 | throw new Error('ode45-cash-karp::step() NaN encountered while integrating.') 271 | } 272 | 273 | // Failure. Adapt the timestep: 274 | nextDt = this.safetyFactor * thisDt * Math.pow( this.tol / error, 0.2 ) 275 | 276 | // Cut the timestep, but not by more than maxDecreaseFactor 277 | thisDt = maxMag( thisDt / this.maxDecreaseFactor, nextDt ) 278 | 279 | // If stepsize too small, finish off by taking the currently proposed step and logging a warning: 280 | if( this.dtMinMag !== undefined && Math.abs(thisDt) < this.dtMinMag ) { 281 | thisDt = this.dtMinMag * (thisDt > 0 ? 1 : -1); 282 | this.__log('step', 'minimum stepsize reached.') 283 | lowerDtLimitReached = true 284 | } 285 | } 286 | 287 | // Apply this update: 288 | this._update(thisDt) 289 | 290 | // Calculate the next timestep size: 291 | nextDt = this.safetyFactor * thisDt * Math.pow( this.tol / error, 0.25 ) 292 | 293 | // Increase the timestep for the next time around, but not by more than the maxIncreaseFactor: 294 | this.dt = maxMag(this.dt / this.maxDecreaseFactor, minMag( this.dt * this.maxIncreaseFactor, nextDt )); 295 | 296 | if( tLimit !== undefined ) { 297 | return Math.abs(this.t - tLimit) > this.dt * 1e-8; 298 | } else { 299 | return true 300 | } 301 | } 302 | 303 | Integrator.prototype.steps = function( n, tLimit ) { 304 | for(var step=0; step> matrix makepattern 348 | /Pat1 exch def 349 | << Tile8x8 350 | /PaintProc {0.5 setlinewidth pop 0 0 M 8 8 L 0 8 M 8 0 L stroke 351 | 0 4 M 4 8 L 8 4 L 4 0 L 0 4 L stroke} 352 | >> matrix makepattern 353 | /Pat2 exch def 354 | << Tile8x8 355 | /PaintProc {0.5 setlinewidth pop 0 0 M 0 8 L 356 | 8 8 L 8 0 L 0 0 L fill} 357 | >> matrix makepattern 358 | /Pat3 exch def 359 | << Tile8x8 360 | /PaintProc {0.5 setlinewidth pop -4 8 M 8 -4 L 361 | 0 12 M 12 0 L stroke} 362 | >> matrix makepattern 363 | /Pat4 exch def 364 | << Tile8x8 365 | /PaintProc {0.5 setlinewidth pop -4 0 M 8 12 L 366 | 0 -4 M 12 8 L stroke} 367 | >> matrix makepattern 368 | /Pat5 exch def 369 | << Tile8x8 370 | /PaintProc {0.5 setlinewidth pop -2 8 M 4 -4 L 371 | 0 12 M 8 -4 L 4 12 M 10 0 L stroke} 372 | >> matrix makepattern 373 | /Pat6 exch def 374 | << Tile8x8 375 | /PaintProc {0.5 setlinewidth pop -2 0 M 4 12 L 376 | 0 -4 M 8 12 L 4 -4 M 10 8 L stroke} 377 | >> matrix makepattern 378 | /Pat7 exch def 379 | << Tile8x8 380 | /PaintProc {0.5 setlinewidth pop 8 -2 M -4 4 L 381 | 12 0 M -4 8 L 12 4 M 0 10 L stroke} 382 | >> matrix makepattern 383 | /Pat8 exch def 384 | << Tile8x8 385 | /PaintProc {0.5 setlinewidth pop 0 -2 M 12 4 L 386 | -4 0 M 12 8 L -4 4 M 8 10 L stroke} 387 | >> matrix makepattern 388 | /Pat9 exch def 389 | /Pattern1 {PatternBgnd KeepColor Pat1 setpattern} bind def 390 | /Pattern2 {PatternBgnd KeepColor Pat2 setpattern} bind def 391 | /Pattern3 {PatternBgnd KeepColor Pat3 setpattern} bind def 392 | /Pattern4 {PatternBgnd KeepColor Landscape {Pat5} {Pat4} ifelse setpattern} bind def 393 | /Pattern5 {PatternBgnd KeepColor Landscape {Pat4} {Pat5} ifelse setpattern} bind def 394 | /Pattern6 {PatternBgnd KeepColor Landscape {Pat9} {Pat6} ifelse setpattern} bind def 395 | /Pattern7 {PatternBgnd KeepColor Landscape {Pat8} {Pat7} ifelse setpattern} bind def 396 | } def 397 | % 398 | % 399 | %End of PostScript Level 2 code 400 | % 401 | /PatternBgnd { 402 | TransparentPatterns {} {gsave 1 setgray fill grestore} ifelse 403 | } def 404 | % 405 | % Substitute for Level 2 pattern fill codes with 406 | % grayscale if Level 2 support is not selected. 407 | % 408 | /Level1PatternFill { 409 | /Pattern1 {0.250 Density} bind def 410 | /Pattern2 {0.500 Density} bind def 411 | /Pattern3 {0.750 Density} bind def 412 | /Pattern4 {0.125 Density} bind def 413 | /Pattern5 {0.375 Density} bind def 414 | /Pattern6 {0.625 Density} bind def 415 | /Pattern7 {0.875 Density} bind def 416 | } def 417 | % 418 | % Now test for support of Level 2 code 419 | % 420 | Level1 {Level1PatternFill} {Level2PatternFill} ifelse 421 | % 422 | /Symbol-Oblique /Symbol findfont [1 0 .167 1 0 0] makefont 423 | dup length dict begin {1 index /FID eq {pop pop} {def} ifelse} forall 424 | currentdict end definefont pop 425 | Level1 SuppressPDFMark or 426 | {} { 427 | /SDict 10 dict def 428 | systemdict /pdfmark known not { 429 | userdict /pdfmark systemdict /cleartomark get put 430 | } if 431 | SDict begin [ 432 | /Title (plot.ps) 433 | /Subject (gnuplot plot) 434 | /Creator (gnuplot 4.6 patchlevel 5) 435 | /Author (rreusser) 436 | % /Producer (gnuplot) 437 | % /Keywords () 438 | /CreationDate (Sun Aug 9 22:32:06 2015) 439 | /DOCINFO pdfmark 440 | end 441 | } ifelse 442 | end 443 | %%EndProlog 444 | %%Page: 1 1 445 | gnudict begin 446 | gsave 447 | doclip 448 | 50 50 translate 449 | 0.100 0.100 scale 450 | 90 rotate 451 | 0 -5040 translate 452 | 0 setgray 453 | newpath 454 | (Helvetica) findfont 140 scalefont setfont 455 | BackgroundColor 0 lt 3 1 roll 0 lt exch 0 lt or or not {gsave BackgroundColor C clippath fill grestore} if 456 | 1.000 UL 457 | LTb 458 | 1.000 UL 459 | LTa 460 | 378 363 M 461 | 6569 0 V 462 | stroke 463 | LTb 464 | 378 363 M 465 | 63 0 V 466 | 6506 0 R 467 | -63 0 V 468 | /Verdana findfont 80 scalefont setfont 469 | /vshift -26 def 470 | 294 363 M 471 | (-1) Rshow 472 | /Helvetica findfont 140 scalefont setfont 473 | /vshift -46 def 474 | 1.000 UL 475 | LTb 476 | 1.000 UL 477 | LTa 478 | 378 1190 M 479 | 6569 0 V 480 | stroke 481 | LTb 482 | 378 1190 M 483 | 63 0 V 484 | 6506 0 R 485 | -63 0 V 486 | /Verdana findfont 80 scalefont setfont 487 | /vshift -26 def 488 | -6590 0 R 489 | ( 0) Rshow 490 | /Helvetica findfont 140 scalefont setfont 491 | /vshift -46 def 492 | 1.000 UL 493 | LTb 494 | 1.000 UL 495 | LTa 496 | 378 2017 M 497 | 6569 0 V 498 | stroke 499 | LTb 500 | 378 2017 M 501 | 63 0 V 502 | 6506 0 R 503 | -63 0 V 504 | /Verdana findfont 80 scalefont setfont 505 | /vshift -26 def 506 | -6590 0 R 507 | ( 1) Rshow 508 | /Helvetica findfont 140 scalefont setfont 509 | /vshift -46 def 510 | 1.000 UL 511 | LTb 512 | 1.000 UL 513 | LTa 514 | 378 280 M 515 | 0 1820 V 516 | stroke 517 | LTb 518 | 378 280 M 519 | 0 63 V 520 | 0 1757 R 521 | 0 -63 V 522 | /Verdana findfont 80 scalefont setfont 523 | /vshift -26 def 524 | 378 140 M 525 | (-10) Cshow 526 | /Helvetica findfont 140 scalefont setfont 527 | /vshift -46 def 528 | 1.000 UL 529 | LTb 530 | 1.000 UL 531 | LTa 532 | 706 280 M 533 | 0 1820 V 534 | stroke 535 | LTb 536 | 706 280 M 537 | 0 63 V 538 | 0 1757 R 539 | 0 -63 V 540 | /Verdana findfont 80 scalefont setfont 541 | /vshift -26 def 542 | 706 140 M 543 | (-9) Cshow 544 | /Helvetica findfont 140 scalefont setfont 545 | /vshift -46 def 546 | 1.000 UL 547 | LTb 548 | 1.000 UL 549 | LTa 550 | 1035 280 M 551 | 0 1820 V 552 | stroke 553 | LTb 554 | 1035 280 M 555 | 0 63 V 556 | 0 1757 R 557 | 0 -63 V 558 | /Verdana findfont 80 scalefont setfont 559 | /vshift -26 def 560 | 0 -1897 R 561 | (-8) Cshow 562 | /Helvetica findfont 140 scalefont setfont 563 | /vshift -46 def 564 | 1.000 UL 565 | LTb 566 | 1.000 UL 567 | LTa 568 | 1363 280 M 569 | 0 1820 V 570 | stroke 571 | LTb 572 | 1363 280 M 573 | 0 63 V 574 | 0 1757 R 575 | 0 -63 V 576 | /Verdana findfont 80 scalefont setfont 577 | /vshift -26 def 578 | 0 -1897 R 579 | (-7) Cshow 580 | /Helvetica findfont 140 scalefont setfont 581 | /vshift -46 def 582 | 1.000 UL 583 | LTb 584 | 1.000 UL 585 | LTa 586 | 1692 280 M 587 | 0 1820 V 588 | stroke 589 | LTb 590 | 1692 280 M 591 | 0 63 V 592 | 0 1757 R 593 | 0 -63 V 594 | /Verdana findfont 80 scalefont setfont 595 | /vshift -26 def 596 | 0 -1897 R 597 | (-6) Cshow 598 | /Helvetica findfont 140 scalefont setfont 599 | /vshift -46 def 600 | 1.000 UL 601 | LTb 602 | 1.000 UL 603 | LTa 604 | 2020 280 M 605 | 0 1820 V 606 | stroke 607 | LTb 608 | 2020 280 M 609 | 0 63 V 610 | 0 1757 R 611 | 0 -63 V 612 | /Verdana findfont 80 scalefont setfont 613 | /vshift -26 def 614 | 0 -1897 R 615 | (-5) Cshow 616 | /Helvetica findfont 140 scalefont setfont 617 | /vshift -46 def 618 | 1.000 UL 619 | LTb 620 | 1.000 UL 621 | LTa 622 | 2349 280 M 623 | 0 1820 V 624 | stroke 625 | LTb 626 | 2349 280 M 627 | 0 63 V 628 | 0 1757 R 629 | 0 -63 V 630 | /Verdana findfont 80 scalefont setfont 631 | /vshift -26 def 632 | 0 -1897 R 633 | (-4) Cshow 634 | /Helvetica findfont 140 scalefont setfont 635 | /vshift -46 def 636 | 1.000 UL 637 | LTb 638 | 1.000 UL 639 | LTa 640 | 2677 280 M 641 | 0 1820 V 642 | stroke 643 | LTb 644 | 2677 280 M 645 | 0 63 V 646 | 0 1757 R 647 | 0 -63 V 648 | /Verdana findfont 80 scalefont setfont 649 | /vshift -26 def 650 | 0 -1897 R 651 | (-3) Cshow 652 | /Helvetica findfont 140 scalefont setfont 653 | /vshift -46 def 654 | 1.000 UL 655 | LTb 656 | 1.000 UL 657 | LTa 658 | 3006 280 M 659 | 0 1820 V 660 | stroke 661 | LTb 662 | 3006 280 M 663 | 0 63 V 664 | 0 1757 R 665 | 0 -63 V 666 | /Verdana findfont 80 scalefont setfont 667 | /vshift -26 def 668 | 0 -1897 R 669 | (-2) Cshow 670 | /Helvetica findfont 140 scalefont setfont 671 | /vshift -46 def 672 | 1.000 UL 673 | LTb 674 | 1.000 UL 675 | LTa 676 | 3334 280 M 677 | 0 1820 V 678 | stroke 679 | LTb 680 | 3334 280 M 681 | 0 63 V 682 | 0 1757 R 683 | 0 -63 V 684 | /Verdana findfont 80 scalefont setfont 685 | /vshift -26 def 686 | 0 -1897 R 687 | (-1) Cshow 688 | /Helvetica findfont 140 scalefont setfont 689 | /vshift -46 def 690 | 1.000 UL 691 | LTb 692 | 1.000 UL 693 | LTa 694 | 3663 280 M 695 | 0 1820 V 696 | stroke 697 | LTb 698 | 3663 280 M 699 | 0 63 V 700 | 0 1757 R 701 | 0 -63 V 702 | /Verdana findfont 80 scalefont setfont 703 | /vshift -26 def 704 | 0 -1897 R 705 | ( 0) Cshow 706 | /Helvetica findfont 140 scalefont setfont 707 | /vshift -46 def 708 | 1.000 UL 709 | LTb 710 | 1.000 UL 711 | LTa 712 | 3991 280 M 713 | 0 1820 V 714 | stroke 715 | LTb 716 | 3991 280 M 717 | 0 63 V 718 | 0 1757 R 719 | 0 -63 V 720 | /Verdana findfont 80 scalefont setfont 721 | /vshift -26 def 722 | 0 -1897 R 723 | ( 1) Cshow 724 | /Helvetica findfont 140 scalefont setfont 725 | /vshift -46 def 726 | 1.000 UL 727 | LTb 728 | 1.000 UL 729 | LTa 730 | 4319 280 M 731 | 0 1820 V 732 | stroke 733 | LTb 734 | 4319 280 M 735 | 0 63 V 736 | 0 1757 R 737 | 0 -63 V 738 | /Verdana findfont 80 scalefont setfont 739 | /vshift -26 def 740 | 0 -1897 R 741 | ( 2) Cshow 742 | /Helvetica findfont 140 scalefont setfont 743 | /vshift -46 def 744 | 1.000 UL 745 | LTb 746 | 1.000 UL 747 | LTa 748 | 4648 280 M 749 | 0 1820 V 750 | stroke 751 | LTb 752 | 4648 280 M 753 | 0 63 V 754 | 0 1757 R 755 | 0 -63 V 756 | /Verdana findfont 80 scalefont setfont 757 | /vshift -26 def 758 | 0 -1897 R 759 | ( 3) Cshow 760 | /Helvetica findfont 140 scalefont setfont 761 | /vshift -46 def 762 | 1.000 UL 763 | LTb 764 | 1.000 UL 765 | LTa 766 | 4976 280 M 767 | 0 1820 V 768 | stroke 769 | LTb 770 | 4976 280 M 771 | 0 63 V 772 | 0 1757 R 773 | 0 -63 V 774 | /Verdana findfont 80 scalefont setfont 775 | /vshift -26 def 776 | 0 -1897 R 777 | ( 4) Cshow 778 | /Helvetica findfont 140 scalefont setfont 779 | /vshift -46 def 780 | 1.000 UL 781 | LTb 782 | 1.000 UL 783 | LTa 784 | 5305 280 M 785 | 0 1820 V 786 | stroke 787 | LTb 788 | 5305 280 M 789 | 0 63 V 790 | 0 1757 R 791 | 0 -63 V 792 | /Verdana findfont 80 scalefont setfont 793 | /vshift -26 def 794 | 0 -1897 R 795 | ( 5) Cshow 796 | /Helvetica findfont 140 scalefont setfont 797 | /vshift -46 def 798 | 1.000 UL 799 | LTb 800 | 1.000 UL 801 | LTa 802 | 5633 280 M 803 | 0 1820 V 804 | stroke 805 | LTb 806 | 5633 280 M 807 | 0 63 V 808 | 0 1757 R 809 | 0 -63 V 810 | /Verdana findfont 80 scalefont setfont 811 | /vshift -26 def 812 | 0 -1897 R 813 | ( 6) Cshow 814 | /Helvetica findfont 140 scalefont setfont 815 | /vshift -46 def 816 | 1.000 UL 817 | LTb 818 | 1.000 UL 819 | LTa 820 | 5962 280 M 821 | 0 1820 V 822 | stroke 823 | LTb 824 | 5962 280 M 825 | 0 63 V 826 | 0 1757 R 827 | 0 -63 V 828 | /Verdana findfont 80 scalefont setfont 829 | /vshift -26 def 830 | 0 -1897 R 831 | ( 7) Cshow 832 | /Helvetica findfont 140 scalefont setfont 833 | /vshift -46 def 834 | 1.000 UL 835 | LTb 836 | 1.000 UL 837 | LTa 838 | 6290 280 M 839 | 0 1820 V 840 | stroke 841 | LTb 842 | 6290 280 M 843 | 0 63 V 844 | 0 1757 R 845 | 0 -63 V 846 | /Verdana findfont 80 scalefont setfont 847 | /vshift -26 def 848 | 0 -1897 R 849 | ( 8) Cshow 850 | /Helvetica findfont 140 scalefont setfont 851 | /vshift -46 def 852 | 1.000 UL 853 | LTb 854 | 1.000 UL 855 | LTa 856 | 6619 280 M 857 | 0 1820 V 858 | stroke 859 | LTb 860 | 6619 280 M 861 | 0 63 V 862 | 0 1757 R 863 | 0 -63 V 864 | /Verdana findfont 80 scalefont setfont 865 | /vshift -26 def 866 | 0 -1897 R 867 | ( 9) Cshow 868 | /Helvetica findfont 140 scalefont setfont 869 | /vshift -46 def 870 | 1.000 UL 871 | LTb 872 | 1.000 UL 873 | LTa 874 | 6947 280 M 875 | 0 1820 V 876 | stroke 877 | LTb 878 | 6947 280 M 879 | 0 63 V 880 | 0 1757 R 881 | 0 -63 V 882 | /Verdana findfont 80 scalefont setfont 883 | /vshift -26 def 884 | 0 -1897 R 885 | ( 10) Cshow 886 | /Helvetica findfont 140 scalefont setfont 887 | /vshift -46 def 888 | 1.000 UL 889 | LTb 890 | 1.000 UL 891 | LTb 892 | 378 2100 N 893 | 378 280 L 894 | 6569 0 V 895 | 0 1820 V 896 | -6569 0 V 897 | Z stroke 898 | 3662 2310 M 899 | (Fifth Order Runge-Kutta Cash-Karp \(RKCK\)) Cshow 900 | 1.000 UP 901 | 1.000 UL 902 | LTb 903 | % Begin plot #1 904 | 0.500 UP 905 | 1.000 UL 906 | LT0 907 | 0.00 0.38 0.68 C /Helvetica findfont 140 scalefont setfont 908 | 378 363 M 909 | 1 0 V 910 | 3 0 V 911 | 8 0 V 912 | 24 0 V 913 | 72 0 V 914 | 215 0 V 915 | 247 0 V 916 | 246 0 V 917 | 246 0 V 918 | 247 0 V 919 | 246 0 V 920 | 246 0 V 921 | 247 0 V 922 | 246 0 V 923 | 246 0 V 924 | 247 0 V 925 | 246 0 V 926 | 39 0 V 927 | 99 0 V 928 | 25 0 V 929 | 23 4 V 930 | 24 58 V 931 | 17 175 V 932 | 16 358 V 933 | 15 415 V 934 | 15 347 V 935 | 16 208 V 936 | 16 72 V 937 | 21 16 V 938 | 23 1 V 939 | 31 0 V 940 | 68 0 V 941 | 205 0 V 942 | 247 0 V 943 | 246 0 V 944 | 246 0 V 945 | 247 0 V 946 | 246 0 V 947 | 246 0 V 948 | 247 0 V 949 | 246 0 V 950 | 246 0 V 951 | 247 0 V 952 | 246 0 V 953 | 173 0 V 954 | stroke 955 | LCw setrgbcolor 956 | 0.400 UP 957 | 378 363 CircleF 958 | 0.500 UP 959 | 1.000 UL 960 | LT0 961 | 0.00 0.38 0.68 C 378 363 Circle 962 | LCw setrgbcolor 963 | 0.400 UP 964 | 378 363 CircleF 965 | 0.500 UP 966 | 1.000 UL 967 | LT0 968 | 0.00 0.38 0.68 C 378 363 Circle 969 | LCw setrgbcolor 970 | 0.400 UP 971 | 378 363 CircleF 972 | 0.500 UP 973 | 1.000 UL 974 | LT0 975 | 0.00 0.38 0.68 C 378 363 Circle 976 | LCw setrgbcolor 977 | 0.400 UP 978 | 378 363 CircleF 979 | 0.500 UP 980 | 1.000 UL 981 | LT0 982 | 0.00 0.38 0.68 C 378 363 Circle 983 | LCw setrgbcolor 984 | 0.400 UP 985 | 379 363 CircleF 986 | 0.500 UP 987 | 1.000 UL 988 | LT0 989 | 0.00 0.38 0.68 C 379 363 Circle 990 | LCw setrgbcolor 991 | 0.400 UP 992 | 382 363 CircleF 993 | 0.500 UP 994 | 1.000 UL 995 | LT0 996 | 0.00 0.38 0.68 C 382 363 Circle 997 | LCw setrgbcolor 998 | 0.400 UP 999 | 390 363 CircleF 1000 | 0.500 UP 1001 | 1.000 UL 1002 | LT0 1003 | 0.00 0.38 0.68 C 390 363 Circle 1004 | LCw setrgbcolor 1005 | 0.400 UP 1006 | 414 363 CircleF 1007 | 0.500 UP 1008 | 1.000 UL 1009 | LT0 1010 | 0.00 0.38 0.68 C 414 363 Circle 1011 | LCw setrgbcolor 1012 | 0.400 UP 1013 | 486 363 CircleF 1014 | 0.500 UP 1015 | 1.000 UL 1016 | LT0 1017 | 0.00 0.38 0.68 C 486 363 Circle 1018 | LCw setrgbcolor 1019 | 0.400 UP 1020 | 701 363 CircleF 1021 | 0.500 UP 1022 | 1.000 UL 1023 | LT0 1024 | 0.00 0.38 0.68 C 701 363 Circle 1025 | LCw setrgbcolor 1026 | 0.400 UP 1027 | 948 363 CircleF 1028 | 0.500 UP 1029 | 1.000 UL 1030 | LT0 1031 | 0.00 0.38 0.68 C 948 363 Circle 1032 | LCw setrgbcolor 1033 | 0.400 UP 1034 | 1194 363 CircleF 1035 | 0.500 UP 1036 | 1.000 UL 1037 | LT0 1038 | 0.00 0.38 0.68 C 1194 363 Circle 1039 | LCw setrgbcolor 1040 | 0.400 UP 1041 | 1440 363 CircleF 1042 | 0.500 UP 1043 | 1.000 UL 1044 | LT0 1045 | 0.00 0.38 0.68 C 1440 363 Circle 1046 | LCw setrgbcolor 1047 | 0.400 UP 1048 | 1687 363 CircleF 1049 | 0.500 UP 1050 | 1.000 UL 1051 | LT0 1052 | 0.00 0.38 0.68 C 1687 363 Circle 1053 | LCw setrgbcolor 1054 | 0.400 UP 1055 | 1933 363 CircleF 1056 | 0.500 UP 1057 | 1.000 UL 1058 | LT0 1059 | 0.00 0.38 0.68 C 1933 363 Circle 1060 | LCw setrgbcolor 1061 | 0.400 UP 1062 | 2179 363 CircleF 1063 | 0.500 UP 1064 | 1.000 UL 1065 | LT0 1066 | 0.00 0.38 0.68 C 2179 363 Circle 1067 | LCw setrgbcolor 1068 | 0.400 UP 1069 | 2426 363 CircleF 1070 | 0.500 UP 1071 | 1.000 UL 1072 | LT0 1073 | 0.00 0.38 0.68 C 2426 363 Circle 1074 | LCw setrgbcolor 1075 | 0.400 UP 1076 | 2672 363 CircleF 1077 | 0.500 UP 1078 | 1.000 UL 1079 | LT0 1080 | 0.00 0.38 0.68 C 2672 363 Circle 1081 | LCw setrgbcolor 1082 | 0.400 UP 1083 | 2918 363 CircleF 1084 | 0.500 UP 1085 | 1.000 UL 1086 | LT0 1087 | 0.00 0.38 0.68 C 2918 363 Circle 1088 | LCw setrgbcolor 1089 | 0.400 UP 1090 | 3165 363 CircleF 1091 | 0.500 UP 1092 | 1.000 UL 1093 | LT0 1094 | 0.00 0.38 0.68 C 3165 363 Circle 1095 | LCw setrgbcolor 1096 | 0.400 UP 1097 | 3411 363 CircleF 1098 | 0.500 UP 1099 | 1.000 UL 1100 | LT0 1101 | 0.00 0.38 0.68 C 3411 363 Circle 1102 | LCw setrgbcolor 1103 | 0.400 UP 1104 | 3450 363 CircleF 1105 | 0.500 UP 1106 | 1.000 UL 1107 | LT0 1108 | 0.00 0.38 0.68 C 3450 363 Circle 1109 | LCw setrgbcolor 1110 | 0.400 UP 1111 | 3549 363 CircleF 1112 | 0.500 UP 1113 | 1.000 UL 1114 | LT0 1115 | 0.00 0.38 0.68 C 3549 363 Circle 1116 | LCw setrgbcolor 1117 | 0.400 UP 1118 | 3574 363 CircleF 1119 | 0.500 UP 1120 | 1.000 UL 1121 | LT0 1122 | 0.00 0.38 0.68 C 3574 363 Circle 1123 | LCw setrgbcolor 1124 | 0.400 UP 1125 | 3597 367 CircleF 1126 | 0.500 UP 1127 | 1.000 UL 1128 | LT0 1129 | 0.00 0.38 0.68 C 3597 367 Circle 1130 | LCw setrgbcolor 1131 | 0.400 UP 1132 | 3621 425 CircleF 1133 | 0.500 UP 1134 | 1.000 UL 1135 | LT0 1136 | 0.00 0.38 0.68 C 3621 425 Circle 1137 | LCw setrgbcolor 1138 | 0.400 UP 1139 | 3638 600 CircleF 1140 | 0.500 UP 1141 | 1.000 UL 1142 | LT0 1143 | 0.00 0.38 0.68 C 3638 600 Circle 1144 | LCw setrgbcolor 1145 | 0.400 UP 1146 | 3654 958 CircleF 1147 | 0.500 UP 1148 | 1.000 UL 1149 | LT0 1150 | 0.00 0.38 0.68 C 3654 958 Circle 1151 | LCw setrgbcolor 1152 | 0.400 UP 1153 | 3669 1373 CircleF 1154 | 0.500 UP 1155 | 1.000 UL 1156 | LT0 1157 | 0.00 0.38 0.68 C 3669 1373 Circle 1158 | LCw setrgbcolor 1159 | 0.400 UP 1160 | 3684 1720 CircleF 1161 | 0.500 UP 1162 | 1.000 UL 1163 | LT0 1164 | 0.00 0.38 0.68 C 3684 1720 Circle 1165 | LCw setrgbcolor 1166 | 0.400 UP 1167 | 3700 1928 CircleF 1168 | 0.500 UP 1169 | 1.000 UL 1170 | LT0 1171 | 0.00 0.38 0.68 C 3700 1928 Circle 1172 | LCw setrgbcolor 1173 | 0.400 UP 1174 | 3716 2000 CircleF 1175 | 0.500 UP 1176 | 1.000 UL 1177 | LT0 1178 | 0.00 0.38 0.68 C 3716 2000 Circle 1179 | LCw setrgbcolor 1180 | 0.400 UP 1181 | 3737 2016 CircleF 1182 | 0.500 UP 1183 | 1.000 UL 1184 | LT0 1185 | 0.00 0.38 0.68 C 3737 2016 Circle 1186 | LCw setrgbcolor 1187 | 0.400 UP 1188 | 3760 2017 CircleF 1189 | 0.500 UP 1190 | 1.000 UL 1191 | LT0 1192 | 0.00 0.38 0.68 C 3760 2017 Circle 1193 | LCw setrgbcolor 1194 | 0.400 UP 1195 | 3791 2017 CircleF 1196 | 0.500 UP 1197 | 1.000 UL 1198 | LT0 1199 | 0.00 0.38 0.68 C 3791 2017 Circle 1200 | LCw setrgbcolor 1201 | 0.400 UP 1202 | 3859 2017 CircleF 1203 | 0.500 UP 1204 | 1.000 UL 1205 | LT0 1206 | 0.00 0.38 0.68 C 3859 2017 Circle 1207 | LCw setrgbcolor 1208 | 0.400 UP 1209 | 4064 2017 CircleF 1210 | 0.500 UP 1211 | 1.000 UL 1212 | LT0 1213 | 0.00 0.38 0.68 C 4064 2017 Circle 1214 | LCw setrgbcolor 1215 | 0.400 UP 1216 | 4311 2017 CircleF 1217 | 0.500 UP 1218 | 1.000 UL 1219 | LT0 1220 | 0.00 0.38 0.68 C 4311 2017 Circle 1221 | LCw setrgbcolor 1222 | 0.400 UP 1223 | 4557 2017 CircleF 1224 | 0.500 UP 1225 | 1.000 UL 1226 | LT0 1227 | 0.00 0.38 0.68 C 4557 2017 Circle 1228 | LCw setrgbcolor 1229 | 0.400 UP 1230 | 4803 2017 CircleF 1231 | 0.500 UP 1232 | 1.000 UL 1233 | LT0 1234 | 0.00 0.38 0.68 C 4803 2017 Circle 1235 | LCw setrgbcolor 1236 | 0.400 UP 1237 | 5050 2017 CircleF 1238 | 0.500 UP 1239 | 1.000 UL 1240 | LT0 1241 | 0.00 0.38 0.68 C 5050 2017 Circle 1242 | LCw setrgbcolor 1243 | 0.400 UP 1244 | 5296 2017 CircleF 1245 | 0.500 UP 1246 | 1.000 UL 1247 | LT0 1248 | 0.00 0.38 0.68 C 5296 2017 Circle 1249 | LCw setrgbcolor 1250 | 0.400 UP 1251 | 5542 2017 CircleF 1252 | 0.500 UP 1253 | 1.000 UL 1254 | LT0 1255 | 0.00 0.38 0.68 C 5542 2017 Circle 1256 | LCw setrgbcolor 1257 | 0.400 UP 1258 | 5789 2017 CircleF 1259 | 0.500 UP 1260 | 1.000 UL 1261 | LT0 1262 | 0.00 0.38 0.68 C 5789 2017 Circle 1263 | LCw setrgbcolor 1264 | 0.400 UP 1265 | 6035 2017 CircleF 1266 | 0.500 UP 1267 | 1.000 UL 1268 | LT0 1269 | 0.00 0.38 0.68 C 6035 2017 Circle 1270 | LCw setrgbcolor 1271 | 0.400 UP 1272 | 6281 2017 CircleF 1273 | 0.500 UP 1274 | 1.000 UL 1275 | LT0 1276 | 0.00 0.38 0.68 C 6281 2017 Circle 1277 | LCw setrgbcolor 1278 | 0.400 UP 1279 | 6528 2017 CircleF 1280 | 0.500 UP 1281 | 1.000 UL 1282 | LT0 1283 | 0.00 0.38 0.68 C 6528 2017 Circle 1284 | LCw setrgbcolor 1285 | 0.400 UP 1286 | 6774 2017 CircleF 1287 | 0.500 UP 1288 | 1.000 UL 1289 | LT0 1290 | 0.00 0.38 0.68 C 6774 2017 Circle 1291 | LCw setrgbcolor 1292 | 0.400 UP 1293 | 6947 2017 CircleF 1294 | 0.500 UP 1295 | 1.000 UL 1296 | LT0 1297 | 0.00 0.38 0.68 C 6947 2017 Circle 1298 | % End plot #1 1299 | 1.000 UL 1300 | LTb 1301 | 378 2100 N 1302 | 378 280 L 1303 | 6569 0 V 1304 | 0 1820 V 1305 | -6569 0 V 1306 | Z stroke 1307 | 1.000 UP 1308 | 1.000 UL 1309 | LTb 1310 | 1.000 UL 1311 | LTb 1312 | 1.000 UL 1313 | LTa 1314 | 378 2883 M 1315 | 6569 0 V 1316 | stroke 1317 | LTb 1318 | 378 2883 M 1319 | 63 0 V 1320 | 6506 0 R 1321 | -63 0 V 1322 | /Verdana findfont 80 scalefont setfont 1323 | /vshift -26 def 1324 | -6590 0 R 1325 | (-1) Rshow 1326 | /Helvetica findfont 140 scalefont setfont 1327 | /vshift -46 def 1328 | 1.000 UL 1329 | LTb 1330 | 1.000 UL 1331 | LTa 1332 | 378 3710 M 1333 | 6569 0 V 1334 | stroke 1335 | LTb 1336 | 378 3710 M 1337 | 63 0 V 1338 | 6506 0 R 1339 | -63 0 V 1340 | /Verdana findfont 80 scalefont setfont 1341 | /vshift -26 def 1342 | -6590 0 R 1343 | ( 0) Rshow 1344 | /Helvetica findfont 140 scalefont setfont 1345 | /vshift -46 def 1346 | 1.000 UL 1347 | LTb 1348 | 1.000 UL 1349 | LTa 1350 | 378 4536 M 1351 | 6569 0 V 1352 | stroke 1353 | LTb 1354 | 378 4536 M 1355 | 63 0 V 1356 | 6506 0 R 1357 | -63 0 V 1358 | /Verdana findfont 80 scalefont setfont 1359 | /vshift -26 def 1360 | -6590 0 R 1361 | ( 1) Rshow 1362 | /Helvetica findfont 140 scalefont setfont 1363 | /vshift -46 def 1364 | 1.000 UL 1365 | LTb 1366 | 1.000 UL 1367 | LTa 1368 | 378 2800 M 1369 | 0 1819 V 1370 | stroke 1371 | LTb 1372 | 378 2800 M 1373 | 0 63 V 1374 | 0 1756 R 1375 | 0 -63 V 1376 | /Verdana findfont 80 scalefont setfont 1377 | /vshift -26 def 1378 | 0 -1896 R 1379 | (-10) Cshow 1380 | /Helvetica findfont 140 scalefont setfont 1381 | /vshift -46 def 1382 | 1.000 UL 1383 | LTb 1384 | 1.000 UL 1385 | LTa 1386 | 706 2800 M 1387 | 0 1819 V 1388 | stroke 1389 | LTb 1390 | 706 2800 M 1391 | 0 63 V 1392 | 0 1756 R 1393 | 0 -63 V 1394 | /Verdana findfont 80 scalefont setfont 1395 | /vshift -26 def 1396 | 0 -1896 R 1397 | (-9) Cshow 1398 | /Helvetica findfont 140 scalefont setfont 1399 | /vshift -46 def 1400 | 1.000 UL 1401 | LTb 1402 | 1.000 UL 1403 | LTa 1404 | 1035 2800 M 1405 | 0 1819 V 1406 | stroke 1407 | LTb 1408 | 1035 2800 M 1409 | 0 63 V 1410 | 0 1756 R 1411 | 0 -63 V 1412 | /Verdana findfont 80 scalefont setfont 1413 | /vshift -26 def 1414 | 0 -1896 R 1415 | (-8) Cshow 1416 | /Helvetica findfont 140 scalefont setfont 1417 | /vshift -46 def 1418 | 1.000 UL 1419 | LTb 1420 | 1.000 UL 1421 | LTa 1422 | 1363 2800 M 1423 | 0 1819 V 1424 | stroke 1425 | LTb 1426 | 1363 2800 M 1427 | 0 63 V 1428 | 0 1756 R 1429 | 0 -63 V 1430 | /Verdana findfont 80 scalefont setfont 1431 | /vshift -26 def 1432 | 0 -1896 R 1433 | (-7) Cshow 1434 | /Helvetica findfont 140 scalefont setfont 1435 | /vshift -46 def 1436 | 1.000 UL 1437 | LTb 1438 | 1.000 UL 1439 | LTa 1440 | 1692 2800 M 1441 | 0 1819 V 1442 | stroke 1443 | LTb 1444 | 1692 2800 M 1445 | 0 63 V 1446 | 0 1756 R 1447 | 0 -63 V 1448 | /Verdana findfont 80 scalefont setfont 1449 | /vshift -26 def 1450 | 0 -1896 R 1451 | (-6) Cshow 1452 | /Helvetica findfont 140 scalefont setfont 1453 | /vshift -46 def 1454 | 1.000 UL 1455 | LTb 1456 | 1.000 UL 1457 | LTa 1458 | 2020 2800 M 1459 | 0 1819 V 1460 | stroke 1461 | LTb 1462 | 2020 2800 M 1463 | 0 63 V 1464 | 0 1756 R 1465 | 0 -63 V 1466 | /Verdana findfont 80 scalefont setfont 1467 | /vshift -26 def 1468 | 0 -1896 R 1469 | (-5) Cshow 1470 | /Helvetica findfont 140 scalefont setfont 1471 | /vshift -46 def 1472 | 1.000 UL 1473 | LTb 1474 | 1.000 UL 1475 | LTa 1476 | 2349 2800 M 1477 | 0 1819 V 1478 | stroke 1479 | LTb 1480 | 2349 2800 M 1481 | 0 63 V 1482 | 0 1756 R 1483 | 0 -63 V 1484 | /Verdana findfont 80 scalefont setfont 1485 | /vshift -26 def 1486 | 0 -1896 R 1487 | (-4) Cshow 1488 | /Helvetica findfont 140 scalefont setfont 1489 | /vshift -46 def 1490 | 1.000 UL 1491 | LTb 1492 | 1.000 UL 1493 | LTa 1494 | 2677 2800 M 1495 | 0 1819 V 1496 | stroke 1497 | LTb 1498 | 2677 2800 M 1499 | 0 63 V 1500 | 0 1756 R 1501 | 0 -63 V 1502 | /Verdana findfont 80 scalefont setfont 1503 | /vshift -26 def 1504 | 0 -1896 R 1505 | (-3) Cshow 1506 | /Helvetica findfont 140 scalefont setfont 1507 | /vshift -46 def 1508 | 1.000 UL 1509 | LTb 1510 | 1.000 UL 1511 | LTa 1512 | 3006 2800 M 1513 | 0 1819 V 1514 | stroke 1515 | LTb 1516 | 3006 2800 M 1517 | 0 63 V 1518 | 0 1756 R 1519 | 0 -63 V 1520 | /Verdana findfont 80 scalefont setfont 1521 | /vshift -26 def 1522 | 0 -1896 R 1523 | (-2) Cshow 1524 | /Helvetica findfont 140 scalefont setfont 1525 | /vshift -46 def 1526 | 1.000 UL 1527 | LTb 1528 | 1.000 UL 1529 | LTa 1530 | 3334 2800 M 1531 | 0 1819 V 1532 | stroke 1533 | LTb 1534 | 3334 2800 M 1535 | 0 63 V 1536 | 0 1756 R 1537 | 0 -63 V 1538 | /Verdana findfont 80 scalefont setfont 1539 | /vshift -26 def 1540 | 0 -1896 R 1541 | (-1) Cshow 1542 | /Helvetica findfont 140 scalefont setfont 1543 | /vshift -46 def 1544 | 1.000 UL 1545 | LTb 1546 | 1.000 UL 1547 | LTa 1548 | 3663 2800 M 1549 | 0 1819 V 1550 | stroke 1551 | LTb 1552 | 3663 2800 M 1553 | 0 63 V 1554 | 0 1756 R 1555 | 0 -63 V 1556 | /Verdana findfont 80 scalefont setfont 1557 | /vshift -26 def 1558 | 0 -1896 R 1559 | ( 0) Cshow 1560 | /Helvetica findfont 140 scalefont setfont 1561 | /vshift -46 def 1562 | 1.000 UL 1563 | LTb 1564 | 1.000 UL 1565 | LTa 1566 | 3991 2800 M 1567 | 0 1819 V 1568 | stroke 1569 | LTb 1570 | 3991 2800 M 1571 | 0 63 V 1572 | 0 1756 R 1573 | 0 -63 V 1574 | /Verdana findfont 80 scalefont setfont 1575 | /vshift -26 def 1576 | 0 -1896 R 1577 | ( 1) Cshow 1578 | /Helvetica findfont 140 scalefont setfont 1579 | /vshift -46 def 1580 | 1.000 UL 1581 | LTb 1582 | 1.000 UL 1583 | LTa 1584 | 4319 2800 M 1585 | 0 1819 V 1586 | stroke 1587 | LTb 1588 | 4319 2800 M 1589 | 0 63 V 1590 | 0 1756 R 1591 | 0 -63 V 1592 | /Verdana findfont 80 scalefont setfont 1593 | /vshift -26 def 1594 | 0 -1896 R 1595 | ( 2) Cshow 1596 | /Helvetica findfont 140 scalefont setfont 1597 | /vshift -46 def 1598 | 1.000 UL 1599 | LTb 1600 | 1.000 UL 1601 | LTa 1602 | 4648 2800 M 1603 | 0 1819 V 1604 | stroke 1605 | LTb 1606 | 4648 2800 M 1607 | 0 63 V 1608 | 0 1756 R 1609 | 0 -63 V 1610 | /Verdana findfont 80 scalefont setfont 1611 | /vshift -26 def 1612 | 0 -1896 R 1613 | ( 3) Cshow 1614 | /Helvetica findfont 140 scalefont setfont 1615 | /vshift -46 def 1616 | 1.000 UL 1617 | LTb 1618 | 1.000 UL 1619 | LTa 1620 | 4976 2800 M 1621 | 0 1819 V 1622 | stroke 1623 | LTb 1624 | 4976 2800 M 1625 | 0 63 V 1626 | 0 1756 R 1627 | 0 -63 V 1628 | /Verdana findfont 80 scalefont setfont 1629 | /vshift -26 def 1630 | 0 -1896 R 1631 | ( 4) Cshow 1632 | /Helvetica findfont 140 scalefont setfont 1633 | /vshift -46 def 1634 | 1.000 UL 1635 | LTb 1636 | 1.000 UL 1637 | LTa 1638 | 5305 2800 M 1639 | 0 1819 V 1640 | stroke 1641 | LTb 1642 | 5305 2800 M 1643 | 0 63 V 1644 | 0 1756 R 1645 | 0 -63 V 1646 | /Verdana findfont 80 scalefont setfont 1647 | /vshift -26 def 1648 | 0 -1896 R 1649 | ( 5) Cshow 1650 | /Helvetica findfont 140 scalefont setfont 1651 | /vshift -46 def 1652 | 1.000 UL 1653 | LTb 1654 | 1.000 UL 1655 | LTa 1656 | 5633 2800 M 1657 | 0 1819 V 1658 | stroke 1659 | LTb 1660 | 5633 2800 M 1661 | 0 63 V 1662 | 0 1756 R 1663 | 0 -63 V 1664 | /Verdana findfont 80 scalefont setfont 1665 | /vshift -26 def 1666 | 0 -1896 R 1667 | ( 6) Cshow 1668 | /Helvetica findfont 140 scalefont setfont 1669 | /vshift -46 def 1670 | 1.000 UL 1671 | LTb 1672 | 1.000 UL 1673 | LTa 1674 | 5962 2800 M 1675 | 0 1819 V 1676 | stroke 1677 | LTb 1678 | 5962 2800 M 1679 | 0 63 V 1680 | 0 1756 R 1681 | 0 -63 V 1682 | /Verdana findfont 80 scalefont setfont 1683 | /vshift -26 def 1684 | 0 -1896 R 1685 | ( 7) Cshow 1686 | /Helvetica findfont 140 scalefont setfont 1687 | /vshift -46 def 1688 | 1.000 UL 1689 | LTb 1690 | 1.000 UL 1691 | LTa 1692 | 6290 2800 M 1693 | 0 1819 V 1694 | stroke 1695 | LTb 1696 | 6290 2800 M 1697 | 0 63 V 1698 | 0 1756 R 1699 | 0 -63 V 1700 | /Verdana findfont 80 scalefont setfont 1701 | /vshift -26 def 1702 | 0 -1896 R 1703 | ( 8) Cshow 1704 | /Helvetica findfont 140 scalefont setfont 1705 | /vshift -46 def 1706 | 1.000 UL 1707 | LTb 1708 | 1.000 UL 1709 | LTa 1710 | 6619 2800 M 1711 | 0 1819 V 1712 | stroke 1713 | LTb 1714 | 6619 2800 M 1715 | 0 63 V 1716 | 0 1756 R 1717 | 0 -63 V 1718 | /Verdana findfont 80 scalefont setfont 1719 | /vshift -26 def 1720 | 0 -1896 R 1721 | ( 9) Cshow 1722 | /Helvetica findfont 140 scalefont setfont 1723 | /vshift -46 def 1724 | 1.000 UL 1725 | LTb 1726 | 1.000 UL 1727 | LTa 1728 | 6947 2800 M 1729 | 0 1819 V 1730 | stroke 1731 | LTb 1732 | 6947 2800 M 1733 | 0 63 V 1734 | 0 1756 R 1735 | 0 -63 V 1736 | /Verdana findfont 80 scalefont setfont 1737 | /vshift -26 def 1738 | 0 -1896 R 1739 | ( 10) Cshow 1740 | /Helvetica findfont 140 scalefont setfont 1741 | /vshift -46 def 1742 | 1.000 UL 1743 | LTb 1744 | 1.000 UL 1745 | LTb 1746 | 378 4619 N 1747 | 0 -1819 V 1748 | 6569 0 V 1749 | 0 1819 V 1750 | -6569 0 V 1751 | Z stroke 1752 | 3662 4829 M 1753 | (Fourth Order Runge-Kutta \(RK4\)) Cshow 1754 | 1.000 UP 1755 | 1.000 UL 1756 | LTb 1757 | % Begin plot #1 1758 | 0.500 UP 1759 | 1.000 UL 1760 | LT0 1761 | 0.00 0.38 0.68 C /Helvetica findfont 140 scalefont setfont 1762 | 378 2883 M 1763 | 33 0 V 1764 | 33 0 V 1765 | 33 0 V 1766 | 32 0 V 1767 | 33 0 V 1768 | 33 0 V 1769 | 33 0 V 1770 | 33 0 V 1771 | 33 0 V 1772 | 32 0 V 1773 | 33 0 V 1774 | 33 0 V 1775 | 33 0 V 1776 | 33 0 V 1777 | 33 0 V 1778 | 33 0 V 1779 | 32 0 V 1780 | 33 0 V 1781 | 33 0 V 1782 | 33 0 V 1783 | 33 0 V 1784 | 33 0 V 1785 | 32 0 V 1786 | 33 0 V 1787 | 33 0 V 1788 | 33 0 V 1789 | 33 0 V 1790 | 33 0 V 1791 | 33 0 V 1792 | 32 0 V 1793 | 33 0 V 1794 | 33 0 V 1795 | 33 0 V 1796 | 33 0 V 1797 | 33 0 V 1798 | 32 0 V 1799 | 33 0 V 1800 | 33 0 V 1801 | 33 0 V 1802 | 33 0 V 1803 | 33 0 V 1804 | 32 0 V 1805 | 33 0 V 1806 | 33 0 V 1807 | 33 0 V 1808 | 33 0 V 1809 | 33 0 V 1810 | 33 0 V 1811 | 32 0 V 1812 | 33 0 V 1813 | 33 0 V 1814 | 33 0 V 1815 | 33 0 V 1816 | 33 0 V 1817 | 32 0 V 1818 | 33 0 V 1819 | 33 0 V 1820 | 33 0 V 1821 | 33 0 V 1822 | 33 0 V 1823 | 33 0 V 1824 | 32 0 V 1825 | 33 0 V 1826 | 33 0 V 1827 | 33 0 V 1828 | 33 0 V 1829 | 33 0 V 1830 | 32 0 V 1831 | 33 0 V 1832 | 33 0 V 1833 | 33 0 V 1834 | 33 0 V 1835 | 33 0 V 1836 | 33 0 V 1837 | 32 0 V 1838 | 33 0 V 1839 | 33 0 V 1840 | 33 0 V 1841 | 33 0 V 1842 | 33 0 V 1843 | 32 0 V 1844 | 33 0 V 1845 | 33 0 V 1846 | 33 0 V 1847 | 33 0 V 1848 | 33 0 V 1849 | 33 0 V 1850 | 32 0 V 1851 | 33 0 V 1852 | 33 0 V 1853 | 33 0 V 1854 | 33 0 V 1855 | 33 0 V 1856 | 32 0 V 1857 | 33 0 V 1858 | 33 0 V 1859 | 33 0 V 1860 | 33 4 V 1861 | 33 125 V 1862 | 32 697 V 1863 | 33 698 V 1864 | 33 125 V 1865 | 33 4 V 1866 | 33 0 V 1867 | stroke 3794 4536 M 1868 | 33 0 V 1869 | 33 0 V 1870 | 32 0 V 1871 | 33 0 V 1872 | 33 0 V 1873 | 33 0 V 1874 | 33 0 V 1875 | 33 0 V 1876 | 32 0 V 1877 | 33 0 V 1878 | 33 0 V 1879 | 33 0 V 1880 | 33 0 V 1881 | 33 0 V 1882 | 33 0 V 1883 | 32 0 V 1884 | 33 0 V 1885 | 33 0 V 1886 | 33 0 V 1887 | 33 0 V 1888 | 33 0 V 1889 | 32 0 V 1890 | 33 0 V 1891 | 33 0 V 1892 | 33 0 V 1893 | 33 0 V 1894 | 33 0 V 1895 | 33 0 V 1896 | 32 0 V 1897 | 33 0 V 1898 | 33 0 V 1899 | 33 0 V 1900 | 33 0 V 1901 | 33 0 V 1902 | 32 0 V 1903 | 33 0 V 1904 | 33 0 V 1905 | 33 0 V 1906 | 33 0 V 1907 | 33 0 V 1908 | 33 0 V 1909 | 32 0 V 1910 | 33 0 V 1911 | 33 0 V 1912 | 33 0 V 1913 | 33 0 V 1914 | 33 0 V 1915 | 32 0 V 1916 | 33 0 V 1917 | 33 0 V 1918 | 33 0 V 1919 | 33 0 V 1920 | 33 0 V 1921 | 33 0 V 1922 | 32 0 V 1923 | 33 0 V 1924 | 33 0 V 1925 | 33 0 V 1926 | 33 0 V 1927 | 33 0 V 1928 | 32 0 V 1929 | 33 0 V 1930 | 33 0 V 1931 | 33 0 V 1932 | 33 0 V 1933 | 33 0 V 1934 | 32 0 V 1935 | 33 0 V 1936 | 33 0 V 1937 | 33 0 V 1938 | 33 0 V 1939 | 33 0 V 1940 | 33 0 V 1941 | 32 0 V 1942 | 33 0 V 1943 | 33 0 V 1944 | 33 0 V 1945 | 33 0 V 1946 | 33 0 V 1947 | 32 0 V 1948 | 33 0 V 1949 | 33 0 V 1950 | 33 0 V 1951 | 33 0 V 1952 | 33 0 V 1953 | 33 0 V 1954 | 32 0 V 1955 | 33 0 V 1956 | 33 0 V 1957 | 33 0 V 1958 | 33 0 V 1959 | 33 0 V 1960 | 32 0 V 1961 | 33 0 V 1962 | 33 0 V 1963 | stroke 1964 | LCw setrgbcolor 1965 | 0.400 UP 1966 | 378 2883 CircleF 1967 | 0.500 UP 1968 | 1.000 UL 1969 | LT0 1970 | 0.00 0.38 0.68 C 378 2883 Circle 1971 | LCw setrgbcolor 1972 | 0.400 UP 1973 | 378 2883 CircleF 1974 | 0.500 UP 1975 | 1.000 UL 1976 | LT0 1977 | 0.00 0.38 0.68 C 378 2883 Circle 1978 | LCw setrgbcolor 1979 | 0.400 UP 1980 | 411 2883 CircleF 1981 | 0.500 UP 1982 | 1.000 UL 1983 | LT0 1984 | 0.00 0.38 0.68 C 411 2883 Circle 1985 | LCw setrgbcolor 1986 | 0.400 UP 1987 | 444 2883 CircleF 1988 | 0.500 UP 1989 | 1.000 UL 1990 | LT0 1991 | 0.00 0.38 0.68 C 444 2883 Circle 1992 | LCw setrgbcolor 1993 | 0.400 UP 1994 | 477 2883 CircleF 1995 | 0.500 UP 1996 | 1.000 UL 1997 | LT0 1998 | 0.00 0.38 0.68 C 477 2883 Circle 1999 | LCw setrgbcolor 2000 | 0.400 UP 2001 | 509 2883 CircleF 2002 | 0.500 UP 2003 | 1.000 UL 2004 | LT0 2005 | 0.00 0.38 0.68 C 509 2883 Circle 2006 | LCw setrgbcolor 2007 | 0.400 UP 2008 | 542 2883 CircleF 2009 | 0.500 UP 2010 | 1.000 UL 2011 | LT0 2012 | 0.00 0.38 0.68 C 542 2883 Circle 2013 | LCw setrgbcolor 2014 | 0.400 UP 2015 | 575 2883 CircleF 2016 | 0.500 UP 2017 | 1.000 UL 2018 | LT0 2019 | 0.00 0.38 0.68 C 575 2883 Circle 2020 | LCw setrgbcolor 2021 | 0.400 UP 2022 | 608 2883 CircleF 2023 | 0.500 UP 2024 | 1.000 UL 2025 | LT0 2026 | 0.00 0.38 0.68 C 608 2883 Circle 2027 | LCw setrgbcolor 2028 | 0.400 UP 2029 | 641 2883 CircleF 2030 | 0.500 UP 2031 | 1.000 UL 2032 | LT0 2033 | 0.00 0.38 0.68 C 641 2883 Circle 2034 | LCw setrgbcolor 2035 | 0.400 UP 2036 | 674 2883 CircleF 2037 | 0.500 UP 2038 | 1.000 UL 2039 | LT0 2040 | 0.00 0.38 0.68 C 674 2883 Circle 2041 | LCw setrgbcolor 2042 | 0.400 UP 2043 | 706 2883 CircleF 2044 | 0.500 UP 2045 | 1.000 UL 2046 | LT0 2047 | 0.00 0.38 0.68 C 706 2883 Circle 2048 | LCw setrgbcolor 2049 | 0.400 UP 2050 | 739 2883 CircleF 2051 | 0.500 UP 2052 | 1.000 UL 2053 | LT0 2054 | 0.00 0.38 0.68 C 739 2883 Circle 2055 | LCw setrgbcolor 2056 | 0.400 UP 2057 | 772 2883 CircleF 2058 | 0.500 UP 2059 | 1.000 UL 2060 | LT0 2061 | 0.00 0.38 0.68 C 772 2883 Circle 2062 | LCw setrgbcolor 2063 | 0.400 UP 2064 | 805 2883 CircleF 2065 | 0.500 UP 2066 | 1.000 UL 2067 | LT0 2068 | 0.00 0.38 0.68 C 805 2883 Circle 2069 | LCw setrgbcolor 2070 | 0.400 UP 2071 | 838 2883 CircleF 2072 | 0.500 UP 2073 | 1.000 UL 2074 | LT0 2075 | 0.00 0.38 0.68 C 838 2883 Circle 2076 | LCw setrgbcolor 2077 | 0.400 UP 2078 | 871 2883 CircleF 2079 | 0.500 UP 2080 | 1.000 UL 2081 | LT0 2082 | 0.00 0.38 0.68 C 871 2883 Circle 2083 | LCw setrgbcolor 2084 | 0.400 UP 2085 | 904 2883 CircleF 2086 | 0.500 UP 2087 | 1.000 UL 2088 | LT0 2089 | 0.00 0.38 0.68 C 904 2883 Circle 2090 | LCw setrgbcolor 2091 | 0.400 UP 2092 | 936 2883 CircleF 2093 | 0.500 UP 2094 | 1.000 UL 2095 | LT0 2096 | 0.00 0.38 0.68 C 936 2883 Circle 2097 | LCw setrgbcolor 2098 | 0.400 UP 2099 | 969 2883 CircleF 2100 | 0.500 UP 2101 | 1.000 UL 2102 | LT0 2103 | 0.00 0.38 0.68 C 969 2883 Circle 2104 | LCw setrgbcolor 2105 | 0.400 UP 2106 | 1002 2883 CircleF 2107 | 0.500 UP 2108 | 1.000 UL 2109 | LT0 2110 | 0.00 0.38 0.68 C 1002 2883 Circle 2111 | LCw setrgbcolor 2112 | 0.400 UP 2113 | 1035 2883 CircleF 2114 | 0.500 UP 2115 | 1.000 UL 2116 | LT0 2117 | 0.00 0.38 0.68 C 1035 2883 Circle 2118 | LCw setrgbcolor 2119 | 0.400 UP 2120 | 1068 2883 CircleF 2121 | 0.500 UP 2122 | 1.000 UL 2123 | LT0 2124 | 0.00 0.38 0.68 C 1068 2883 Circle 2125 | LCw setrgbcolor 2126 | 0.400 UP 2127 | 1101 2883 CircleF 2128 | 0.500 UP 2129 | 1.000 UL 2130 | LT0 2131 | 0.00 0.38 0.68 C 1101 2883 Circle 2132 | LCw setrgbcolor 2133 | 0.400 UP 2134 | 1133 2883 CircleF 2135 | 0.500 UP 2136 | 1.000 UL 2137 | LT0 2138 | 0.00 0.38 0.68 C 1133 2883 Circle 2139 | LCw setrgbcolor 2140 | 0.400 UP 2141 | 1166 2883 CircleF 2142 | 0.500 UP 2143 | 1.000 UL 2144 | LT0 2145 | 0.00 0.38 0.68 C 1166 2883 Circle 2146 | LCw setrgbcolor 2147 | 0.400 UP 2148 | 1199 2883 CircleF 2149 | 0.500 UP 2150 | 1.000 UL 2151 | LT0 2152 | 0.00 0.38 0.68 C 1199 2883 Circle 2153 | LCw setrgbcolor 2154 | 0.400 UP 2155 | 1232 2883 CircleF 2156 | 0.500 UP 2157 | 1.000 UL 2158 | LT0 2159 | 0.00 0.38 0.68 C 1232 2883 Circle 2160 | LCw setrgbcolor 2161 | 0.400 UP 2162 | 1265 2883 CircleF 2163 | 0.500 UP 2164 | 1.000 UL 2165 | LT0 2166 | 0.00 0.38 0.68 C 1265 2883 Circle 2167 | LCw setrgbcolor 2168 | 0.400 UP 2169 | 1298 2883 CircleF 2170 | 0.500 UP 2171 | 1.000 UL 2172 | LT0 2173 | 0.00 0.38 0.68 C 1298 2883 Circle 2174 | LCw setrgbcolor 2175 | 0.400 UP 2176 | 1331 2883 CircleF 2177 | 0.500 UP 2178 | 1.000 UL 2179 | LT0 2180 | 0.00 0.38 0.68 C 1331 2883 Circle 2181 | LCw setrgbcolor 2182 | 0.400 UP 2183 | 1363 2883 CircleF 2184 | 0.500 UP 2185 | 1.000 UL 2186 | LT0 2187 | 0.00 0.38 0.68 C 1363 2883 Circle 2188 | LCw setrgbcolor 2189 | 0.400 UP 2190 | 1396 2883 CircleF 2191 | 0.500 UP 2192 | 1.000 UL 2193 | LT0 2194 | 0.00 0.38 0.68 C 1396 2883 Circle 2195 | LCw setrgbcolor 2196 | 0.400 UP 2197 | 1429 2883 CircleF 2198 | 0.500 UP 2199 | 1.000 UL 2200 | LT0 2201 | 0.00 0.38 0.68 C 1429 2883 Circle 2202 | LCw setrgbcolor 2203 | 0.400 UP 2204 | 1462 2883 CircleF 2205 | 0.500 UP 2206 | 1.000 UL 2207 | LT0 2208 | 0.00 0.38 0.68 C 1462 2883 Circle 2209 | LCw setrgbcolor 2210 | 0.400 UP 2211 | 1495 2883 CircleF 2212 | 0.500 UP 2213 | 1.000 UL 2214 | LT0 2215 | 0.00 0.38 0.68 C 1495 2883 Circle 2216 | LCw setrgbcolor 2217 | 0.400 UP 2218 | 1528 2883 CircleF 2219 | 0.500 UP 2220 | 1.000 UL 2221 | LT0 2222 | 0.00 0.38 0.68 C 1528 2883 Circle 2223 | LCw setrgbcolor 2224 | 0.400 UP 2225 | 1560 2883 CircleF 2226 | 0.500 UP 2227 | 1.000 UL 2228 | LT0 2229 | 0.00 0.38 0.68 C 1560 2883 Circle 2230 | LCw setrgbcolor 2231 | 0.400 UP 2232 | 1593 2883 CircleF 2233 | 0.500 UP 2234 | 1.000 UL 2235 | LT0 2236 | 0.00 0.38 0.68 C 1593 2883 Circle 2237 | LCw setrgbcolor 2238 | 0.400 UP 2239 | 1626 2883 CircleF 2240 | 0.500 UP 2241 | 1.000 UL 2242 | LT0 2243 | 0.00 0.38 0.68 C 1626 2883 Circle 2244 | LCw setrgbcolor 2245 | 0.400 UP 2246 | 1659 2883 CircleF 2247 | 0.500 UP 2248 | 1.000 UL 2249 | LT0 2250 | 0.00 0.38 0.68 C 1659 2883 Circle 2251 | LCw setrgbcolor 2252 | 0.400 UP 2253 | 1692 2883 CircleF 2254 | 0.500 UP 2255 | 1.000 UL 2256 | LT0 2257 | 0.00 0.38 0.68 C 1692 2883 Circle 2258 | LCw setrgbcolor 2259 | 0.400 UP 2260 | 1725 2883 CircleF 2261 | 0.500 UP 2262 | 1.000 UL 2263 | LT0 2264 | 0.00 0.38 0.68 C 1725 2883 Circle 2265 | LCw setrgbcolor 2266 | 0.400 UP 2267 | 1757 2883 CircleF 2268 | 0.500 UP 2269 | 1.000 UL 2270 | LT0 2271 | 0.00 0.38 0.68 C 1757 2883 Circle 2272 | LCw setrgbcolor 2273 | 0.400 UP 2274 | 1790 2883 CircleF 2275 | 0.500 UP 2276 | 1.000 UL 2277 | LT0 2278 | 0.00 0.38 0.68 C 1790 2883 Circle 2279 | LCw setrgbcolor 2280 | 0.400 UP 2281 | 1823 2883 CircleF 2282 | 0.500 UP 2283 | 1.000 UL 2284 | LT0 2285 | 0.00 0.38 0.68 C 1823 2883 Circle 2286 | LCw setrgbcolor 2287 | 0.400 UP 2288 | 1856 2883 CircleF 2289 | 0.500 UP 2290 | 1.000 UL 2291 | LT0 2292 | 0.00 0.38 0.68 C 1856 2883 Circle 2293 | LCw setrgbcolor 2294 | 0.400 UP 2295 | 1889 2883 CircleF 2296 | 0.500 UP 2297 | 1.000 UL 2298 | LT0 2299 | 0.00 0.38 0.68 C 1889 2883 Circle 2300 | LCw setrgbcolor 2301 | 0.400 UP 2302 | 1922 2883 CircleF 2303 | 0.500 UP 2304 | 1.000 UL 2305 | LT0 2306 | 0.00 0.38 0.68 C 1922 2883 Circle 2307 | LCw setrgbcolor 2308 | 0.400 UP 2309 | 1955 2883 CircleF 2310 | 0.500 UP 2311 | 1.000 UL 2312 | LT0 2313 | 0.00 0.38 0.68 C 1955 2883 Circle 2314 | LCw setrgbcolor 2315 | 0.400 UP 2316 | 1987 2883 CircleF 2317 | 0.500 UP 2318 | 1.000 UL 2319 | LT0 2320 | 0.00 0.38 0.68 C 1987 2883 Circle 2321 | LCw setrgbcolor 2322 | 0.400 UP 2323 | 2020 2883 CircleF 2324 | 0.500 UP 2325 | 1.000 UL 2326 | LT0 2327 | 0.00 0.38 0.68 C 2020 2883 Circle 2328 | LCw setrgbcolor 2329 | 0.400 UP 2330 | 2053 2883 CircleF 2331 | 0.500 UP 2332 | 1.000 UL 2333 | LT0 2334 | 0.00 0.38 0.68 C 2053 2883 Circle 2335 | LCw setrgbcolor 2336 | 0.400 UP 2337 | 2086 2883 CircleF 2338 | 0.500 UP 2339 | 1.000 UL 2340 | LT0 2341 | 0.00 0.38 0.68 C 2086 2883 Circle 2342 | LCw setrgbcolor 2343 | 0.400 UP 2344 | 2119 2883 CircleF 2345 | 0.500 UP 2346 | 1.000 UL 2347 | LT0 2348 | 0.00 0.38 0.68 C 2119 2883 Circle 2349 | LCw setrgbcolor 2350 | 0.400 UP 2351 | 2152 2883 CircleF 2352 | 0.500 UP 2353 | 1.000 UL 2354 | LT0 2355 | 0.00 0.38 0.68 C 2152 2883 Circle 2356 | LCw setrgbcolor 2357 | 0.400 UP 2358 | 2184 2883 CircleF 2359 | 0.500 UP 2360 | 1.000 UL 2361 | LT0 2362 | 0.00 0.38 0.68 C 2184 2883 Circle 2363 | LCw setrgbcolor 2364 | 0.400 UP 2365 | 2217 2883 CircleF 2366 | 0.500 UP 2367 | 1.000 UL 2368 | LT0 2369 | 0.00 0.38 0.68 C 2217 2883 Circle 2370 | LCw setrgbcolor 2371 | 0.400 UP 2372 | 2250 2883 CircleF 2373 | 0.500 UP 2374 | 1.000 UL 2375 | LT0 2376 | 0.00 0.38 0.68 C 2250 2883 Circle 2377 | LCw setrgbcolor 2378 | 0.400 UP 2379 | 2283 2883 CircleF 2380 | 0.500 UP 2381 | 1.000 UL 2382 | LT0 2383 | 0.00 0.38 0.68 C 2283 2883 Circle 2384 | LCw setrgbcolor 2385 | 0.400 UP 2386 | 2316 2883 CircleF 2387 | 0.500 UP 2388 | 1.000 UL 2389 | LT0 2390 | 0.00 0.38 0.68 C 2316 2883 Circle 2391 | LCw setrgbcolor 2392 | 0.400 UP 2393 | 2349 2883 CircleF 2394 | 0.500 UP 2395 | 1.000 UL 2396 | LT0 2397 | 0.00 0.38 0.68 C 2349 2883 Circle 2398 | LCw setrgbcolor 2399 | 0.400 UP 2400 | 2382 2883 CircleF 2401 | 0.500 UP 2402 | 1.000 UL 2403 | LT0 2404 | 0.00 0.38 0.68 C 2382 2883 Circle 2405 | LCw setrgbcolor 2406 | 0.400 UP 2407 | 2414 2883 CircleF 2408 | 0.500 UP 2409 | 1.000 UL 2410 | LT0 2411 | 0.00 0.38 0.68 C 2414 2883 Circle 2412 | LCw setrgbcolor 2413 | 0.400 UP 2414 | 2447 2883 CircleF 2415 | 0.500 UP 2416 | 1.000 UL 2417 | LT0 2418 | 0.00 0.38 0.68 C 2447 2883 Circle 2419 | LCw setrgbcolor 2420 | 0.400 UP 2421 | 2480 2883 CircleF 2422 | 0.500 UP 2423 | 1.000 UL 2424 | LT0 2425 | 0.00 0.38 0.68 C 2480 2883 Circle 2426 | LCw setrgbcolor 2427 | 0.400 UP 2428 | 2513 2883 CircleF 2429 | 0.500 UP 2430 | 1.000 UL 2431 | LT0 2432 | 0.00 0.38 0.68 C 2513 2883 Circle 2433 | LCw setrgbcolor 2434 | 0.400 UP 2435 | 2546 2883 CircleF 2436 | 0.500 UP 2437 | 1.000 UL 2438 | LT0 2439 | 0.00 0.38 0.68 C 2546 2883 Circle 2440 | LCw setrgbcolor 2441 | 0.400 UP 2442 | 2579 2883 CircleF 2443 | 0.500 UP 2444 | 1.000 UL 2445 | LT0 2446 | 0.00 0.38 0.68 C 2579 2883 Circle 2447 | LCw setrgbcolor 2448 | 0.400 UP 2449 | 2611 2883 CircleF 2450 | 0.500 UP 2451 | 1.000 UL 2452 | LT0 2453 | 0.00 0.38 0.68 C 2611 2883 Circle 2454 | LCw setrgbcolor 2455 | 0.400 UP 2456 | 2644 2883 CircleF 2457 | 0.500 UP 2458 | 1.000 UL 2459 | LT0 2460 | 0.00 0.38 0.68 C 2644 2883 Circle 2461 | LCw setrgbcolor 2462 | 0.400 UP 2463 | 2677 2883 CircleF 2464 | 0.500 UP 2465 | 1.000 UL 2466 | LT0 2467 | 0.00 0.38 0.68 C 2677 2883 Circle 2468 | LCw setrgbcolor 2469 | 0.400 UP 2470 | 2710 2883 CircleF 2471 | 0.500 UP 2472 | 1.000 UL 2473 | LT0 2474 | 0.00 0.38 0.68 C 2710 2883 Circle 2475 | LCw setrgbcolor 2476 | 0.400 UP 2477 | 2743 2883 CircleF 2478 | 0.500 UP 2479 | 1.000 UL 2480 | LT0 2481 | 0.00 0.38 0.68 C 2743 2883 Circle 2482 | LCw setrgbcolor 2483 | 0.400 UP 2484 | 2776 2883 CircleF 2485 | 0.500 UP 2486 | 1.000 UL 2487 | LT0 2488 | 0.00 0.38 0.68 C 2776 2883 Circle 2489 | LCw setrgbcolor 2490 | 0.400 UP 2491 | 2809 2883 CircleF 2492 | 0.500 UP 2493 | 1.000 UL 2494 | LT0 2495 | 0.00 0.38 0.68 C 2809 2883 Circle 2496 | LCw setrgbcolor 2497 | 0.400 UP 2498 | 2841 2883 CircleF 2499 | 0.500 UP 2500 | 1.000 UL 2501 | LT0 2502 | 0.00 0.38 0.68 C 2841 2883 Circle 2503 | LCw setrgbcolor 2504 | 0.400 UP 2505 | 2874 2883 CircleF 2506 | 0.500 UP 2507 | 1.000 UL 2508 | LT0 2509 | 0.00 0.38 0.68 C 2874 2883 Circle 2510 | LCw setrgbcolor 2511 | 0.400 UP 2512 | 2907 2883 CircleF 2513 | 0.500 UP 2514 | 1.000 UL 2515 | LT0 2516 | 0.00 0.38 0.68 C 2907 2883 Circle 2517 | LCw setrgbcolor 2518 | 0.400 UP 2519 | 2940 2883 CircleF 2520 | 0.500 UP 2521 | 1.000 UL 2522 | LT0 2523 | 0.00 0.38 0.68 C 2940 2883 Circle 2524 | LCw setrgbcolor 2525 | 0.400 UP 2526 | 2973 2883 CircleF 2527 | 0.500 UP 2528 | 1.000 UL 2529 | LT0 2530 | 0.00 0.38 0.68 C 2973 2883 Circle 2531 | LCw setrgbcolor 2532 | 0.400 UP 2533 | 3006 2883 CircleF 2534 | 0.500 UP 2535 | 1.000 UL 2536 | LT0 2537 | 0.00 0.38 0.68 C 3006 2883 Circle 2538 | LCw setrgbcolor 2539 | 0.400 UP 2540 | 3038 2883 CircleF 2541 | 0.500 UP 2542 | 1.000 UL 2543 | LT0 2544 | 0.00 0.38 0.68 C 3038 2883 Circle 2545 | LCw setrgbcolor 2546 | 0.400 UP 2547 | 3071 2883 CircleF 2548 | 0.500 UP 2549 | 1.000 UL 2550 | LT0 2551 | 0.00 0.38 0.68 C 3071 2883 Circle 2552 | LCw setrgbcolor 2553 | 0.400 UP 2554 | 3104 2883 CircleF 2555 | 0.500 UP 2556 | 1.000 UL 2557 | LT0 2558 | 0.00 0.38 0.68 C 3104 2883 Circle 2559 | LCw setrgbcolor 2560 | 0.400 UP 2561 | 3137 2883 CircleF 2562 | 0.500 UP 2563 | 1.000 UL 2564 | LT0 2565 | 0.00 0.38 0.68 C 3137 2883 Circle 2566 | LCw setrgbcolor 2567 | 0.400 UP 2568 | 3170 2883 CircleF 2569 | 0.500 UP 2570 | 1.000 UL 2571 | LT0 2572 | 0.00 0.38 0.68 C 3170 2883 Circle 2573 | LCw setrgbcolor 2574 | 0.400 UP 2575 | 3203 2883 CircleF 2576 | 0.500 UP 2577 | 1.000 UL 2578 | LT0 2579 | 0.00 0.38 0.68 C 3203 2883 Circle 2580 | LCw setrgbcolor 2581 | 0.400 UP 2582 | 3236 2883 CircleF 2583 | 0.500 UP 2584 | 1.000 UL 2585 | LT0 2586 | 0.00 0.38 0.68 C 3236 2883 Circle 2587 | LCw setrgbcolor 2588 | 0.400 UP 2589 | 3268 2883 CircleF 2590 | 0.500 UP 2591 | 1.000 UL 2592 | LT0 2593 | 0.00 0.38 0.68 C 3268 2883 Circle 2594 | LCw setrgbcolor 2595 | 0.400 UP 2596 | 3301 2883 CircleF 2597 | 0.500 UP 2598 | 1.000 UL 2599 | LT0 2600 | 0.00 0.38 0.68 C 3301 2883 Circle 2601 | LCw setrgbcolor 2602 | 0.400 UP 2603 | 3334 2883 CircleF 2604 | 0.500 UP 2605 | 1.000 UL 2606 | LT0 2607 | 0.00 0.38 0.68 C 3334 2883 Circle 2608 | LCw setrgbcolor 2609 | 0.400 UP 2610 | 3367 2883 CircleF 2611 | 0.500 UP 2612 | 1.000 UL 2613 | LT0 2614 | 0.00 0.38 0.68 C 3367 2883 Circle 2615 | LCw setrgbcolor 2616 | 0.400 UP 2617 | 3400 2883 CircleF 2618 | 0.500 UP 2619 | 1.000 UL 2620 | LT0 2621 | 0.00 0.38 0.68 C 3400 2883 Circle 2622 | LCw setrgbcolor 2623 | 0.400 UP 2624 | 3433 2883 CircleF 2625 | 0.500 UP 2626 | 1.000 UL 2627 | LT0 2628 | 0.00 0.38 0.68 C 3433 2883 Circle 2629 | LCw setrgbcolor 2630 | 0.400 UP 2631 | 3465 2883 CircleF 2632 | 0.500 UP 2633 | 1.000 UL 2634 | LT0 2635 | 0.00 0.38 0.68 C 3465 2883 Circle 2636 | LCw setrgbcolor 2637 | 0.400 UP 2638 | 3498 2883 CircleF 2639 | 0.500 UP 2640 | 1.000 UL 2641 | LT0 2642 | 0.00 0.38 0.68 C 3498 2883 Circle 2643 | LCw setrgbcolor 2644 | 0.400 UP 2645 | 3531 2883 CircleF 2646 | 0.500 UP 2647 | 1.000 UL 2648 | LT0 2649 | 0.00 0.38 0.68 C 3531 2883 Circle 2650 | LCw setrgbcolor 2651 | 0.400 UP 2652 | 3564 2883 CircleF 2653 | 0.500 UP 2654 | 1.000 UL 2655 | LT0 2656 | 0.00 0.38 0.68 C 3564 2883 Circle 2657 | LCw setrgbcolor 2658 | 0.400 UP 2659 | 3597 2887 CircleF 2660 | 0.500 UP 2661 | 1.000 UL 2662 | LT0 2663 | 0.00 0.38 0.68 C 3597 2887 Circle 2664 | LCw setrgbcolor 2665 | 0.400 UP 2666 | 3630 3012 CircleF 2667 | 0.500 UP 2668 | 1.000 UL 2669 | LT0 2670 | 0.00 0.38 0.68 C 3630 3012 Circle 2671 | LCw setrgbcolor 2672 | 0.400 UP 2673 | 3662 3709 CircleF 2674 | 0.500 UP 2675 | 1.000 UL 2676 | LT0 2677 | 0.00 0.38 0.68 C 3662 3709 Circle 2678 | LCw setrgbcolor 2679 | 0.400 UP 2680 | 3695 4407 CircleF 2681 | 0.500 UP 2682 | 1.000 UL 2683 | LT0 2684 | 0.00 0.38 0.68 C 3695 4407 Circle 2685 | LCw setrgbcolor 2686 | 0.400 UP 2687 | 3728 4532 CircleF 2688 | 0.500 UP 2689 | 1.000 UL 2690 | LT0 2691 | 0.00 0.38 0.68 C 3728 4532 Circle 2692 | LCw setrgbcolor 2693 | 0.400 UP 2694 | 3761 4536 CircleF 2695 | 0.500 UP 2696 | 1.000 UL 2697 | LT0 2698 | 0.00 0.38 0.68 C 3761 4536 Circle 2699 | LCw setrgbcolor 2700 | 0.400 UP 2701 | 3794 4536 CircleF 2702 | 0.500 UP 2703 | 1.000 UL 2704 | LT0 2705 | 0.00 0.38 0.68 C 3794 4536 Circle 2706 | LCw setrgbcolor 2707 | 0.400 UP 2708 | 3827 4536 CircleF 2709 | 0.500 UP 2710 | 1.000 UL 2711 | LT0 2712 | 0.00 0.38 0.68 C 3827 4536 Circle 2713 | LCw setrgbcolor 2714 | 0.400 UP 2715 | 3860 4536 CircleF 2716 | 0.500 UP 2717 | 1.000 UL 2718 | LT0 2719 | 0.00 0.38 0.68 C 3860 4536 Circle 2720 | LCw setrgbcolor 2721 | 0.400 UP 2722 | 3892 4536 CircleF 2723 | 0.500 UP 2724 | 1.000 UL 2725 | LT0 2726 | 0.00 0.38 0.68 C 3892 4536 Circle 2727 | LCw setrgbcolor 2728 | 0.400 UP 2729 | 3925 4536 CircleF 2730 | 0.500 UP 2731 | 1.000 UL 2732 | LT0 2733 | 0.00 0.38 0.68 C 3925 4536 Circle 2734 | LCw setrgbcolor 2735 | 0.400 UP 2736 | 3958 4536 CircleF 2737 | 0.500 UP 2738 | 1.000 UL 2739 | LT0 2740 | 0.00 0.38 0.68 C 3958 4536 Circle 2741 | LCw setrgbcolor 2742 | 0.400 UP 2743 | 3991 4536 CircleF 2744 | 0.500 UP 2745 | 1.000 UL 2746 | LT0 2747 | 0.00 0.38 0.68 C 3991 4536 Circle 2748 | LCw setrgbcolor 2749 | 0.400 UP 2750 | 4024 4536 CircleF 2751 | 0.500 UP 2752 | 1.000 UL 2753 | LT0 2754 | 0.00 0.38 0.68 C 4024 4536 Circle 2755 | LCw setrgbcolor 2756 | 0.400 UP 2757 | 4057 4536 CircleF 2758 | 0.500 UP 2759 | 1.000 UL 2760 | LT0 2761 | 0.00 0.38 0.68 C 4057 4536 Circle 2762 | LCw setrgbcolor 2763 | 0.400 UP 2764 | 4089 4536 CircleF 2765 | 0.500 UP 2766 | 1.000 UL 2767 | LT0 2768 | 0.00 0.38 0.68 C 4089 4536 Circle 2769 | LCw setrgbcolor 2770 | 0.400 UP 2771 | 4122 4536 CircleF 2772 | 0.500 UP 2773 | 1.000 UL 2774 | LT0 2775 | 0.00 0.38 0.68 C 4122 4536 Circle 2776 | LCw setrgbcolor 2777 | 0.400 UP 2778 | 4155 4536 CircleF 2779 | 0.500 UP 2780 | 1.000 UL 2781 | LT0 2782 | 0.00 0.38 0.68 C 4155 4536 Circle 2783 | LCw setrgbcolor 2784 | 0.400 UP 2785 | 4188 4536 CircleF 2786 | 0.500 UP 2787 | 1.000 UL 2788 | LT0 2789 | 0.00 0.38 0.68 C 4188 4536 Circle 2790 | LCw setrgbcolor 2791 | 0.400 UP 2792 | 4221 4536 CircleF 2793 | 0.500 UP 2794 | 1.000 UL 2795 | LT0 2796 | 0.00 0.38 0.68 C 4221 4536 Circle 2797 | LCw setrgbcolor 2798 | 0.400 UP 2799 | 4254 4536 CircleF 2800 | 0.500 UP 2801 | 1.000 UL 2802 | LT0 2803 | 0.00 0.38 0.68 C 4254 4536 Circle 2804 | LCw setrgbcolor 2805 | 0.400 UP 2806 | 4287 4536 CircleF 2807 | 0.500 UP 2808 | 1.000 UL 2809 | LT0 2810 | 0.00 0.38 0.68 C 4287 4536 Circle 2811 | LCw setrgbcolor 2812 | 0.400 UP 2813 | 4319 4536 CircleF 2814 | 0.500 UP 2815 | 1.000 UL 2816 | LT0 2817 | 0.00 0.38 0.68 C 4319 4536 Circle 2818 | LCw setrgbcolor 2819 | 0.400 UP 2820 | 4352 4536 CircleF 2821 | 0.500 UP 2822 | 1.000 UL 2823 | LT0 2824 | 0.00 0.38 0.68 C 4352 4536 Circle 2825 | LCw setrgbcolor 2826 | 0.400 UP 2827 | 4385 4536 CircleF 2828 | 0.500 UP 2829 | 1.000 UL 2830 | LT0 2831 | 0.00 0.38 0.68 C 4385 4536 Circle 2832 | LCw setrgbcolor 2833 | 0.400 UP 2834 | 4418 4536 CircleF 2835 | 0.500 UP 2836 | 1.000 UL 2837 | LT0 2838 | 0.00 0.38 0.68 C 4418 4536 Circle 2839 | LCw setrgbcolor 2840 | 0.400 UP 2841 | 4451 4536 CircleF 2842 | 0.500 UP 2843 | 1.000 UL 2844 | LT0 2845 | 0.00 0.38 0.68 C 4451 4536 Circle 2846 | LCw setrgbcolor 2847 | 0.400 UP 2848 | 4484 4536 CircleF 2849 | 0.500 UP 2850 | 1.000 UL 2851 | LT0 2852 | 0.00 0.38 0.68 C 4484 4536 Circle 2853 | LCw setrgbcolor 2854 | 0.400 UP 2855 | 4516 4536 CircleF 2856 | 0.500 UP 2857 | 1.000 UL 2858 | LT0 2859 | 0.00 0.38 0.68 C 4516 4536 Circle 2860 | LCw setrgbcolor 2861 | 0.400 UP 2862 | 4549 4536 CircleF 2863 | 0.500 UP 2864 | 1.000 UL 2865 | LT0 2866 | 0.00 0.38 0.68 C 4549 4536 Circle 2867 | LCw setrgbcolor 2868 | 0.400 UP 2869 | 4582 4536 CircleF 2870 | 0.500 UP 2871 | 1.000 UL 2872 | LT0 2873 | 0.00 0.38 0.68 C 4582 4536 Circle 2874 | LCw setrgbcolor 2875 | 0.400 UP 2876 | 4615 4536 CircleF 2877 | 0.500 UP 2878 | 1.000 UL 2879 | LT0 2880 | 0.00 0.38 0.68 C 4615 4536 Circle 2881 | LCw setrgbcolor 2882 | 0.400 UP 2883 | 4648 4536 CircleF 2884 | 0.500 UP 2885 | 1.000 UL 2886 | LT0 2887 | 0.00 0.38 0.68 C 4648 4536 Circle 2888 | LCw setrgbcolor 2889 | 0.400 UP 2890 | 4681 4536 CircleF 2891 | 0.500 UP 2892 | 1.000 UL 2893 | LT0 2894 | 0.00 0.38 0.68 C 4681 4536 Circle 2895 | LCw setrgbcolor 2896 | 0.400 UP 2897 | 4714 4536 CircleF 2898 | 0.500 UP 2899 | 1.000 UL 2900 | LT0 2901 | 0.00 0.38 0.68 C 4714 4536 Circle 2902 | LCw setrgbcolor 2903 | 0.400 UP 2904 | 4746 4536 CircleF 2905 | 0.500 UP 2906 | 1.000 UL 2907 | LT0 2908 | 0.00 0.38 0.68 C 4746 4536 Circle 2909 | LCw setrgbcolor 2910 | 0.400 UP 2911 | 4779 4536 CircleF 2912 | 0.500 UP 2913 | 1.000 UL 2914 | LT0 2915 | 0.00 0.38 0.68 C 4779 4536 Circle 2916 | LCw setrgbcolor 2917 | 0.400 UP 2918 | 4812 4536 CircleF 2919 | 0.500 UP 2920 | 1.000 UL 2921 | LT0 2922 | 0.00 0.38 0.68 C 4812 4536 Circle 2923 | LCw setrgbcolor 2924 | 0.400 UP 2925 | 4845 4536 CircleF 2926 | 0.500 UP 2927 | 1.000 UL 2928 | LT0 2929 | 0.00 0.38 0.68 C 4845 4536 Circle 2930 | LCw setrgbcolor 2931 | 0.400 UP 2932 | 4878 4536 CircleF 2933 | 0.500 UP 2934 | 1.000 UL 2935 | LT0 2936 | 0.00 0.38 0.68 C 4878 4536 Circle 2937 | LCw setrgbcolor 2938 | 0.400 UP 2939 | 4911 4536 CircleF 2940 | 0.500 UP 2941 | 1.000 UL 2942 | LT0 2943 | 0.00 0.38 0.68 C 4911 4536 Circle 2944 | LCw setrgbcolor 2945 | 0.400 UP 2946 | 4943 4536 CircleF 2947 | 0.500 UP 2948 | 1.000 UL 2949 | LT0 2950 | 0.00 0.38 0.68 C 4943 4536 Circle 2951 | LCw setrgbcolor 2952 | 0.400 UP 2953 | 4976 4536 CircleF 2954 | 0.500 UP 2955 | 1.000 UL 2956 | LT0 2957 | 0.00 0.38 0.68 C 4976 4536 Circle 2958 | LCw setrgbcolor 2959 | 0.400 UP 2960 | 5009 4536 CircleF 2961 | 0.500 UP 2962 | 1.000 UL 2963 | LT0 2964 | 0.00 0.38 0.68 C 5009 4536 Circle 2965 | LCw setrgbcolor 2966 | 0.400 UP 2967 | 5042 4536 CircleF 2968 | 0.500 UP 2969 | 1.000 UL 2970 | LT0 2971 | 0.00 0.38 0.68 C 5042 4536 Circle 2972 | LCw setrgbcolor 2973 | 0.400 UP 2974 | 5075 4536 CircleF 2975 | 0.500 UP 2976 | 1.000 UL 2977 | LT0 2978 | 0.00 0.38 0.68 C 5075 4536 Circle 2979 | LCw setrgbcolor 2980 | 0.400 UP 2981 | 5108 4536 CircleF 2982 | 0.500 UP 2983 | 1.000 UL 2984 | LT0 2985 | 0.00 0.38 0.68 C 5108 4536 Circle 2986 | LCw setrgbcolor 2987 | 0.400 UP 2988 | 5141 4536 CircleF 2989 | 0.500 UP 2990 | 1.000 UL 2991 | LT0 2992 | 0.00 0.38 0.68 C 5141 4536 Circle 2993 | LCw setrgbcolor 2994 | 0.400 UP 2995 | 5173 4536 CircleF 2996 | 0.500 UP 2997 | 1.000 UL 2998 | LT0 2999 | 0.00 0.38 0.68 C 5173 4536 Circle 3000 | LCw setrgbcolor 3001 | 0.400 UP 3002 | 5206 4536 CircleF 3003 | 0.500 UP 3004 | 1.000 UL 3005 | LT0 3006 | 0.00 0.38 0.68 C 5206 4536 Circle 3007 | LCw setrgbcolor 3008 | 0.400 UP 3009 | 5239 4536 CircleF 3010 | 0.500 UP 3011 | 1.000 UL 3012 | LT0 3013 | 0.00 0.38 0.68 C 5239 4536 Circle 3014 | LCw setrgbcolor 3015 | 0.400 UP 3016 | 5272 4536 CircleF 3017 | 0.500 UP 3018 | 1.000 UL 3019 | LT0 3020 | 0.00 0.38 0.68 C 5272 4536 Circle 3021 | LCw setrgbcolor 3022 | 0.400 UP 3023 | 5305 4536 CircleF 3024 | 0.500 UP 3025 | 1.000 UL 3026 | LT0 3027 | 0.00 0.38 0.68 C 5305 4536 Circle 3028 | LCw setrgbcolor 3029 | 0.400 UP 3030 | 5338 4536 CircleF 3031 | 0.500 UP 3032 | 1.000 UL 3033 | LT0 3034 | 0.00 0.38 0.68 C 5338 4536 Circle 3035 | LCw setrgbcolor 3036 | 0.400 UP 3037 | 5370 4536 CircleF 3038 | 0.500 UP 3039 | 1.000 UL 3040 | LT0 3041 | 0.00 0.38 0.68 C 5370 4536 Circle 3042 | LCw setrgbcolor 3043 | 0.400 UP 3044 | 5403 4536 CircleF 3045 | 0.500 UP 3046 | 1.000 UL 3047 | LT0 3048 | 0.00 0.38 0.68 C 5403 4536 Circle 3049 | LCw setrgbcolor 3050 | 0.400 UP 3051 | 5436 4536 CircleF 3052 | 0.500 UP 3053 | 1.000 UL 3054 | LT0 3055 | 0.00 0.38 0.68 C 5436 4536 Circle 3056 | LCw setrgbcolor 3057 | 0.400 UP 3058 | 5469 4536 CircleF 3059 | 0.500 UP 3060 | 1.000 UL 3061 | LT0 3062 | 0.00 0.38 0.68 C 5469 4536 Circle 3063 | LCw setrgbcolor 3064 | 0.400 UP 3065 | 5502 4536 CircleF 3066 | 0.500 UP 3067 | 1.000 UL 3068 | LT0 3069 | 0.00 0.38 0.68 C 5502 4536 Circle 3070 | LCw setrgbcolor 3071 | 0.400 UP 3072 | 5535 4536 CircleF 3073 | 0.500 UP 3074 | 1.000 UL 3075 | LT0 3076 | 0.00 0.38 0.68 C 5535 4536 Circle 3077 | LCw setrgbcolor 3078 | 0.400 UP 3079 | 5568 4536 CircleF 3080 | 0.500 UP 3081 | 1.000 UL 3082 | LT0 3083 | 0.00 0.38 0.68 C 5568 4536 Circle 3084 | LCw setrgbcolor 3085 | 0.400 UP 3086 | 5600 4536 CircleF 3087 | 0.500 UP 3088 | 1.000 UL 3089 | LT0 3090 | 0.00 0.38 0.68 C 5600 4536 Circle 3091 | LCw setrgbcolor 3092 | 0.400 UP 3093 | 5633 4536 CircleF 3094 | 0.500 UP 3095 | 1.000 UL 3096 | LT0 3097 | 0.00 0.38 0.68 C 5633 4536 Circle 3098 | LCw setrgbcolor 3099 | 0.400 UP 3100 | 5666 4536 CircleF 3101 | 0.500 UP 3102 | 1.000 UL 3103 | LT0 3104 | 0.00 0.38 0.68 C 5666 4536 Circle 3105 | LCw setrgbcolor 3106 | 0.400 UP 3107 | 5699 4536 CircleF 3108 | 0.500 UP 3109 | 1.000 UL 3110 | LT0 3111 | 0.00 0.38 0.68 C 5699 4536 Circle 3112 | LCw setrgbcolor 3113 | 0.400 UP 3114 | 5732 4536 CircleF 3115 | 0.500 UP 3116 | 1.000 UL 3117 | LT0 3118 | 0.00 0.38 0.68 C 5732 4536 Circle 3119 | LCw setrgbcolor 3120 | 0.400 UP 3121 | 5765 4536 CircleF 3122 | 0.500 UP 3123 | 1.000 UL 3124 | LT0 3125 | 0.00 0.38 0.68 C 5765 4536 Circle 3126 | LCw setrgbcolor 3127 | 0.400 UP 3128 | 5797 4536 CircleF 3129 | 0.500 UP 3130 | 1.000 UL 3131 | LT0 3132 | 0.00 0.38 0.68 C 5797 4536 Circle 3133 | LCw setrgbcolor 3134 | 0.400 UP 3135 | 5830 4536 CircleF 3136 | 0.500 UP 3137 | 1.000 UL 3138 | LT0 3139 | 0.00 0.38 0.68 C 5830 4536 Circle 3140 | LCw setrgbcolor 3141 | 0.400 UP 3142 | 5863 4536 CircleF 3143 | 0.500 UP 3144 | 1.000 UL 3145 | LT0 3146 | 0.00 0.38 0.68 C 5863 4536 Circle 3147 | LCw setrgbcolor 3148 | 0.400 UP 3149 | 5896 4536 CircleF 3150 | 0.500 UP 3151 | 1.000 UL 3152 | LT0 3153 | 0.00 0.38 0.68 C 5896 4536 Circle 3154 | LCw setrgbcolor 3155 | 0.400 UP 3156 | 5929 4536 CircleF 3157 | 0.500 UP 3158 | 1.000 UL 3159 | LT0 3160 | 0.00 0.38 0.68 C 5929 4536 Circle 3161 | LCw setrgbcolor 3162 | 0.400 UP 3163 | 5962 4536 CircleF 3164 | 0.500 UP 3165 | 1.000 UL 3166 | LT0 3167 | 0.00 0.38 0.68 C 5962 4536 Circle 3168 | LCw setrgbcolor 3169 | 0.400 UP 3170 | 5994 4536 CircleF 3171 | 0.500 UP 3172 | 1.000 UL 3173 | LT0 3174 | 0.00 0.38 0.68 C 5994 4536 Circle 3175 | LCw setrgbcolor 3176 | 0.400 UP 3177 | 6027 4536 CircleF 3178 | 0.500 UP 3179 | 1.000 UL 3180 | LT0 3181 | 0.00 0.38 0.68 C 6027 4536 Circle 3182 | LCw setrgbcolor 3183 | 0.400 UP 3184 | 6060 4536 CircleF 3185 | 0.500 UP 3186 | 1.000 UL 3187 | LT0 3188 | 0.00 0.38 0.68 C 6060 4536 Circle 3189 | LCw setrgbcolor 3190 | 0.400 UP 3191 | 6093 4536 CircleF 3192 | 0.500 UP 3193 | 1.000 UL 3194 | LT0 3195 | 0.00 0.38 0.68 C 6093 4536 Circle 3196 | LCw setrgbcolor 3197 | 0.400 UP 3198 | 6126 4536 CircleF 3199 | 0.500 UP 3200 | 1.000 UL 3201 | LT0 3202 | 0.00 0.38 0.68 C 6126 4536 Circle 3203 | LCw setrgbcolor 3204 | 0.400 UP 3205 | 6159 4536 CircleF 3206 | 0.500 UP 3207 | 1.000 UL 3208 | LT0 3209 | 0.00 0.38 0.68 C 6159 4536 Circle 3210 | LCw setrgbcolor 3211 | 0.400 UP 3212 | 6192 4536 CircleF 3213 | 0.500 UP 3214 | 1.000 UL 3215 | LT0 3216 | 0.00 0.38 0.68 C 6192 4536 Circle 3217 | LCw setrgbcolor 3218 | 0.400 UP 3219 | 6224 4536 CircleF 3220 | 0.500 UP 3221 | 1.000 UL 3222 | LT0 3223 | 0.00 0.38 0.68 C 6224 4536 Circle 3224 | LCw setrgbcolor 3225 | 0.400 UP 3226 | 6257 4536 CircleF 3227 | 0.500 UP 3228 | 1.000 UL 3229 | LT0 3230 | 0.00 0.38 0.68 C 6257 4536 Circle 3231 | LCw setrgbcolor 3232 | 0.400 UP 3233 | 6290 4536 CircleF 3234 | 0.500 UP 3235 | 1.000 UL 3236 | LT0 3237 | 0.00 0.38 0.68 C 6290 4536 Circle 3238 | LCw setrgbcolor 3239 | 0.400 UP 3240 | 6323 4536 CircleF 3241 | 0.500 UP 3242 | 1.000 UL 3243 | LT0 3244 | 0.00 0.38 0.68 C 6323 4536 Circle 3245 | LCw setrgbcolor 3246 | 0.400 UP 3247 | 6356 4536 CircleF 3248 | 0.500 UP 3249 | 1.000 UL 3250 | LT0 3251 | 0.00 0.38 0.68 C 6356 4536 Circle 3252 | LCw setrgbcolor 3253 | 0.400 UP 3254 | 6389 4536 CircleF 3255 | 0.500 UP 3256 | 1.000 UL 3257 | LT0 3258 | 0.00 0.38 0.68 C 6389 4536 Circle 3259 | LCw setrgbcolor 3260 | 0.400 UP 3261 | 6421 4536 CircleF 3262 | 0.500 UP 3263 | 1.000 UL 3264 | LT0 3265 | 0.00 0.38 0.68 C 6421 4536 Circle 3266 | LCw setrgbcolor 3267 | 0.400 UP 3268 | 6454 4536 CircleF 3269 | 0.500 UP 3270 | 1.000 UL 3271 | LT0 3272 | 0.00 0.38 0.68 C 6454 4536 Circle 3273 | LCw setrgbcolor 3274 | 0.400 UP 3275 | 6487 4536 CircleF 3276 | 0.500 UP 3277 | 1.000 UL 3278 | LT0 3279 | 0.00 0.38 0.68 C 6487 4536 Circle 3280 | LCw setrgbcolor 3281 | 0.400 UP 3282 | 6520 4536 CircleF 3283 | 0.500 UP 3284 | 1.000 UL 3285 | LT0 3286 | 0.00 0.38 0.68 C 6520 4536 Circle 3287 | LCw setrgbcolor 3288 | 0.400 UP 3289 | 6553 4536 CircleF 3290 | 0.500 UP 3291 | 1.000 UL 3292 | LT0 3293 | 0.00 0.38 0.68 C 6553 4536 Circle 3294 | LCw setrgbcolor 3295 | 0.400 UP 3296 | 6586 4536 CircleF 3297 | 0.500 UP 3298 | 1.000 UL 3299 | LT0 3300 | 0.00 0.38 0.68 C 6586 4536 Circle 3301 | LCw setrgbcolor 3302 | 0.400 UP 3303 | 6619 4536 CircleF 3304 | 0.500 UP 3305 | 1.000 UL 3306 | LT0 3307 | 0.00 0.38 0.68 C 6619 4536 Circle 3308 | LCw setrgbcolor 3309 | 0.400 UP 3310 | 6651 4536 CircleF 3311 | 0.500 UP 3312 | 1.000 UL 3313 | LT0 3314 | 0.00 0.38 0.68 C 6651 4536 Circle 3315 | LCw setrgbcolor 3316 | 0.400 UP 3317 | 6684 4536 CircleF 3318 | 0.500 UP 3319 | 1.000 UL 3320 | LT0 3321 | 0.00 0.38 0.68 C 6684 4536 Circle 3322 | LCw setrgbcolor 3323 | 0.400 UP 3324 | 6717 4536 CircleF 3325 | 0.500 UP 3326 | 1.000 UL 3327 | LT0 3328 | 0.00 0.38 0.68 C 6717 4536 Circle 3329 | LCw setrgbcolor 3330 | 0.400 UP 3331 | 6750 4536 CircleF 3332 | 0.500 UP 3333 | 1.000 UL 3334 | LT0 3335 | 0.00 0.38 0.68 C 6750 4536 Circle 3336 | LCw setrgbcolor 3337 | 0.400 UP 3338 | 6783 4536 CircleF 3339 | 0.500 UP 3340 | 1.000 UL 3341 | LT0 3342 | 0.00 0.38 0.68 C 6783 4536 Circle 3343 | LCw setrgbcolor 3344 | 0.400 UP 3345 | 6816 4536 CircleF 3346 | 0.500 UP 3347 | 1.000 UL 3348 | LT0 3349 | 0.00 0.38 0.68 C 6816 4536 Circle 3350 | LCw setrgbcolor 3351 | 0.400 UP 3352 | 6848 4536 CircleF 3353 | 0.500 UP 3354 | 1.000 UL 3355 | LT0 3356 | 0.00 0.38 0.68 C 6848 4536 Circle 3357 | LCw setrgbcolor 3358 | 0.400 UP 3359 | 6881 4536 CircleF 3360 | 0.500 UP 3361 | 1.000 UL 3362 | LT0 3363 | 0.00 0.38 0.68 C 6881 4536 Circle 3364 | LCw setrgbcolor 3365 | 0.400 UP 3366 | 6914 4536 CircleF 3367 | 0.500 UP 3368 | 1.000 UL 3369 | LT0 3370 | 0.00 0.38 0.68 C 6914 4536 Circle 3371 | % End plot #1 3372 | 1.000 UL 3373 | LTb 3374 | 378 4619 N 3375 | 0 -1819 V 3376 | 6569 0 V 3377 | 0 1819 V 3378 | -6569 0 V 3379 | Z stroke 3380 | 1.000 UP 3381 | 1.000 UL 3382 | LTb 3383 | stroke 3384 | grestore 3385 | end 3386 | showpage 3387 | %%Trailer 3388 | %%DocumentFonts: Verdana Helvetica 3389 | %%Pages: 1 3390 | --------------------------------------------------------------------------------