[数值计算-6]:一元n次非线性方程求解-双点区间-二分迭代法&Python法代码示例

作者主页(文火冰糖的硅基工坊):https://blog.csdn.net/HiWangWenBing

本文网址:https://blog.csdn.net/HiWangWenBing/article/details/119808218


目录

1. 一元n次非线性方程

1.1 非线性函数

1.2 非线性函数案例

1.3 非线性函数的几何图形

2. 二分法迭代法求非线性方程解的基本原理

2.1 确定误差或收敛条件

2.2 迭代过程

2.3 二分法的优缺点

3. Python代码示例



1. 一元n次非线性方程

1.1 非线性函数

线性函数是一次函数的别称,则非线性函数即函数图像不是一条直线的函数。非线性函数包括指数函数、幂函数、对数函数、多项式函数等等基本初等函数以及他们组成的复合函数

1.2 非线性函数案例

y = f(x) = a3*x^3 + a2*x +  a0 

另a3 = 1, a2=-1, a0=-1;得到:

y=f(x) = x^3 - x - 1

1.3 非线性函数的几何图形

2. 二分法迭代法求非线性方程解的基本原理

对于区间[a,b]上连续不断且f(a)·f(b)<0的函数y=f(x),通过不断地把函数f(x)的零点所在的区间一分为二,使区间的两个端点逐步逼近零点,进而得到零点近似值的方法叫二分法。

2.1 确定误差或收敛条件

 b-a的值是确定的,随着迭代次数k的增加,真实值x^{*} 与实际值x_{k}的误差越来你越小。

当k无穷大时,误差为0,实际迭代是,误差在某个可接收的范围内即可。

2.2 迭代过程

 

2.3 二分法的优缺点

3. Python代码示例

(1)源代码

#导入库
from math import *
import time
import numpy
import matplotlib.pyplot as plt


# 一元N次非线性函数
# y=f(x) = x^3 - x - 1
def f(x):
    return(1.0*x**3 - 1.0*x**1 - 1) 

#定义精度
accuracy = 0.00001

#定义区间
a = -1
b = +3

Ak = a
Bk = b
Err = fabs(Bk-Ak)/2 # 初始误差
count = 0

#log data
x_data  = []
y_data  = []

#迭代起始时间
start = time.time()

while Err > accuracy:
    #新的一轮迭代
    count = count + 1
    Xk =(Ak+Bk)/2         #新的迭代
    Err = fabs(Bk-Ak)/2   #迭代后误差
    x_data.append(count)
    y_data.append(Xk)
    
    #调整迭代区间
    flag = f(Xk) * f(Bk)
    if (flag)> 0:
        Bk = Xk             #新的区间 
    elif (flag)< 0:
        Ak = Xk             #新的区间 
    else:                  # f(Xk)=0
        Err = 0            # 误差为0
        break
    
#迭代终止时间
end = time.time()

print("耗时=", end-start)
print("迭代次数=", count)
print("方程解=", Xk)
print("理论误差=", (b-a)/2**(count))
print("实际误差=", Err)

print("\n迭代过程")
for x in x_data:
    print("X{}={}".format(x,y_data[x-1]))

plt.scatter(x_data, y_data)

(2)输出结果

耗时= 0.00099945068359375
迭代次数= 19
方程解= 1.3247146606445312
理论误差= 7.62939453125e-06
实际误差= 7.62939453125e-06

迭代过程
X1=1.0
X2=2.0
X3=1.5
X4=1.25
X5=1.375
X6=1.3125
X7=1.34375
X8=1.328125
X9=1.3203125
X10=1.32421875
X11=1.326171875
X12=1.3251953125
X13=1.32470703125
X14=1.324951171875
X15=1.3248291015625
X16=1.32476806640625
X17=1.324737548828125
X18=1.3247222900390625
X19=1.3247146606445312

(3)图形显示收敛过程


作者主页(文火冰糖的硅基工坊):https://blog.csdn.net/HiWangWenBing

本文网址:https://blog.csdn.net/HiWangWenBing/article/details/119808218

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

文火冰糖的硅基工坊

你的鼓励是我前进的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值