#include <bits/stdc++.h>
using namespace std;
// x^2 - 11 = 0
// 牛顿迭代法: x_{n+1} = x_n - f(x_n)/f'(x_n)
double Newton(double x = 3.0) {
cout << "牛顿迭代法:";
while (abs(x*x - 11.0) > 0.00001) {
x = x - (x*x - 11)/(2*x);
cout << setprecision(8) << x << " ";
}
cout << endl;
return x;
}
double GD(double x = 3.0) {
double r = 4;
cout << "二分迭代:";
while (abs(x*x - 11.0) > 0.00001) {
if (x*x < 11) x = x + r;
else x -= r;
r /= 2;
cout << setprecision(8) << x << " ";
}
cout << endl;
return x;
}
int main() {
GD(3.0);
Newton(3.0);
return 0;
}
运行结果:
二分迭代:7 5 4 3.5 3.25 3.375 3.3125 3.34375 3.328125 3.3203125 3.3164062 3.3183594 3.3173828 3.3168945 3.3166504 3.3165283 3.3165894 3.3166199 3.3166351 3.3166275 3.3166237
牛顿迭代法:3.3333333 3.3166667 3.3166248