Skip to content

Commit

Permalink
Added TrapezoidStepper and tests for it
Browse files Browse the repository at this point in the history
  • Loading branch information
runadrag committed Jul 8, 2013
1 parent 0a663fe commit a251e55
Show file tree
Hide file tree
Showing 22 changed files with 161 additions and 6 deletions.
4 changes: 4 additions & 0 deletions Math-ODE.package/ImplicitStepper.class/class/order.st
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
as yet unclassified
order
"the default ImplicitStepper is a Backward Euler Method, order 1"
^ 1
Original file line number Diff line number Diff line change
Expand Up @@ -11,5 +11,5 @@ doStep: aState time: t
| xi ti |
ti := t + self stepSize.
xi := aState at: i.
aState at: xi + i put: (system x: xi t: ti )* self stepSize ].
aState at: i put: xi + (system x: xi t: ti )* self stepSize ].
^ aState.]
4 changes: 2 additions & 2 deletions Math-ODE.package/ImplicitStepper.class/methodProperties.json
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
{
"class" : {
},
"order" : "NataliaMoskovchuk 7/9/2013 00:06" },
"instance" : {
"doStep:time:" : "NataliaMoskovchuk 7/4/2013 00:24",
"doStep:time:" : "NataliaMoskovchuk 7/9/2013 00:00",
"doStep:time:stepSize:" : "NataliaMoskovchuk 7/4/2013 00:24",
"stepSize" : "NataliaMoskovchuk 7/3/2013 10:35",
"stepSize:" : "NataliaMoskovchuk 7/3/2013 10:34" } }
Empty file.
4 changes: 4 additions & 0 deletions Math-ODE.package/TrapezoidStepper.class/class/order.st
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
as yet unclassified
order
"Trapezoid is a second order method."
^ 2
17 changes: 17 additions & 0 deletions Math-ODE.package/TrapezoidStepper.class/instance/doStep.time..st
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
as yet unclassified
doStep: aState time: t
"This method should take one step from inState at time t of size dt, and modify the state, then answer it. "
self stepSize isNil ifTrue: [self error: 'step size required by stepper'].
aState isNumber
ifTrue: [^ (self stepSize * (system x: aState t: t) + aState)]
"a collection"
ifFalse:
[(1 to: aState size)
do: [ :i |
| xi1 xi2 x0 ti |
ti := t + self stepSize.
x0 := aState at: i.
xi1 := x0 + self stepSize* (system x: x0 t: t). "predict"
xi2 := x0 + (1/2)*self stepSize*( (system x: x0 t: t) + (system x: xi1 t: ti) ). "correction 1"
aState at: i put: x0 + (1/2)*self stepSize*( (system x: x0 t: t) + (system x: xi2 t: ti) ) ]. "correction 2"
^ aState.]
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
as yet unclassified
doStep: aState time: t stepSize: timeStep
"This method should take one step from inState at time t of size dt, and modify the state, then answer it. "
self stepSize: timeStep.
^ self doStep: aState time: t.
6 changes: 6 additions & 0 deletions Math-ODE.package/TrapezoidStepper.class/methodProperties.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
{
"class" : {
"order" : "NataliaMoskovchuk 7/9/2013 00:05" },
"instance" : {
"doStep:time:" : "NataliaMoskovchuk 7/9/2013 00:05",
"doStep:time:stepSize:" : "NataliaMoskovchuk 7/9/2013 00:05" } }
14 changes: 14 additions & 0 deletions Math-ODE.package/TrapezoidStepper.class/properties.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
{
"category" : "Math-ODE",
"classinstvars" : [
],
"classvars" : [
],
"commentStamp" : "",
"instvars" : [
],
"name" : "TrapezoidStepper",
"pools" : [
],
"super" : "ImplicitStepper",
"type" : "normal" }
2 changes: 1 addition & 1 deletion Math-ODE.package/monticello.meta/version
Original file line number Diff line number Diff line change
@@ -1 +1 @@
(name 'Math-ODE-NataliaMoskovchuk.16' message 'Moved methods block:, block and x:t: to ODESystem. Added Beckward Euler Method with prediction made by forward Euler' id '6610aff6-40af-417d-9363-af41bd4e797f' date '4 July 2013' time '12:29:10.73 am' author 'NataliaMoskovchuk' ancestors ((name 'Math-ODE-DanielUber.15' message 'added defaultBlock to ExplicitSolverSubscriber (subclass responsibility) and imported changes for MidPointStepper' id '66978cce-a604-40e8-afc8-82531a140d1e' date '21 April 2013' time '12:28:37.26 pm' author 'DanielUber' ancestors ((name 'Math-ODE-NataliaMoskovchuk.14' message 'Added Midpoint method.' id '59c6f104-472b-410e-b76e-e91d0882649d' date '21 April 2013' time '7:46:55.614 pm' author 'NataliaMoskovchuk' ancestors ((name 'Math-ODE-DanielUber.13' message 'Added Tableau Stepper' id 'f4b3152c-a11e-4910-a815-9acdb9bcc4fa' date '20 July 2012' time '1:04:14.247 pm' author 'DanielUber' ancestors ((name 'Math-ODE-DanielUber.12' message 'changes to Math-ODE' id '905b6525-b095-4a6c-84b4-6dc52a76d4ff' date '10 June 2012' time '10:52:11.954 am' author 'DanielUber' ancestors ((name 'Math-ODE-DanielUber.11' message 'added announcements/watchers to ODESolver ' id '42c431f9-2754-4d1d-b60f-5d5c011c4ade' date '8 June 2012' time '11:43:43.202 am' author 'DanielUber' ancestors ((name 'Math-ODE-DanielUber.10' message 'RungeKuttaStepper added. Corrected issue where ODESolver would overwrite stepper.' id 'aa5aa7b0-eb57-457f-a08a-f9971db062b3' date '29 May 2012' time '11:38:04.988 am' author 'DanielUber' ancestors ((name 'Math-ODE-DanielUber.9' message 'working copy' id '7356b953-4511-44c1-baed-671b73abdd00' date '29 May 2012' time '8:07:06.734 am' author 'DanielUber' ancestors ((name 'Math-ODE-DanielUber.8' message 'empty log message' id '5c0bc90a-2387-41bc-ab90-a88883002a50' date '23 May 2012' time '2:26:31.909 pm' author 'DanielUber' ancestors ((name 'Math-ODE-DanielUber.7' message 'added stepSize method to ODESolver to match documentation.' id '955dc50b-d09e-41cf-b8dd-f0ae03bc864f' date '22 May 2012' time '1:13:52.298 pm' author 'DanielUber' ancestors ((name 'Math-ODE-DanielUber.6' message 'added classes from odeint-v2. Need to flush out methods.' id 'ff724335-5ab4-435c-8c05-59aba765771b' date '22 May 2012' time '1:08:22.878 pm' author 'DanielUber' ancestors ((name 'Math-ODE-DanielUber.5' message 'removed stepSize method' id 'e61dae0a-b3ed-4cdb-a664-339a0f9b5b1e' date '22 May 2012' time '12:19:42.946 pm' author 'DanielUber' ancestors ((name 'Math-ODE-DanielUber.4' message 'added ODESolver. Need to seriously refactor this.' id '571a4c4d-eaf0-4e41-86c4-759345442aaa' date '22 May 2012' time '12:00:41.72 pm' author 'DanielUber' ancestors ((name 'Math-ODE-DanielUber.3' message 'added dostep:time:stepSize: to Explicit Stepper.' id '22698f56-b98a-42f8-aa9a-a5ebd7040fba' date '22 May 2012' time '11:00:33.138 am' author 'DanielUber' ancestors ((name 'Math-ODE-DanielUber.2' message 'added Stepper instance side order method' id '1985fcfd-5303-402a-9827-079a288c913c' date '22 May 2012' time '10:28:29.012 am' author 'DanielUber' ancestors ((name 'Math-ODE-DanielUber.1' message 'adding tests' id 'b3f035a5-9b7e-4620-82d1-01b71791d425' date '22 May 2012' time '10:22:15.344 am' author 'DanielUber' ancestors () stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())
(name 'Math-ODE-NataliaMoskovchuk.17' message 'Added trapezoidal rule, which is an implicit second-order method' id 'e857e614-c6b9-4138-861e-5be80be2b582' date '9 July 2013' time '12:14:19.35 am' author 'NataliaMoskovchuk' ancestors ((name 'Math-ODE-NataliaMoskovchuk.16' message 'Moved methods block:, block and x:t: to ODESystem. Added Beckward Euler Method with prediction made by forward Euler' id '6610aff6-40af-417d-9363-af41bd4e797f' date '4 July 2013' time '12:29:10.73 am' author 'NataliaMoskovchuk' ancestors ((name 'Math-ODE-DanielUber.15' message 'added defaultBlock to ExplicitSolverSubscriber (subclass responsibility) and imported changes for MidPointStepper' id '66978cce-a604-40e8-afc8-82531a140d1e' date '21 April 2013' time '12:28:37.26 pm' author 'DanielUber' ancestors ((name 'Math-ODE-NataliaMoskovchuk.14' message 'Added Midpoint method.' id '59c6f104-472b-410e-b76e-e91d0882649d' date '21 April 2013' time '7:46:55.614 pm' author 'NataliaMoskovchuk' ancestors ((name 'Math-ODE-DanielUber.13' message 'Added Tableau Stepper' id 'f4b3152c-a11e-4910-a815-9acdb9bcc4fa' date '20 July 2012' time '1:04:14.247 pm' author 'DanielUber' ancestors ((name 'Math-ODE-DanielUber.12' message 'changes to Math-ODE' id '905b6525-b095-4a6c-84b4-6dc52a76d4ff' date '10 June 2012' time '10:52:11.954 am' author 'DanielUber' ancestors ((name 'Math-ODE-DanielUber.11' message 'added announcements/watchers to ODESolver ' id '42c431f9-2754-4d1d-b60f-5d5c011c4ade' date '8 June 2012' time '11:43:43.202 am' author 'DanielUber' ancestors ((name 'Math-ODE-DanielUber.10' message 'RungeKuttaStepper added. Corrected issue where ODESolver would overwrite stepper.' id 'aa5aa7b0-eb57-457f-a08a-f9971db062b3' date '29 May 2012' time '11:38:04.988 am' author 'DanielUber' ancestors ((name 'Math-ODE-DanielUber.9' message 'working copy' id '7356b953-4511-44c1-baed-671b73abdd00' date '29 May 2012' time '8:07:06.734 am' author 'DanielUber' ancestors ((name 'Math-ODE-DanielUber.8' message 'empty log message' id '5c0bc90a-2387-41bc-ab90-a88883002a50' date '23 May 2012' time '2:26:31.909 pm' author 'DanielUber' ancestors ((name 'Math-ODE-DanielUber.7' message 'added stepSize method to ODESolver to match documentation.' id '955dc50b-d09e-41cf-b8dd-f0ae03bc864f' date '22 May 2012' time '1:13:52.298 pm' author 'DanielUber' ancestors ((name 'Math-ODE-DanielUber.6' message 'added classes from odeint-v2. Need to flush out methods.' id 'ff724335-5ab4-435c-8c05-59aba765771b' date '22 May 2012' time '1:08:22.878 pm' author 'DanielUber' ancestors ((name 'Math-ODE-DanielUber.5' message 'removed stepSize method' id 'e61dae0a-b3ed-4cdb-a664-339a0f9b5b1e' date '22 May 2012' time '12:19:42.946 pm' author 'DanielUber' ancestors ((name 'Math-ODE-DanielUber.4' message 'added ODESolver. Need to seriously refactor this.' id '571a4c4d-eaf0-4e41-86c4-759345442aaa' date '22 May 2012' time '12:00:41.72 pm' author 'DanielUber' ancestors ((name 'Math-ODE-DanielUber.3' message 'added dostep:time:stepSize: to Explicit Stepper.' id '22698f56-b98a-42f8-aa9a-a5ebd7040fba' date '22 May 2012' time '11:00:33.138 am' author 'DanielUber' ancestors ((name 'Math-ODE-DanielUber.2' message 'added Stepper instance side order method' id '1985fcfd-5303-402a-9827-079a288c913c' date '22 May 2012' time '10:28:29.012 am' author 'DanielUber' ancestors ((name 'Math-ODE-DanielUber.1' message 'adding tests' id 'b3f035a5-9b7e-4620-82d1-01b71791d425' date '22 May 2012' time '10:22:15.344 am' author 'DanielUber' ancestors () stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
as yet unclassified
testDoStepTime
"this is identical to testDoStepTimeStepSize except dt is stored."
| stepper sys dt |
sys := ImplicitSystem block: [:x :t | x * t].
stepper := ImplicitStepper onSystem: sys.
dt := 0.1.
stepper stepSize: dt.
self should: [stepper stepSize = dt].
self should: [(stepper doStep: 0 time: 10) = 0 ].
self should: [(stepper doStep: 10 time: 0 stepSize: 1) = 10 ].

"stepSize parameter changes the stored stepSize"
self should: [(stepper stepSize = 1)].

self should: [(stepper doStep: 1 time: 1) = 2].
self should: [(stepper doStep: 10 time: 1 stepSize: 0.2) = 12.0].
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,5 @@
"class" : {
},
"instance" : {
"testDoStepTime" : "NataliaMoskovchuk 7/9/2013 00:09",
"testDoStepTimeStepSize" : "NataliaMoskovchuk 7/3/2013 23:22" } }
Empty file.
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
as yet unclassified
testDoStepTime
"this is identical to testDoStepTimeStepSize except dt is stored."
| stepper sys dt |
sys := ImplicitSystem block: [:x :t | x * t].
stepper := ImplicitStepper onSystem: sys.
dt := 0.1.
stepper stepSize: dt.
self should: [stepper stepSize = dt].
self should: [(stepper doStep: 0 time: 10) = 0 ].
self should: [(stepper doStep: 10 time: 0 stepSize: 1) = 10 ].

"stepSize parameter changes the stored stepSize"
self should: [(stepper stepSize = 1)].

self should: [(stepper doStep: 1 time: 1) = 2].
self should: [(stepper doStep: 10 time: 1 stepSize: 0.2) = 12.0].
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
as yet unclassified
testDoStepTime1
"this is identical to testDoStepTimeStepSize except dt is stored."
| stepper sys dt |
sys := ImplicitSystem block: [:x :t | 3 * t negated exp - (0.4 * x)].
stepper := ImplicitStepper onSystem: sys.
dt := 0.1.
stepper stepSize: dt.
self should: [stepper stepSize = dt].
self should: [(stepper doStep: 0 time: 10) = 1.3619978928745448e-5 ].
self should: [(stepper doStep: 10 time: 0 stepSize: 1) = 9.0 ].

"stepSize parameter changes the stored stepSize"

self should: [(stepper doStep: 5 time: 0 stepSize: 1.5) = 6.5].
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
as yet unclassified
testDoStepTimeStepSize
| stepper sys dt |
sys := ImplicitSystem block: [:x :t | t sin].
stepper := ImplicitStepper onSystem: sys.
dt := 0.1.
self should: [(stepper doStep: 0 time: 10 stepSize: dt) = -0.05440211108893698 ].
self should: [(stepper doStep: 10 time: 0 stepSize: dt) = 10.0 ].
self should: [(stepper doStep: 1 time: 1 stepSize: dt) =1.0841470984807897].
self should: [(stepper doStep: 10 time: 1 stepSize: dt) = 10.08414709848079].
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
as yet unclassified
testDoStepTimeStepSize1
| stepper sys dt |
sys := ImplicitSystem block: [:x :t | x * t].
stepper := ImplicitStepper onSystem: sys.
dt := 0.1.
self should: [(stepper doStep: 0 time: 10 stepSize: dt) = 0.0 ].
self should: [(stepper doStep: 10 time: 0 stepSize: dt) = 10.0 ].
self should: [(stepper doStep: 1 time: 1 stepSize: dt) = 1.1].
self should: [(stepper doStep: 10 time: 1 stepSize: dt) = 11.0].
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
as yet unclassified
testDoStepTimeStepSize2
| stepper sys dt |
sys := ImplicitSystem block: [:x :t | 3 * t negated exp - (0.4 * x)].
stepper := ImplicitStepper onSystem: sys.
dt := 0.1.
self should: [(stepper doStep: 1 time: 1 stepSize: dt) = 1.0703638323514326].
self should: [(stepper doStep: 10 time: 1 stepSize: dt) = 9.710363832351433].
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
as yet unclassified
testOrderIsTwo
self should: [TrapezoidStepper order = 2]
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
{
"class" : {
},
"instance" : {
"testDoStepTime" : "NataliaMoskovchuk 7/9/2013 00:07",
"testDoStepTime1" : "NataliaMoskovchuk 7/9/2013 00:08",
"testDoStepTimeStepSize" : "NataliaMoskovchuk 7/9/2013 00:08",
"testDoStepTimeStepSize1" : "NataliaMoskovchuk 7/9/2013 00:08",
"testDoStepTimeStepSize2" : "NataliaMoskovchuk 7/9/2013 00:09",
"testOrderIsTwo" : "NataliaMoskovchuk 7/9/2013 00:09" } }
14 changes: 14 additions & 0 deletions Math-ODETests.package/TrapezoidStepperTest.class/properties.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
{
"category" : "Math-ODETests",
"classinstvars" : [
],
"classvars" : [
],
"commentStamp" : "",
"instvars" : [
],
"name" : "TrapezoidStepperTest",
"pools" : [
],
"super" : "TestCase",
"type" : "normal" }
Loading

0 comments on commit a251e55

Please sign in to comment.