matlab简明教程.docx
《matlab简明教程.docx》由会员分享,可在线阅读,更多相关《matlab简明教程.docx(39页珍藏版)》请在冰点文库上搜索。
matlab简明教程
实验1Matlab初步
一、问题
已知矩阵A、B、b如下:
应用Matlab软件进行矩阵输入及各种基本运算。
二、实验目的
三、实验知识
1、线性代数中的矩阵及其初等变换、向量组的线性相关性等知识。
2、Matlab软件的相关命令提示如下;
(1)选择A的第i行做一个行向量:
ai=A(i,:
);
(2)选择A的第j行做一个列向量:
ai=A(j,:
);
(3)选择A的某几行、某几列上的交叉元素做A的子矩阵:
A([行号],[列号]);
(4)n阶单位阵:
eye(n);n阶零矩阵:
zeros(n);
(5)做一个n维以0或1为元素的索引向量L,然后取A(:
L),L中值为1的对应的列将被取到。
(6)将非奇异矩阵A正交规范化,orth(A);验证矩阵A是否为正交阵,只需做A*A'看是否得到单位阵E。
(7)两个行向量a1和a2的内积:
a1*a2'。
(8)让A的第i行与第j列互换可用赋值语句:
A([i,j],:
)=A([j,i],:
);
(9)让K乘以A的第i行可用赋值语句:
A(i,:
)=K*A(i,:
);
(10)让A的第i行加上第j行的K倍可用赋值语句:
A(i,:
)=A(i,:
)+K*A(j,:
);
(11)求列向量组的A的一个极大线性无关向量组可用命令:
rref(A)将A化成阶梯形行的最简形式,其中单位向量对应的列向量即为极大线性无关向量组所含的向量,其它列向量的坐标即为其对应向量用极大线性无关组线性表示的系数。
四、实验的内容与要求
1、请在MATLAB直接输入下列常数,看它们的值是多少:
解:
>>epse的n次方
解:
>>inf最大值
解:
>>nan0/0
解:
>>pi
解:
>>realmax最大值
解:
>>realmin
2、MATLAB的sqrt指令可对任一数值进行开平方的运算。
用此指令求出下列各数的平方根,并验算之:
解:
>>sqrt(1-i)
解:
>>sqrt(2*i)
解:
>>sqrt((-5)+12*i)
其中i是单位虚数。
3、输入矩阵A、B
1、作出A的行向量组:
a1,a2,a3,a4,a5,a6。
解:
>>a1=A(i,:
)
a1=
34-11-910
2、作出B的列向量组:
b1,b2,b3,b4,b5,b6。
解:
>>b1=A(:
j)
3、由A的一、三、四行和二、三、五列交叉点上的元素作出子矩阵A3。
解:
>>A3=A([1,3,4],[2,3,5])
4、由索引向量L产生取A的第二、四、五行所成的子矩阵A5。
解:
>>A5=A([2,4,5],:
)
5、将A的对应的行向量组正交规范为正交向量组A6,并验证所得的结果。
解:
>>A6=orth(A)
>>A*inv(A)
6、求a1与a2的内积A7。
解:
>>a1*a2'
7、完成以下初等变换:
将A的第一、四行互换,再将其第三列乘以6,再将其第一行的10倍加至第五行。
解:
>>A([1,4],:
)=A([4,1],:
)
>>A(:
3)=6*A(:
3)
>>A(5,:
)=A(5,:
)+10*A(1,:
)
8、求B的列向量的一个极大线性无关向量组A9,并将其余的向量用极大线性无关向量组线性表示。
解:
>>A9=rref(B)
A9=
1.000000-6.80006.20000
01.00000-8.60001.40000
001.00007.5000-3.00000
000001.0000
000000
000000
b4=-6.8000*b1-8.6000*b2+7.5000*b3
b5=6.2000*b1+1.4000*b2-3.0000*b3
4、对矩阵A进行下列操作(如不清楚指令可用命令lookfor查找)
a)找出矩阵的大小(即行维数和列维数)
解:
>>size(A)
b)改变矩阵的大小(例如将4×6的矩阵改成12×2)
解:
>>reshape(1:
36,4,9)
ans=
159131721252933
2610141822263034
3711151923273135
4812162024283236
c)将矩阵左右翻转(Left-rightflip)
解:
>>A(:
[end:
-1:
1])
d)将矩阵上下翻转(Up-downflip)
解:
>>A([end:
-1:
1],:
)
2-430-612-8
e)找出矩阵每一列的最大值
解:
>>max(A(:
:
))
f)对矩阵的每一列进行排序
解:
>>sort(A,1)
g)矩阵的旋转(Rotate)
解:
>>rot90(A)
h)逆矩阵(Inversematrix)的计算
解:
>>inv(A)
l)求矩阵的rank
解:
>>rank(A)
j)计算矩阵的reducedrowechelonform
解:
>>rref(A)极大线性无关组
k)计算矩阵的nullspace
解:
>>null(A)
ans=
Emptymatrix:
6-by-0
m)计算矩阵的特征值(Eigenvalues)与特征向量(Eigenvectors
解:
>>eig(A)
>>eigs(A)
n)计算矩阵的QR分解(QRDecomposition)
解:
>>qr(A)
o)计算矩阵的LU分解(LUDecomposition)
解:
>>lu(A)
p)计算矩阵的奇异值分解(SingularValueDecomposition)
解:
>>svd(A)
g)对向量进行快速傅立叶转换(FastFourierTransform)
解:
>>fft(A)
h)直角坐标转成极坐标
解:
cart2sph(A(:
:
),A(:
:
),A(:
:
))
i)极坐标转成直角坐标
解:
>>pol2cart(A(:
:
),A(:
:
),A(:
:
))
实验二、矩阵的基本运算
一、问题
已知矩阵A、B、b如下:
应用Matlab软件进行矩阵输入及各种基本运算。
二、实验目的:
熟悉Matlab软件中的关于矩阵运算的各种命令
三、预备知识
1、线性代数中的矩阵运算。
2、本实验所用的Matlab命令提示:
(1)、矩阵输入格式:
A=[a11,a12;a21,a22];b=初始值:
步长:
终值;
(2)、求A的转置:
A';(3)、求A加B:
A+B;
(4)、求A减B:
A-B;(5)、求数k乘以A:
k*A;
(6)、求A乘以B:
A*B;(7)、求A的行列式:
det(A);
(8)、求A的秩:
rank(A);(9)、求A的逆:
inv(A)或(A)-1;
(10)、B右乘A的逆:
B/A;(11)、B左乘A的逆:
A\B;
(12)、求A的特征值:
eig(A);
(13)、求A的特征向量矩阵X及对角阵D:
[X,D]=eig(A);
(14)、求方阵A的n次幂:
A^n;(15)、A与B的对应元素相乘:
A.*B;
(16)、存储工作空间变量:
save'文件名''变量名';
(17)、列出工作空间的所有变量:
whos;
四、实验内容与要求
1、输入矩阵A,B,b;
解:
1.A=[3,4,-1,1,-9,10;6,5,0,7,4,-16;1,-4,7,-1,6,-8;2,-4,5,-6,12,-8;-3,6,-7,8,-1,1;8,-4,9,1,3,0]
>>B=[1,2,4,6,-3,2;7,9,16,-5,8,-7;8,11,20,1,5,5;10,15,28,13,-1,9;12,19,36,25,-7,23;2,4,6,-3,0,5]
>>b=[1,3,5,7,8,11]
2、作X21=A'、X22=A+B、X23=A-B、X24=AB;
解:
>>X21=A'
>>X22=A+B
>>X23=A-B
>>X24=A*B
3、作X31=|A|、X32=|B|;
解:
>>X31=det(A)
>>X32=det(B)
4、作X41=R(A)、X42=R(B);
解:
>>X41=Rank(A)
>>X42=rank(B)
5、作X5=A1;
解:
>>X5=inv(A)
6、求满足矩阵方程XA=C的解矩阵X6,其中C为A的第i列乘以列标i所得矩阵;
解:
>>X6=A'*A*inv(A)
7、求满足方程AX=b的解向量X7;
解:
>>X7=A\b'
8、作X6的特性向量X8、X6的特征向量组X及对角阵D;
解:
>>X8=eig(X6)
>>[X,D]=eig(X6)
9、作X9=B2(A-1)2;
解:
>>X9=B*B*inv(A)^2
10、创建从2开始公差为4的等差数列前15项构成的行向量X10。
解:
>>X10=[2:
4:
58]
11、将本实验中的矩阵A与B的对应元素相乘X11、对应元素相除X12并观察分母为零时的结果;
解:
>>X11=A.*B
12、求b每个元素自身次幂所得的行向量X13。
解:
>>X11=[1,3^3,5^5,7^7,8^8,11^11]
13、产生一长度为20的正态分布的随机向量X14
1.求X14的最大值及其在X14中的位置。
2.将X14排序并给出排序后各元素在X14中的位置
3.将X14变形为5行4列的矩阵X15,再将X15实行左右翻转并逆时针旋转90o。
解:
X14=[rand(1,20)]
[a,b]=find(max(X14))
14、列出本实验中的所有变量。
解:
>>['X21';'X22';'X23';'X24';'X31';'X32';'X41';'X42';'X7';'X8';'X9';'X10';'X11';'X12';'X13';'X14';'X15']
数学实验三
1、设函数
,
求f(A)数组运算和矩阵运算的结果
解:
>>t=[2,1-i;1,-1];1/2*exp(2*t)*log(t+sqrt(1+t*t))
>>t=[1/2*exp(2*2)*log(2+sqrt(1+2*2)),1/2*exp(2*(1-i))*log(1-i+sqrt(1+(1-i)*(1-i)));1/2*exp(2*1)*log(1+sqrt(1+1*1)),1/2*exp(2*(-1))*log(-1+sqrt(1+(-1)*(-1)))]
2、已知
1)取出其前3行构成矩阵B,前两列构成矩阵C,其右下角32子矩阵构成矩阵D,B与C的乘积构成矩阵E;
解:
>>B=A(1:
3,:
)
>>C=A(:
[1,2])
>>D=A(2:
4,3:
4)
>>E=B*C
2)取出E中比D中对应元素小的元素;
解:
>>E(find(E3)分别求E&D、E|D、~E|~D;
>>E&D
>>E|D
>>~E|~D
4)取出A中大与10且小于50的元素及其一维索引和二维索引值,并将小于10的元素改为10;大与50的数改为50。
>>A(find(A>10&A<50))
>>A(find(A<10))=10
>>A(find(A>50))=50
3求一个矩阵的主(第k条)对角元素用diag(A)(diag(A,k)),上(下)三角阵用triu(A)(tril(A))(同理使用triu(A,k),tril(A,k))试对上题的矩阵A求
主对角元素、上三角阵、下三角阵、逆矩阵、行列式的值、秩、范数、迹、特征值与特征向量。
解:
>>diag(A)
>>triu(A)
>>tril(A)
>>inv(A)
>>det(A)
>>rank(A)
>>trace(A)
>>norm(A)
>>[V,D]=eig(A)
4、当A=[34,NaN,Inf,-inf,-pi,eps,0]时,求下列函数值:
All(A)、any(A)、isnan(A)、isinf(A)、isfinite(A)。
解:
>>all(A)
>>any(A)
>>isnan(A)
>>isinf(A)
>>isfinite(A)
实验四
目的:
了解多项式的各种运算
理解多维数组的生成与操作
理解字符与字符串的存储与操作
1、求多项式
的根(使用roots命令)
解:
>>p=[1,0,-2,-4];roots(p)
2、设矩阵
a)求A的特征多项式P(x)
解:
>>px=poly(A)
b)求P(x)的导数
解:
>>polyder(px)
c)求P(20)的值
解:
>>p20=polyval(px,20)
d)求P(A)的矩阵运算的结果和数组运算的结果
解:
>>pA=polyvalm(px,A)
>>pA=polyval(px,A)
3、设a(s)=s2+2s+3和b(s)=s5+5s4+3s2+1
a)求a(s)和b(s)的乘积
解:
>>p=[1,2,3];q=[1,5,0,3,1];
>>as=poly2str(p,'s');
>>bs=poly2str(q,'s');
>>conv(p,q)
b)求b(s)/a(s)的商与余项
解:
>>[m,n]=deconv(p,q)
4、设有五个数据点:
(1,5.5),(2,43.1),(3,128),(4,290.7),(5,498.4)。
a)作出这五个数据点的三次拟合多项式;
解:
>>x=[12345]
>>y=[5.543.1128290.7498.4]
>>pf=polyfit(x,y,3)
b)试打印出该拟合多项式的图形,并将数据点在图形上用“o”标注出来。
解:
>>plot(x,y,'o')
c)使用帮助查寻插值命令interp1的用法,打印出上5个点的插值函数图像并与拟合函数比较。
解
>>xi=1:
0.1:
5;
yi=interp1(x,y,xi);
plot(x,y,'*',xi,yi)
5、生成一334的3三维数组D,要求:
a)第一页的元素为A=[578;019;436],第二页为A的转置阵,第三页为A旋转90o的矩阵,第四页为A上下元素颠倒的矩阵;
解:
>>A=[578;019;436]
>>D(:
:
1)=A
>>D(:
:
2)=A'
>>D(:
:
3)=rot90(A)
>>D(:
:
4)=flipud(A)
b)使用cat命令生成上述矩阵;
解:
>>C=cat(3,A,A',rot90(A),flipud(A))
c)取出第一行所有列与所有页的元素;
解:
>>D(1,:
:
)
d)使用reshape将上面的高位数组重排为343的矩阵h,并取出其第二页h2。
作一新的4维数组,h为第一箱,h2为第二箱的第三页元素;
解:
>>h=reshape(D,3,4,3)
e)查寻repmat命令的用法;
解:
例如>>repmat(D,[1,2])
6、对下列短文做一下操作:
a)统计下列短文中的空格数、小写字母数、非英文字符数。
>>一篇英文
解:
>>sum(s=='')
>>sum(s>='a'&s<='z')
>>length(s)-sum(s>='a'&s<='z')-sum(s>='A'&s<='Z')
实验五、选择与循环结构
一、实验内容:
1、列分段函数的值。
要求:
(1)用if语句实现,分别输出x=-0.5,-3.0,1.0,2.0,2.5,3.0,5.0时的y值。
提示:
x的值从键盘输入,可以是向量。
解:
>>aa1
请输入x的值:
x=-0.5
y=
-6.2500
(2)用逻辑表达式实现上述函数。
解:
if语句:
x=input('请输入x的值:
x=');if(x<0&x>-3)|(x<-3)
y=x^2+x-6
elseif(x>=0&x<2)|(x>2&x<3)|(x>3&x<=10)
y=x^2-5*x+6
else
y=x^2-x-6
end
2、输入一个百分制成绩,要求输出成绩的等级为A,B,C,D,E。
其中90~100分为A,80~89分为B,70~79分为C,60~69分为D,60分以下为E。
要求:
(1)分别用if语句和switch语句实现。
见07-08试卷答案
(2)输入百分制成绩后要判定该成绩的合理性,对不合理的成绩要输出出错信息。
3、建立5×6矩阵,要求输出矩阵的第n行元素,当n值超过矩阵的行数时,自动转为输出矩阵最后一行元素、并给出出错信息。
解:
clear
A=[123456;789101112;131415161718;192021222324;252627282930];
n=input('请输入行数');
ifn>=1&n<=5
a=A(n,:
);
elseifn>5
a=A(5,:
);
fprintf('error');
end
a
4、根据
求
的近似值。
当n分别取100、1000、10000结果是多少?
要求:
分别用循环结构和向量运算(使用sum函数)来实现。
解;循环结构:
clear
y=0;
n=input('请输入n');
fori=1:
n
y=y+1/i/i;
end
sqrt(y*6)
向量运算(使用sum函数):
clear
n=input('请输入n');
i=1:
n;
f=1./i.^2;
y=sum(f);
sqrt(y*6)
5、根据
,求:
(1)
的最大n值。
解:
clear
y=0;
i=1;
whiley<3
y=y+1/(2*i-1);
i=i+1;
end
i=i-1
(2)与
(1)的n对应的y。
解:
clear
y=0;
i=1;
whiley<3
y=y+1/(2*i-1);
i=i+1;
end
y=y-1/(2*i-1)
6、一个三位整数各位数字的立方和等于该数的本身则称该数为水仙花数。
试输出全部水仙花数。
要求:
(1)用循环结构实现。
解:
clear
m=100;
whilem<1000
a=fix(m/100);
b=fix((m-a*100)/10);
c=m-100*a-10*b;
if(a^3+b^3+c^3)==m
t=m;
fprintf('t=%f\n',t);
end
m=m+1;
end
(2)用向量运算来实现。
解:
clear
M=100:
999;
M3=fix(M./100);
M2=fix((M-(M3.*100))./10);
M1=M-(M3.*100)-(M2.*10);
N=M1.*M1.*M1+M2.*M2.*M2+M3.*M3.*M3;
K=M-N;
M(K==0)
提示:
全部三位整数组成向量M;分别求M各个元素的个位、十位、百位数字,组成向量M1、M2、M3;向量N=M1.*M1.*M1+M2.*M2.*M2+M3.*M3.*M3;向量K=M-N;显然K中的零元素的序号即M中的水仙花的序号。
7、已知
求
中:
(1)最大值、最小值、各数之和。
解:
f
(1)=1;
f
(2)=0;
f(3)=1;
form=4:
100
f(m)=f(m-1)-2*f(m-2)+f(m-3);
end
max(f([1:
100]))
min(f([1:
100]))
sum(f([1:
100]))
(2)正数、零、负数的个数。
解:
f
(1)=1;
f
(2)=0;
f(3)=1;
form=4:
100
f(m)=f(m-1)-2*f(m-2)+f(m-3);
end
sum(f([1:
100])>0)
sum(f([1:
100])<0)
100-sum(f([1:
100])>0)-sum(f([1:
100])<0)
提示:
可以考虑使用Matlab的有关函数实现。
8、从数组{1,2,。
。
。
n}随机选出m(m<=n))个不重复的元素.
解:
clear
n=input('接受键盘输入n=');
m=input('接受键盘输入m=(mM=[1:
1:
n]
A=randperm(n);
B=A(randperm(m))
9、假定某地区的电话收费标准为:
通话时间在3分钟以下,收费为0.5元,3分钟以上,则每超过1分钟加收0.15元;在7:
00~22:
00之间通话者,按上述收费标准全价收费,在其它时间通话者,按上述收费标准半价收费。
计算某人在t1时刻通话到t2时刻,应交多少电话费。
(选做,有挑战性)
吴正山预测这题不考
数学实验练习六:
函数
一、1)写一个MATLAB函数piFun01.m来计算下列级数:
f(n)=4*(1-1/3+1/5-1/7+1/9-1/11+...)
其中n为函数的输入,代表上述级数的项数,级数和f(n)则是函数的输出。
解:
functionf=pifun01(n)
f=0;
fori=1:
n
f=f+(-1)^(i+1)/(2*i-1);
end
f=f*4;
2)使用tic和toc指令来测量piFun01(100000)的计算时间。
如果你不知道如何使用这两个指令,请使用helptic及helptoc来查出它们的用法。
我的旧计算机是Pentium450MHz,所得的计算时间约为2秒。
请说明你的计算机规格以及其计算时间。
解:
functionf=pifun01(n)
tic;
f=0;
fori=1:
n
f=f+(-1)^(i+1)/(2*i-1);
end
f=f*4;
f=toc;
二、写一个MATLAB的递归函数fibo.m来计算Fibonacci数列,其定义如下:
fibo(n+2)=fibo(n+1)+fibo(n)
此数列的启始条件如下:
fibo
(1)=0,fibo
(2)=1.
a)fibo(25)的返回的值是多少?
解:
functionfibo(n)
fibo
(1)=0;
fibo
(2)=1;
fori=1:
n-2
fibo(i+2)=fibo(i+1)+fibo(i);
end
fibo(n)
b)使用tic和toc指令来测量fibo(25)的计算时间。
我的计算机是Pentium2GHz,所得的计算时间约为3.35秒。
请说明你的计算机规格以及其计算时间。
解:
functionfibo(n)
tic
fibo(1