牛顿法求解非线性方程

基础知识

  • [步骤1] 准备:选定初始近似值 x 0 x_0 x0,计算 f 0 = f ( x 0 ) , f 0 ′ = f ′ ( x 0 ) f_0=f(x_0),f_0'=f'(x_0) f0=f(x0),f0=f(x0)
  • [步骤2] 迭代:按公式:
    x 1 = x 0 − f 0 / f 0 ′ x_1=x_0-f_0/f_0' x1=x0f0/f0
    迭代一次,得到新的近似值 x 1 x_1 x1,计算 f 1 = f ( x 1 ) , f 1 ′ = f ( x 1 ) f_1=f(x_1),f_1'=f(x_1) f1=f(x1),f1=f(x1)
  • [步骤3]
    控制:如果 x 1 x_1 x1满足 ∣ δ ∣ < ε 1 |\delta|<\varepsilon_1 δ<ε1 ∣ δ ∣ < ε 2 |\delta|<\varepsilon_2 δ<ε2,则终止迭代,以 x 1 x_1 x1作为所求的根;否则转步骤4。此处 ε 1 , ε 2 \varepsilon_1,\varepsilon_2 ε1,ε2是允许误差,而
    δ = { ∣ x 1 − x 0 ∣ , ∣ x 1 ∣ < C ∣ x 1 − x 0 ∣ ∣ x 1 ∣ , ∣ x 1 ∣ ≥ C \delta= \left\{ \begin{aligned} |x_1-x_0|,|x_1|<C\\ \frac{|x_1-x_0|}{|x_1|},|x_1|\geq C\\ \end{aligned} \right. δ=x1x0,x1<Cx1x1x0,x1C
    其中C是取绝对误差或相对误差的控制常熟,一般可取 C = 1 C=1 C=1
  • [步骤4]
    修改:如果迭代次数达到预先指定的次数N,或者 f 1 ′ = 0 f_1'=0 f1=0,则方法失败;否则以 ( x 1 , f 1 , f 1 ′ ) (x_1,f_1,f_1') (x1,f1,f1)代替 ( x 0 , f 0 , f 0 ′ ) (x_0,f_0,f_0') (x0,f0,f0)转步骤2继续迭代。

代码部分

import math
import numpy as np
import sympy
from sympy import *

x = symbols("x")
x_value=[]
x_iteration=[]
x_diff_iteration=[]


def function_value():
    return x*exp(x)-1

def Newton_Methods(x0,f):  #此处x0为初值,f为函数方程
    k=0                    #记录迭代次数
    x_value.append(x0)
    x_iteration.append(f.subs(x,x0))
    x_diff_iteration.append(diff(f,x).subs(x,x0))
    while(k<10):            #小于规定迭代次数
        x_value.append(x_value[k]-(x_iteration[k]/x_diff_iteration[k]))
        x_iteration.append(f.subs(x,x_value[k+1]))
        x_diff_iteration.append(diff(f,x).subs(x,x_value[k+1]))
        if(x_iteration[-1]==x_iteration[-2]):    #终止迭代条件
            break
        k=k+1
    return x_value


result=Newton_Methods(0.5,function_value())

#格式化输出
for i in range(len(result)):
    print('When k=%d,the x value is %.10f'%(i,result[i]))

运行结果

使用课本P223页例题7验证程序结果
用牛顿法解方程:
x e x − 1 = 0 xe^x-1=0 xex1=0
结果如下:
在这里插入图片描述

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值