[jira] [Updated] (MATH-705) DormandPrince853 integrator leads to revisiting of state events
[ https://issues.apache.org/jira/browse/MATH-705?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ] Luc Maisonobe updated MATH-705: --- Fix Version/s: 3.0 Assignee: Luc Maisonobe DormandPrince853 integrator leads to revisiting of state events --- Key: MATH-705 URL: https://issues.apache.org/jira/browse/MATH-705 Project: Commons Math Issue Type: Bug Affects Versions: 3.0 Environment: Commons Math trunk, Java 6, Linux Reporter: Dennis Hendriks Assignee: Luc Maisonobe Fix For: 3.0 Attachments: ReappearingEventTest.java, ReappearingEventTest.out See the attached ReappearingEventTest.java. It has two unit tests, which use either the DormandPrince853 or the GraggBulirschStoer integrator, on the same ODE problem. It is a problem starting at time 6.0, with 7 variables, and 1 state event. The state event was previously detected at time 6.0, which is why I start there now. I provide and end time of 10.0. Since I start at the state event, I expect to integrate all the way to the end (10.0). For the GraggBulirschStoer this is what happens (see attached ReappearingEventTest.out). For the DormandPrince853Integerator, it detects a state event and stops integration at 6.002. I think the problem becomes clear by looking at the output in ReappearingEventTest.out, in particular these lines: {noformat} computeDerivatives: t=6.0 y=[2.0 , 2.0 , 2.0 , 4.0 , 2.0 , 7.0 , 15.0] (...) g : t=6.0 y=[1.9996 , 1.9996 , 1.9996 , 4.0 , 1.9996 , 7.0 , 14.998 ] (...) final result : t=6.002y=[2.0013 , 2.0013 , 2.0013 , 4.002 , 2.0013 , 7.002 , 15.0] {noformat} The initial value of the last variable in y, the one that the state event refers to, is 15.0. However, the first time it is given to the g function, the value is 14.998. This value is less than 15, and more importantly, it is a value from the past (as all functions are increasing), *before* the state event. This makes that the state event re-appears immediately, and integration stops at 6.002 because of the detected state event. I find it puzzling that for the DormandPrince853Integerator the y array that is given to the first evaluation of the g function, has different values than the y array that is the input to the problem. For GraggBulirschStoer is can be seen that the y arrays have identical values. -- This message is automatically generated by JIRA. If you think it was sent incorrectly, please contact your JIRA administrators: https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa For more information on JIRA, see: http://www.atlassian.com/software/jira
[jira] [Updated] (MATH-705) DormandPrince853 integrator leads to revisiting of state events
[ https://issues.apache.org/jira/browse/MATH-705?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ] Dennis Hendriks updated MATH-705: - Attachment: ReappearingEventTest.out ReappearingEventTest.java The Java unit tests that show the problem, and the console output they give, as described in the issue description. DormandPrince853 integrator leads to revisiting of state events --- Key: MATH-705 URL: https://issues.apache.org/jira/browse/MATH-705 Project: Commons Math Issue Type: Bug Affects Versions: 3.0 Environment: Commons Math trunk, Java 6, Linux Reporter: Dennis Hendriks Attachments: ReappearingEventTest.java, ReappearingEventTest.out See the attached ReappearingEventTest.java. It has two unit tests, which use either the DormandPrince853 or the GraggBulirschStoer integrator, on the same ODE problem. It is a problem starting at time 6.0, with 7 variables, and 1 state event. The state event was previously detected at time 6.0, which is why I start there now. I provide and end time of 10.0. Since I start at the state event, I expect to integrate all the way to the end (10.0). For the GraggBulirschStoer this is what happens (see attached ReappearingEventTest.out). For the DormandPrince853Integerator, it detects a state event and stops integration at 6.002. I think the problem becomes clear by looking at the output in ReappearingEventTest.out, in particular these lines: {noformat} computeDerivatives: t=6.0 y=[2.0 , 2.0 , 2.0 , 4.0 , 2.0 , 7.0 , 15.0] (...) g : t=6.0 y=[1.9996 , 1.9996 , 1.9996 , 4.0 , 1.9996 , 7.0 , 14.998 ] (...) final result : t=6.002y=[2.0013 , 2.0013 , 2.0013 , 4.002 , 2.0013 , 7.002 , 15.0] {noformat} The initial value of the last variable in y, the one that the state event refers to, is 15.0. However, the first time it is given to the g function, the value is 14.998. This value is less than 15, and more importantly, it is a value from the past (as all functions are increasing), *before* the state event. This makes that the state event re-appears immediately, and integration stops at 6.002 because of the detected state event. I find it puzzling that for the DormandPrince853Integerator the y array that is given to the first evaluation of the g function, has different values than the y array that is the input to the problem. For GraggBulirschStoer is can be seen that the y arrays have identical values. -- This message is automatically generated by JIRA. If you think it was sent incorrectly, please contact your JIRA administrators: https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa For more information on JIRA, see: http://www.atlassian.com/software/jira