2
* Licensed to the Apache Software Foundation (ASF) under one or more
3
* contributor license agreements. See the NOTICE file distributed with
4
* this work for additional information regarding copyright ownership.
5
* The ASF licenses this file to You under the Apache License, Version 2.0
6
* (the "License"); you may not use this file except in compliance with
7
* the License. You may obtain a copy of the License at
9
* http://www.apache.org/licenses/LICENSE-2.0
11
* Unless required by applicable law or agreed to in writing, software
12
* distributed under the License is distributed on an "AS IS" BASIS,
13
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
* See the License for the specific language governing permissions and
15
* limitations under the License.
18
package org.apache.commons.math.ode;
21
* This class is used in the junit tests for the ODE integrators.
23
* <p>This specific problem is the following differential equation :
27
* when the initial condition is y(0) = -360, the solution of this
28
* equation degenerates to a simple quintic polynomial function :
30
* y (t) = 3x^5 - 15x^4 + 60x^3 - 180x^2 + 360x - 360
35
public class TestProblem6
36
extends TestProblemAbstract {
38
/** Serializable version identifier. */
39
private static final long serialVersionUID = 1353409119804352378L;
41
/** theoretical state */
47
public TestProblem6() {
49
double[] y0 = { -360.0 };
50
setInitialConditions(0.0, y0);
51
setFinalConditions(1.0);
52
double[] errorScale = { 1.0 };
53
setErrorScale(errorScale);
54
y = new double[y0.length];
59
* @param problem problem to copy
61
public TestProblem6(TestProblem6 problem) {
63
y = problem.y.clone();
67
public TestProblem6 copy() {
68
return new TestProblem6(this);
72
public void doComputeDerivatives(double t, double[] y, double[] yDot) {
74
// compute the derivatives
78
for (int i = 0; i < n; ++i) {
79
yDot[i] = 3 * t5 - y[i];
85
public double[] computeTheoreticalState(double t) {
86
for (int i = 0; i < n; ++i) {
87
y[i] = ((((3 * t - 15) * t + 60) * t - 180) * t + 360) * t - 360;