Matlab上机实验答案.docx
- 文档编号:30337371
- 上传时间:2023-08-13
- 格式:DOCX
- 页数:41
- 大小:202.41KB
Matlab上机实验答案.docx
《Matlab上机实验答案.docx》由会员分享,可在线阅读,更多相关《Matlab上机实验答案.docx(41页珍藏版)》请在冰豆网上搜索。
Matlab上机实验答案
Matlab上机实验答案
实验一MATLAB运算基础
1.先求下列表达式的值,然后显示MATLAB工作空间的使用情况并保存全部变量。
(1)
>>z1=2*sin(85*pi/180)/(1+exp
(2))
z1=
(2)
,其中
>>x=[21+2i;5];
>>z2=1/2*log(x+sqrt(1+x^2))
z2=
-+
+-
(3)
>>a=:
:
;
>>z3=(exp.*a)-exp.*a))./2.*sin(a++log(+a)./2)
(>>z33=(exp*a)-exp*a))/2.*sin(a++log(+a)/2)
可以验证z3==z33,是否都为1)
z3=
Columns1through5
+++++
Columns6through10
+++++
Columns11through15
+++++
Columns16through20
+++++
Columns21through25
+++++
Columns26through30
+++++
Columns31through35
+++++
Columns36through40
+++++
Columns41through45
+++++
Columns46through50
+++++
Columns51through55
+++++
Columns56through60
+++++
Column61
+
(4)
,其中t=0:
:
>>t=0:
:
;
>>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
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=
>>B\A
ans=
(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=
00
00
00
0000
0000
>>A^2
ans=
00
00
00
0000
0000
>>[E,R+R*S;O,S^2]
ans=
00
00
00
0000
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=
>>P=pascal(5)
P=
11111
12345
1361015
14102035
15153570
>>Hh=det(H)
Hh=
>>Hp=det(P)
Hp=
1
>>Th=cond(H)
Th=
+05
>>Tp=cond(P)
Tp=
+03
答:
5阶帕斯卡矩阵P的性能好。
矩阵的性能是由条件数决定的,条件数越接近于1其性能就越好。
由上机操作求得Th=+005,Tp=+003。
Tp的值更接近于1则其性能要好。
所以5阶帕斯卡矩阵P的性能好。
3.建立一个5×5矩阵,求它的行列式值、迹、秩和范数。
>>A=rand(5)
A=
>>det(A)
ans=
>>trace(A)
ans=
>>rank(A)
ans=
5
>>norm(A)
ans=
4.已知
求A的特征值及特征向量,并分析其数学意义。
>>A=[-29,6,18;20,5,12;-8,8,5]
A=
-29618
20512
-885
>>[V,D]=eig(A)
V=
D=
00
00
00
在数学上,特别是线性代数中,对于一个给定的线性变换,它的特征向量(本征向量或称正规正交向量)是这样一个非零的向量v:
当v经过这个线性变换的作用之后,得到的新向量(长度也许改变)仍然与原来的v保持在同一条线上。
一个特征向量的长度在该线性变换下缩放的比例称为其特征值(本征值)。
如果特征值为正,则表示v在经过线性变换的作用后方向也不变;如果特征值为负,说明方向会反转;如果特征值为0,则是表示缩回零点。
但无论怎样,仍在同一条直线上。
5.下面是一个线性方程组:
(1)求方程的解。
(2)将方程右边向量元素b3改为再求解,并比较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=[;;]
b=
>>X=A\b
X=
>>b2=[;;]
b2=
>>X2=A\b2
X2=
>>D=cond(A)
D=
+03
矩阵的条件数决定矩阵的性能,条件数越接近于1其性能越好,系数矩阵A的条件数为+003,和1相差很大,则其性能不好。
因此b矩阵个别元素的微小变动,对方程的解(X值)影响很大。
6.建立A矩阵,试比较sqrtm(A)和sqrt(A),分析它们的区别。
实验三选择结构程序设计
1.求分段函数的值。
用if语句实现,分别输出x=,,,,,,时的y值。
程序设计:
clear;
x=[];
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=
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+;
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=
n=3
n=
3
B=
实验四循环结构程序设计
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=
result=
result=
程序设计
(二):
clear;
forn=[100,1000,10000]
x=1:
n;
result=sqrt(6*sum(1./x./x))
end
运行结果:
result=
result=
result=
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=
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=,迭代次数不超过500次。
(2)如果迭代过程收敛于r,那么r的准确值是
,当(a,b)的值取(1,1)、(8,3)、(10,时,分别对迭代结果和准确值进行比较。
程序设计:
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=
r1=
r2=
a=8
b=3
x1=
r1=
r2=
a=10
b=
x1=
r1=
r2=
4.已知
求f1~f100中:
(1)最大值、最小值、各数之和。
(2)正数、零、负数的个数。
程序设计:
clear;
f1=1;f2=0;f3=1;
f=[f1,f2,f3];
forn=4:
100
f4=f3-2*f2+f1;
f=[ff4];
f1=f2;
f2=f3;
f3=f4;
end
maxf=max(f)
minf=min(f)
sumf=sum(f)
positivenum=length(find(f>0))
negtivenum=length(find(f<0))
zeronum=length(find(f==0))
运行结果:
maxf=
+11
minf=
+11
sumf=
+11
positivenum=
49
negtivenum=
49
zeronum=
2
5.若两个连续自然数的乘积减1是素数,则称这两个边疆自然数是亲密数对,该素数是亲密素数。
例如,2×3-1=5,由于5是素数,所以2和3是亲密数,5是亲密素数。
求[2,50]区间内:
(1)亲密数对的对数。
(2)与上述亲密数对对应的所有亲密素数之和。
程序设计
(一):
clear
pair=[];
form=2:
49
f=(m+1)*m-1;
signf=0;%标记为0表示f为素数
fork=2:
sqrt(f)
if(rem(f,k)==0)
signf=1;%标记为1表示f不是素数
end
end
ifsignf==0
pair=[pair;mm+1];%亲密数对矩阵
end
end
num=size(pair);
susum=sum(pair(:
1).*pair(:
2)-1);
disp(['亲密数对的对数',num2str(num
(1))])
disp(['亲密素数之和',num2str(susum)])
运行结果:
亲密数对的对数28
亲密素数之和21066
程序设计:
clear
susum=0;num=0;
form=2:
49
f=(m+1)*m-1;
n=fix(sqrt(f));
fork=2:
n
if(rem(f,k)==0)
break;%f不是素数时跳出循环
end
end
ifk==n
num=num+1;%亲密数对个数
susum=susum+f;%亲密素数和累加
end
end
disp(['亲密数对的对数',num2str(num)])
disp(['亲密素数之和',num2str(susum)])
运行结果:
亲密数对的对数28
亲密素数之和21066
实验五函数文件
1.定义一个函数文件,求给定复数的指数、对数、正弦和余弦,并在命令文件中调用该函数文件。
建立函数文件:
function[e,ln,s,c]=fushu(x)
e=exp(x);
ln=log(x);
s=sin(x);
c=cos(x);
建立命令文件
A=input('请输入任意一个复数A');
[a,b,c,d]=fushu(A);%调用的函数文件
a
b
c
d
运行结果:
>>fushu2
请输入任意一个复数A:
4i
a=
-
b=
+
c=
+
d=
2.一物理系统可用下列方程组来表示:
从键盘输入m1、m2和θ的值,求a1、a2、N1和N2的值。
其中g取,输入θ时以角度为单位。
要求:
定义一个求解线性方程组AX=B的函数文件,然后在命令文件中调用该函数文件。
建立函数文件
function[a1,a2,N1,N2]=xxfcz(m1,m2,t)
t=t*pi/180;
A=[m1*cos(t)-m1-sin(t)0;m1*sin(t)0cos(t)0;0m2-sin(t)0;00-cos(t)1];
g=;
B=[0;m1*g;0;m2*g];
X=inv(A)*B;
a1=X
(1);
a2=X
(2);
N1=X(3);
N2=X(4);
建立命令文件
clear
m1=input('请输入m1:
');
m2=input('请输入m2:
');
t=input('请输入角度t:
');
[a1,a2,N1,N2]=xxfcz(m1,m2,t);
a1
a2
N1
N2
运行结果:
>>xxfcz2
请输入m1:
5
请输入m2:
3
请输入角度t:
90
a1=
a2=
N1=
N2=
3.一个自然数是素数,且它的数字位置经过任意对换后仍为素数。
例如13是绝对素数。
试求所有两位绝对素数。
要求:
定义一个判断素数的函数文件。
建立判断素数的函数文件
function[x]=sushu(m)
%判断数m是否为素数
forM=2:
(m/2)
ifrem(m,M)==0
b=0;
break
else
b=1;
end
end
ifb==1
x=m;%判断数m为素数,并返回
else
x=[];%数m不为素数
end
end
建立命令文件
clear;
js=[];%初始绝对素数
form=10:
99
x=sushu(m);
ifx
x=fix(x/10)+rem(x,10)*10;
y=sushu(x);
js=[js,y];%绝对素数
else
c
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Matlab 上机 实验 答案