2016级矩阵与数值分析上机作业Word格式.docx
- 文档编号:13068341
- 上传时间:2022-10-04
- 格式:DOCX
- 页数:72
- 大小:659.92KB
2016级矩阵与数值分析上机作业Word格式.docx
《2016级矩阵与数值分析上机作业Word格式.docx》由会员分享,可在线阅读,更多相关《2016级矩阵与数值分析上机作业Word格式.docx(72页珍藏版)》请在冰豆网上搜索。
ø
y=(1,2,3,...,n)T
对n=10,100,1000甚至更大的n计算其范数,你会发现什么结果?
你能否修改你的程序使得计算结果相对精确呢?
(1)计算范数的程序
function[Nor1,Nor2,Nor3]=Nor(a)b=length(a);
formatlongNor11=0;
formatlongNor21=0;
i=1;
whilei<
=b
Nor11=Nor11+abs(a(i));
Nor21=Nor21+a(i)^2;
t=a
(1);
ifabs(a(i))>
t
t=abs(a(i));
endi=i+1;
end
Nor1=Nor11;
%计算1范数
Nor2=sqrt(Nor21);
%计算2范数Nor3=t;
%计算无穷范数end
(2)x与y向量的程序
functiona=afun(n)a=zeros(n);
a
(1)=1;
fori=1:
1:
n;
a(i)=1/i;
endend
functionb=bfun(n)b=zeros(n);
b
(1)=1;
b(i)=i;
运行:
>
n=10;
a=afun(n);
b=bfun(n);
[f1,f2,f3]=Nor(a);
[h1,h2,h3]=Nor(b);
f1
=2.928968253968254 f2=1.244896674895769
f3=
1
h1
=55 h2=19.621416870348583
h3=
10
n=100;
b=bfun(n);
[f1,f2,f3]=Nor(a);
[h1,h2,h3]=Nor(b);
f1=5.187377517639621 f2=1.278664889713052 f3=1h1=5050 h2=5.816786054171153e+02 h3=100
n=1000;
f1=7.485470860550343 f2=1.282160117411847 f3=1h1=500500 h2=1.827111107732642e+04 h3=1000
上述结果由于MATLAB的高精度运算较为准确,但是由于当n非常大时可能会出现了大
数吃小数的现象使误差增大,而y向量的范数结果较为准确是由于y向量是按从小到大排列。
改进范数计算程序使输入序列按从小到大排列再计算其范数:
function[Nor1,Nor2,Nor3]=Nor(c)a=sort(c);
b=length(a);
Nor21=Nor21+a(i)^2;
ifabs(a(i))>
%计算2范数
Nor3=t;
%计算无穷范数
end
2.考虑y=
f(x)=ln(x+1),其中定义f(0)=1,此时f(x)是连续函数。
用此公式计算当
x
xÎ
[-10-15,10-15
时的函数值,画出图像。
另一方面,考虑下面算法:
d=x+1ifd=1theny=1
else
y=lnd/(d-1)
endif
用此算法计算x∈[−10−15,10−15]时的函数值,画出图像。
比较一下发生了什么?
函数:
functionF=Piecewise1_x(x)
F=log(x+1)/x*(x<
0)+1*(x>
=0&
x<
=0)+log(x+1)/x*(x>
0);
functionF=Piecewise2_x(x)
F=log(x)/(x-1)*(x<
1)+1*(x>
=1&
=1)+log(x)/(x-1)*(x>
1);
clcclear
x=linspace(-10^(-15),10^(-15));
d=x+1;
%原来图像(红色曲线)
F=Piecewise1_x(x);
%计算相应函数值plot(x,F,'
r'
);
%绘制曲线
holdon;
%改变算法后的图像(蓝色曲线)
F1=Piecewise2_x(d);
%计算相应函数值plot(x,F1,'
b'
plot(0*ones(1,2),ylim,'
g:
'
%画区间间隔线
plot(xlim,1*ones(1,2),'
%画区间间隔线xlabel('
变量X'
)
ylabel('
变量Y1&
Y2'
由上图可知改变后的算法画出的曲线(蓝色)比直接画出的曲线(红色)更贴近实际值误差更小,且由于ln(x+1)<
=x所以不会出现小数做除数导致误差增大。
这可能是因为在原算法中x+1出现了大数吃小数的现象导致的结果。
3.首先编制一个利用秦九韶算法计算一个多项式在给定点的函数值的通用程序,
你的程序包括输入多项式的系数以及给定点,输出函数值。
利用你编制的程序计算
p(x)=(x-2)9=x9-18x8+144x7-672x6+2016x5-4032x4+5376x3-4608x2+2304x-512
在x=2邻域附近的值。
画出p(x)在x∈[1.95,20.5]上的图像。
秦九韶算法程序:
function p=p(a,x)n=length(a);
p=a(n);
fori=n:
-1:
2pi=p.*x+a(i-1);
p=pi;
x=linspace(1.95,20.5);
a=[-512,2304,-4608,5376,-4032,2016,-672,144,-18,1];
F=p(a,x);
%绘制曲线holdon;
4.编制计算给定矩阵A的LU分解和PLU分解的通用程序,然后用你编制的程序完成下面两个计算任务:
(1)考虑:
é
1 0
ê
-1O
A=ê
M O
-1L
ë
-1L
L 0
O M
O 0
-1 1
-1 -1
1ù
M
ú
1ú
û
自己取定xÎ
Rn,并计算b=Ax,然后利用你编制的不选主元和列主元的
L
Gausss消去法求解该方程组,记你算的解为x,对n从5到30估计计算解得精
度。
(2)对n从5到30计算其逆矩阵
(1)
1.LU分解
%LU分解通用程序
function[L,U]=zlu(A)
%ZLU-LUdecompositionformatrixA
%workasgausselimination[m,n]=size(A);
ifm~=n
error('
Error,currenttimeonlysupportsquarematrix'
L=zeros(n);
U=zeros(n);
fork=1:
gauss_vector=A(:
k);
gauss_vector(k+1:
end)=gauss_vector(k+1:
end)./gauss_vector(k);
gauss_vector(1:
k)=zeros(k,1);
L(:
k)=gauss_vector;
L(k,k)=1;
forl=k+1:
A(l,:
)=A(l,:
)-gauss_vector(l)*A(k,:
U=A;
%LU误差分析程序
function d=zlu1(n)x1=zeros(n,1);
x=zeros(n,1);
nx1(i)=i;
endA=zeros(n,n);
fori=1:
forj=1:
nifi>
jA(i,j)=-1;
elseif (i<
j)&
(j<
n)A(i,j)=0;
elseA(i,j)=1;
endb=A*x1;
[L,U]=zlu(A);
y=zeros(n,1);
y
(1)=b
(1);
fori=2:
y(i)=b(i)-sum(L(i,1:
i-1)'
.*y(1:
i-1));
%yx(n)=y(n)/U(n,n);
fori=n-1:
x(i)=(y(i)-sum(U(i,i+1:
n)'
.*x(i+1:
n)))/U(i,i);
%x
d=norm(x1-x);
%计算算法误差end
cleard=zeros(26,1);
forn=5:
30
d(n-4)=zlu1(n);
endd1=d'
;
d1
d1=
Columns1through9
0 0 0 0 0 0 0 0 0
Columns10through18
Columns19through26
0 0 0 0 0 0 0 0
由程序计算结果可知,LU分解计算程序计算误差非常小,基本无误差计算
2.PLU分解
%PLU分解,PA=LU
function[P,L,U]=PLU(A)formatratB=A;
[m,n]=size(B);
Q=[1:
m]'
P=zeros(m);
x=zeros(1,m);
m
forj=i+1:
%--------交换行--
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2016 矩阵 数值 分析 上机 作业