1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.apache.commons.math.analysis;
18
19
20 import org.apache.commons.math.MathException;
21
22
23 import junit.framework.TestCase;
24
25
26
27
28
29
30
31 public final class PolynomialFunctionTest extends TestCase {
32
33
34 protected double tolerance = 1.0e-12;
35
36
37
38
39
40
41 public void testConstants() throws MathException {
42 double[] c = { 2.5 };
43 PolynomialFunction f = new PolynomialFunction( c );
44
45
46 assertEquals( f.value( 0.0), c[0], tolerance );
47 assertEquals( f.value( -1.0), c[0], tolerance );
48 assertEquals( f.value( -123.5), c[0], tolerance );
49 assertEquals( f.value( 3.0), c[0], tolerance );
50 assertEquals( f.value( 456.89), c[0], tolerance );
51
52 assertEquals(f.degree(), 0);
53 assertEquals(f.derivative().value(0), 0, tolerance);
54
55 assertEquals(f.polynomialDerivative().derivative().value(0), 0, tolerance);
56 }
57
58
59
60
61
62
63
64
65
66
67 public void testLinear() throws MathException {
68 double[] c = { -1.5, 3.0 };
69 PolynomialFunction f = new PolynomialFunction( c );
70
71
72 assertEquals( f.value( 0.0), c[0], tolerance );
73
74
75 assertEquals( -4.5, f.value( -1.0), tolerance );
76 assertEquals( -9.0, f.value( -2.5), tolerance );
77 assertEquals( 0.0, f.value( 0.5), tolerance );
78 assertEquals( 3.0, f.value( 1.5), tolerance );
79 assertEquals( 7.5, f.value( 3.0), tolerance );
80
81 assertEquals(f.degree(), 1);
82
83 assertEquals(f.polynomialDerivative().derivative().value(0), 0, tolerance);
84
85 }
86
87
88
89
90
91
92
93 public void testQuadratic() throws MathException {
94 double[] c = { -2.0, -3.0, 2.0 };
95 PolynomialFunction f = new PolynomialFunction( c );
96
97
98 assertEquals( f.value( 0.0), c[0], tolerance );
99
100
101 assertEquals( 0.0, f.value( -0.5), tolerance );
102 assertEquals( 0.0, f.value( 2.0), tolerance );
103 assertEquals( -2.0, f.value( 1.5), tolerance );
104 assertEquals( 7.0, f.value( -1.5), tolerance );
105 assertEquals( 265.5312, f.value( 12.34), tolerance );
106
107 }
108
109
110
111
112
113
114
115 public void testQuintic() throws MathException {
116 double[] c = { 0.0, 0.0, 15.0, -13.0, -3.0, 1.0 };
117 PolynomialFunction f = new PolynomialFunction( c );
118
119
120 assertEquals( f.value( 0.0), c[0], tolerance );
121
122
123 assertEquals( 0.0, f.value( 5.0), tolerance );
124 assertEquals( 0.0, f.value( 1.0), tolerance );
125 assertEquals( 0.0, f.value( -3.0), tolerance );
126 assertEquals( 54.84375, f.value( -1.5), tolerance );
127 assertEquals( -8.06637, f.value( 1.3), tolerance );
128
129 assertEquals(f.degree(), 5);
130
131 }
132
133
134
135
136
137
138
139
140
141 public void testfirstDerivativeComparison() throws MathException {
142 double[] f_coeff = { 3.0, 6.0, -2.0, 1.0 };
143 double[] g_coeff = { 6.0, -4.0, 3.0 };
144 double[] h_coeff = { -4.0, 6.0 };
145
146 PolynomialFunction f = new PolynomialFunction( f_coeff );
147 PolynomialFunction g = new PolynomialFunction( g_coeff );
148 PolynomialFunction h = new PolynomialFunction( h_coeff );
149
150
151 assertEquals( f.derivative().value(0.0), g.value(0.0), tolerance );
152 assertEquals( f.derivative().value(1.0), g.value(1.0), tolerance );
153 assertEquals( f.derivative().value(100.0), g.value(100.0), tolerance );
154 assertEquals( f.derivative().value(4.1), g.value(4.1), tolerance );
155 assertEquals( f.derivative().value(-3.25), g.value(-3.25), tolerance );
156
157
158 assertEquals( g.derivative().value(Math.PI), h.value(Math.PI), tolerance );
159 assertEquals( g.derivative().value(Math.E), h.value(Math.E), tolerance );
160
161 }
162
163 }