概念
设非线性方程 f(x)=0 的根为x*,增值寻根的基本思想是,从初值x_0开始,规定一个初步增长h来增值.令x_n+1 = x_n + h(n = 0, 1, 2……),同时计算 f(x_n+1) 在增值的时候可能遇到三种情况
(1) f(x_n+1) = 0 (2) f(x_n) * f(x_n+1) > 0 (3) f(x_n) * f(x_n+1) < 0
在(3)中,当 f(x) 连续时,f(x) = 0 在[x_n, x_n+1] 一定有根. 其中,x_n 和 x_n+1均可视为 x*的近似值。为过呢个精确近似值,为此再用增值寻根法把x_n作为新的初始近似值,同时缩小步长。
例题
用增值寻根法求方程的有根区间
代码
#include<iostream>
using namespace std;
double fun(double x){
return x*x*x + 4*x*x - 10;
}
int main(){
double x_0;
double h ;
cout << "please input x_0 and h" << endl;
cin >> x_0 >> h;
while(h>0.0005){//设置精度
while(true){
if(fun(x_0) == 0){//f(x_n+1) = 0
cout << x_0 << endl;
break;
}else if(fun(x_0) * fun(x_0+h) > 0){//f(x_n) * f(x_n+1) > 0
x_0 += h;
continue;
}else if(fun(x_0) * fun(x_0+h) < 0){//f(x_n) * f(x_n+1) <?0
cout <<"("<< x_0 << "," << x_0 + h << ")" << endl;
h /= 10;
break;
}
}
}
return 0;
}
运行结果