CS 1073 Introductory Programming
|
| Bisection Method |
|---|
public class Bisection {
// f: a function to solve for
public double f(double x) {
return 2 - x*x;
}
// findRoot: the root of a function
public double findRoot(double lo, double hi) {
double mid, fLo, fHi, fMid;
do {
mid = (lo + hi)/2;
System.out.println("lo: " + lo +
",\t hi: " + hi);
fLo = f(lo); fHi = f(hi); fMid = f(mid);
System.out.println(" mid: " + mid +
",\tfMid: " + fMid);
if (fMid < 0) hi = mid;
else lo = mid;
} while (hi - lo > 1.0E-15);
return mid;
}
public static void main(String[] args) {
Bisection b = new Bisection();
double root = b.findRoot(0, 2);
System.out.println("Root: " + root);
System.out.println("Sqrt(2): " + Math.sqrt(2));
}
}
|
Here are results of a run.
lo: 0.0, hi: 2.0
mid: 1.0, fMid: 1.0
lo: 1.0, hi: 2.0
mid: 1.5, fMid: -0.25
lo: 1.0, hi: 1.5
mid: 1.25, fMid: 0.4375
lo: 1.25, hi: 1.5
mid: 1.375, fMid: 0.109375
lo: 1.375, hi: 1.5
mid: 1.4375, fMid: -0.06640625
lo: 1.375, hi: 1.4375
mid: 1.40625, fMid: 0.0224609375
lo: 1.40625, hi: 1.4375
mid: 1.421875, fMid: -0.021728515625
lo: 1.40625, hi: 1.421875
mid: 1.4140625, fMid: 4.2724609375E-4
lo: 1.4140625, hi: 1.421875
mid: 1.41796875, fMid: -0.0106353759765625
lo: 1.4140625, hi: 1.41796875
mid: 1.416015625, fMid: -0.005100250244140625
lo: 1.4140625, hi: 1.416015625
mid: 1.4150390625, fMid: -0.0023355484008789062
lo: 1.4140625, hi: 1.4150390625
mid: 1.41455078125, fMid: -9.539127349853516E-4
lo: 1.4140625, hi: 1.41455078125
mid: 1.414306640625, fMid: -2.632737159729004E-4
lo: 1.4140625, hi: 1.414306640625
mid: 1.4141845703125, fMid: 8.200109004974365E-5
lo: 1.4141845703125, hi: 1.414306640625
mid: 1.41424560546875, fMid: -9.063258767127991E-5
lo: 1.4141845703125, hi: 1.41424560546875
mid: 1.414215087890625, fMid: -4.314817488193512E-6
lo: 1.4141845703125, hi: 1.414215087890625
mid: 1.4141998291015625, fMid: 3.8843369111418724E-5
lo: 1.4141998291015625, hi: 1.414215087890625
mid: 1.4142074584960938, fMid: 1.726433401927352E-5
lo: 1.4142074584960938, hi: 1.414215087890625
mid: 1.4142112731933594, fMid: 6.474772817455232E-6
lo: 1.4142112731933594, hi: 1.414215087890625
mid: 1.4142131805419922, fMid: 1.0799813026096672E-6
lo: 1.4142131805419922, hi: 1.414215087890625
mid: 1.4142141342163086, fMid: -1.6174171832972206E-6
lo: 1.4142131805419922, hi: 1.4142141342163086
mid: 1.4142136573791504, fMid: -2.687177129701013E-7
lo: 1.4142131805419922, hi: 1.4142136573791504
mid: 1.4142134189605713, fMid: 4.056318516632018E-7
lo: 1.4142134189605713, hi: 1.4142136573791504
mid: 1.4142135381698608, fMid: 6.845708355740499E-8
lo: 1.4142135381698608, hi: 1.4142136573791504
mid: 1.4142135977745056, fMid: -1.0013031115363447E-7
lo: 1.4142135381698608, hi: 1.4142135977745056
mid: 1.4142135679721832, fMid: -1.583661290993632E-8
lo: 1.4142135381698608, hi: 1.4142135679721832
mid: 1.414213553071022, fMid: 2.6310235545778937E-8
lo: 1.414213553071022, hi: 1.4142135679721832
mid: 1.4142135605216026, fMid: 5.236811428943611E-9
lo: 1.4142135605216026, hi: 1.4142135679721832
mid: 1.414213564246893, fMid: -5.29990096254096E-9
lo: 1.4142135605216026, hi: 1.414213564246893
mid: 1.4142135623842478, fMid: -3.154454475406965E-11
lo: 1.4142135605216026, hi: 1.4142135623842478
mid: 1.4142135614529252, fMid: 2.6026334420947705E-9
lo: 1.4142135614529252, hi: 1.4142135623842478
mid: 1.4142135619185865, fMid: 1.285544337648048E-9
lo: 1.4142135619185865, hi: 1.4142135623842478
mid: 1.4142135621514171, fMid: 6.269997854246867E-10
lo: 1.4142135621514171, hi: 1.4142135623842478
mid: 1.4142135622678325, fMid: 2.9772762033530853E-10
lo: 1.4142135622678325, hi: 1.4142135623842478
mid: 1.4142135623260401, fMid: 1.3309153779061944E-10
lo: 1.4142135623260401, hi: 1.4142135623842478
mid: 1.414213562355144, fMid: 5.0773385495972434E-11
lo: 1.414213562355144, hi: 1.4142135623842478
mid: 1.4142135623696959, fMid: 9.61430934864893E-12
lo: 1.4142135623696959, hi: 1.4142135623842478
mid: 1.4142135623769718, fMid: -1.0965006680407896E-11
lo: 1.4142135623696959, hi: 1.4142135623769718
mid: 1.4142135623733338, fMid: -6.754596881819452E-13
lo: 1.4142135623696959, hi: 1.4142135623733338
mid: 1.4142135623715149, fMid: 4.469535852535955E-12
lo: 1.4142135623715149, hi: 1.4142135623733338
mid: 1.4142135623724243, fMid: 1.8969270598745425E-12
lo: 1.4142135623724243, hi: 1.4142135623733338
mid: 1.414213562372879, fMid: 6.108447081487611E-13
lo: 1.414213562372879, hi: 1.4142135623733338
mid: 1.4142135623731065, fMid: -3.241851231905457E-14
lo: 1.414213562372879, hi: 1.4142135623731065
mid: 1.4142135623729928, fMid: 2.893241202173158E-13
lo: 1.4142135623729928, hi: 1.4142135623731065
mid: 1.4142135623730496, fMid: 1.2856382625159313E-13
lo: 1.4142135623730496, hi: 1.4142135623731065
mid: 1.414213562373078, fMid: 4.8183679268731794E-14
lo: 1.414213562373078, hi: 1.4142135623731065
mid: 1.4142135623730923, fMid: 7.993605777301127E-15
lo: 1.4142135623730923, hi: 1.4142135623731065
mid: 1.4142135623730994, fMid: -1.199040866595169E-14
lo: 1.4142135623730923, hi: 1.4142135623730994
mid: 1.4142135623730958, fMid: -2.220446049250313E-15
lo: 1.4142135623730923, hi: 1.4142135623730958
mid: 1.414213562373094, fMid: 2.886579864025407E-15
lo: 1.414213562373094, hi: 1.4142135623730958
mid: 1.414213562373095, fMid: 4.440892098500626E-16
Root: 1.414213562373095
Sqrt(2): 1.4142135623730951