数值分析课程设计
- 格式:docx
- 大小:17.76 KB
- 文档页数:3
1 数值分析课程设计
一、题目描述
在本次数值分析课程设计中,我们需要实现下列内容:
给定一个函数 𝑓(𝑥),任取一个初值 𝑥0,使用牛顿法求出 𝑓(𝑥)=0 的一个根。
二、算法实现
在数值计算中,牛顿法 (Newton’s method) 是一种迭代算法,可以快速地求解方程的数值解,对于一般的实数函数,牛顿法可以用来求方程 𝑓(𝑥)=0 的根。
设 𝑥𝑛 是 𝑓(𝑥) 的根的一个近似值,𝑦=𝑓(𝑥𝑛) 是对应的函数值,则用 𝑓(𝑥)
的一阶泰勒展开式
$$ f(x) \\approx f(x_n)+f'(x_n)(x-x_n) $$
且令上式等于零,得到牛顿迭代公式:
$$ x_{n+1}=x_n-\\frac{f(x_n)}{f'(x_n)} $$
若 𝑥0 是 𝑓(𝑥) 的一个根的初始近似值,则
$$ x_{n+1}=x_n-\\frac{f(x_n)}{f'(x_n)}, \\ n=0,1,2,\\cdots $$
是迭代序列,如果 $\\lim\\limits_{n\\rightarrow \\infty}x_n=\\alpha$,且 $f(\\alpha)=0$,则 $\\alpha$ 是方程的一个根。
三、实验步骤
1. 确定初始值 𝑥0,计算 𝑓(𝑥0) 和 𝑓′(𝑥0)。
2. 按照牛顿法迭代公式计算 𝑥𝑛+1。
3. 如果满足指定的条件,则停止迭代,并输出 𝑥𝑛+1。 2 4. 否则,返回第二步迭代计算 𝑥𝑛+2,直至满足指定的条件。
四、实验代码
def newton_method(f, df, x0, eps=1e-8, max_iter=1000):
'''
利用牛顿法求解非线性方程f(x)=0的根。
:param f: 函数
:param df: 导函数
:param x0: 初值
:param eps: 容差
:param max_iter: 最大迭代次数
:return:近似解
'''
n = 1
while True:
x1 = x0 - f(x0) / df(x0)
if abs(x1 - x0) < eps or n > max_iter:
return x1
x0 = x1
n += 1
五、实验结果
我们使用上述实现的牛顿法来解决如下问题:
$$ f(x) = x^2-3, \\ x_0=2 $$
则 𝑓′(𝑥)=2𝑥。运行代码,得到如下结果:
```python f = lambda x: x ** 2 - 3 df = lambda x: 2 * x
x0 = 2 eps = 1e-8 max_iter = 1000
result = newton_method(f, df, x0, eps, max_iter) 3 print(