1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 package org.hipparchus.optim.nonlinear.vector.leastsquares;
24
25 import org.hipparchus.exception.MathIllegalStateException;
26 import org.hipparchus.linear.QRDecomposer;
27 import org.hipparchus.optim.LocalizedOptimFormats;
28 import org.hipparchus.optim.SimpleVectorValueChecker;
29 import org.junit.jupiter.api.Test;
30
31 import java.io.IOException;
32
33 import static org.junit.jupiter.api.Assertions.assertEquals;
34 import static org.junit.jupiter.api.Assertions.assertThrows;
35 import static org.junit.jupiter.api.Assertions.fail;
36
37
38
39
40
41
42
43
44
45 public class GaussNewtonOptimizerWithQRNormalTest
46 extends AbstractLeastSquaresOptimizerAbstractTest {
47
48 @Override
49 public int getMaxIterations() {
50 return 1000;
51 }
52
53 @Override
54 public LeastSquaresOptimizer getOptimizer() {
55 return new GaussNewtonOptimizer(new QRDecomposer(1e-11), true);
56 }
57
58 @Override
59 @Test
60 public void testMoreEstimatedParametersUnsorted() {
61
62
63
64 try {
65 super.testMoreEstimatedParametersUnsorted();
66 } catch (MathIllegalStateException mise) {
67 assertEquals(LocalizedOptimFormats.UNABLE_TO_SOLVE_SINGULAR_PROBLEM, mise.getSpecifier());
68 }
69 }
70
71 @Test
72 void testMaxEvaluations() throws Exception {
73 try{
74 CircleVectorial circle = new CircleVectorial();
75 circle.addPoint( 30.0, 68.0);
76 circle.addPoint( 50.0, -6.0);
77 circle.addPoint(110.0, -20.0);
78 circle.addPoint( 35.0, 15.0);
79 circle.addPoint( 45.0, 97.0);
80
81 LeastSquaresProblem lsp = builder(circle)
82 .checkerPair(new SimpleVectorValueChecker(1e-30, 1e-30))
83 .maxIterations(Integer.MAX_VALUE)
84 .start(new double[]{98.680, 47.345})
85 .build();
86
87 optimizer.optimize(lsp);
88
89 customFail(optimizer);
90 }catch (MathIllegalStateException e){
91
92 }
93 }
94
95 @Override
96 @Test
97 public void testCircleFittingBadInit() {
98 try {
99
100
101
102 super.testCircleFittingBadInit();
103 } catch (MathIllegalStateException mise) {
104 assertEquals(LocalizedOptimFormats.UNABLE_TO_SOLVE_SINGULAR_PROBLEM, mise.getSpecifier());
105 }
106 }
107
108 @Override
109 @Test
110 public void testHahn1() throws IOException {
111 try {
112
113
114
115
116 super.testHahn1();
117 fail("Expected Exception with: " + optimizer);
118 } catch (MathIllegalStateException mise) {
119
120 }
121 }
122
123 @Override
124 @Test
125 public void testMoreEstimatedParametersSimple() {
126 assertThrows(MathIllegalStateException.class, () -> {
127
128 super.testMoreEstimatedParametersSimple();
129 });
130 }
131
132 }