- 1、本文档共4页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
透明与不透明流体运动粘度的标准测定方法动力粘度的计算
非线性方程数值解法比较
化学化工中的许多问题常常可以归结为求解函数方程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时1.3500
2 1.3250
3 1.3125
4 1.3187
5 1.3218
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 迭代法计算程序框图
设定,E=0.0001时
3 牛顿法
牛顿法的核心内容是通过泰勒级数将非线性方程式转化为线性方程式,然后用迭代法求解。
其迭代格式为: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 牛顿法计算程序框图
设定,E=0.0001时
4 割线法
牛顿迭代法收敛速度快,但是要计算导数f’(x),在实际应用中,常常会碰到f’(x)不易计算或算式复杂而不便计算的情况。这个时候就可以用到割线法,其实割线法的基本思想与牛顿法相似,都是将非线性函数f(x)线性化后求解。两者的差别在于割线法实现函数线性化的方式是两点之间的割线,而不是某点的切线。
其迭代格式为:xk+1= xk-f(xk)[xk-xk-1]/ [f(xk)- f(xk-1)],实际上就是用差商代替了牛顿法中的导数。与牛顿法只需要给一个初值不同,割线法需要给出两个初值。
下面用迭代法解方程x3-x-1=0。
f(x)= x3-x-1
其计算框图如图4.
图4 割线法计算程序框图
设定,E=0.0001时
总结
通过具体的例子,介绍了几种常用的求解非线性方程的数值计算方法,每一种计算方法均有其优点和缺点。故而在实际应用中,应该根据方程的特点和研究体系的特性确定合适的计算方法,以获得有效的结果,解决实际问题。
|X1-X0|E
否
X0=A, Y0=f(X0)
是
X0= X1
开始
输入初值A, 步长H, 误差E
X2= X1+H, Y2=f(X2)
X0= (X1+X2)/2, Y0=f(X0), Y1=f(X1)
Y1*Y20
Y1*Y00
X2= X0
X1=A, Y1=f(X1)
X1= X0
|X2-X1|E
打印A, H,E,X0
结束
X1= X2, Y1=Y2
是
是
是
否
否
否
开始
X1=X0-f(X0)/ f ’(X0)
结束
打印X1
|X1-X0|E
X1= X0+H, Y1=f(X1)
X0=A, Y0=f(X0)
Y0*Y10
输入初值A, 步长H, 误差E
X0=X1
X1=g(X0)
开始
输入初值X0, 误差E
开始
打印X1
结束
X0= X1, Y0=Y1
是
Y0
文档评论(0)