计算方法实验报告Word格式文档下载.docx

上传人:b****4 文档编号:17612912 上传时间:2022-12-07 格式:DOCX 页数:20 大小:306.16KB
下载 相关 举报
计算方法实验报告Word格式文档下载.docx_第1页
第1页 / 共20页
计算方法实验报告Word格式文档下载.docx_第2页
第2页 / 共20页
计算方法实验报告Word格式文档下载.docx_第3页
第3页 / 共20页
计算方法实验报告Word格式文档下载.docx_第4页
第4页 / 共20页
计算方法实验报告Word格式文档下载.docx_第5页
第5页 / 共20页
点击查看更多>>
下载资源
资源描述

计算方法实验报告Word格式文档下载.docx

《计算方法实验报告Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《计算方法实验报告Word格式文档下载.docx(20页珍藏版)》请在冰豆网上搜索。

计算方法实验报告Word格式文档下载.docx

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阶差,然后加上一项就可以了。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 初中教育 > 语文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1