MATLAB实验报告最终定稿.docx
《MATLAB实验报告最终定稿.docx》由会员分享,可在线阅读,更多相关《MATLAB实验报告最终定稿.docx(36页珍藏版)》请在冰点文库上搜索。
MATLAB实验报告最终定稿
MATLAB实验报告
机电工程学院
姓名:
李祖达
学号:
5901111120
专业:
机械设计制造及其自动化
目录
实验一熟悉MATLAB环境认识MATLAB··············································3
实验二MATLAB运算础································6
实验三MATLAB矩阵分析和理·························8
实验四求余弦的积分并绘出像······················11
实验五、六用matlab求解多项式并用plot绘制函数图象
(常微分程)········································13
实验七函数件····································16
实验八、九MATLAB程序设计(循环、择)················19
实验十采用SIMULINK的系统真·······················24
实验十一菜单设计····································27
实验一熟悉MATLAB环境认识MATLAB
一、实验目的
熟悉matlab的安装与启动;熟悉matlab用户界面;熟悉matlab功能、建模元素;熟悉matlab优化建模过程。
二、实验设备与仪器
1.微机
2.matlab仿真软件
三、实验步骤
1.了解matlab的硬件和软件必备环境;
2.启动matlab;
3.熟悉标题栏,菜单栏,工具栏,元素选择窗口,状态栏,控制栏以及系统布局区;
4.学习优化建模过程。
四、实验报告要求
1.写出matlab系统界面的各个构成;以及系统布局区的组成;以及每一部分的功能;
2.优化建模过程应用举例
五、实验内容
(一)、Matlab操作界面
1.命令窗口(commandwindow)
2.命令历史窗口(commandhistory)
3.工作空间管理窗口(workspace)
4.当前路径窗口(currentdirectory)
(二)、实现下列优化建模过程
1、简单矩阵
的输入步骤。
指令:
A=[123;456;789]
A=
123
456
789
2、矩阵的分行输入。
A=[1,2,3
4,5,6
7,8,9]
指令:
>>A=[1,2,3
4,5,6
7,8,9]
A=
123
456
789
3、指令的续行输入
S=1-1/2+1/3-1/4+...
1/5-1/6+1/7-1/8
指令:
S=1-1/2+1/3-1/4+...
1/5-1/6+1/7-1/8
S=
0.6345
4、画出衰减振荡曲线
及其它的包络线
。
的取值范围是[0,2pi]
指令:
t=[0:
pi/4:
2*pi];
y=exp(-t/3).*sin(3*t);
plot(y)
5、画出
所表示的三维曲面。
的取值范围是
。
>>x=-8:
0.5:
8;
>>y=-8:
0.5:
8;
>>z=(sin(sqrt(x.^2+y.^2))./sqrt(x.^2+y.^2));
>>plot3(x,y,z)
6、复数矩阵的生成及运算
A=[1,3;2,4]-[5,8;6,9]*i
B=[1+5i,2+6i;3+8*i,4+9*i]
C=A*B
>>A=[1,3;2,4]-[5,8;6,9]*i
A=
1.0000-5.0000i3.0000-8.0000i
2.0000-6.0000i4.0000-9.0000i
>>B=[1+5i,2+6i;3+8*i,4+9*i]
B=
1.0000+5.0000i2.0000+6.0000i
3.0000+8.0000i4.0000+9.0000i
>>C=A*B
C=
1.0e+02*
0.99001.1600-0.0900i
1.1600+0.0900i1.3700
实验二MATLAB运算基础
一、实验目的及要求:
1.掌握建立矩阵的方法。
2.掌握MATLAB各种表达式的书写规则以及常用函数的使用。
二、实验内容及程序:
1.计算表达式的值
,
,
>>x=(sin(48*pi/180)+sqrt(7))/(1+log2(15)-2i);
>>y=abs(1+3i)/(1+exp
(2));
>>z=x^2+y^2
z=
0.4346+0.2859i
2.矩阵的直接建立及矩阵的运算
(1)请利用直接建立矩阵的方法,采用两种方式建立如下矩阵:
;
(2)将矩阵A第2至3行中第1,3,4列元素赋给矩阵B;
(3)将矩阵A的每个元素加30,并且将第1行和第3行进行交换。
(1)>>A=[12310;45612;78914]
A=
12310
45612
78914
>>A=[1,2,3,10;4,5,6,12;7,8,9,14]
A=
12310
45612
78914
(2)>>B=A(2:
3,[134])
B=
4612
7914
>>A=A+30
A=
31323340
34353642
37383944
(3),A=A+30
A=
31323340
34353642
37383944
>>A=[A(3,:
);A(2,:
);A(1,:
)]
A=
37383944
34353642
31323340
3.
(1)建立一个
的零矩阵、单位矩阵和元素全为1的方阵。
(2)请使用直接建立矩阵的方法,并结合MATLAB中建立矩阵的函数,生成如下矩阵
。
(1)a=zeros(4,5)
a=
00000
00000
00000
00000
>>b=eye(4,5)
b=
10000
01000
00100
00010
>>c=ones(4)
c=
1111
1111
1111
1111
(2)>>a=[013];
>>b=[014];
>>c=[015];
>>d=[a;b;c]
d=
013
014
015
4.当=0.2,0.4,0.6,0.8时,分别求
的值。
>>x=0.2:
0.2:
0.8;
>>y=sin(x).*cos(x)
y=
0.19470.35870.46600.4998
三、实验结果讨论
1.如何访问数组中的元素?
设一个矩阵a,访问其第i个元素则为a[i-1],其中以列为主顺序依次查询
2.如何输出显示字符型变量?
Sprintf(‘%c’,x)
实验三MATLAB矩阵分析和处理
一、实验目的
1.掌握生成特殊矩阵的方法。
2.掌握矩阵分析的方法。
4.用矩阵求逆法解线性方程组。
二、实验内容
1.产生3行二列的单位矩阵、随机矩阵、零矩阵和对角矩阵。
>>A=ones(3,2)
A=
11
11
11
>>B=rand(3,2)
B=
0.95010.4860
0.23110.8913
0.60680.7621
>>C=diag(3,2)
C=diag(3,2)
C=
003
000
000
2.产生5阶希尔伯特矩阵H和5阶帕斯卡矩阵P,求其行列式的值Hh和Hp以及他们的条件数Th和Tp,判断哪个矩阵性能更好,为什么?
3.建立一个5x5矩阵,求它的行列式的值、迹、秩和范数
4.已知
,求特征值和特征向量,并分析其数学意义
>>A=[-29618;20512;-885]
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
5.下面是一个线性方程组
(1)求方程的解
>>A=[0.95;0.67;0.52];
>>B=[1/21/31/4;1/31/41/5;1/41/51/6];
>>X=B\A
X=
1.2000
0.6000
0.6000
(2)将方程右边向量第三个元素0.52改为0.53,并比较解的变化
>>A=[0.95;0.67;0.53];
>>X=B\A
X=
3.0000
-6.6000
6.6000
(3)计算系数矩阵A的条件数并分析结论
6.建立A矩阵,试比较sqrtm(A)和sqrt(A),并分析他们的区别
>>A=[123;456;789]
A=
123
456
789
>>sqrtm(A)
ans=
0.4498+0.7623i0.5526+0.2068i0.6555-0.3487i
1.0185+0.0842i1.2515+0.0228i1.4844-0.0385i
1.5873-0.5940i1.9503-0.1611i2.3134+0.2717i
>>sqrt(A)
ans=
1.00001.41421.7321
2.00002.23612.4495
2.64582.82843.0000
实验四求余弦的积分并绘出图像
一、实验目的
1、了解绘图工具的使用。
二、实验要求
1.(不定积分)用int计算下列不定积分,并用diff验证
,
,,,
输入以下指令:
>>symsx;
>>f=x*sin(x^2);
>>int(f,'x')
ans=
-cos(x^2)/2
验证:
>>diff(-cos(x^2)/2)
ans=
x*sin(x^2)
输入以下指令:
>>symsx;
>>f=1/(1+cos(x));
>>int(f)
ans=
tan(x/2)
验证:
>>diff(tan(x/2))
ans=
tan(x/2)^2/2+1/2
2.(定积分)用trapz,int计算下列定积分(2个)
输入指令:
>>symsx;
>>f=sin(x)/x;
>>int(f,'x',0,1)
ans=
sinint
(1)
>>x=0:
0.1:
2*pi;
f=exp(x).*sin(2*x);
s=trapz(x,f)
s=
-209.5581
3.(椭圆的周长)用定积分的方法计算椭圆
的周长
t=0:
0.001:
2*pi;
a=2;
b=3;
x=a*sin(t);
y=b*cos(t);
>>X=[0x(1:
end-1)];
Y=[0y(1:
end-1)];
x=x-X;
y=y-Y;
d=sqrt(x.^2+y.^2);
d=sum(d)
d=
18.8651
4.(二重积分)计算积分
指令为:
>>fun=inline('(1+x+y).*(x.^2+y.^2-2*y<=0)','x','y');
>>i=dblquad(fun,-1,1,0,2)
i=
6.283
5.(广义积分)计算广义积分
指令为:
>>symsx;
>>f=exp(-x.^2)./(1+x.^4);
>>int(f,'x',-inf,inf)
ans=
(4*pi^(1/2)*hypergeom([1],[5/4,7/4],-1/4))/3+(2^(1/2)*pi*(cos
(1)-sin
(1)))/2
实验五、六 用matlab求解多项式并用plot绘制函数图象(常微分方程)
一、实验目的
1、了解MATLAB中主要用dsolve求符号解析解,ode45,ode23,ode15s求数值解。
2、
s=dsolve(‘方程1’,‘方程2’,…,’初始条件1’,’初始条件2’…,’自变量’)
用字符串方程表示,自变量缺省值为t。
导数用D表示,2阶导数用D2表示,以此类推。
S返回解析解。
在方程组情形,s为一个符号结构。
[tout,yout]=ode45(‘yprime’,[t0,tf],y0)采用变步长四阶Runge-Kutta法和五阶Runge-Kutta-Felhberg法求数值解,yprime是用以表示f(t,y)的M文件名,t0表示自变量的初始值,tf表示自变量的终值,y0表示初始向量值。
输出向量tout表示节点(t0,t1,…,tn)T,输出矩阵yout表示数值解,每一列对应y的一个分量。
若无输出参数,则自动作出图形。
ode45是最常用的求解微分方程数值解的命令,对于刚性方程组不宜采用。
ode23与ode45类似,只是精度低一些。
ode12s用来求解刚性方程组,是用格式同ode45。
可以用helpdsolve,helpode45查阅有关这些命令的详细信息.
3、熟悉plot绘图
二、实验内容
1.求下列微分方程的解析解(2个)
指令为:
y=dsolve('D2y+2*Dy-3*y=exp(-3*x)','x')
y=
C2*exp(x)-(x*exp(-3*x))/4-exp(-3*x)/16+C3*exp(-3*x)
指令为:
y=dsolve('D2y+Dy+y=cos(x)','y(0)=0','Dy(0)=1.5','x')
y=
sin((3^(1/2)*x)/2)*(cos(x-(3^(1/2)*x)/2)/2-cos(x+(3^(1/2)*x)/2)/2+(3^(1/2)*cos(x-(3^(1/2)*x)/2))/3+(3^(1/2)*cos(x+(3^(1/2)*x)/2))/3+(3^(1/2)*sin(x-(3^(1/2)*x)/2))/6+(3^(1/2)*sin(x+(3^(1/2)*x)/2))/6)+(3^(1/2)*exp(-x/2)*sin((3^(1/2)*x)/2))/3-(3^(1/2)*cos((3^(1/2)*x)/2)*((sin(x*(3^(1/2)/2-1))/2-cos(x*(3^(1/2)/2-1))*(3^(1/2)/2-1))/((3^(1/2)/2-1)^2+1/4)+(sin(x*(3^(1/2)/2+1))/2-cos(x*(3^(1/2)/2+1))*(3^(1/2)/2+1))/((3^(1/2)/2+1)^2+1/4)))/3
2.求方程
的解析解和数值解,并进行比较(用plot绘图)
解析解:
>>s=dsolve('(1+x^2)*D2y-2*x*Dy','y(0)=1','Dy(0)=3','x')
s=
x*(x^2+3)+1
数值解:
先建立m文件
functiondy=myfun_1(x,y)
dy=zeros(2,1);
dy
(1)=y
(2);
dy
(2)=2*x*y
(1)/(1+x^2);
end
后再命令窗口输入:
>>[x,y]=ode23(@myfun_1,[0,1000],[0,1]);
>>plot(x,y(:
1),'r+',x,y(:
2),'g*')
得到:
3.分别用ode45和ode15s求解Van-del-Pol方程
的数值解,并进行比较.(用plot绘图)
functiondy=vdp1000(t,y)
dy=zeros(2,1);
dy
(1)=y
(2);
dy
(2)=1000*(1-y
(1)^2)*y
(2)-y
(1);
end
[T,Y]=ode15s('vdp1000',[03000],[01]);
plot(T,Y(:
1),'-')
实验七函数文件
一、实验目的
1、理解函数文件的概念。
2、掌握定义和调用MATLAB函数的方法。
二、实验内容(选作2题)
1、定义一个函数文件,求给定复数的指数、对数、正弦和余弦,并在命令文件中调用该函数文件。
程序设计:
M文件:
functionf(x)
e=exp(x)
ln=log(x)
s=sin(x)
c=cos(x)
end
运行结果:
>>f(2i)
e=
-0.4161+0.9093i
ln=
0.6931+1.5708i
s=
0+3.6269i
c=
3.7622
2、一个物理系统可用下列方程组来表示:
从键盘输入m1、m2和
的值,求a1、a2、N1、N2的值。
其中g取’9.8,输入
时以角度为单位。
要求:
定义一个求解线性方程组AX=B的函数文件,然后在命令文件中调用该函数文件。
程序设计:
函数文件in.m:
function[a1,a2,N1,N2]=in(m1,m2,t)
g=9.8;
A=[m1*cos(t)-m1-sin(t)0;m1*sin(t)0cos(t)0;0m2-sin(t)0;00-cos(t)1];
C=[0;m1*g;0;m2*g];
B=inv(A)*C;
a1=B
(1);
a2=B
(2);
N1=B(3);
N2=B(4);
end
调用in.m的命令文件:
>>m1=1;m2=2;t=30*pi/180;
>>[a1,a2,N1,N2]=in(m1,m2,t)
运行结果:
a1=
6.5333
a2=
1.8860
N1=
7.5440
N2=
26.1333
3、一个自然数是素数,且它的数字位置经过任意对换后仍为素数,则称是绝对素数。
例如13是绝对素数。
试求所有两位绝对素数。
要求:
定义一个判断素数的函数文件。
函数文件:
fory=10:
99
ifisprime(y)
a=rem(y,10);
b=fix(y/10);
c=10*a+b;
ifisprime(c)
disp(y)
end
end
end
运行结果:
>>11
13
17
31
37
71
73
79
97
4、设
,编写一个MATLAB函数文件fx.m,使得调用f(x)时,x可用矩阵代入,得出的f(x)为同阶矩阵。
程序设计:
functiony=fx(x)
y=1./[(x-2).^2+0.1]+1./[(x-3).^4+0.01]
end
运行结果:
>>x=[12345]
x=
12345
>>fx(x)=1./[(x-2).^2+0.1]+1./[(x-3).^4+0.01]
fx=
0.971610.9901100.90911.23400.1724
5、已知
(1)当f(n)=n+10ln
时,求y的值。
程序设计:
函数文件fn.m:
functionx=fn(n)
x=n+10*log(n^2+5)
end
调用fn.m的命令文件:
y=fn(40)/(fn(30)+fn(20))
运行结果:
>>y=
0.6390
(2)当
时,求y的值。
程序设计:
函数文件fn.m:
functionx=fn(n)
ifn<=0
x=0;
else
x=n*(n+1)+fn(n-1);
end
end
调用fn.m的命令文件:
y=fn(40)/(fn(30)+fn(20))
运行结果:
y=
1.7662
实验八,九MATLAB程序设计(循环、选择)
一、实验目的
1、掌握利用if语句实现选择结构的方法;
2、掌握利用switch语句实现多分支选择结构的方法;
3、掌握循环结构的程序书写方法。
二、实验内容
1、硅谷公司员工的工资计算方法如下:
(1)工作时数超过120小时者,超过部分加发15%;
(2)工作时数低于60小时者,扣发700元;
(3)其余按每小时84元计发。
编程按输入的工号和该号员工的工作时数,计算应发工资。
functiongongzi(x,y,a)
clear;
x=input('请输入工号:
');
a=input('请输入工作时长(小时):
');
ifa>120
y=84*120+(a-120)*1.15*84;
else
ifa<60
y=84*a-700;
else
y=84*a;
end
end
disp(['工号为',num2str(x),'的员工工资为:
',num2str(y),'元']);
end
2、用switch…case语句得出各月份的季节(如3,4,5月输出为春季)。
请输入月份
functionjijie(x)
clear;
x=input('请输入月份:
');
switchx
case1
disp([Num2str(x),'月是冬季'])
case2
disp([Num2str(x),'月是冬季'])
case3
disp([Num2str(x),'月是春季'])
case4
disp([Num2str(x),'月是春季'])
case5
disp([Num2str(x),'月是春季'])
case6
disp([Num2str(x),'月是夏季'])
case7
disp([Num2str(x),'月是夏季'])
case8
disp([Num2str(x),'月是夏季'])
case9
disp([Num2str(x),'月是秋季'])
case10
disp([Num2str(x),'月是秋季'])
case11
disp([Num2str(x),'月是秋季'])
case12
disp([Num2str(x),'月是冬季'])
end
3、计算1+3+5+…+99的值,当和大于1000的时候终止计算,要求显示终止时候的求和结果以及