数值分析课程设计

  • 格式: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(