已知f(x)=0f(x)=0f(x)=0,求x.
1.二分法求根
要求:f(x)f(x)f(x)连续,且在[a,b]上有根
优点:简单可靠
缺点:不能求复根和偶重根
解决:选用一个合适的步长h对[a,b]进行扫描搜索,当发现哪个子区间有根时再用二分法求其中之根。
2.牛顿迭代法
优点:具有平方收敛的速度
缺点:
- 重根情形下为局部线性收敛
- 计算量大(除了要计算函数值还要计算导数值)
- 选取的初始值要靠近精确解(解决:先用二分法求出足够精度的x0x_0x0再用牛顿法迭代到收敛为止)
补充知识
1、泰勒公式
将一个在x=x0x=x_0x=x0处具有n阶导数的函数f(x)f(x)f(x)利用关于(x−x0)(x-x_0)(x−x0)的n次多项式来逼近函数的方法。
f(x)=∑i=0nf(i)(x0)i!(x−x0)i+Rn(x)f(x)=\sum_{i=0}^n\frac{f^{(i)}(x_0)}{i!}(x-x_0)^i+R_n(x)f(x)=i=0∑ni!f(i)(x0)(x−x0)i+Rn(x)
其中f(i)(x)f^{(i)}(x)f(i)(x)代表xxx的iii阶导数,剩余的Rn(x)R_n(x)Rn(x)是泰勒公式的余项,是(x−x0)n(x-x_0)^n(x−x0)n的高阶无穷小。
2、牛顿法对方程重根的处理
- 已知重根的重数m(m>1),利用m构造新的迭代公式
xk+1=xk−mf(xk)f′(xk)(k=0,1,...)x_{k+1}=x_k-m\frac{f(x_k)}{f^{'}(x_k)}\quad (k=0,1,...)xk+1=xk−mf′(xk)f(xk)(k=0,1,...) - 未知重根的重数,新迭代公式是
xk+1=xk−f(xk)f′(xk)[f′(xk)]2−f(xk)f′′(xk)(k=0,1,...)x_{k+1}=x_k-\frac{f(x_k)f^{'}(x_k)}{[f^{'}(x_k)]^2-f(x_k)f^{''}(x_k)}\quad (k=0,1,...)xk+1=xk−[f′(xk)]2−f(xk)f′′(xk)f(xk)f′(xk)(k=0,1,...)
缺点:需要求fff的2阶导数,计算量大,应用前提是f(x)f(x)f(x)要简单。