1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.apache.commons.math4.legacy.analysis.polynomials;
18
19 import org.apache.commons.math4.legacy.exception.MathIllegalArgumentException;
20 import org.junit.Assert;
21 import org.junit.Test;
22
23
24
25
26
27
28
29
30
31 public final class PolynomialFunctionLagrangeFormTest {
32
33
34
35
36 @Test
37 public void testLinearFunction() {
38 PolynomialFunctionLagrangeForm p;
39 double[] c;
40 double z;
41 double expected;
42 double result;
43 double tolerance = 1E-12;
44
45
46 double x[] = { 0.0, 3.0 };
47 double y[] = { -4.0, 0.5 };
48 p = new PolynomialFunctionLagrangeForm(x, y);
49
50 z = 2.0; expected = -1.0; result = p.value(z);
51 Assert.assertEquals(expected, result, tolerance);
52
53 z = 4.5; expected = 2.75; result = p.value(z);
54 Assert.assertEquals(expected, result, tolerance);
55
56 z = 6.0; expected = 5.0; result = p.value(z);
57 Assert.assertEquals(expected, result, tolerance);
58
59 Assert.assertEquals(1, p.degree());
60
61 c = p.getCoefficients();
62 Assert.assertEquals(2, c.length);
63 Assert.assertEquals(-4.0, c[0], tolerance);
64 Assert.assertEquals(1.5, c[1], tolerance);
65 }
66
67
68
69
70 @Test
71 public void testQuadraticFunction() {
72 PolynomialFunctionLagrangeForm p;
73 double[] c;
74 double z;
75 double expected;
76 double result;
77 double tolerance = 1E-12;
78
79
80 double x[] = { 0.0, -1.0, 0.5 };
81 double y[] = { -3.0, -6.0, 0.0 };
82 p = new PolynomialFunctionLagrangeForm(x, y);
83
84 z = 1.0; expected = 4.0; result = p.value(z);
85 Assert.assertEquals(expected, result, tolerance);
86
87 z = 2.5; expected = 22.0; result = p.value(z);
88 Assert.assertEquals(expected, result, tolerance);
89
90 z = -2.0; expected = -5.0; result = p.value(z);
91 Assert.assertEquals(expected, result, tolerance);
92
93 Assert.assertEquals(2, p.degree());
94
95 c = p.getCoefficients();
96 Assert.assertEquals(3, c.length);
97 Assert.assertEquals(-3.0, c[0], tolerance);
98 Assert.assertEquals(5.0, c[1], tolerance);
99 Assert.assertEquals(2.0, c[2], tolerance);
100 }
101
102
103
104
105 @Test
106 public void testQuinticFunction() {
107 PolynomialFunctionLagrangeForm p;
108 double[] c;
109 double z;
110 double expected;
111 double result;
112 double tolerance = 1E-12;
113
114
115 double x[] = { 1.0, -1.0, 2.0, 3.0, -3.0, 0.5 };
116 double y[] = { 0.0, 0.0, -24.0, 0.0, -144.0, 2.34375 };
117 p = new PolynomialFunctionLagrangeForm(x, y);
118
119 z = 0.0; expected = 0.0; result = p.value(z);
120 Assert.assertEquals(expected, result, tolerance);
121
122 z = -2.0; expected = 0.0; result = p.value(z);
123 Assert.assertEquals(expected, result, tolerance);
124
125 z = 4.0; expected = 360.0; result = p.value(z);
126 Assert.assertEquals(expected, result, tolerance);
127
128 Assert.assertEquals(5, p.degree());
129
130 c = p.getCoefficients();
131 Assert.assertEquals(6, c.length);
132 Assert.assertEquals(0.0, c[0], tolerance);
133 Assert.assertEquals(6.0, c[1], tolerance);
134 Assert.assertEquals(1.0, c[2], tolerance);
135 Assert.assertEquals(-7.0, c[3], tolerance);
136 Assert.assertEquals(-1.0, c[4], tolerance);
137 Assert.assertEquals(1.0, c[5], tolerance);
138 }
139
140
141
142
143 @Test
144 public void testParameters() {
145
146 try {
147
148 double x[] = { 1.0 };
149 double y[] = { 2.0 };
150 new PolynomialFunctionLagrangeForm(x, y);
151 Assert.fail("Expecting MathIllegalArgumentException - bad input array length");
152 } catch (MathIllegalArgumentException ex) {
153
154 }
155 try {
156
157 double x[] = { 1.0, 2.0, 3.0, 4.0 };
158 double y[] = { 0.0, -4.0, -24.0 };
159 new PolynomialFunctionLagrangeForm(x, y);
160 Assert.fail("Expecting MathIllegalArgumentException - mismatch input arrays");
161 } catch (MathIllegalArgumentException ex) {
162
163 }
164 }
165 }