- 1、本文档共11页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数值分析作学习总结
摘 要
在科学工作中经常出现这类问题,我们关注求解非线性方程或非线性方程组——求x使得f(x)=0或求得X= 使得F(X)=0。这些方程中,至少一个变量以任意的非线性方程形式出现。
在实变量变量的实值函数这种最简单的情况下,提出的一般问题是:已知函数f:R→R,求x的解使得f(X)=0这里主要讨论解决这类问题的一般方法和过程。在许多应用中可以发现非线性方程的例子。例如在光的衍射理论中,我们需要用到方程:
X-tanX=0
在行星轨道的计算中我们需要开普勒方程:
X-asinX=b
其中a和b任意取值。
在科学研究和科学计算中常常碰到以上的非线性方程求解问题。非线性方程的解一般不能解析求出。所以数值解法显得非常重要,而数值解法在实际中的实现则更为重要。本文将介绍几种数值解法以及Matlab中的实现程序。
为研究非线性方程数值解,给出了二分法、简单迭代法和牛顿迭代法的Matlab 程序,并进行了近似计算。结果表明,牛顿迭代法收敛最快。
关键词:非线性方程;Matlab程序;二分法;迭代法;简单迭代法;弦截法。
非线性方程数值解法
1 二分法
设f (x)在[a,b]连续,假定f (a)<0,f (b)>0,取中点 ,检查f (x0)符号。若f (x0)=0,则x0就是一个根;若f (x0)>0,记a为a1,x0为b1,则得有根区间[a1,b1];若f (x0)<0,记x0为a1,b为b1,则得有根区间[a1,b1]。后两种情况都得到有根区间[a1,b1],它的长度为原区间的一半。对[a1,b1],令 ,再用同样的方法,可得新的有根区间[a2,b2],它的长度为[a1,b1]的一半,如此反复进行下去,其中每一个区间是前一区间的一半。有
这就是方程的根。而 即为方程的近似根,且有
估计误差
下面用二分法求
在区间[1,2]上的根.因为二分法只能求单根,首先可以搜索函数(2.2)在区间[1,2]的根的情况。在Matlab命令窗中输入[2]:
x=1∶0.01∶2;
y=x^3+4*x^2-10;
plot(x,y)
图1为f (x)在区间[1,2]的图像。由图1可以看出,式(2)在区间[1,2]间有惟一的一个大于1.35而小于1.4 的单根。
● Matlab 实现
先建立erfen.m
function y=erfen(fun,a,b,esp)
if nargin<4 esp=1e-4;end
if feval (fun,a)*feval (fun,b)<0
n=1;
c=(a+b)/2;
while c>esp
if feval (fun,a)*feval(fun,c)<0
b=c;c=(a+b)/2;
elseif feval (fun,c)*feval (fun,b)<0
a=c;c=(a+b)/2;
else y=c;esp=10000;
end
n=n+1;
end
format long
y=c;
elseif feval (fun,a)==0
y=a;
elseif feval (fun,b)==0
y=b;
else disp ('may not be a root');
end
n
再建立fc.m 函数文件
function y=fc(x);
y= x^3+4*x^2-10;
最后在Matlab 命令窗中输入:
erfen('fc',1,2,0.0001)
n=
50
ans=
1.36523001341410
即迭代50次计算结果为1.36523001341410,精度已经非常高。如果希望精度达到
只需要迭代13次结果是1.365173390。二分法优点是计算简单,收敛性有保证;缺点是收敛不快,不能求复根及重根。
2 简单迭代法
将函数f (x)=0非线性方程变为同解方程:x=φ(x),其中函数φ(x)为连续函数。然后构造迭代格式
并选取初值Xo。根据初值Xo及迭代格式 (3)可产生迭代序列{}[3]。
下面用简单迭代法计算式(2)。 由式(2)可以得到下列等价方程
但第一个方程是发散的,第二个方程不适定,只有后面两个方程具有收敛性。用第4 个方程计算如下。
● MATLAB 实现
先建立iterate.m
function y=iterate (x)
x1=g(x);
文档评论(0)