Mercurial > hg > octave-nkf
annotate examples/code/oregonator.cc @ 20811:a22d8a2eb0e5
fix adaptive strategy in ode solvers.
* script/ode/ode45.m: remove unused option OutputSave
* script/ode/private/integrate_adaptive.m: rewrite algorithm
to be more compatible.
* script/ode/private/runge_kutta_45_dorpri.m: use kahan summation
for time increment.
author | Carlo de Falco <carlo.defalco@polimi.it> |
---|---|
date | Sun, 11 Oct 2015 18:44:58 +0200 |
parents | c8240a60dd01 |
children |
rev | line source |
---|---|
2689 | 1 #include <octave/oct.h> |
2 | |
3 DEFUN_DLD (oregonator, args, , | |
17791
224e76250443
Use GNU style coding conventions for code in examples/
Rik <rik@octave.org>
parents:
9053
diff
changeset
|
4 "The `oregonator'.\n\ |
3162 | 5 \n\ |
6 Reference:\n\ | |
7 \n\ | |
8 Oscillations in chemical systems. IV. Limit cycle behavior in a\n\ | |
9 model of a real chemical reaction. Richard J. Field and Richard\n\ | |
10 M. Noyes, The Journal of Chemical Physics, Volume 60 Number 5,\n\ | |
11 March 1974.") | |
2689 | 12 { |
13 ColumnVector dx (3); | |
14 | |
3681 | 15 ColumnVector x (args(0).vector_value ()); |
2689 | 16 |
4205 | 17 dx(0) = 77.27 * (x(1) - x(0)*x(1) + x(0) - 8.375e-06*pow (x(0), 2.0)); |
2689 | 18 dx(1) = (x(2) - x(0)*x(1) - x(1)) / 77.27; |
19 dx(2) = 0.161*(x(0) - x(2)); | |
20 | |
21 return octave_value (dx); | |
22 } |