完整word版matlab实验指导答案详解非常详细正确.docx
《完整word版matlab实验指导答案详解非常详细正确.docx》由会员分享,可在线阅读,更多相关《完整word版matlab实验指导答案详解非常详细正确.docx(35页珍藏版)》请在冰豆网上搜索。
完整word版matlab实验指导答案详解非常详细正确
实验一MATLAB工作环境熟悉及简单命令的执行
一、实验目的:
熟悉MATLAB的工作环境,学会使用MATLAB进行一些简单的运算。
二、实验内容:
MATLAB的启动和退出,熟悉MATLAB的桌面(Desktop),包括菜单(Menu)、工具条(Toolbar)、命令窗口(CommandWindow)、历史命令窗口、工作空间(Workspace)等;完成一些基本的矩阵操作;学习使用在线帮助系统。
三、实验步骤:
1、启动MATLAB,熟悉MATLAB的桌面。
2、在命令窗口执行命令完成以下运算,观察workspace的变化,记录运算结果。
(1)(365-522-70)3
>>(365-52*2-70)/3
ans=63.6667
(2)>>area=pi*2.5^2
area=19.6350
(3)已知x=3,y=4,在MATLAB中求z:
>>x=3
>>y=4
>>z=x^2*y^3/(x-y)^2
z=576
(4)将下面的矩阵赋值给变量m1,在workspace中察看m1在内存中占用的字节数。
m1=
执行以下命令
>>m1=[162313;511108;97612;414151]
>>m1(2,3)
ans=10
>>m1(11)
ans=6
>>m1(:
3)
ans=3
10
6
15
>>m1(2:
3,1:
3)
ans=51110
976
>>m1(1,4)+m1(2,3)+m1(3,2)+m1(4,1)
ans=34
(5)执行命令>>helpabs
查看函数abs的用法及用途,计算abs(3+4i)
(6)执行命令
>>x=0:
0.1:
6*pi;
>>y=5*sin(x);
>>plot(x,y)
(6)运行MATLAB的演示程序,>>demo,以便对MATLAB有一个总体了解。
四、思考题
1、以下变量名是否合法?
为什么?
(1)x2合法
(2)3col不合法,首字符是数字
(3)_row不合法,首字符必须是字母
(4)for不合法,for为MATLAB的保留关键字
2、求以下变量的值,并在MATLAB中验证。
(1)a=1:
2:
5;
a=135
(2)b=[a'a'a'];
b=111
333
555
(3)c=a+b(2,:
)
c=468
实验二MATLAB语言矩阵运算
一、实验目的:
掌握基本的矩阵运算及常用的函数。
二、实验内容:
1、下列运算是否合法,为什么?
如合法,结果是多少?
(1)result1=a'
(2)result2=a*b
不合法,两矩阵的内阶不相等。
(3)result3=a+b
(4)result4=b*d
(5)result5=[b;c']*d
(6)result6=a.*b
(7)result7=a./b
(8)result8=a.*c
不合法,两矩阵的维数不相等,点乘相求两矩阵的维数相同。
(9)result9=a.\b
(10)result10=a.^2
(11)result11=a^2
不合法,a矩阵不是方阵,方阵才能取平方。
(12)result12=2.^a
以上运算的关键不是结果是多少,而是结果怎么得来的,比如result5=[b;c']*d,要学会将其分解后去理解,可在命令窗口输入以下语句:
>>c'
>>t=[b;c']
>>r5=t*d
2、用MATLAB求下面的的方程组。
(1)
A=[7,2,1,-2;9,15,3,-2;-2,-2,11,5;1,3,2,13]
b=[4;7;-1;0]
x=A\b
x=0.4979
0.1445
0.0629
-0.0813
(2)
A=[1,1,1,0;1,2,1,-1;2,-1,0,-3;3,3,5,-6]
b=[1;8;3;5]
xyzw=inv(A)*b
xyzw=1.0000
5.0000
-5.0000
-2.0000
3、已知
A=[7,2,1,-2;9,15,3,-2;-2,-2,11,5;1,3,2,13]
(1)求矩阵A的秩(rank)
>>rank(A)
(2)求矩阵A的行列式(determinant)
>>det(A)
(3)求矩阵A的逆(inverse)
>>inv(A)
(4)求矩阵A的特征值及特征向量(eigenvalueandeigenvector)
>>[v,d]=eig(A)
该题目要求大家学会使用MATLAT的帮助系统,一是知道函数名,怎样查函数用法,二是不知道函数名,怎样查函数名及其用法。
4、关系运算与逻辑运算
已知a=20,b=-2,c=0,d=1
(1)r1=a>b
(2)r2=a>b&c>d
(3)r3=a==b*(-10)
(4)r4=~b|c
r1=1,r2=0,r3=1,r4=0
三、思考题
求y=?
(用formatlongg查看y的值)
方法一:
n=-10:
1:
10
formatlongg
x=2.^n
y=sum(x)
方法二:
y=0;
fort=-10:
10
y=y+2^t;
end
y
方法三
y=0;t=-10
whilet<=10
y=y+2^t;
t=t+1;
end
y
实验三选择结构程序设计及调试
一、实验目的:
掌握利用if、switch语句编写选择结构程序,学会MATLAB程序编辑、运行及调试方法。
二、实验内容:
1、求分段函数的值。
用if语句实现,算出下列表中x对应的y值。
X
-5
0
2
5
8
y
14
6
0
19
55
clc
clear
x=-5%x=input('请输入x的值')
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
2、分别用if和swith语句实现,将百分制成绩转换为成绩等级A、B、C、D、E。
其中[90~100]分为A,[80~90)分为B,[70~80)分为C,[60~70)分为D,60分以下为E。
对超出百分制范围的成绩,给出错误提示信息。
clc
clear
s=input('请输入百分制成绩:
');
ifs<0|s>100
g='ERROR';
elseifs>=90&s<=100
g='A';
elseifs>=80&s<90
g='B';
elseifs>=70&s<80
g='C';
elseifs>=60&s<70
g='D';
else
g='E';
end
g
clc
clear
s=input('请输入百分制成绩:
');
switchfloor(s/10)
case9
g='A';
case8
g='B';
case7
g='C';
case6
g='D';
casenum2cell(0:
5)
g='E';
otherwise
ifs==100
g='A';
else
g='ERROR';
end
end
g
3、程序的调试(参考P77):
在以上编写的程序中设置断点,控制程序单步运行,观察程序的执行及变量值的变化情况。
三、思考题
设计程序,产生两个两位随机整数,再输入一个运算符号,完成成两位数的加、减、乘、除四则运算,并显示相应的结果。
clc
clear
x1=10+floor(90*rand
(1))
x2=10+floor(90*rand
(1))
p=input('输入+-*/运算符:
','s');
switchp
case'+'
y=x1+x2;
case'-'
y=x1-x2;
case'*'
y=x1*x2;
case'/'
y=x1/x2;
otherwise
y='error';
end
y
实验四循环结构程序设计及调试
一、实验目的:
掌握MATLAB程序编辑、运行及调试方法。
二、实验内容:
1、启动MATLAB后,点击File|New|M-File,启动MATLAB的程序编辑及调试器(Editor/Debugger),编辑以下程序,点击File|Save保存程序,注意文件名最好用英文字符。
点击Debug|Run运行程序,在命令窗口查看运行结果,程序如有错误则改正。
注:
数论中一个有趣的题目:
任意一个正整数,若为偶数,则用2除之,若为奇数,则与3相乘再加上1。
重复此过程,最终得到的结果为1。
如:
21
3105168421
63105168421
运行下面的程序,按程序提示输入n=1,2,3,5,7等数来验证这一结论。
%classic"3n+1"problemfromnumbertheory.
n=1%n等于1,2,3,5,7等数
a=n;
whilen>1
ifrem(n,2)==0
n=n/2;
else
n=3*n+1;
end
a=[a,n];
end
a
2、根据
,当n分别取100、1000、10000时,求x的值分别是多少?
clc
clear
y=0;
n=100
fork=1:
n
y=y+1/k^2;
end
x=sqrt(6*y)
3、编程求满足
的最小m值。
以下是三种方法及结果验证方法。
clc
clear
sum_x=0;
n=0;
whilesum_x<=1e4
n=n+1;
x=2^n;
sum_x=sum_x+x;
end
re1=n
sum_x=0;
n=1;
whilesum_x<=1e4
x=2^n;
sum_x=sum_x+x;
n=n+1;
end
re2=n-1
sum_x=0;
n=1;
while1
x=2^n;
sum_x=sum_x+x;
ifsum_x>1e4
break;
end
n=n+1;
end
re3=n
echoon
sum(2.^[1:
12])
sum(2.^[1:
13])
echooff
三、思考题
已知y和t的函数关系:
求下面表格中与t对应的y值
t
0.2
0.4
0.6
0.8
1.0
y
clc
clear
y=1
t=1;
f=1;
forn=1:
20
f=f*n;
y=y+t^n/f
end
y
实验五函数的编写及调试
一、实验目的:
掌握MATLAB函数的编写及调试方法。
二、实验内容:
1、编写一个函数,计算下面函数的值,给出x的值,调用该函数后,返回y的值。
function[y]=myfun1(x)
选择一些数据测试你编写的函数。
function[y]=myfun1(x)
ifx<=0
y=sin(x);
elseifx<=3
y=x;
else
y=-x+6;
end
2、编写一个函数求向量中元素的平均值、最大值、最小值、均方根值。
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)
%m_x=mean(x);
%max_x=max(x);
%min_x=min(x);
%rms_x=sqrt(sum(x.^2)/length(x));
N=length(x);
sum_x=0;
sum_x2=0;
max_x=x
(1);
min_x=x
(1);
fork=1:
N
sum_x=sum_x+x(k);
sum_x2=sum_x2+x(k)^2;
ifx(k)>max_x
max_x=x(k);
end
ifx(k)min_x=x(k);
end
end
m_x=sum_x/N;
rms_x=sqrt(sum_x2/N);
3、编写一个函数,给出一个向量
,生成如下范德蒙矩阵。
function[v]=myvander(x)
例如:
>>v=myvander([2345])
得v=
生成一些数据测试你写的函数。
function[v]=myvander(x)
N=length(x);
fork=1:
N
v(k,:
)=x.^(k-1);
end
三、思考题
编写程序,用如下迭代公式求
,a的值分别为:
3,17,113。
迭代的终止条件为
,迭代初值
迭代次数不超过100次。
分别对迭代结果和准确值进行比较,并统计迭代次数。
clc
clear
a=input('请输入a=');
x0=1;
forn=1:
100
x1=x0/2+a/(2*x0);
if(abs(x1-x0)<=1e-5)
break
end
x0=x1;
end
disp('sqrt(a)数值解为:
')
x1
disp('迭代次数:
')
n
disp('sqrt(a)的准确解为:
')
sqrt(a)
请输入a=3
sqrt(a)数值解为:
x1=
1.7321
迭代次数:
5
sqrt(a)的准确解为:
ans=
1.7321
实验六MATLAB的绘图
1、在同一坐标系下绘制下面三个函数在t[0,4]的图象。
t=0:
1e-2:
4*pi;
y1=t;
y2=sqrt(t);
y3=4*pi*exp(-0.1*t).*sin(t);
plot(t,y1,'r',t,y2,'g',t,y3,'b');
grid
xlabel('t/s')
ylabel('y1y2y3')
legend('t','sqrt(t)','4*pi*exp(-0.1*t).*sin(t)');
2、编写程序,选择合适的步距,绘制下面函数在区间[-6,6]中的图象。
x=-6:
0.1:
6;%设定自变量x的取值范围
leng=length(x);%计算向量x的长度
form=1:
leng%计算函数值
y(m)=myfun1(x(m));
end
plot(x,y),grid%绘制函数曲线
xlabel('x'),ylabel('y')
3、用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])
4、三维空间曲线绘制
z=0:
0.1:
4*pi;
x=cos(z);
y=sin(z);
plot3(x,y,z)
5、用mesh或surf函数,绘制下面方程所表示的三维空间曲面,x和y的取值范围设为[-3,3]。
[x,y]=meshgrid(-3:
0.5:
3)
z=-x.*x/10+y.*y/10;
mesh(x,y,z);
figure
surfc(x,y,z);
附:
画抛物面
theta=linspace(0,2*pi,60)
R=linspace(0,5,20);
X1=R'*cos(theta);
Y1=R'*sin(theta);
Z1=X1.*X1/10+Y1.*Y1/10;
mesh(X1,Y1,Z1)
axissquare
三、思考题
用对分法求解方程
在[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),则认为中点即是原方程的解。
clc
clear
x1=0;x2=1;
len=x2-x1;
n=0;
whilelen>1e-10
y1=2*exp(-x1)-sin(x1);
y2=2*exp(-x2)-sin(x2);
xm=(x1+x2)/2;
ym=2*exp(-xm)-sin(xm);
ify1*ym<0
x2=xm;
elseify2*ym<0
x1=xm;
end
len=x2-x1;
n=n+1;
end
formatlong
xm,ym,n
实验七MATLAB数值运算
一、实验目的:
掌握MATLAB常用的数值运算函数。
二、实验内容:
1、求代数方程
的5个根,并将其用星号(*)标记在复平面图上。
(用roots和plot函数)。
p=[3472912];
r=roots(p)
plot(r,'*');
grid
xlabel('RealAxis')
ylabel('ImagAxis')
r=
-0.8612+1.4377i
-0.8612-1.4377i
0.6737+1.0159i
0.6737-1.0159i
-0.9583
2、求代数方程
的5个根,并将其用星号(*)标记在复平面图上。
(用roots和plot函数)。
p=[10000-1];
r=roots(p)
plot(r,'*');
axisequal
grid
3、求下面函数在[0.5,4]区间内的过零点。
(用fzero函)
fplot('x^3-2*x^2*sin(x)+5*x*cos(x)+1/x',[0.5,4])
x1=fzero('x^3-2*x^2*sin(x)+5*x*cos(x)+1/x',[0.5,2])
x2=fzero('x^3-2*x^2*sin(x)+5*x*cos(x)+1/x',[2,4])
x1=1.5117
x2=2.6095
4、
已知R=50欧姆,U=4V,二极管D正向电流与电压的关系为:
其中:
Ud为二极管正向电压
Is为反向饱合电流,取10-12A
K为玻尔茨曼常数,1.38*10-23
T为绝对温度,取300开尔文(27摄氏度)
q为电子电荷1.6*10-19C
求此电路中的电流Id和二极管正向电压Ud(要求用fsolve函数求解)
R=50;U=4;Is=1e-12;K=1.38e-23;T=300;q=1.6e-19;
%Ud+Id*R-U=0;
%Id-Is*exp(Ud*q/(K*T)-1)=0;
Ud=0:
0.01:
0.7;
Id=Is*exp(Ud*q/(K*T)-1);
Ud1=0:
0.01:
4;
Id1=(U-Ud1)/R
plot(Ud,1000*Id,'r')
holdon
plot(Ud1,1000*Id1,'b')
grid
holdoff
legend('二极管伏安特性','负载线')
x=fsolve(@UdId,[10.05])
functionf=UdId(x)
R=50;U=4;Is=1e-12;K=1.38e-23;T=300;q=1.6e-19;
Ud=x
(1);Id=x
(2);
f=[Ud+Id*R-U
Id-Is*exp(Ud*q/(K*T)-1)];
x=
0.67070.0666
UdId
5、实验数据处理:
已知某压力传感器的测试数据如下表
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,并把拟合曲线和各个测试数据点画在同一幅图上。
p=[0.01.12.12.84.25.06.16.98.19.09.9];
u=[1011131417182224293439];
plot(p,u,'r+')
abcd=polyfit(p,u,3)
p1=0:
0.1:
10;
u1=polyval(abcd,p1);
holdon
plot(p1,u1,'b');
grid
holdoff
axis([-111841]);
xlabel('p');
ylabel('u');
legend('p-u','u(p)=a*p^3+b*p^2+c*p+d',2)
实验八MATLAB应用
1、用Simulink求解下图所示电路0~100微秒内的响应。
已知R=6*10-4欧,C=1700微法,L=6*10-9享,uc(0)=15kV。
●模块参数设置:
Integrator1的Initialcondition:
15kV
在命令窗口为R,L,C赋值。
●仿真参数设置如下:
Starttime:
0
Stoptime:
100e-6
SolverType:
Variable-step
Solver:
ode45
Maxstepsize:
1e-7
Minstepsize:
auto
Initialstepsize:
auto
Relativetolerance:
1e-3
Absolutetolerance:
1e-6
实验四MATLAB数值运算
一、实验目的:
掌握MATLAB常用的数值运算函数。
二、实验内容:
1、求代数方程
p=[3472912]
roots(p)
ans=
-0.8612+1.4377i
-0.8612-1.4377i
0.6737+1.0159i
0.6737-1.0159i
-0.