数值计算作业.docx

上传人:b****1 文档编号:14408161 上传时间:2023-06-23 格式:DOCX 页数:21 大小:161.30KB
下载 相关 举报
数值计算作业.docx_第1页
第1页 / 共21页
数值计算作业.docx_第2页
第2页 / 共21页
数值计算作业.docx_第3页
第3页 / 共21页
数值计算作业.docx_第4页
第4页 / 共21页
数值计算作业.docx_第5页
第5页 / 共21页
数值计算作业.docx_第6页
第6页 / 共21页
数值计算作业.docx_第7页
第7页 / 共21页
数值计算作业.docx_第8页
第8页 / 共21页
数值计算作业.docx_第9页
第9页 / 共21页
数值计算作业.docx_第10页
第10页 / 共21页
数值计算作业.docx_第11页
第11页 / 共21页
数值计算作业.docx_第12页
第12页 / 共21页
数值计算作业.docx_第13页
第13页 / 共21页
数值计算作业.docx_第14页
第14页 / 共21页
数值计算作业.docx_第15页
第15页 / 共21页
数值计算作业.docx_第16页
第16页 / 共21页
数值计算作业.docx_第17页
第17页 / 共21页
数值计算作业.docx_第18页
第18页 / 共21页
数值计算作业.docx_第19页
第19页 / 共21页
数值计算作业.docx_第20页
第20页 / 共21页
亲,该文档总共21页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

数值计算作业.docx

《数值计算作业.docx》由会员分享,可在线阅读,更多相关《数值计算作业.docx(21页珍藏版)》请在冰点文库上搜索。

数值计算作业.docx

数值计算作业

数值计算

作业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;

输入并得到结果为:

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

当前位置:首页 > 经管营销 > 经济市场

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2