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的增加,真实值 [数值计算-6]:一元n次非线性方程求解-双点区间-二分迭代法&Python法代码示例_二分法_04 与实际值 [数值计算-6]:一元n次非线性方程求解-双点区间-二分迭代法&Python法代码示例_一元多次非线性方程_05 的误差越来你越小。

当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)图形显示收敛过程