MATLAB实验题答案.docx
《MATLAB实验题答案.docx》由会员分享,可在线阅读,更多相关《MATLAB实验题答案.docx(19页珍藏版)》请在冰豆网上搜索。
MATLAB实验题答案
1、求以下变量的值,并在MATLAB中验证。
(1)a=1:
2:
5
a=
135
(2)b=[a',a',a';a]
b=
111
333
555
135
(3)c=a+b(2,:
)
c=
468
2、下列运算是否合法,为什么?
如合法,结果是多少?
>>result2=a*b
Errorusing*
Innermatrixdimensionsmustagree.
>>result3=a+b
result3=
362
5811
>>result4=b*d
result4=
312222
404913
>>result5=[b;c']*d
result5=
312222
404913
-5-87
>>result6=a.*b
result6=
28-3
41530
>>result7=a./b
result7=
0.50000.5000-3.0000
4.00001.66671.2000
>>result8=a.c
Attempttoreferencefieldofnon-structurearray.
>>result9=a.\b
result9=
2.00002.0000-0.3333
0.25000.60000.8333
>>result10=a.^2
result10=
149
162536
>>result11=2.^a
result11=
248
163264
3、用MATLAB求解下面的的方程组。
(1)
>>A=[721-2;9153-2;-2-2115;13213]
>>B=[47-10]
>>B=B'
>>x=inv(A)*B
(2)
>>A1=[1110;121-1;2-10-3;335-6]
>>B2=[1;8;3;5]
>>x2=inv(A1)*B2
4、已知
(1)求矩阵A的秩(rank)
(2)求矩阵A的行列式(determinant)
(3)求矩阵A的逆(inverse)
(4)求矩阵A的特征值及特征向量(eigenvalueandeigenvector)
>>A3=[721-2;9153-2;-2-2115;13213]
>>r=rank(A3)
>>b=inv(A3)
>>a=det(A3)
>>[V,D]=eig(A3)
5、
求y=?
(运行formatlongg命令后,查看y的值)
m1=0;
form=-10:
10
m1=m1+2^m;
end
m1
m1=
2047.9990234375
6、求分段函数的值。
用if语句实现,算出下列表中x对应的y值。
x=input('enterx=');
ifx<0
y=x^2+x-6;
elseifx>=0&&x<5
y=x^2-5*x+6;
else
y=x^2-x-1;
end
y
7、分别用if和switch语句实现,将百分制成绩转换为成绩等级A、B、C、D、E。
其中90~100分为A,80~89分为B,70~79分为C,60~69分为D,60分以下为E。
对超出百分制范围的成绩,给出错误提示信息。
if结构程序:
x=input('pleaseenterscore=');
ifx>=90&&x<=100
disp('A')
elseifx<90&&x>=80
disp('B')
elseifx<80&&x>=70
disp('C')
elseifx<70&&x>=60
disp('D')
elseifx<60&&x>=0
disp('E')
else
disp('error')
end
switch结构程序:
x=input('pleaseenterscore=');
switchfix(x/10)
case{10,9}
ifx>100
disp('error')
else
disp('A')
end
case{8}
disp('B')
case{7}
disp('C')
case{6}
disp('D')
case{0,1,2,3,4,5}
disp('E')
otherwise
disp('error')
end
8、思考题
设计程序,完成成两位数的加、减、乘、除四则运算,即产生两个两位随机整数,再输入一个运算符号,做相应的运算,并显示相应的结果。
x=input('请输入运算符')
a=num2str(floor(rand
(1)*90+10));
a
b=num2str(floor(rand
(1)*90+10));
b
ifx=='+'
y=a+b;
elseifx=='-'
y=a-b;
elseifx=='*'
y=a*b;
elseifx=='/'
y=a/b;
else
disp('error')
end
y
9、启动MATLAB后,点击File|New|M-File,启动MATLAB的程序编辑及调试器(Editor/Debugger),编辑以下程序,点击File|Save保存程序,注意文件名最好用英文字符。
点击Debug|Run运行程序,在命令窗口查看运行结果,程序如有错误则改正。
注:
数论中一个有趣的题目:
任意一个正整数,若为偶数,则用2除之,若为奇数,则与3相乘再加上1。
重复此过程,最终得到的结果为1。
n=input('请输入n值:
');
a=n;
whilen>1
ifrem(n,2)==0
n=n/2;
else
n=3*n+1;
end
a=[a,n];
end
a
10、根据
,当n分别取100、1000、10000时,求x的值分别是多少?
a=input('请输入数值')
n=0;
form=1:
100
n=n+1/(m*m);
end
n=6*n;
x=sqrt(n);
x
11、编程求满足
的最小m值。
sum=0;
m=2;
a=1;
whilea
fori=1:
m
sum=sum+2^i;
ifsum>10000
a=0;
end
end
m=m+1;
end
m
12、思考题
已知y和t的函数关系:
求下面表格中与t对应的y值
t
0.2
0.4
0.6
0.8
1.0
y
t=input('请输入t值:
')
sum=0;
fori=1:
20
b=factorial(i);
sum=sum+t^i/b;
end
sum=sum+1;
sum
13、编写一个函数,计算下面函数的值,给出标量x的值,调用该函数后,返回y的值。
function[y]=myfun1(x)
选择一些数据测试你编写的函数。
function[y]=myfun1(x)
ifx<=0
y=sin(x);
elseifx>0&x<=3
y=x;
elseifx>3
y=-x+6;
end
14、编写一个函数求向量x中元素的平均值、最大值、最小值、均方根值。
function[m_x,max_x,min_x,rms_x]=myfun2(x)
方均根值(RootMeanSquare)的计算公式为:
用下面数据测试你写的函数:
(1)x=sin(0:
0.01:
6*pi)
(2)x=rand(1,200),得到的x为200个(0,1)之间均匀分布的随机数。
function[m_x,max_x,min_x,rms_x]=myfun2(x)%求平均值
sum_x=sum(x);%向量元素求和
[m,n]=size(x);%最好用n=length(x);
m_x=sum_x/n;
%求最大值采用逐个比较方式
ifx
(1)>x
(2)
max_x=x
(1);
else
max_x=x
(2);
end
fork=3:
n
ifmax_xmax_x=x(k);
else
max_x=max_x;%可省略
end
end
%求最小值
ifx
(1)(2)
min_x=x
(1);
else
min_x=x
(2);
end
fork=3:
n
ifmin_x>x(k)
min_x=x(k);
else
min_x=min_x;%可省略
end
end
%求均方根值
sum_x2=0;
fork=1:
n
sum_x2=sum_x2+x(k).^2;
rms_x=sqrt(sum_x2/n);
end
m_x;
max_x;
min_x;
rms_x;%按照函数值行参顺序输出结果
15、编写一个函数,给出一个向量
,生成如下范德蒙矩阵。
function[v]=myvander(x)
例如:
>>v=myvander([2345])
得v=
function[v]=myvander(x)
v1=vander(x);%生成范德蒙矩阵
v2=v1';
v=flipud(v2);%实现矩阵上下翻转
16、思考题
编写程序,用如下迭代公式求
,a的值分别为:
3,17,113。
迭代的终止条件为
,迭代初值
迭代次数不超过100次。
分别对迭代结果和准确值进行比较,并统计迭代次数。
function[x,n]=sqrt_a(a)
x=1.0;
fork=1:
100
m=x;
x=x/2+a/(2*x);
ifabs(x-m)<=10^(-5)
break
end
end
x;
n=k;
s=(x-sqrt(a));
ifs<=10^(-5)
disp('正确');
else
disp('错误');
end
17、在同一坐标系下绘制下面三个函数在t[0,4]的图象。
>>t=0:
0.1:
4*pi;
>>y1=t;
>>y2=t^(0.5);
>>y2=sqrt(t);
>>y3=4*pi*eps(-0.1*t).*sin(t);
>>plot(t,y1,t,y2,t,y3)
18、编写程序,选择合适的步距,绘制下面函数在区间[-6,6]中的图象。
functiony=fun1(x)
y=[];
forx0=x
ifx0<=0
y=[y,sin(x0)];
elseifx0>0&&x0<=3
y=[y,x0];
elseifx0>3
y=[y,6-x0];
end
end
>>x=-6:
0.1:
6;
>>y=fun1(x);
>>plot(x,y)
19、用compass函数画下面相量图
ua=1;ub=cos(-2*pi/3)+sin(-2*pi/3)*i;uc=cos(2*pi/3)+sin(2*pi/3)*i;
compass([ua,ub,uc,ua-ub,ub-uc,uc-ua])
>>ua=1;
>>ob=cos(-2*pi/3)
>>ob=cos(-2*pi/3)+sin(-2*pi/3)*i;
>>ub=cos(-2*pi/3)+sin(-2*pi/3)*i;
>>uc=cos(2*pi/3)+sin(2*pi/3)*i;
>>compass([ua,ub,uc,ua-ub,ub-uc,uc-ua])
20、三维空间曲线绘制
z=0:
0.1:
4*pi;
x=cos(z);
y=sin(z);
plot3(x,y,z)
>>z=0:
0.1:
4*pi;
>>x=cos(z);
>>y=sin(z);
>>plot3(x,y,z)
21、用mesh或surf函数,绘制下面方程所表示的三维空间曲面,x和y的取值范围设为[-3,3]。
>>x=-3:
0.01:
3;
>>y=-3:
0.01:
3;
>>[x,y]=meshgrid(x,y);
>>z=-x.*x/10+y.*y/10;
>>mesh(x,y,z)
>>z=x.*x/10+y.*y/10;
>>mesh(x,y,z)
22、思考题
用对分法求解方程
在[0,1]内的解,并验证,在程序中统计出对分次数。
提示:
先将原方程转化成
的形式。
对分法的基本思想是:
一个一元方程f(x)=0,若f(x1)*f(x2)<0,则在[x1,x2]区间内有实数解。
取该区间的中点xm=(x1+x2)/2,判定f(x1)和f(x2)二者中哪一个与f(xm)异号,若f(x1)*f(xm)<0,则解存在的区间缩小为[x1,xm],否则解存在的区间缩小为[xm,x2]。
重复这样的步骤,直到区间的长度小于一个可以接受的小数(比如1e-10),则认为中点即是原方程的解。
>>x0=0;
x1=1;
y=1;
i=0;
whiley~=0
i=i+1;
x3=(x0+x1)/2;
y=2*eps(-x3)-sin(x3);
y0=2*eps(-x0)-sin(x0);
y1=2*eps(-x1)-sin(x1);
ify*y0<0
x0=x3;
elseify*y1<0
x1=x3;
elseify==0
x3=x3;
end
ifi==1000000
y=0;
end
End
23、求代数方程
的5个根,并将其用星号(*)标记在复平面图上。
(用roots和plot函数)
>>a=[3,4,7,2,9,12];
>>y=roots(a)
>>plot(y,'*')
求代数方程
的5个根,并将其用星号(*)标记在复平面图上。
(用roots和plot函数)
程序:
>>a1=[1,0,0,0,0,-1];
>>y1=roots(a1)
>>plot(y1,'*')
24、求下面函数在[0.5,4]区间内的过零点。
(用fzero函)
>>x=0.5:
0.01:
4;
>>y2=x.^3-2*x.^2.*sin(x)+5*x.*cos(x)+1./x;
>>plot(x,y2)
函数:
functiony2=fz(x)
y2=x.^3-2*x.^2.*sin(x)+5*x.*cos(x)+1./x;
分析:
根据图像可知零点在x=1和x=3附近
所以
>>fzero('fz',1)
ans=
1.5117
>>fzero('fz',3)
ans=
2.6095
25、
已知R=50欧姆,U=4V,二极管D正向电流与电压的关系为:
求此电路中的电流Id和二极管正向电压Ud(要求用fsolve函数求解)
程序:
>>x=fsolve('fun',0,optimset('Display','off'))
>>y3=5*10^(-11)*exp(1.6*x/(1.38*10^(-4)*27)-1)
函数:
functiony=fun(x)
y=5*10^(-11)*exp(1.6*x/(1.38*10^(-4)*27)-1)+x-4;
26、实验数据处理:
已知某压力传感器的测试数据如下表
p
0.0
1.1
2.1
2.8
4.2
5.0
6.1
6.9
8.1
9.0
9.9
u
10
11
13
14
17
18
22
24
29
34
39
p为压力值,u为电压值,试用多项式
来拟合其特性函数,求出a,b,c,d,并把拟合曲线和各个测试数据点画在同一幅图上。
程序:
>>n=3;
>>p=[0.01.12.12.84.25.06.16.98.19.09.9];
>>u=[1011131417182224293439];
>>f=polyfit(p,u,n)
>>p1=0:
10;
>>u1=polyval(f,p1);
>>plot(p,u,'*',p1,u1,'-')
(注:
可编辑下载,若有不当之处,请指正,谢谢!
)