数值计算方法课程设计Word文档格式.doc
- 文档编号:13044707
- 上传时间:2022-10-03
- 格式:DOC
- 页数:11
- 大小:159.50KB
数值计算方法课程设计Word文档格式.doc
《数值计算方法课程设计Word文档格式.doc》由会员分享,可在线阅读,更多相关《数值计算方法课程设计Word文档格式.doc(11页珍藏版)》请在冰豆网上搜索。
现利用多元函数在点的泰勒公式有
其中,在与的所连的线段内。
如果用上式中的线性函数近似替代,并将线性方程组
…..
(1)
的解作为的第次近似解记为
将
(1)式写成矩阵形式,即
为非奇异矩阵,则牛顿迭代公式:
……………………………
(2)
求解非线性方程组牛顿方法为
2、简化牛顿法
在牛顿法的基础上,为了减少计算量,将均取为,得如下简化牛顿公式:
…………………(3)
其中
(2)(3)式均为线性收敛的。
算法设计
将一个非线性方程组写成向量的形式有:
F(x)=0
牛顿迭代法的公式就是:
x(k+1)=x(k)-F’(x(k))-1F(x(k))
其中F’(x(k))为Jacobi矩阵,我写的这段程序就是根据这个公式来的。
运用MATLAB中的jacobian求出F的雅克比矩阵,用inv求逆
matrix=@(varargin)[varargin{:
}]构造迭代函数
在比较牛顿法和简化牛顿法运行时间方面,我们主要是通过比较迭代次数。
程序清单
牛顿法源程序:
functionx=newton_solve(F,v,x0,e)
if(~ischar(F)||~ischar(v))%定义类型
error('
ParameterFandvshouldbechartype!
'
);
end
if(~isnumeric(x0)||~isnumeric(e))
Parameterx0andeshouldbenumerictype!
F=sym(F);
v=sym(v);
dF=jacobian(F,v);
tF=inv(dF)*F
forindex=1:
numel(v)
tF=subs(tF,v(index),['
x('
num2str(index)'
)'
]);
%把x分量化,把x1变成x
(1),把x2变成x
(2)
}].'
;
%构造迭代函数
phi=['
x-'
char(tF)];
eval(['
phi=@(x)'
phi'
err=inf;
%无穷大
xold=phi(x0);
n=0;
whileerr>
e
xnew=phi(xold);
%用本次结果与上次结果差的范数来衡量误差
err=norm(xnew-xold);
xold=xnew;
n=n+1;
%迭代次数大于10000是退出循环
if(n>
10000)
break;
end
n%迭代次数
x=xold;
简化牛顿法的源程序:
functionx=simnewton_solve(F,v,x0,e)
tF=inv(dF)%dF的逆矩阵
tF11=-x0
(2)/(-x0
(2)+4*x0
(1));
tF12=1/(-x0
(2)+4*x0
(1));
tF21=2*x0
(1)/(-x0
(2)+4*x0
(1));
tF22=-1/2/(-x0
(2)+4*x0
(1));
tF=[tF11,tF12;
tF21,tF22]%把dF的逆矩阵用初始值x0代入,得到一常数矩阵,(简化牛顿法的思想)
tF=tF*F;
运行结果分析
newton_solve('
[x1+2*x2-3;
2*x1^2+x2^2-5]'
'
[x1;
x2]'
[1.5;
1],0.0001)
n=
2
ans=
1.4880
0.7560
simnewton_solve('
1],0.0001)
n=
3
1.4880
0.7560
[100;
56],0.0001)
10
388
1.4938
0.7531
上面的结果是牛顿法和简化牛顿法同精度同初值的解法以及不同初值同精度得出来的,我们利用迭代次数来比较它们运行的快慢(即运行的时间),我们本题的初值和精度可以任意取值,从而得出迭代次数以及结果。
从结果可以看出,简化牛顿法相比起牛顿法迭代次数要多一些,而且简化牛顿法的值误差较大,因此用牛顿法解非线性方程组要比简化牛顿法要好。
问题分析
在我们参考了MATLAB相关书籍之后,通过在网上的查阅,基本编写出牛顿法解非线性方程组的程序,在这个程序的基础上我们来改进用以实现简化牛顿法解非线性方程组,我们主要遇到的是要怎么使它可以在程序中赋初值之后直接生成,最后这个没有解决,所以我们选择了赋初值后,直接把求出来,再把的值作为常量带入程序中求解。
总结
本次的程序设计,我们用MATLAB编写了牛顿法解非线性方程以及简化的牛顿法解非线性方程的程序。
牛顿法是通过牛顿迭代法的公式:
x(k+1)=x(k)-F’(x(k))-1F(x(k)),带入初值及给定精度的范围,得出方程组的解。
简化牛顿法,实在牛顿法的基础上,把雅可比矩阵的逆的初始矩阵算出来,再通过迭代的出的解。
我们选取了不同的初值解非线性方程组。
并且对于同初值同精度问题,分别用牛顿法和简化的牛顿法解得简化的牛顿法迭代的次数更多。
说明简化的牛顿法迭代精度更低而且求的的解误差较大。
这与理论是相符合的。
牛顿法和简化牛顿法都有优点也有缺点,我们在解决问题的时候,要结合自己的实力和自己所需的选择恰当的方法。
我们从不懂到懂得这个过程让我们收获很多,通过不断地学习,查阅资料以及修改程序,一个从无到有的积累,我们不仅仅是在做题,也是在学习处理任何问题的方法。
遇到困难不要轻易放弃,要善于利用和整合资源,这都是生活必不可少的。
心得体会
数值计算方法是一门应用范围很广的课程,是信息与计算科学专业的一门主要专业基础课程,通过这次实验上机才知道原来我们可以运用MATLAB和C语言以及其他的相关汇编语言来编辑程序解决数值计算方法里面很多问题。
在学习了理论知识之后,如何去具体的处理数学中的问题,如何把我们的理论运用到实践中去,这样的课程设计为我们提供了这样一个实践平台。
通过这次实验,我收获颇多。
首先是对MATLAB软件的认识有了进一步的提升。
它简单易学、计算功能强等。
MATLAB具有强大的矩阵运算、数据处理的功能,它输出的结果可视化。
编程效率高,比C语言简单,让我们比较容易接受,所以我们在解决这道题的时候选择了使用matlab这种高级编程语言。
我们也通过这次上机实验对《数值计算方法》有了更进一步的巩固。
其次,通过这次上机实验,我对牛顿法有了更深一层的理解。
牛顿法是一种重要迭代法,他是逐步线性化方法的典型代表。
为了减少计算量,牛顿法还衍生出许多的变格形式,比如下降牛顿法、阻尼牛顿法、简化牛顿法、修正牛顿法、拟牛顿法等等,这里我们主要是用了牛顿法和简化牛顿法来解非线性方程组,并对这两种方法做了一个比较,通过精度的分析,迭代次数的比较得出牛顿法迭代次数比较少,但计算量大;
简化的牛顿法迭代次数多但计算量相对较少。
所以是各有所长,都能解决我们的问题。
通过这次实验让我了解到合作的重要性,在处理问题的时候,当自己冥思苦想也想不出来解决方案的时候,不妨选择请教老师,和同学讨论。
可以达到事半功倍的效果。
我们的工作是一个团队的工作,团队需要个人,个人也离不开团队,必须发扬团结协作的精神。
某个人的离群都可能导致整项工作的失败。
实习中只有一个人知道原理是远远不够的,必须让每个人都知道,否则一个人的错误,就有可能导致整个工作失败。
团结协作是我们实习成功的一项非常重要的保证。
而这次实习也正好锻炼了我们的这一点,这对于我们的整个人生来说,都是非常宝贵的。
解决党委自身和基层党支部存在的的突出问题,发挥各村、社区、机关单位党支部在当前城市征迁、园区建设、招商引资、服务群众、维护稳定的作用,我镇党委高度重视,制定了切合临淮实际的活动实施方案,按照中央规定的活动步骤和要求扎实有效的开展了基层组织建设年活动。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数值 计算方法 课程设计 doc