计算方法实验报告Word格式文档下载.docx
《计算方法实验报告Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《计算方法实验报告Word格式文档下载.docx(20页珍藏版)》请在冰豆网上搜索。
![计算方法实验报告Word格式文档下载.docx](https://file1.bdocx.com/fileroot1/2022-12/7/0ad5a04e-d189-4671-a666-97eb015bfd7d/0ad5a04e-d189-4671-a666-97eb015bfd7d1.gif)
Xk+1=Xk—f(Xk)/f‘(Xk).
3、实验用例
(1)在区间[0,1]上用二分发求方程
+10x-2=0近似根,要求误差不超过0.0005.
(2)取初值X0=0,用迭代公式Xk+1=(2-
)/10,(k=0,1,2,...)求方程
+10x-2=0的近似根。
误差不超过0.0005.
(3)取初值X0=0,用牛顿迭代法求方程
+10x-2=0的近视根。
要求误差不超过0.0005.
四、实验程序
二分法MATLAB程序:
functionx=agui_bisect(fname,a,b,e)
%fname为函数名,a,b为端点,e为精确度
fa=feval(fname,a);
fb=feval(fname,b);
iffa*fb>
0error('
'
);
end
k=0
x=(a+b)/2
while(b-a)>
(2*e)
fx=feval(fname,x);
iffa*fx<
b=x;
fb=fx;
else
a=x;
fa=fx;
end
k=k+1
x=(a+b)/2
End
实验截图:
MATLAB迭代法程序:
functionx=agui_main(fname,x0,e)
%fname为函数名dfname的函数fname的导数,x0为迭代初值
%e为精度,N为最大迭代次数(默认为100)
N=100;
x=x0;
%把x0赋给x,再算x+2*e赋给x0
x0=x+2*e;
k=0;
whileabs(x0-x)>
e&
k<
N%循环条件的控制:
x0-x的绝对值大于某一精度,和迭代次数小于N
k=k+1%显示迭代的第几次
x0=x;
x=(2-exp(x0))/10;
%迭代公式
disp(x)%显示x
ifk==Nwarning('
已达到最大迭代次数'
%如果K=N则输出已达到最大迭代次数
牛顿迭代法MATLAB程序:
functionx=agui_newton(fname,dfname,x0,e)
N=100
N
x0=x;
x=x0-feval(fname,x0)/feval(dfname,x0);
disp(x)
已达最大迭代次数'
5、实验结果和总结
由上面的对二分法、迭代法、牛顿法三种方法的三次实验结果,我们可以得出这样的结论:
二分法要循环k=11次,迭代法要迭代k=5次,牛顿法要迭代k=2次才能达到精度为0.0005的要求,而且方程
+10x-2=0的精确解经计算为0.0905250,计算量从大到小依次是:
二分法,迭代法,牛顿法。
解方程组的直接法
1、实验目的
用高斯消去法解线性方程组Ax=b,式中A为n阶列向量。
并分析选主元的重要性。
二、实验方法
(1)顺序消去法
通过变换,将系数矩阵转换成等价的上三角阵,经过回代,求出方程组的解。
(2)列主元消去法
在第i步时,首先,将
(j<
i)化为零。
在第i列余下的
(j
i)中选择绝对值最大的元素作为主元素,且把它所在的行和第i行交换。
然后利用回代公式
进行回代,求出方程的解。
解下列方程组
=
4、试验程序
顺序高斯消去法MATLAB程序:
functionx=gauss(a,b)
n=length(b);
fork=1:
n-1
ifa(k,k)==0
fprintf('
Error:
the%dthpivotelementequaltozero!
\n'
k);
return;
end
index=[k+1:
n];
m=-a(index,k)/a(k,k);
a(index,index)=a(index,index)+m*a(k,index);
b(index)=b(index)+m*b(k);
x=zeros(n,1);
x(n)=b(n)/a(n,n);
fori=n-1:
-1:
1
x(i)=(b(i)-a(i,[i+1:
n])*x([i+1:
n]))/a(i,i);
结果截图:
列主元消去法MATLAB程序:
functionx=agui_gauss(a,b)
n=length(b);
a=[a,b];
fork=1:
(n-1)
[ar,r]=max(abs(a(k:
n,k)));
r=r+k-1;
ifr>
k
t=a(k,:
a(k,:
)=a(r,:
a(r,:
)=t;
a((k+1):
n,(k+1):
(n+1))=a((k+1):
(n+1))-a((k+1):
n,k)/a(k,k)*a(k,(k+1):
(n+1));
%Lik=Aik/Akk
n,k)=zeros(n-k,1);
a
x=zeros(n,1);
x(n)=a(n,n+1)/a(n,n);
fork=n-1:
1
x(k,:
)=(a(k,n+1)-a(k,(k+1):
n)*x((k+1):
n))/a(k,k);
5、实验结果和总结
当用顺序消去法和列主元消去法求解方程组时,列主消去法比较简单,它保留了化简的第二步,然后一步步的消去,最后再一个个的回代,求出线性方程组的解,顺序消去法过程的乘除法将会产生大量的舍入误差,往往使结果很不可靠,而此题目中列主元消去法能得出精确解,而顺序消去法只能求出近似解,两者所求结果的误差是比较小的,甚至是没有区别的。
解线性方程组的迭代法
用雅克比和高斯塞德尔迭代法解线性方程组Ax=b,式中A为非奇异实矩阵。
在给定迭代初值的情况下,进行迭代,直到满足精度要求。
2、实验方法
(1)雅克比迭代法
设系数矩阵A为非奇异矩阵,且
(i=1,2,...,n),从第i个方程中解出
得其等价形式:
,取初始向量
,可建立I相应的迭代公式:
(2)高斯—塞德尔迭代法
每计算出一个新的分量便立即用它取代对应的旧分量进行迭代,可能收敛更快,据此思想可构造高斯—塞德尔迭代法,其迭代公式为:
三、实验用例
求使
的近似解及相应的迭代次数。
初值选为常向量b。
4、实验程序
雅克比迭代法MATLAB程序:
functionx=agui_jacobi(a,b)
%a为系数矩阵,b为右端向量,X0为初始向量(默认为零向量)
%e为精度,N为最大迭代次数,x为返回解向量
e=1e-6;
x0=zeros(n,1);
d=diag(diag(a));
l=-tril(a,-1);
u=-triu(a,1);
whilenorm(x0-x,inf)>
k=k+1;
x=inv(d)*(l+u)*x+inv(d)*b;
k
disp(x'
)
已达最大次数'
结果截图:
......
高斯-塞德尔迭代法MATLAB代码:
functionx=agui_GS(a,b)
a1=tril(a);
a2=inv(a1);
x=-a2*(a-a1)*x0+a2*b;
formatlong
...
做这两个实验时,由于对课本知识不是很了解所以对程序的内容也不是很熟悉,调试出错了也不容易找到错误原因,在老师的帮助下,我读懂了程序并且找出了其中的错误。
通过实验验证了高斯-塞德尔迭代比雅克比迭代速度快且效果明显。
在计算时要根据实际情况来判断采用哪种方法。
插值问题
用拉格朗日插值和牛顿插值的方法,在已知函数在点
,
,...,
的函数值
的情况下,求插值节点x的函数值y,,即求f(x).并比较结果,说明为什么相等。
二、试验方法
(1)拉格朗日插值
根据
;
构造插值多项式
将插值点x代入上式,就可以得到函数f(x)在点x处的函数近视值。
(2)牛顿插值
牛顿插值公式中各项的系数就是函数f((x)的各阶均差(差商)
,因此,在构造牛顿公式时,常常先把均差列成一个表,此表成为均差表。
从函数表
x
0.4
0.55
0.8
0.9
1
F(x)
0.41075
0.57815
0.88811
1.02652
1.17520
出发,计算f(0.5),f(0.7)及f(0.85)的近似值。
拉格朗日插值MATLAB程序:
functionf=agui_lagrange(x0,y0,x)
n=length(x0);
m=length(x);
formatlong
s=0.0;
n
p=1.0;
forj=1:
ifj~=k
p=p*(x-x0(j))/(x0(k)-x0(j));
end
s=p*y0(k)+s;
f=s;
牛顿插值MATLAB程序:
functionf=agui_newton(x0,y0,x)
m=length(x);
N=0.0;
p=p*(x-x0(k));
T=0.0;
fori=1:
q=1.0;
ifj~=i
q=q*(x0(i)-x0(j));
T=y0(i)/q+T;
N=T*p/(x-x0(k))+N;
f=N;
五、实验结果总结
1、由实验结果可以看出两种方法的计算结果一致
2、当插值多项式从n-1次增加到n次时,拉格朗日型插值必须从新计算所有的基本插值多项式;
对于牛顿插值多项式,只需要表格在计算一个n阶差,然后加上一项就可以了。