矩阵与数值分析上机作业满分.docx
- 文档编号:469795
- 上传时间:2022-10-10
- 格式:DOCX
- 页数:32
- 大小:190.03KB
矩阵与数值分析上机作业满分.docx
《矩阵与数值分析上机作业满分.docx》由会员分享,可在线阅读,更多相关《矩阵与数值分析上机作业满分.docx(32页珍藏版)》请在冰豆网上搜索。
矩阵与数值分析上机作业满分
-标准化文件发布号:
(9456-EUATWK-MWUB-WUNN-INNUL-DDQTY-KII
2016矩阵与数值分析上机作业满分
第一题
考虑计算给定向量的范数:
输入向量,输出。
请编制一个通用程序,并用你编制的程序计算如下向量的范数:
对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
第二题
考虑,其中定义f(0)=1,此时f(x)是连续函数。
用此公式计算当时的函数值,画出图像。
另一方面,考虑下面算法:
d=1+x
ifd=1then
y=1
else
y=lnd/(d-1)
endif
用此算法计算时的函数值,画出图像。
比较一下发生了什么
代码:
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
结果:
第三题
首先编制一个利用秦九韶算法计算一个多项式在给定点的函数值的通用程序,你的程序包括输入多项式的系数以及给定点,输出函数值。
利用你编制的程序计算
在x=2邻域附近的值。
画出上的图像。
代码:
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)考虑
自己取定,并计算b=Ax。
然后用你编制的不选主元和列主元的Gauss消去法求解该方程组,记你计算出的解为。
对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,其中。
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使得。
(2)编制Householder变换阵乘以的程序HA,注意,你的程序并不显式的计算出H。
(3)考虑矩阵
用你编制的程序计算H使得HA的第一列为的形式,并将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);
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 矩阵 数值 分析 上机 作业 满分
![提示](https://static.bdocx.com/images/bang_tan.gif)