数值计算作业.docx
- 文档编号:14408161
- 上传时间:2023-06-23
- 格式:DOCX
- 页数:21
- 大小:161.30KB
数值计算作业.docx
《数值计算作业.docx》由会员分享,可在线阅读,更多相关《数值计算作业.docx(21页珍藏版)》请在冰点文库上搜索。
数值计算作业
数值计算
作业1:
方程求根的二分法
第一步:
在MATLAB软件中,建立一个实现二分法的MATLAB函数文件xy01.m如下:
function[x_star,k]=xy01(fun,a,b,e)
ifnargin<4;end
fa=feval(fun,a);fb=feval(fun,b);
iffa*fb>0x_star=[fa,fb];k=0;return;end
k=1;
whileabs(b-a)/2>e
x=(a+b)/2;fx=feval(fun,x);
iffx*fa<0
b=x;fb=fx;
else
a=x;fa=fx;
end
k=k+1;
end
x_star=(a+b)/2;
第二步:
(1)在MATLAB命令窗口求解方程sinx+9x-2=0在自变量区间[0,1]上的近似实根,并使误差不超过
。
输入并得到结果如下图
即结果为0.1997,二分次数为11次。
(2)改变输入参数,计算误差不超过
的近似实根,并给出二分的次数,输入并得到结果如下图:
即结果为0.2001,二分次数为35次。
实验分析与结论:
由上面二分法的实验结果,我们可以得出这样的结论:
二分法要循环k=11次,才能达到精度为
的要求。
要循环35次,才能达到精度为
的要求。
作业2:
方程求根的迭代法
第一步:
在MATLAB软件中,建立一个实现二分法的MATLAB函数文件xy02.m如下:
function[z,k]=xy02(fun,x0,ep,Nmax)
ifnargin<4
Nmax=500;
end
ifnargin<3
ep=1e-5;
end
x=x0;
x0=x+2*ep;
k=0;
whileabs(x0-x)>ep&k x0=x; x=feval(fun,x0) k=k+1 end z=x; ifk==Nmaxwaring; end 第二步: (1)在MATLAB命令窗口求解方程sinx+9x-2=0在自变量区间[0,1]上的近似实根,并使误差不超过 。 输入并得到结果如下图: 即结果为0.2002,循环次数为4次。 (2)精度为 时输入命令: 得到结果为 即结果为0.2001,循环12次。 作业3: 应用牛顿切线法求方程的根 第一步: 在MATLAB软件中,建立一个实现二分法的MATLAB函数文件xy03.m如下: function[z,k]=xy03(fname,dfname,x0,ep,Nmax) ifnargin<5 Nmax=500; end ifnargin<4 ep=1e-5; end x=x0; x0=x+2*ep; k=0; whileabs(x0-x)>ep&k k=k+1 x0=x; x=x0-feval(fname,x0)/feval(dfname,x0); end z=x; ifk==Nmaxwaring; end (1)精度为 ,输入命令并得到结果如下图: 即结果为0.2001,迭代3次。 (2)精度为 ,输入命令并得到结果如下图: 即结果为0.2001,迭代4次。 作业4: 应用迭代法解线性方程组 第一步: 在MATLAB软件中,建立一个实现二分法的MATLAB函数文件xy05.m如下: function[x,k]=xy05(A,b,x0,ep,Nmax) n=length(A);k=0; ifnargin<5Nmax=500;end ifnargin<4ep=1e-5;end ifnargin<3x0=zeros(n,1);y=zeros(n,1);end x=x0';x0=x+2*ep; whilenorm(x0-x,inf)>ep&k fori=1: n y(i)=b(i); forj=1: n ifj~=i y(i)=y(i)-A(i,j)*x0(j); end end ifabs(A(i,i))<1e-10|k==Nmax warning('已迭代上限次数') return end y(i)=y(i)/A(i,i); end x=y; end 输入命令并得到结果如下图: 编写高斯—赛德尔迭代法求解线性方程组的程序如下: function[x,k]=xy06(A,b,x0,ep,Nmax) n=length(b) ifnargin<5Nmax=500;end ifnargin<4ep=1e-5;end ifnargin<3x0=zeros(n,1);end x0=sparse(x0);b=sparse(b);A=sparse(A); x=x0;x0=x+2*ep;x0=sparse(x0);k=0;A1=tril(A);iA1=inv(A1); whilenorm(x0-x,'inf')>ep&k x0=x;x=-iA1*(A-A1)*x0+iA1*b; end x=full(x);ifk==Nmaxwarming('已迭代上限次数');end 作业5: 牛顿插值法 第一步: 在MATLAB软件中,建立一个实现二分法的MATLAB函数文件xy08.m如下: functionyi=xy08(x,y,xi) n=length(x); m=length(y); ifn~=m error; return; end Y=zeros(n); Y(: 1)=y'; fork=1: n-1 fori=1: n-k ifabs(x(i+k)-x(i)) error; return; end Y(i,k+1)=(Y(i+1,k)-Y(i,k))/(x(i+k)-x(i)); end end yi=0; fori=1: n z=1; fork=1: i-1 z=z.*(xi-x(k)); end yi=yi+Y(1,i)*z; end 输入命令并得到结果如下图: 作业6: 拟合 第一步: 在MATLAB软件中,建立一个实现二分法的MATLAB函数文件xy09.m如下: functionp=xy09(x,y,m) A=zeros(m+1,m+1); fori=0: m forj=0: m A(i+1,j+1)=sum(x.^(i+j)); end b(i+1)=sum(x.^i.*y); end a=A\b';p=fliplr(a'); 输入并得到结果为: 作业7: Romberg求积算法 第一步: 在MATLAB软件中,建立一个实现二分法的MATLAB函数文件xy10.m如下: functiont=xy10(f,a,b,ep) ifnargin<4,ep=1e-5;end i=1;j=1;h=b-a; T(i,1)=h/2*(feval(f,a)+feval(f,b)); T(i+1,1)=T(i,1)/2+sum(feval(f,a+h/2: b-h/2+0.001*h))*h/2; T(i+1,j+1)=4^j*T(i+1,j)/(4^j-1)-T(i,j)/(4^j-1); whileabs(T(i+1,i+1)-T(i+1,1))>ep i=i+1;h=h/2; T(i+1,1)=T(i,1)/2+sum(feval(f,a+h/2: h: b-h/2+0.001*h))*h/2; forj=1: i T(i+1,j+1)=4^j*T(i+1,j)/(4^j-1)-T(i,j)/(4^j-1); end end T t=T(i+1,j+1) I=t 输入并得到结果为: 作业8: Gauss求积算法 第一步: 在MATLAB软件中,建立一个实现二分法的MATLAB函数文件xy11.m如下: functionI=xy11(fun,a,b,ep) N=1; h=(b-a)/N;I=0; fork=1: N t=[-sqrt(3/5)0sqrt(3/5)];A=[5/98/95/9]; F=feval(fun,h/2*t+a+(k-1/2)*h); I=I+sum(A.*F); end A=h/2*I; N=N+1; h=(b-a)/N;I=0; fork=1: N t=[-sqrt(3/5)0sqrt(3/5)];A=[5/98/95/9]; F=feval(fun,h/2*t+a+(k-1/2)*h); I=I+sum(A.*F); end B=h/2*I; whileabs(A-B)>ep N=N+1;h=(b-a)/N;I=0; fork=1: N t=[-sqrt(3/5)0sqrt(3/5)];A=[5/98/95/9]; F=feval(fun,h/2*t+a+(k-1/2)*h); I=I+sum(A.*F); end A=B; B=h/2*I; end I=B; N 输入命令并得到结果为: 作业9: 应用高斯消元法求解线性方程组 第一步: 在MATLAB软件中,建立一个实现二分法的MATLAB函数文件xy04.m如下: functionx=xy04(A,b) K=length(A); L=eye(K);U=zeros(K); U(1,: )=A(1,: ); L(2: K,1)=A(2: K,1)/U(1,1); fork=2: K U(k,k: K)=A(k,k: K)-L(k,1: k-1)*U(1: k-1,k: K); L(k+1: K,k)=(A(k+1: K,k)-L(k+1: K,1: k-1)*U(1: k-1,k))/U(k,k); end L U A=[A';b]',n=length(b); fork=1: n-1 fori=k+1: n m=A(i,k)/A(k,k); forj=k: n+1 A(i,j)=A(i,j)-m*A(k,j); end end disp(A) end A(n,n+1)=A(n,n+1)/A(n,n); fori=n-1: -1: 1 t=0; forj=i+1: n t=t+A(i,j)*A(j,n+1); end A(i,n+1)=(A(i,n+1)-t)/A(i,i); end x=A(: n+1); x 输入并得到结果为: 作业10: 拉格朗日插值法 第一步: 在MATLAB软件中,建立一个实现二分法的MATLAB函数文件xy07.m如下: functionyi=xy07(x,y,xi) m=length(x);n=length(y);p=length(xi); ifm~=n error; end s=0; fork=1: n t=ones(1,p); forj=1: n ifj~=k, t=t.*(xi-x(j))/(x(k)-x(j)); end end s=s+t*y(k); end yi=s; 输入并得到结果为:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数值 计算 作业