牛顿迭代法
作业已超过截止时间,您无法递交本题目。
一、题目描述
1.牛顿法背景知识
非线性方程求解问题可以描述为:求使得非线性方程\(f(x)=0\)的\(x\)。牛顿迭代法是求解非线性方程的最后一种重要方法。牛顿迭代法是一种在实数域和复数域上通过迭代计算求出非线性方程的数值解的方法。牛顿迭代法本质是用非线性函数\(f(x)\)的泰勒级数展开式的前几项作为它的线性近似表达式,将非线性函数线性化,求一个线性函数的近似解。下面讨论的\(f(x)\)即为需求解的线性函数。
牛顿迭代法也成为切线法,它的基本思想是:利用一个根的猜测值\(x_0\)作为初始近似值,过函数\(f(x)\)曲线上的\(f(x_0)\)点作切线交\(x\)轴于\(x_1\),曲线在\(f(x_0)\)点的斜率为:
\[f'(x_0)=f(x_0)/(x_0-x_1)\]
可得:
\[x_1=x_0-f(x_0)/f'(x_0)\]
重复上述过程,可得牛顿迭代公式:
\[x_{n+1}=x_n-f(x_n)/f'(x_n)\]
得到的\(x_(n+1)\)一次比一次更接近方程的根\(x^*\)。当两次求得的根满足精度\(η\)要求时,即
\[|x_{n+1}-x_n|<η\]
认为\(x_{n+1}\)时方程\(f(x)\)的近似解。
具体做法请参考《程序设计基础》P27的“牛顿迭代法”。
注意,根据vijos中的方程来做题!(不用书上的方程)
2.程序题目
使用牛顿法求方程:
\(x^3-20x^2-20x+a=0\)
在\(x_1=-5,x_2=5,x_3=20\)附近的根,要求的精度为\(10^{-6}\)
二、输入格式
输入为方程中常数: a (要求300<=a<=600)
(限制a的范围是为了保证方程有三个根)
三、输出格式
输出三个数:从小到大依次输出方程的三个根
样例
输入
400
输出
-4.47214
4.47214
20
注意!输出时无需设定数据精确度,直接使用cout即可,否则可能无法正确判分。
四、提示
本题中对 精确度的判断 可能需要用到绝对值
绝对值的实现方法一
使用冒号表达式:
(x1 - x0) > 0 ? (x1 - x0) : -(x1 - x0) < eps
绝对值的实现方法二
使用头文件:
#include<cmath>
然后使用fabs()函数:
fabs(x1 - x0) < eps