2016矩阵与数值分析上机作业满分.docx

上传人:聆听****声音 文档编号:611123 上传时间:2023-04-29 格式:DOCX 页数:25 大小:160.55KB
下载 相关 举报
2016矩阵与数值分析上机作业满分.docx_第1页
第1页 / 共25页
2016矩阵与数值分析上机作业满分.docx_第2页
第2页 / 共25页
2016矩阵与数值分析上机作业满分.docx_第3页
第3页 / 共25页
2016矩阵与数值分析上机作业满分.docx_第4页
第4页 / 共25页
2016矩阵与数值分析上机作业满分.docx_第5页
第5页 / 共25页
2016矩阵与数值分析上机作业满分.docx_第6页
第6页 / 共25页
2016矩阵与数值分析上机作业满分.docx_第7页
第7页 / 共25页
2016矩阵与数值分析上机作业满分.docx_第8页
第8页 / 共25页
2016矩阵与数值分析上机作业满分.docx_第9页
第9页 / 共25页
2016矩阵与数值分析上机作业满分.docx_第10页
第10页 / 共25页
2016矩阵与数值分析上机作业满分.docx_第11页
第11页 / 共25页
2016矩阵与数值分析上机作业满分.docx_第12页
第12页 / 共25页
2016矩阵与数值分析上机作业满分.docx_第13页
第13页 / 共25页
2016矩阵与数值分析上机作业满分.docx_第14页
第14页 / 共25页
2016矩阵与数值分析上机作业满分.docx_第15页
第15页 / 共25页
2016矩阵与数值分析上机作业满分.docx_第16页
第16页 / 共25页
2016矩阵与数值分析上机作业满分.docx_第17页
第17页 / 共25页
2016矩阵与数值分析上机作业满分.docx_第18页
第18页 / 共25页
2016矩阵与数值分析上机作业满分.docx_第19页
第19页 / 共25页
2016矩阵与数值分析上机作业满分.docx_第20页
第20页 / 共25页
亲,该文档总共25页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

2016矩阵与数值分析上机作业满分.docx

《2016矩阵与数值分析上机作业满分.docx》由会员分享,可在线阅读,更多相关《2016矩阵与数值分析上机作业满分.docx(25页珍藏版)》请在冰点文库上搜索。

2016矩阵与数值分析上机作业满分.docx

第一题

考虑计算给定向量的范数:

输入向量x=x1,x2,…,xnT,输出x1,x2,x∞。

请编制一个通用程序,并用你编制的程序计算如下向量的范数:

x=1,12,13,…,1nT,y=1,2,…,nT.

对n=10,100,1000甚至更大的n计算其范数,你会发现什么结果?

你能否修改你的程序使得计算结果相对精确呢?

代码:

functionProblem1()

clc

N=input('inputN=');

X=zeros(1,N);

Y=1:

N;

fori=1:

N

X(i)=1/i;

end

x1=0;

x2=0;

y1=0;

y2=0;

fori=1:

N

x1=x1+abs(X(i));

x2=x2+X(i)*X(i);

y1=y1+abs(Y(i));

y2=y2+Y(i)*Y(i);

end

x1;

x2=sqrt(x2);

x3=max(abs(X));

y1;

y2=sqrt(y2);

y3=max(abs(Y));

fprintf('x的1范数是%.2f\n',x1);

fprintf('x的2范数是%.2f\n',x2);

fprintf('x的无穷范数是%.2f\n',x3);

fprintf('y的1范数是%.2f\n',y1);

fprintf('y的2范数是%.2f\n',y2);

fprintf('y的无穷范数是%.2f\n',y3);

结果:

inputN=10

x的1范数是2.93

x的2范数是1.24

x的无穷范数是1.00

y的1范数是55.00

y的2范数是19.62

y的无穷范数是10.00

inputN=100

x的1范数是5.19

x的2范数是1.28

x的无穷范数是1.00

y的1范数是5050.00

y的2范数是581.68

y的无穷范数是100.00

inputN=1000

x的1范数是7.49

x的2范数是1.28

x的无穷范数是1.00

y的1范数是500500.00

y的2范数是18271.11

y的无穷范数是1000.00

第二题

考虑y=fx=ln⁡(1+x)x,其中定义f(0)=1,此时f(x)是连续函数。

用此公式计算当x∈-10-15,10-15时的函数值,画出图像。

另一方面,考虑下面算法:

d=1+x

ifd=1then

y=1

else

y=lnd/(d-1)

endif

用此算法计算x∈-10-15,10-15时的函数值,画出图像。

比较一下发生了什么?

代码:

functionproblem2()

clc

N=1000;

n=2*10^(-15)/N;

%公式计算

f=zeros(1,N+1);

t=1;

fori=-10^(-15):

n:

10^(-15)

if(i~=0)

f(t)=log(1+i)/i;

else

f(t)=1;

end

t=t+1;

end

%算法计算

a=zeros(1,N+1);

t=1;

fori=-10^(-15):

n:

10^(-15)

d=1+i;

if(d~=1)

a(t)=log(d)/(d-1);

else

a(t)=1;

end

t=t+1;

end

%画图,左边是公式算的,右边是算法算的

subplot(1,2,1);

plot(-10^(-15):

n:

10^(-15),f);

holdon

subplot(1,2,2);

plot(-10^(-15):

n:

10^(-15),a);

holdon

结果:

第三题

首先编制一个利用秦九韶算法计算一个多项式在给定点的函数值的通用程序,你的程序包括输入多项式的系数以及给定点,输出函数值。

利用你编制的程序计算

px=x-29=x9-18x8+144x7-672x6+2016x5-4032x4+5376x3-4608x2-512在x=2邻域附近的值。

画出px在x∈1.95,20.5上的图像。

代码:

functionproblem3()

%秦九韶算法

clc

n=9;

c=[1,-18,144,-672,2016,-4032,5376,-4608,2304,-512];

N=100;

m=(2.05-1.95)/N;

y=zeros(1,N+1);

ydex=0;

forx=1.95:

m:

2.05

ydex=ydex+1;

dex=1;

temp=c(dex);

whiledex<=n

dex=dex+1;

temp=temp*x+c(dex);

end

y(ydex)=temp;

end

plot(1.95:

m:

2.05,y);

结果:

第四题

编制计算给定矩阵A的LU分解和PLU分解的通用程序,然后用你编制的程序完成下面两个计算任务:

(1)考虑

A=10⋯-1⋱⋱⋮⋱⋱0⋮01⋮1-1⋯-111-1⋯-1-11∈Rn×n,

自己取定x∈Rn,并计算b=Ax。

然后用你编制的不选主元和列主元的Gauss消去法求解该方程组,记你计算出的解为x。

对n从5到30估计计算解的精度。

(2)对n从5到30计算其逆矩阵。

代码:

%LU分解

functionproblem4()

clc

%生成矩阵A

forn=5:

30

A=-ones(n);

A(:

n)=ones(n,1);

foria=1:

n

A(ia,ia)=1;

forja=(ia+1):

(n-1)

A(ia,ja)=0;

end

end

x=rand(n,1);

b=A*x;

%LU分解

[n,n]=size(A);

L=eye(n);

M=eye(n);

fori=1:

n-1

ifA(i,i)==0

fprintf('Error:

A(%d,%d)=0!

\n',i,i);return;

end

forj=i+1:

n

L(j,i)=A(j,i)/A(i,i);

end

fork=i+1:

n

forl=i:

n

A(k,l)=A(k,l)-L(k,i)*A(i,l);

end

end

end

U=A;

M=inv(U)*inv(L)*M

y1=inv(L)*b;

x1=inv(U)*y1;

error=norm(x-x1)

end

return;

%PLU分解

functionproblem4()

clc

%生成矩阵A

n=5;

A=-ones(n);

A(:

n)=ones(n,1);

foria=1:

n

A(ia,ia)=1;

forja=(ia+1):

(n-1)

A(ia,ja)=0;

end

end

x=rand(n,1);

b=A*x;

%PLU分解

[n,n]=size(A);

Q=eye(n);

R=eye(n);

S=eye(n);

L=zeros(n,n,n-1);

foril=1:

(n-1)

L(:

:

il)=eye(n);

end

P=zeros(n,n,n-1);

foril=1:

(n-1)

P(:

:

il)=eye(n);

end

fori=1:

n-1

m=i;

a=abs(A(i,i));

fork=i+1:

n

ifabs(A(k,i))>a

a=abs(A(k,i));

m=k;

end

end

A([i,m],:

)=A([m,i],:

);

P([i,m],:

i)=P([m,i],:

i);

forj=i+1:

n

L(j,i,i)=-A(j,i)/A(i,i);

forl=i:

n

A(j,l)=A(j,l)+L(j,i,i)*A(i,l);

end

end

end

U=A;

U

forx=1:

n-1

Q=L(:

:

x);

fory=x+1:

n-1

Q=P(:

:

y)*Q*P(:

:

y);

end

S=S*inv(Q);

end

%L矩阵

S

forz=1:

(n-1)

R=P(:

:

z)*R;

end

%P矩阵

R

b1=R*b;

b2=inv(S)*b1;

x2=inv(U)*b2;

M=inv(U)*inv(S)*R

error=norm(x-x2)

结果:

由于篇幅有限仅列出n=5时的精度及逆矩阵

LU分解

M=

0.5000-0.2500-0.1250-0.0625-0.0625

00.5000-0.2500-0.1250-0.1250

000.5000-0.2500-0.2500

0000.5000-0.5000

0.50000.25000.12500.06250.0625

error=

8.8818e-16

PLU分解

M=

0.5000-0.2500-0.1250-0.0625-0.0625

00.5000-0.2500-0.1250-0.1250

000.5000-0.2500-0.2500

0000.5000-0.5000

0.50000.25000.12500.06250.0625

error=

7.8516

第五题

编制计算对称正定阵的Cholesky分解的通用程序,并用你编制的程序计算Ax=b,其中A=aijϵRn×n,aij=1i+j-1。

b可以由你自己取定,对n从10到20验证程序的可靠性。

代码:

functionproblem5()

%cholesky分解

clc

%生成矩阵A

N=10;

A=zeros(N);

foria=1:

N

forja=1:

N

A(ia,ja)=1/(ia+ja-1);

end

end

L=chol(A);

L

结果:

由于篇幅有限仅列出n=10时的L矩阵

L=

1.00000.50000.33330.25000.20000.16670.14290.12500.11110.1000

00.28870.28870.25980.23090.20620.18560.16840.15400.1417

000.07450.11180.12780.13310.13310.13040.12650.1220

0000.01890.03780.05250.06300.07020.07480.0777

00000.00480.01190.01950.02650.03260.0378

000000.00120.00360.00680.01030.0139

0000000.00030.00110.00220.0038

00000000.00010.00030.0007

000000000.00000.0001

0000000000.0000

第六题

(1)编制程序House(x),其作用是对输入的向量x,输出单位向量u使得I-2uuTx=x2e1。

(2)编制Householder变换阵H=I-2uuTϵRn×n乘以AϵRn×m的程序HA,注意,你的程序并不显式的计算出H。

(3)考虑矩阵

A=123-132-22e43π-102-302775/2,

用你编制的程序计算H使得HA的第一列为αe1的形式,并将HA的结果显示。

代码:

functionproblem6()

clc

x=[1;-1;-2;-10^(1/2);0];

ifx

(1)>0

sg=1;

else

sg=-1;

end

Nx=length(x);

e1=zeros(Nx,1);

e1

(1)=1;

sum=0;

fori=1:

Nx

sum=sum+x(i)*x(i);

end

x2=sqrt(sum);

clearsum;

w=x-sg*x2*e1;

u=w/sqrt(w'*w);

u

%生成矩阵A

A=[1,2,3,4;-1,3,2^(1/2),3^(1/2);-2,-2,exp

(1),pi;-10^(1/2),2,-3,7;0,2,7,5/2];

H=eye(Nx)-2*u*u';

H*A

结果:

u=

-0.6124

-0.2041

-0.4082

-0.6455

0

ans=

4.0000-0.83111.4090-6.5378

0.00002.05630.8839-1.7805

0.0000-3.88741.6576-3.8836

0.0000-0.9843-4.6770-4.1078

02.00007.00002.5000

第七题

用Jacobi和Gauss-Seidel迭代求解下面的方程组,输出迭代每一步的误差xk-x∅:

5x1-x2-3x3=-2-x1+2x2+4x3=1-3x1+4x2+15x3=10

代码:

functionproblem7()

clc

inter=10;%迭代次数

rx=[69*7/61-8,69*3/(61*2)-7/2,69/61]';

%根据题意生成A,b

A=[5-1-3;-124;-3415];

b=[-2110]';

N=length(b);

x=ones(N,1);

%Jacobi迭代法

L=zeros(N,N);

D=L;

U=L;

foria=1:

N

D(ia,ia)=A(ia,ia);

ifia

foriu=(ia+1):

N

U(ia,iu)=A(ia,iu);

end

end

ifia>1

foril=1:

(ia-1)

L(ia,il)=-A(ia,il);

end

end

end

forintt=1:

inter

x=inv(D)*(L+U)*x+inv(D)*b;

wuca1=0;

%求误差

forix=1:

N

wuca1=wuca1+(x(ix)-rx(ix))^2;

end

wuca1

end

%G-S迭代法

forintt=1:

inter

x=inv(D-L)*U*x+inv(D-L)*b;

wuca2=0;

%求误差

forix=1:

N

wuca2=wuca2+(x(ix)-rx(ix))^2;

end

wuca2

end

结果:

wuca1=

24.6036

wuca1=

12.3259

wuca1=

1.9276

wuca1=

5.4520

wuca1=

15.9787

wuca1=

10.0748

wuca1=

3.6731

wuca1=

6.2770

wuca1=

11.9670

wuca1=

8.9591

wuca2=

5.5096

wuca2=

9.1425

wuca2=

6.9372

wuca2=

8.0757

wuca2=

7.4675

wuca2=

7.7807

wuca2=

7.6170

wuca2=

7.7018

wuca2=

7.6577

wuca2=

7.6806

第八题

取不同的初值用Newton迭代以及弦截法求方程x3+2x2+10x-100=0的实根,列表或者画图说明收敛速度。

代码:

functionproblem8()

%inNew记录Newton迭代法的收敛速度

%inS记录弦截法的收敛次数

clc

chuzhi=4;%初值

f=[];

%Newton迭代

x=chuzhi;

forinNew=1:

inter

xx=x-(x^3+2*x^2+10*x-100)/(3*x^2+4*x+10);

f(inNew)=x;

ifabs(xx-x)<10^(-5)

break;

end

x=xx;

end

subplot(1,2,1);

plot(1:

inNew,f);

holdon

clearf;

inNew

xx

%弦截法

xk=chuzhi;

xkr=chuzhi-1;

forinS=1:

inter

xka=xk-(xk^3+2*xk^2+10*xk-100)*(xk-xkr)/((xk^3+2*xk^2+10*xk-100)-(xkr^3+2*xkr^2+10*xkr-100));

f(inS)=xk;

ifabs(xka-xk)<10^(-5)%精度10^(-5)

break;

end

xkr=xk;

xk=xka;

end

subplot(1,2,2);

plot(1:

inS,f);

holdon

inS

xka

结果:

inNew=

7

xx=

3.4606

inS=

10

xka=

3.4606

结果:

第九题

用二分法求方程excosx+2=0在区间0,4π上的所有根。

代码:

functionproblem9()

%二分法求解方程

clc

%查看根的个数

N=50;

yk=zeros(1,N+1);

h=4*pi/N;

e=[];

c=[];

i=1;

forti=0:

h:

4*pi

e(i)=-2/(exp(ti));

c(i)=cos(ti);

i=i+1;

end

plot(0:

h:

4*pi,e);

holdon

plot(0:

h:

4*pi,c);

%根的取值范围

min=[14710];

max=[25811];

accr=zeros(1,4);

acc=0.0001;%精度

forr=1:

4

while(max(r)-min(r)>acc)

ymax=exp(max(r))*cos(max(r))+2;

temp=(max(r)+min(r))/2;

ytemp=exp(temp)*cos(temp)+2;

ifytemp*ymax==0

break;

else

ifytemp*ymax>0

max(r)=temp;

else

min(r)=temp;

end

end

end

accr(r)=temp;

end

accr

结果:

accr=

1.88074.69407.854810.9955

第十题

考虑函数f(x)=sin(πx),x∈[0,1]。

用等距节点作f(x)的Newton插值,画出插值多项式以及f(x)的图像,观察收敛性。

代码:

functionf=Newton(x,y)

symst;

n=length(x);

c(1:

n)=0;

f=y

(1);

y1=0;

p=1;

fori=1:

n-1

forj=i+1:

n

y1(j)=(y(j)-y(i))/(x(j)-x(i));

end

c(i)=y1(i+1);

p=p*(t-x(i));

f=f+c(i)*p;

y=y1;

end

f=simplif

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

当前位置:首页 > IT计算机 > 电脑基础知识

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

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