Matlab上机实验答案.docx
《Matlab上机实验答案.docx》由会员分享,可在线阅读,更多相关《Matlab上机实验答案.docx(36页珍藏版)》请在冰豆网上搜索。
Matlab上机实验答案
Matlab上机实验答案
实验一MATLAB运算基础
1.先求下列表达式的值,然后显示MATLAB工作空间的使用情况并保存全部变量。
(1)
>>z1=2*sin(85*pi/180)/(1+exp
(2))
z1=
0.2375
(2)
,其中
>>x=[21+2i;-0.455];
>>z2=1/2*log(x+sqrt(1+x^2))
z2=
0.7114-0.0253i0.8968+0.3658i
0.2139+0.9343i1.1541-0.0044i
(3)
>>a=-3.0:
0.1:
3.0;
>>z3=(exp(0.3.*a)-exp(-0.3.*a))./2.*sin(a+0.3)+log((0.3+a)./2)
(>>z33=(exp(0.3*a)-exp(-0.3*a))/2.*sin(a+0.3)+log((0.3+a)/2)
可以验证z3==z33,是否都为1)
z3=
Columns1through5
0.7388+3.1416i0.7696+3.1416i0.7871+3.1416i0.7913+3.1416i0.7822+3.1416i
Columns6through10
0.7602+3.1416i0.7254+3.1416i0.6784+3.1416i0.6196+3.1416i0.5496+3.1416i
Columns11through15
0.4688+3.1416i0.3780+3.1416i0.2775+3.1416i0.1680+3.1416i0.0497+3.1416i
Columns16through20
-0.0771+3.1416i-0.2124+3.1416i-0.3566+3.1416i-0.5104+3.1416i-0.6752+3.1416i
Columns21through25
-0.8536+3.1416i-1.0497+3.1416i-1.2701+3.1416i-1.5271+3.1416i-1.8436+3.1416i
Columns26through30
-2.2727+3.1416i-2.9837+3.1416i-37.0245+0.0000i-3.0017+0.0000i-2.3085+0.0000i
Columns31through35
-1.8971+0.0000i-1.5978+0.0000i-1.3575+0.0000i-1.1531+0.0000i-0.9723+0.0000i
Columns36through40
-0.8083+0.0000i-0.6567+0.0000i-0.5151+0.0000i-0.3819+0.0000i-0.2561+0.0000i
Columns41through45
-0.1374+0.0000i-0.0255+0.0000i0.0792+0.0000i0.1766+0.0000i0.2663+0.0000i
Columns46through50
0.3478+0.0000i0.4206+0.0000i0.4841+0.0000i0.5379+0.0000i0.5815+0.0000i
Columns51through55
0.6145+0.0000i0.6366+0.0000i0.6474+0.0000i0.6470+0.0000i0.6351+0.0000i
Columns56through60
0.6119+0.0000i0.5777+0.0000i0.5327+0.0000i0.4774+0.0000i0.4126+0.0000i
Column61
0.3388+0.0000i
(4)
,其中t=0:
0.5:
2.5
>>t=0:
0.5:
2.5;
>>z4=(t>=0&t<1).*(t.^2)+(t>=1&t<2).*(t.^2-1)+(t>=2&t<3).*(t.^2-2.*t+1)
z4=
00.250001.25001.00002.2500
2.已知:
求下列表达式的值:
(1)A+6*B和A-B+I(其中I为单位矩阵)
(2)A*B和A.*B
(3)A^3和A.^3
(4)A/B及B\A
(5)[A,B]和[A([1,3],:
);B^2]
>>A=[1234-4;34787;3657];
>>B=[13-1;203;3-27];
>>A+6*B
ans=
1852-10
467105
215349
>>I=eye(3);
>>A-B+I
ans=
1231-3
32884
0671
(2)
>>A*B
ans=
684462
309-72596
154-5241
>>A.*B
ans=
121024
680261
9-13049
(3)
>>A^3
ans=
3722623382448604
247370149188600766
78688454142118820
>>A.^3
ans=
172839304-64
39304343658503
27274625343
(4)
>>A/B
ans=
16.4000-13.60007.6000
35.8000-76.200050.2000
67.0000-134.000068.0000
>>B\A
ans=
109.4000-131.2000322.8000
-53.000085.0000-171.0000
-61.600089.8000-186.2000
(5)
>>[A,B]
ans=
1234-413-1
34787203
36573-27
>>[A([1,3],:
);B^2]
ans=
1234-4
3657
451
11019
20-540
3.设有矩阵A和B
(1)求它们的乘积C。
(2)将矩阵C的右下角3×2子矩阵赋给D。
(3)查看MATLAB工作空间的使用情况。
>>A=(reshape(1:
25,5,5))';
>>B=[3016;17-69;023-4;970;41311];
>>C=A*B
C=
9315077
258335237
423520397
588705557
753890717
>>D=C(3:
5,2:
3)
D=
520397
705557
890717
>>whos
NameSizeBytesClassAttributes
A5x5200double
B5x3120double
C5x3120double
D3x248double
4.完成下列操作:
(1)求[100,999]之间能被21整除的数的个数。
(2)建立一个字符串向量,删除其中的大写字母。
>>n=100:
999;
>>l=find(rem(n,21)==0);
>>length(l)
ans=
43
>>ch='aegbBOIEG0je23RGnc';
>>wz=find(ch>='A'&ch<='Z');
>>ch(wz)=[]
ch=
aegb0je23nc
实验二MATLAB矩阵分析与处理
1.设有分块矩阵
,其中E、R、O、S分别为单位矩阵、随机矩阵、零矩阵和对角阵,试通过数值计算验证
。
>>E=eye(3);
>>R=rand(3,2);
>>O=zeros(2,3);
>>S=diag(1:
2);
>>A=[E,R;O,S]
A=
1.0000000.81470.9134
01.000000.90580.6324
001.00000.12700.0975
0001.00000
00002.0000
>>A^2
ans=
1.0000001.62942.7401
01.000001.81161.8971
001.00000.25400.2926
0001.00000
00004.0000
>>[E,R+R*S;O,S^2]
ans=
1.0000001.62942.7401
01.000001.81161.8971
001.00000.25400.2926
0001.00000
00004.0000
>>A^2==[E,R+R*S;O,S^2]
ans=
11111
11111
11111
11111
11111
通过验证,矩阵
成立。
2.产生5阶希尔伯特矩阵H和5阶帕斯卡矩阵P,且求其行列式的值Hh和Hp以及它们的条件数Th和Tp,判断哪个矩阵性能更好。
为什么?
>>H=hilb(5)
H=
1.00000.50000.33330.25000.2000
0.50000.33330.25000.20000.1667
0.33330.25000.20000.16670.1429
0.25000.20000.16670.14290.1250
0.20000.16670.14290.12500.1111
>>P=pascal(5)
P=
11111
12345
1361015
14102035
15153570
>>Hh=det(H)
Hh=
3.7493e-12
>>Hp=det(P)
Hp=
1
>>Th=cond(H)
Th=
4.7661e+05
>>Tp=cond(P)
Tp=
8.5175e+03
答:
5阶帕斯卡矩阵P的性能好。
矩阵的性能是由条件数决定的,条件数越接近于1其性能就越好。
由上机操作求得Th=4.7661e+005,Tp=8.5175e+003。
Tp的值更接近于1则其性能要好。
所以5阶帕斯卡矩阵P的性能好。
3.建立一个5×5矩阵,求它的行列式值、迹、秩和范数。
>>A=rand(5)
A=
0.27850.97060.42180.03570.7431
0.54690.95720.91570.84910.3922
0.95750.48540.79220.93400.6555
0.96490.80030.95950.67870.1712
0.15760.14190.65570.75770.7060
>>det(A)
ans=
-0.1322
>>trace(A)
ans=
3.4127
>>rank(A)
ans=
5
>>norm(A)
ans=
3.2759
4.已知
求A的特征值及特征向量,并分析其数学意义。
>>A=[-29,6,18;20,5,12;-8,8,5]
A=
-29618
20512
-885
>>[V,D]=eig(A)
V=
0.71300.28030.2733
-0.6084-0.78670.8725
0.34870.55010.4050
D=
-25.316900
0-10.51820
0016.8351
在数学上,特别是线性代数中,对于一个给定的线性变换,它的特征向量(本征向量或称正规正交向量)是这样一个非零的向量v:
当v经过这个线性变换的作用之后,得到的新向量(长度也许改变)仍然与原来的v保持在同一条线上。
一个特征向量的长度在该线性变换下缩放的比例称为其特征值(本征值)。
如果特征值为正,则表示v在经过线性变换的作用后方向也不变;如果特征值为负,说明方向会反转;如果特征值为0,则是表示缩回零点。
但无论怎样,仍在同一条直线上。
5.下面是一个线性方程组:
(1)求方程的解。
(2)将方程右边向量元素b3改为0.53再求解,并比较b3的变化和解的相对变化。
(3)计算系数矩阵A的条件数并分析结论。
>>formatrat%用分数格式显示
>>A=[1/2,1/3,1/4;1/3,1/4,1/5;1/4,1/5,1/6]
A=
1/21/31/4
1/31/41/5
1/41/51/6
>>format%恢复默认格式
>>b=[0.95;0.67;0.52]
b=
0.9500
0.6700
0.5200
>>X=A\b
X=
1.2000
0.6000
0.6000
>>b2=[0.95;0.67;0.53]
b2=
0.9500
0.6700
0.5300
>>X2=A\b2
X2=
3.0000
-6.6000
6.6000
>>D=cond(A)
D=
1.3533e+03
矩阵的条件数决定矩阵的性能,条件数越接近于1其性能越好,系数矩阵A的条件数为1.3533e+003,和1相差很大,则其性能不好。
因此b矩阵个别元素的微小变动,对方程的解(X值)影响很大。
6.建立A矩阵,试比较sqrtm(A)和sqrt(A),分析它们的区别。
实验三选择结构程序设计
1.求分段函数的值。
用if语句实现,分别输出x=-5.0,-3.0,1.0,2.0,2.5,3.0,5.0时的y值。
程序设计:
clear;
x=[-5.0-3.01.02.02.53.05.0];
ifx<0&x~=-3
y=x.^2+x-6;
elseifx>=0&x<5&x~=2&x~=3
y=x.^2-5*x+6;
else
y=x.^2-x-1;
end
y
运行结果:
y=
29.000011.0000-1.00001.00002.75005.000019.0000
2.输入一个百分制成绩,要求输出成绩等级A、B、C、D、E。
其中90分~100分为A,80分~89分为B,79分~79分为C,60分~69分为D,60分以下为E。
要求:
(1)分别用if语句和switch语句实现。
程序设计:
(一)用if语句
clear;
score=input('请输入百分制成绩:
');
a=fix(score/10);
ifa==9|a==10
grade='A';
elseifa==8
grade='B';
elseifa==7
grade='C';
elseifa==6
grade='D';
else
grade='E';
end
grade
(二)用if语句
clear;
score=input('请输入百分制成绩:
');
ifscore>=90&score<=100
grade='A';
elseifscore>=80&score<90
grade='B';
elseifscore>=70&score<80
grade='C';
elseifscore>=60&score<70
grade='D';
else
grade='E';
end
grade
(三)用switch语句
clear;
score=input('请输入百分制成绩:
');
switchfix(score/10)
case{9,10}
grade='A';
case8
grade='B';
case7
grade='C';
case6
grade='D';
otherwise
grade='E';
end
grade
(2)输入百分制成绩后要判断该成绩的合理性,对不合理的成绩应输出出错信息。
clear;
score=input('请输入百分制成绩:
');
ifscore>=0&score<=100%判断成绩合理性
switchfix(score/10)
case{9,10}
grade='A';
case8
grade='B';
case7
grade='C';
case6
grade='D';
otherwise
grade='E';
end
grade
else
disp('error')%成绩不合理时输出出错信息
end
3.硅谷公司员工的工资计算方法如下:
(1)工作时数超过120小时者,超过部分加发15%。
(2)工作时数低于60小时者,扣发700元。
(3)其余按每小时84元计发。
试编程按输入的工号和该号员工的工时数,计算应发工资。
程序设计:
clear;
num=input('请输入员工工号:
');
time=input('请输入员工工时数:
');
iftime<60
wages=time*84-700;
elseiftime>120
wages=84*120+(time-120)*84*(1+0.15);
else
wages=time*84;
end
disp=(['员工工号:
'num2str(num)'应发工资:
'num2str(wages)])
运行结果:
请输入员工工号:
4
请输入员工工时数:
35
disp=
员工工号:
4应发工资:
2240
4.设计程序,完成两位数的加、减、乘、除四则运算,即产生两个两位随机整数,再输入一个运算符号,做相应的运算,并显示相应的结果。
解:
程序设计:
clear;
a=floor(rand
(1)*90+10)
b=floor(rand
(1)*90+10)
c=input('请输入运算符号:
','s');
ifc=='+'
s=a+b
elseifc=='-'
s=a-b
elseifc=='*'
s=a*b
elseifc=='\'
s=a\b
else
disp('error')
end
运行结果:
a=
30
b=
77
请输入运算符号:
-
s=
-47
5.建立5×6矩阵,要求输出矩阵第n行元素。
当n值超过矩阵的行数时,自动转为输出矩阵最后一行元素,并给出出错信息。
程序设计:
clear;
A=rand(5,6)
n=input('n=?
')
ifn>=1&n<=5
B=A(n,1:
6);
else
disp('erro!
')
B=A(5,1:
6);
end
B
运行结果:
A=
0.77920.01190.52850.68920.91330.0782
0.93400.33710.16560.74820.15240.4427
0.12990.16220.60200.45050.82580.1067
0.56880.79430.26300.08380.53830.9619
0.46940.31120.65410.22900.99610.0046
n=?
3
n=
3
B=
0.12990.16220.60200.45050.82580.1067
实验四循环结构程序设计
1.根据
,求π的近似值。
当n分别取100、1000、10000时,结果是多少?
要求:
分别用循环结构和向量运算(使用sum函数)来实现。
程序设计
(一):
clear;
forn=[100,1000,10000]
sum=0;
forx=1:
n
sum=sum+1/(x.^2);
end
result=sqrt(6*sum)
end
运行结果:
result=
3.1321
result=
3.1406
result=
3.1415
程序设计
(二):
clear;
forn=[100,1000,10000]
x=1:
n;
result=sqrt(6*sum(1./x./x))
end
运行结果:
result=
3.1321
result=
3.1406
result=
3.1415
2.根据
,求:
(1)y<3时的最大n值。
(2)与
(1)的n值对应的y值。
程序设计:
y=0;n=1;
whiley<3
y=y+1/(2*n-1);
n=n+1;
end
n=n-1;
y=y-1/(2*n-1)
n=n-1
运行结果:
y=
2.9944
n=
56
【
%验证n=56时的y值
clearall;clc;
n=56;
i=1:
n;
f=1./(2*i-1);
y=sum(f)
】
3.考虑以下迭代公式:
其中a、b为正的学数。
(1)编写程序求迭代的结果,迭代的终止条件为|xn+1-xn|≤10-5,迭代初值x0=1.0,迭代次数不超过500次。
(2)如果迭代过程收敛于r,那么r的准确值是
,当(a,b)的值取(1,1)、(8,3)、(10,0.1)时,分别对迭代结果和准确值进行比较。
程序设计:
clear;
a=input('a=?
');
b=input('b=?
');
x0=1;
x1=a/(b+x0);
y=abs(x1-x0);
n=1;
whiley>10^(-5)&n<=499
x0=x1;
x1=a/(b+x0);
y=abs(x1-x0);
n=n+1;
end
x1
%比较收敛准确值和迭代结果
r1=(-b+sqrt(b^2+4*a))/2
r2=(-b-sqrt(b^2+4*a))/2
运行结果:
a=?
1
b=?
1
x1=
0.6180
r1=
0.6180
r2=
-1.6180
a=?
8
b=?
3
x1=
1.7016
r1=
1.7016
r2=
-4.7016
a