第2章非线性方程求解
则利用松弛迭代公式可得:
x( k 1)
0.5 x( k )
0.5 (1.74
2lg
0.1
18.7 5000
xk
,k
1,
2,L
L
L
2.1 化工实际问题的提出
经11次迭代可得摩擦系数为0.07593。
❖同样,在n个组分的等温闪蒸计算中,通过 物料和相平衡计算,我们可得到如下非线性 方程(2-3 ) :
p
A
B T
C
lnT
Dp T2
(2-5)
☺因为公式(2-5)两边都有未知变量,并且无法用解 析的方法求解,必须用数值计算的方法求解。
☺ 通过上面的一些例子,我们可以发现,如果没有适 当的手段和办法来求解非线性方程,那么化学化工中 的许多研究、设计等工作将无法展开,这势必影响化 学化工的发展,下面我们将介绍一些实用的非线性方 程求解方法,并提供计算机程序。
❖ 饱和蒸气压是我们经常要用到的数据,虽然 我们可以通过实验测量来获取饱和蒸气压的数 据。
❖ 我们通常利用前人已经测量得到的数据或回 归的公式来获取,这可以减轻我们大量的基础 实验工作。
❖公式(2-5)是一种常用的饱和蒸气压计算公 式:
ln
p
A
B T
C
ln T
Dp T2
2.1 化工实际问题的提出
ln
2.1 化工实际问题的提出
❖对于这个问题的求解,可利用我们下面介绍的 牛顿迭代法进行计算,也可利用其他迭代公式进 行计算,如采用牛顿迭代公式,则可以得到如下 的具体迭代公式:
m zi (1 ki )
an1 an
i 1 m
ki an zi (1 ki )
i1 (ki an )
(2-4)
2.1 化工实际问题的提出
❖ 计算中通过对分区间,逐步缩小区间范围的步骤 搜索零点的位置。
❖ 如果我们所要求解的方程从物理意义上来讲确实 存在实根,但又不满足f(a) f(b)<0,这时,我们必须
通过改变a和b的值来满足二分法的应用条件。
2.2.2 对分法求根算法
计算f (x) =0的一般计算步骤如下:
1、输入求根区间[a,b]和误差控制量ε,定义函 数f(x)。 2、判断: 如果f(a)f(b)<0则转下,否则,重新输 入a 和 b的值。 3、计算中点 x=(a+b)/2以及f(x)的值
❖当ω<0时,将使迭代反方向进行,可使一些迭代发散过程收敛。
2.4 松弛迭代法
松弛法的迭代公式如下:
xn1 xn ( ( x n ) xn ) (2-7)
2.3直接迭代法
对 给 定 的 方 程 f(x) =0 , 将 它 转 换 成 等 价 形 式: x 。(x)
❖给定初值x0,由此来构造迭代序列
,
k =x1k,12,…( xk,) 如果迭代收敛,
即 lim k
xk 1
lim(
k
xk
)
b
,有 b (b) , 则就是方程
f(x)=0的根。
❖在计算中当 xk1 xk小于给定的精度控制量时,
❖其一,等价形式 x ( x) , 应满足;|'( x*) | 1
❖其二,初值必须取自 x* 的充分小邻域,其大小
决定于函数f(x),及做出的等价形式 x (x) 。
2.3直接迭代法
例:求代数方程 x3-2x-5=0,在x0=2附近的零点。
解:1)x3=2x+5 ,
xk1 3 2xk 5
Q'( x)
xn1 xn ( ( x n ) xn )
(2-7)
❖ 由上式可知,当松弛因子ω等于1时,松弛迭代变为直接迭代。
❖当松弛因子ω大于1时松弛法使迭代步长加大,可加速迭代,但 有可能使原来收敛的迭代变成发散。
❖当0<ω<1时, 松弛法使迭代步长减小,这适合于迭代发散或振荡 收敛的情况,可使振荡收敛过程加速。
2.2.2 对分法求根算法
分情况处理
(1)|f(x)|<ε:停止计算 x*= x,转向步骤4 (2)f(a)f(x)<0:修正区间[a,x]→[a,b],重复3 (3)f(x)f(b)<0:修正区间[x,b]→[a,b],重复3
4、输出近似根 x*。 右图给出对分法的示意图。
x3 = (x0+ x2) / 2
❖ 而对于具体的化工问题,初值和求解范 围常常可根据具体的化工知识来决定。
2.1 化工实际问题的提出
❖常见的雷诺数和摩擦系数关系方程在雷 诺数低于4000时有以下关系式:
1
0.5
1.74
2
lg
2
di
i
18.7
Re
0.5
2.1 化工实际问题的提出
这是一个典型的非线性方程。我们在管路设计中经 常碰到。
2.2 实根的对分法
❖ 2.2.1 使用对分法的条件 ❖ 2.2.2 对分法求根算法 ❖ 2.2.3 对分法VB程序清单
2.2.1 使用对分法的条件
❖ 对分法或称二分法是求方程近似解的一种简单直观 的方法。
❖ 设函数 f(x) 在[a, b]上连续,且 f(a) f(b)<0,则f(x) 在[a, b]上至少有一零点,这是微积分中的介值定理, 也是使用对分法的前提条件。
解非线性方程或非线性方程组也是计算方法
中的一个主题。
一般地,我们用符号f(x)来表示方程左端的函
数,方程的一般形式表示为f(x)= 0,方程的 解称为方程的根或函数的零点。
2.1 化工实际问题的提出
❖ 通常,非线性方程的根不止一个,而任 何一种方法只能算出一个根。
❖ 因此,在求解非线性方程时,要给定初 始值或求解范围。
| x* xk |
Lk 1 L
|
x1
x0
|
(2-6)
2.3直接迭代法
|
x*
xk
|
Lk 1 L
|
x1
x0
|
(2-6)
要构造满足收敛条件的等价形式一般比较困难。
事实上,如果 x* 为f(x)的零点,若能构造等价形
式 x (x),而 |'( x*) | 1,由 '( x) 的边疆性,一定存
在 x*的邻域 [x* , x* ] ,其上有 |'(x) | L 1 ,这时 若初值 x0 [x* , x* ] 迭代也就收敛了。由此 构造收敛迭代格式有两个要素,
1 3
•
(2
x
1
5)
2 3
,| '( x) 1,
x [1.5, 2.5] |
构造的迭代序列收敛。取x0=2,则
准确的解是x = 2.09455148150。 x1 2.08008 , x2 2.09235 , x3 2.094217
2)将迭代格式写为
x4 2.094494 , x5 2.094543 , x6 2.094550
GoTo 100 Else
Print "please repeat input x1 and x2"
GoTo 80 End If 100 x = (x1 + x2) / 2 y = f(x) If Abs(y) <= 0.001 Then
Print "the function root is "; x Print "y="; y
取
b x为k1方程的根。
2.3直接迭代法
例如,代数方程x3-2x-10=0的三种等价形式 及其迭代格式如下:
xk 1
2 xk 10 xk2
xk1 3 2xk 10
xk 1
xk3 10 2
2.3 直接迭代法
对于方程 f (x) 0 构造的多种迭代格式 xk1 (xk ) ,怎样判 断构造的迭代格式是否收敛?收敛是否与迭代的初值有关? 根据数学知识,我们可以直接利用以下收敛条件:
(3) 计算x3=(1.5+2)/2=1.75,f(1.75)=0.078125,有 根区间[a,b]=[1.5,1.75]。
2.2.3 对分法求解实例
一直做到|f(xn)| <ε(计算前给定的精度)或|a-b|<ε时 停止。详细计算结果见表2-1。
对分法的算法简单,然而,若f(x)在[a,b]上有 几个零点时,如不作特殊处理只能算出其中一个 零点;另一方面,即使f(x)在[a,b]上有零点,也未 必有f(a)f(b)<0。这就限制了对分法的使用范围。 对分法只能计算方程f(x)=0的实根。
n
i 1
zi (1 ki )
ki
0
2.1 化工实际问题的提出
n
i 1
zi (1 ki
ki
)
0
(2-3 )
❖ 在方程(2-3)中只有α是未知数,ki为相平衡常 数,zi为进料组分的摩尔浓度,均为已知数。 ❖ 方程(2-3)也无法直接解析求解,必须利用数 值的方法。
❖ 借助于计算机方可精确的计算。
Else If y1 * y < 0 Then x2 = x y2 = y GoTo 100 Else x1 = x y1 = y GoTo 100 End If End If End Sub Public Function f(x) Dim y y=x^3+x^2-1 f=y End Function
xk 1
xk3 2
5
,
2
(
x
)
x3 5 2
|
' 2
(
x
)
||
3x2 2
|
1,
x [1.5, 2.5]
迭代格式不能保证收敛,但并不一定不收敛。