非线性方程数值解法比较

  • 格式:doc
  • 大小:69.50 KB
  • 文档页数:4

非线性方程数值解法比较

化学化工中的许多问题常常可以归结为求解函数方程f(x)=0。如果f(x)是医院线性方程或一元二次方程,可以用代数方法求解。但是如果是高次方程,求解析解变得非常困难甚至没有解析解,就只能用数值方法求近似解了。

解非线性方程的数值解法主要有:二分法,迭代法,牛顿法,割线法等。下面将结合具体的例子来比较几种非线性方程的数值解法。

某多相催化反应通过实验测定的反应级数可以用方程x3-x-1=0来表达,用数值方法求解其反应级数。

1 二分法

设方程f(x)=0已知有根区间为(x1,x2),取x1与x2的中点x0,即x0=0.5(x1+x2),检查f(x0)与f(x1)是否同号,如果不同号,则根x0就在(x1,x0)区间,如果同号则根在(x0,x2)区间。这样就将根的区间缩小了一半,然后重复以上过程,直至解区间很小,得到数值解。这种方法最大的缺点就是收敛速度慢。

其计算框图如图1.

图1 二分法计算程序框图

设定A=0,H=0.1,E=0.0001时,执行结果:

No. X

1 1.3500

2 1.3250

3 1.3125

4 1.3187

5 1.3218 开始

输入初值A, 步长H, 误差E

Y1*Y2>0 X1=A, Y1=f(X1)

X2= X1+H, Y2=f(X2)

X0= (X1+X2)/2, Y0=f(X0), Y1=f(X1)

Y1*Y0>0

X2= X0 X1= X0

|X2-X1|>E

打印A, H,E,X0

结束 X1= X2, Y1=Y2 是

是 否

否 否 6 1.3234

7 1.3242

8 1.3246

9 1.3248

10 1.3247

11 1.3247

2 迭代法

迭代法是一种重要的逐次逼近方法,使用某个固定公式反复校正根的近似值,使之逐步精确,组后得到满足要求的结果。将方程f(x)=0化为x=g(x),以x0为第一个近似根,则有x1=g(x0),再x1以为第二个近似根,则有x2=g(x1),依次类推xk+1=g(xk),如果x0,x1,…,xk,…这个数列有极限,这个极限就是方程的根。这种方法最关键的问题在于要找出符合收敛条件的g(x)。

下面用迭代法解方程x3-x-1=0。

将原方程写为x=g(x)=(x+1)1/3

其计算框图如图2.

图2 迭代法计算程序框图

设定X0=1.5,E=0.0001时,执行结果:

No. X

1 1.35721

2 1.33086

3 1.32588

4 1.32494

5 1.32476

6 1.32473

7 1.32472

第六次迭代与第七次迭代结果之差已经小于0.00001,可见迭代法的收敛速度比二分法要快,但是依然有一些收敛速度较慢的迭代格式,这时候可以采用迭代-加速公式来加速收敛,在此不再详细介绍。

3 牛顿法

牛顿法的核心内容是通过泰勒级数将非线性方程式转化为线性方程式,然后用迭代法求开始

输入初值X0, 误差E

X1=g(X0)

|X1-X0|>E

打印X1

结束 否 X0=X1

是 解。

其迭代格式为:xk+1= xk-f(xk)/ f’(xk)。在单根附近,牛顿公式恒收敛,而且收敛速度快。但是若起始值不在根附近,牛顿公式不一定收敛,所以在实际使用中,牛顿法往往与逐步扫描法结合起来,先用逐步扫描法求出根的近似值,再用牛顿公式求精确值。此外,牛顿法的准确度与根附近的斜率有关。若根附近的斜率f’(x)很小,则在计算f(x)/ f’(x)时,由于误差放大而无法达到很高的准确度。计算中要用到的一阶导数有时候难以求得,也是牛顿法的一个缺陷。

下面用迭代法解方程x3-x-1=0。

f(x)= x3-x-1

f ’(x)=3x2-1

其计算框图如图3.

图3 牛顿法计算程序框图

设定X0=1.5,E=0.0001时,执行结果:

No. X

1 1.34783

2 1.32520

3 1.32472

4 1.32472

3次迭代就可以达到要求,速度比一般的迭代法要快得多。

4 割线法

牛顿迭代法收敛速度快,但是要计算导数f’(x),在实际应用中,常常会碰到f’(x)不易计算或算式复杂而不便计算的情况。这个时候就可以用到割线法,其实割线法的基本思想与牛顿法相似,都是将非线性函数f(x)线性化后求解。两者的差别在于割线法实现函数线性化的方式是两点之间的割线,而不是某点的切线。

其迭代格式为:xk+1= xk-f(xk)[xk-xk-1]/ [f(xk)- f(xk-1)],实际上就是用差商代替了牛顿法中的导数。与牛顿法只需要给一个初值不同,割线法需要给出两个初值。

下面用迭代法解方程x3-x-1=0。 开始

输入初值A, 步长H, 误差E

Y0*Y1>0 X0=A, Y0=f(X0)

X1= X0+H, Y1=f(X1)

X1=X0-f(X0)/ f ’(X0)

X0= X1 |X1-X0|>E

打印X1

结束 X0= X1, Y0=Y1 是

是 否

否 f(x)= x3-x-1

其计算框图如图4.

图4 割线法计算程序框图

设定X0=1,H=0.1,E=0.0001时,执行结果:

No. X

1 1.323043

2 1.324606

3 1.324718

4 1.324718

3次迭代就可以达到要求,速度同样比一般的迭代法要快得多。

总结

通过具体的例子,介绍了几种常用的求解非线性方程的数值计算方法,每一种计算方法均有其优点和缺点。故而在实际应用中,应该根据方程的特点和研究体系的特性确定合适的计算方法,以获得有效的结果,解决实际问题。

开始

输入初值A, 步长H, 误差E

Y0*Y1>0 X0=A, Y0=f(X0)

X1= X0+H, Y1=f(X1)

X2=X1-(X1-X0)f(X1)/[f(x1)- f(x0)]

X0= X1, X1=X2 |X1-X2|>E

打印X2

结束 X0= X1, Y0=Y1 是

是 否