课程设计。
题目一:非线性方程求根。
用newton法计算下列方程。
(1),初值分别为,,;
(2)其三个根分别为。当选择初值时给出结果并分析现象,当,迭代停止。
一、摘要。非线性方程的解析解通常很难给出,因此非线性方程的数值解就尤为重要。本实验通过使用常用的求解方法二分法和newton法及改进的newton法处理几个题目,分析并总结不同方法处理问题的优缺点。
观察迭代次数,收敛速度及初值选取对迭代的影响。
二、数学原理。
构造迭代函数的一条很重要的途径是,用近似方程来代替原方程去求根。因此,如果能将非线性方程用线性方程来代替的话,求近似根问题就很容易解决,而且十分方便。newton法就是把非线性方程线性化的一种方法。
在求解非线性方程时,它的困难在于是非线性函数,为克服这一困难,考虑它的线性展开。设当前点为,在处的taylor展开式为。
令,可以得到上式的近似方程。
设,解其方程得到。
这就是牛顿迭代公式。用牛顿迭代公式求方程根的方法称为牛顿迭代法。
牛顿迭代法的几何意义为,不断用切线来近似曲线得到方程的根,我们知道方程的实根是函数的图形与横坐标的交点,是函数在点处的切线与轴的交点,此时就是用切线的零点代替曲线的零点,因此,牛顿迭代法又称为切线法。
三、程序设计。
基于matlab软件编写程序,先定义一个用newton法求解的功能函数,然后调用函数用于计算不同的方程。各变量定义见程序。
1、选取初值。
2、利用公式求解。
3、计算所得是否满足精度要求。
4、如不满足继续迭代运算,如满足则输出所求结果。
四、结果分析和讨论。
1、第一题计算结果:
首先得到函数在区间[-2.5,2.5]的图像,即可知函数与轴有交点,也就是说有根,并且从图中能够大致估算到根的位置。
1)、取初值时。
得到根值r=1.3247,迭代次数t=4次
2)、取初值时。
得到根值r=1.3247,迭代次数t=42次。
3)、取初值时。
得到根值r=1.3247,迭代次数t=8次。
根据结果可以分析得到,当使用牛顿迭代法时,所选初始值对迭代速度(迭代次数)有较大影响。当初始值充分接近方程的单根时,可保证迭代序列快速收敛,当初值选择不当时会造成迭代次数大幅增加或不一定收敛。
2、第二题计算结果:
初值时,得到根值r=-98,迭代次数为1次。
根据结果可以得到,给出的迭代初值不一定会收敛于离它最近的实根,收敛速度也不一定会慢。初值不同所得到的收敛值也不同。例如,在本题中更改初值为时,所得到的根是3,迭代次数为4次。
五、完成题目的体会与收获。
通过自己编程实现牛顿迭代法,不仅让我对牛顿迭代法有了更深刻的了解,同时也锻炼了我编程解决数学问题的能力。原本上课时不清晰的思路被理清了,观察计算结果之后,还对牛顿迭代法的规律和用法更加明了。希望以后能多有这样的实践作业。
六、附录。function [root,t]= newtonroot2( f,a)
f是非线性函数。
a为初值。eps为根的精度。
root为求出的函数零点。
t为迭代次数。
eps=5.0e-6;
t=0;f1=subs(sym(f),findsym(sym(f)),a);
fun=diff(sym(f));
fa=subs(sym(f),findsym(sym(f)),a);
dfa=subs(sym(fun),findsym(sym(fun)),a);
root=a-fa/dfa;
tol=abs(root-a);
while(tol>eps)
t=t+1;
r1=root;
fx=subs(sym(f),findsym(sym(f)),r1);
dfx=subs(sym(fun),findsym(sym(fun)),r1);
root=r1-fx/dfx;
tol=abs(root-r1);
endend
题目二:线性方程组求解。
有一平面机构如图所示,该机构共有13条梁(图中标号的线段)由8个铰接点(图中标号的圈)联结在一起。上述结构的1号铰接点完全固定,8号铰接点竖立方向固定,并在2号、5号和6号铰接点,分别有如图所示的10吨、15吨和20吨的负载,在静平衡的条件下,任何一个铰接点上水平和竖立方向受力都是平衡的,以此计算每个梁的受力情况。
令,假设为各个梁上的受力,例如。
对2号铰接点有:、
对3号铰接点有:、
对4号铰接点有:、
对5号铰接点有:、
对6号铰接点有:、
对7号铰接点有:、
对8号铰接点有:
一、摘要。对于实际的工程问题,很多问题归结为线性方程组的求解。本实验通过实际题目掌握求解线性方程组的数值解法,这里采用雅克比迭代法,如不收敛,再采用高斯列主元消去法。
二、数学原理。
1、雅克比迭代法。
设有一个n元线性方程组。
它的矩阵形式为,如果非奇异,且。由上式可以得到。
而其相应的迭代公式为。
把上式迭代公式称为jacobi(雅克比)迭代。
由于迭代存在收敛性,所以把分量形式的迭代公式改写成矩阵形式。记。
则。方程组改写成。
与其相应的矩阵形式的迭代公式为。
也可以简单地记为。
式中,;,上两式也称为jacobi迭代。同时称为jacobi迭代矩阵。
2、高斯列主元消去法。
在消元过程进行到第步时,写出其相应的增广矩阵,可以发现,此时第个方程与后面的个方程的地位并没有区别,因此选择第列的元素中绝对值最大的元素作为主元,即令。
如果这时候,那么矩阵就奇异不可逆,方程的解也不确定,只有停止计算;否则,当,则其增广矩阵中交换第行和第行,即。
使成为主元,然后再按高斯消去法进行消元运算。上述这种消去法称为高斯列主元消去法。
三、程序设计。
把方程组整理为矩阵形式:
本题我先采用了雅克比迭代法进行计算,所得结果发散,因此采用高斯列主元消去法计算。
1、输入数据a和b,置det=1。
2、对于作,按列选主元、交换两行、消元计算。
3、置。4、输出线性方程组的解。
四、结果分析和讨论。
得到结果,各个梁的受力情况分别为.0000(单位:吨)
由结果分析,高斯列主消元法能准确的计算出该线性方程组的解。
五、完成题目的体会与收获。
在解决本道题目的时候,我受到了重重困难。刚开始我并未考虑使用迭代法的收敛条件,便使用雅克比迭代法进行计算,但在经过多次尝试后,才发现该方法不收敛,改用高斯列主消元法来计算。这让我吸取了深深的教训。
在今后的学习中,注意每种方法的使用限制条件,收敛条件等,真正学而会用,才能彻底掌握知识。
六、附录。高斯列主消元法:
function [x]= gauss(a,b)
n,m]=size(a);
det=1;x=zeros(n,1);
for k=1:n-1
max1=0;
for i=k:n
if abs(a(i,k))>max1
max1=abs(a(i,k));r=i;
endend
if r>k
z=a(k,:)a(k,:)a(r,:)a(r,:)z;
z=b(k);b(k)=b(r);b(r)=z;det=-det;
endfor i=k+1:n
m=a(i,k)/a(k,k);
for j=k+1:n
a(i,j)= a(i,j)-m* a(k,j);
endb(i)=b(i)-m*b(k);
enddet=det*a(k,k);
enddet=det*a(n,n);
for k=n:-1:1
for j=k+1:n
b(k)=b(k)-a(k,j)*x(j);
endx(k)=b(k)/a(k,k);
endx(k)=b(k)/a(k,k);
end雅克比迭代法:
function [x,n] =jacobi( a,b,x0 )
a为系数矩阵。
b方程组右端相。
x为所得结果。
n为迭代次数。
eps=1.0e-4;
d=diag(diag(a));
l=-tril(a,-1);
u=-triu(a,1);
b=d\(l+u);
f=d\b;
x=b*x0+f;
n=1;while norm(x-x0)>=eps
x0=x;x=b*x0+f;
n=n+1;
endend
数值分析期末大作业
一 问题提出。设方程f x x3 3x 1 0有三个实根 x 1.8793 x 0.34727 x 1.53209现采用下面六种不同计算格式,求 f x 0的根 x 或x 1 x 2 x 3 x 4 x 5 x 6 x x 二 目的和意义。1 通过实验进一步了解方程求根的算法 2 认识选择计算格式的...
数值分析大作业2019 A班
a班大作业要求 1.使用统一封皮 2.上交大作业内容包含 1 题目 2 数学原理 3 程序设计 必须对输入变量 输出变量进行说明 编程无语言要求,但程序要求通过 4 结果分析和讨论 5 完成题目的体会与收获。3.提交大作业的时间 本学期最后一次课 过期不计入成绩 4.提交方式 打印版一份 或手写大作...
数值分析课程设计大作业
课程设计。2013年07月20日。1.1水手 猴子和椰子问题。算法分析 设椰子起初的数目为,第一至第五次猴子在夜里藏椰子后,椰子的数目分别为,再设最后每个人分得x个椰子,由题意得 利用逆向递推方法求解 n input n for x 1 n p 5 x 1 for k 1 5 p 5 p 4 1 e...