Example 2: Solve a System of Nonlinear Equations with Logging
A system of nonlinear equations is solved with reduced accuracy and logging enabled.
import com.imsl.math.*;
import java.util.logging.*;
public class ZeroSystemEx2 {
public static void main(String args[]) throws com.imsl.IMSLException {
ZeroSystem.Function fcn = new ZeroSystem.Function() {
public void f(double x[], double f[]) {
f[0] = 0.5 * x[0] + x[1] + 0.5 * x[2] - x[5] / x[6];
f[1] = x[2] + x[3] + 2 * x[4] - 2.0 / x[6];
f[2] = x[0] + x[1] + x[4] - 1 / x[6];
f[3] = -28837 * x[0] - 139009 * x[1] - 78213 * x[2] + 18927 *
x[3] + 8427 * x[4] + 13492 / x[6] - 10690 * x[5] / x[6];
f[4] = x[0] + x[1] + x[2] + x[3] + x[4] - 1;
f[5] = 400 * x[0] * x[3] * x[3] * x[3] - 178370.0 * x[2] * x[4];
f[6] = x[0] * x[2] - 2.6058 * x[1] * x[3];
}
};
ZeroSystem zf = new ZeroSystem(7);
zf.setRelativeError(1e-2); // reduced accuracy
double guess[] = {0.5, 0.0, 0.0, 0.5, 0.0, 0.5, 2.0};
zf.setGuess(guess);
Logger logger = zf.getLogger();
ConsoleHandler ch = new ConsoleHandler();
ch.setLevel(Level.ALL); // default ConsoleHandler Level is INFO
logger.setLevel(Level.FINER);
logger.addHandler(ch);
ch.setFormatter(new com.imsl.IMSLFormatter());
new PrintMatrix("zeros").print(zf.solve(fcn));
}
}
Output
Iteration 1
Current Solution
0 0.5
1 0
2 0
3 0.5
4 0
5 0.5
6 2
Convergence if 0.2143059349437466 <= 0.02179449471770337
Convergence if 881.8545798486278 == 0.0
Convergence if 0.4286118698874933 <= 0.023714058983732928
Convergence if 62.20236343524046 == 0.0
Iteration 2
Current Solution
0 0.4519416338243868
1 0.00047570035964456
2 0.00811462449691682
3 0.5413220960737729
4 -0.00707517903874563
5 0.5209316770542504
6 2.20336087353378
Convergence if 0.21430593494374664 <= 0.023714058983732928
Convergence if 62.20236343524046 == 0.0
Convergence if 0.21430593494374664 <= 0.025668928384900824
Convergence if 48.631150262832776 == 0.0
Iteration 3
Current Solution
0 0.4103556836647792
1 0.00345389046504245
2 0.0205011507011974
3 0.5643329875514621
4 -0.00193459468156145
5 0.5357476651118313
6 2.4113510334391686
Convergence if 0.10715296747187332 <= 0.025668928384900824
Convergence if 48.631150262832776 == 0.0
Convergence if 0.21430593494374667 <= 0.026655240629937994
Convergence if 24.594369376894957 == 0.0
Iteration 4
Current Solution
0 0.38976301357761567
1 0.00475347250310963
2 0.02636818944534906
3 0.5751249696426907
4 0.00124115547252234
5 0.5418663859482151
6 2.5155508333834984
Convergence if 0.10715296747187333 <= 0.026655240629937994
Convergence if 24.594369376894957 == 0.0
Convergence if 0.2143059349437467 <= 0.027655165558489504
Convergence if 11.23333567341594 == 0.0
Iteration 5
Current Solution
0 0.37141787401480864
1 0.00596373459917273
2 0.03176913111146456
3 0.5853405218780866
4 0.00345206419996186
5 0.5483732628042493
6 2.620255151899655
Convergence if 0.10715296747187335 <= 0.027655165558489504
Convergence if 11.23333567341594 == 0.0
Convergence if 0.21430593494374675 <= 0.028667286402919635
Convergence if 4.273723534011024 == 0.0
Iteration 6
Current Solution
0 0.35522919183046353
1 0.00699109092408178
2 0.03660354056250206
3 0.5951581971633527
4 0.00460693872783803
5 0.5557202116250662
6 2.725343495169716
Convergence if 0.10715296747187338 <= 0.028667286402919635
Convergence if 4.273723534011024 == 0.0
Convergence if 0.05357648373593669 <= 0.028667286402919635
Convergence if 4.273723534011024 == 0.0
Iteration 6
Current Solution
0 0.35522919183046353
1 0.00699109092408178
2 0.03660354056250206
3 0.5951581971633527
4 0.00460693872783803
5 0.5557202116250662
6 2.725343495169716
Convergence if 0.10715296747187338 <= 0.02917820821842807
Convergence if 1.3397448169540218 == 0.0
Iteration 7
Current Solution
0 0.3478531575077773
1 0.00752847153174577
2 0.03866774311942223
3 0.6004623965959569
4 0.00437003290309475
5 0.5601127012361977
6 2.777917247138637
Convergence if 0.05357648373593669 <= 0.02917820821842807
Convergence if 1.3397448169540218 == 0.0
Convergence if 0.05357648373593669 <= 0.02969087049889735
Convergence if 1.2190150551287604 == 0.0
Iteration 8
Current Solution
0 0.3410446926772013
1 0.0080070341885894
2 0.04065623471212016
3 0.6052985736893154
4 0.00418754444673453
5 0.564491500544133
6 2.830617394205158
Convergence if 0.026788241867968344 <= 0.02969087049889735
Convergence if 1.2190150551287604 == 0.0
zeros
0
0 0.341
1 0.008
2 0.041
3 0.605
4 0.004
5 0.564
6 2.831
Link to Java source.