MATLAB教程及实训
实验报告
班级:10级专升本
学号:1010211021
姓名:赵玉莉
实验1 熟悉matlab的开发环境及矩阵操作
一、实验的教学目标
通过本次实验使学生熟悉MATLAB7.0的开发环境,熟悉MATLAB工作界面的多个常用窗口包括命令窗口、历史命令窗口、当前工作目录窗口、工作空间浏览器窗口等。掌握建立表达式书写规则及常用函数的使用,建立矩阵的几种方法。
二、实验环境
计算机、MATLAB7.0集成环境
三、实验内容
1、熟悉命令窗口的使用,工作空间窗口的使用,工作目录、搜索路径的设置。命令历史记录窗口的使用,帮助系统的使用。(P288-298页)
2、在当前命令窗口中输入以下命令:x=0:2:10 y=sqrt(x) 要求用format命令将x和y显示为指数的形式。
>> x=0:2:10
x =
0 2 4 6 8 10
>> format short e
>> x
x =
0 2 4 6 8 10
>> y=sqrt(x)
y =
0 1.4142e+000 2.0000e+000 2.4495e+000 2.8284e+000 3.1623e+000
>> format short e
y
y =
0 1.4142e+000 2.0000e+000 2.4495e+000 2.8284e+000 3.1623e+000
3、在当前命令窗口中输入以下命令:a=[1 2;3 4] b=[1 1;2 2]
要求将两个变量保存到exe1.mat文件中,并将两行命令保存为exe1.m文件,使用which命令查看文件信息,将exe1.m文件设置到搜索路径后,在命令窗口中运行exe1文件。
>> a
a =
1 2
3 4
>> b
b =
1 1
2 2
>> save exel a b
4、求下列表达式的值(1)w=
>> w=sqrt(2)*(1+0.34245*10e-6)
w =
1.4142
(2)x=,其中a=3.5,b=5,c=-9.8
>> x=(2*pi*3.5+(5+(-9.8))/(pi+3.5*5*(-9.8))-eps*eps)/(tan(5-9.8)+3.5)
x =
1.4793
5、A=[7 1 5 2;2 5 6 9; 3 1 5 10], B=[3 4 5;1 2 3; 8 7 6],在命令窗口中执行下列表达式,掌握其含义。(1) A(2,3) A(:,2) A(2,:) A(:,1:2:3) A(4) A(1:2,2:3) A(end,:) A([4;5;6]) A(2,[1 2 3]) A([1 3],:)
(2) 如何将矩阵A和B合并成一个新的矩阵?如何删除矩阵B的最后一行元素,倒数第二列元素?
>> A=[7 1 5 2;2 5 6 9;3 1 5 10]
A =
7 1 5 2
2 5 6 9
3 1 5 10
>> B=[3 4 5;1 2 3;8 7 6]
B =
3 4 5
1 2 3
8 7 6
>> A(2,3)
ans =
6
>> A(:,2)
ans =
1
5
1
>> A(2,:)
ans =
2 5 6 9
>> A(:,1:2:3)
ans =
7 5
2 6
3 5
>> A(4)
ans =
1
>> A(1:2,2:3)
ans =
1 5
5 6
>> A(end,:)
ans =
3 1 5 10
>> A([4;5;6])
ans =
1
5
1
>> A(2,[1 2 3])
ans =
2 5 6
>> A([1 3],:)
ans =
7 1 5 2
3 1 5 10
>> C=[A B]
C =
7 1 5 2 3 4 5
2 5 6 9 1 2 3
3 1 5 10 8 7 6
>> B(3,:)=[]
B =
3 4 5
1 2 3
>> B(:,2)=[]
B =
3 5
1 3
四、实验总结
1,熟悉了命令窗口的使用,工作空间窗口的使用。
2, 了解了工作目录、搜索路径的设置方法。
实验2 MATLAB基本运算
一、实验的教学目标
通过本次实验使学生掌握向量和矩阵的创建方法;掌握矩阵和数组的算术运算、逻辑运算和关系运算;掌握字符数组的创建和运算;了解创建元胞数组和结构体的方法。
二、实验环境
计算机、MATLAB7.0集成环境
三、实验内容
1、创建3阶魔方矩阵a和3阶对角阵b,c=a(1:3,1:3)
>>a=magic(3)
a =
8 1 6
3 5 7
4 9 2
>> b=eye(3)
b =
1 0 0
0 1 0
0 0 1
>> c=a(1:3,1:3)
c =
8 1 6
3 5 7
4 9 2
(1)计算矩阵a,b和c的行列式、逆矩阵并进行最大值的统计。
>> det(a)
ans =
-360
>> det(b)
ans =
1
>> det(c)
ans =
-360
>> inv(a)
ans =
0.1472 -0.1444 0.0639
-0.0611 0.0222 0.1056
-0.0194 0.1889 -0.1028
>> inv(b)
ans =
1 0 0
0 1 0
0 0 1
>> inv(c)
ans =
0.1472 -0.1444 0.0639
-0.0611 0.0222 0.1056
-0.0194 0.1889 -0.1028
>> max(a)
ans =
8 9 7
>> max(b)
ans =
1 1 1
>> max(c)
ans =
8 9 7
(2)比较矩阵和数组的算术运算:b和c的*、/、^和.*、./、.^,以及exp和expm函数。
>> b*c
ans =
8 1 6
3 5 7
4 9 2
>> b/c
ans =
0.1472 -0.1444 0.0639
-0.0611 0.0222 0.1056
-0.0194 0.1889 -0.1028
>> b^c
??? Error using ==> ^
At least one operand must be scalar. (当b为方阵时:c为矩阵时不能运算,会出错。)
>> b.*c
ans =
8 0 0
0 5 0
0 0 2
>> b./c
ans =
0.1250 0 0
0 0.2000 0
0 0 0.5000
>> b.^c
ans =
1 0 0
0 1 0
0 0 1
>> exp(b)
ans =
2.7183 1.0000 1.0000
1.0000 2.7183 1.0000
1.0000 1.0000 2.7183
>> exp(c)
ans =
1.0e+003 *
2.9810 0.0027 0.4034
0.0201 0.1484 1.0966
0.0546 8.1031 0.0074
>> expm(b)
ans =
2.7183 0 0
0 2.7183 0
0 0 2.7183
>> expm(c)
ans =
1.0e+006 *
1.0898 1.0896 1.0897
1.0896 1.0897 1.0897
1.0896 1.0897 1.0897
2 、已知字符串s=’hello’
(1)将s逆序排列输出
>> s='hello'
s =
hello
>> n=length(s)
n =
5
>> ss=[s(n),s(n-1),s(n-2),s(n-3),s(n-4)]
ss =
olleh
(2)使用str2num函数转换字符串s,查看结果。
>> str2num('hello')
ans =
[]
>> str2num(s)
ans =
[]
3、已知A={zeros(2,2,2),’hello’;17.35,int16(1:10)},比较B=A(1,2) 和C=A{1,2}的区别。
>> A={zeros(2,2,2),'hello';17.35,int16(1:10)}
A =
[2x2x2 double] 'hello'
[ 17.3500] [1x10 int16]
>> B=A(1,2)
B =
'hello'
>> C=A{1,2}
C =
Hello
四、实验总结
1,掌握了向量和矩阵的创建方法。
2,掌握矩阵和数组的算术运算、逻辑运算和关系运算。
实验三 数据的可视化
一、实验的教学目标
通过本次实验使学生掌握基本二维绘图函数plot;掌握在图形中添加文字等修饰;掌握绘制三维曲线图、三维网线图和三维表面图的方法。
二、实验环境
计算机、MATLAB7.0集成环境
三、实验内容
1、绘制[0,2]区间内的一条正弦曲线,采用线条宽度为2的蓝色点画线,标记为边缘红色,填充绿色,大小为12像素的五角星。图如下所示:
x=0:0.1:2*pi
y=sin(x)
plot(x,y,'b-.p')
2、在三个子坐标轴中分别显示三条曲线:上面两个坐标轴显示正弦曲线,且第一个无网格,第二个有网格,第三个坐标轴显示余弦曲线,且显示网格。图如下
>> x=0:0.2:2*pi;
>> subplot(2,2,1)
>> plot(x,sin(x))
>> subplot(2,2,2)
>> plot(x,sin(x))
>> grid on
>> subplot(2,2,[3,4])
>> plot(x,cos(x))
>> grid on
3、格式化绘图,要求标注图形标题,文本注释,轴标签和图例。在一个图形窗体中绘制正弦函数sin(x)和指数函数 , 图如下所示。
第3题 第4题
>> x=0:0.1:2*pi;
>> y=exp(-x);
>> plot(x,y,'rp','markerfacecolor','r')
>> hold on
>> z=sin(x);
>> plot(x,z,'b-')
>> hold on
>> x=0:0.1:2*pi;
>> y=exp(-x);
>> plot(x,y,'rp','markerfacecolor','r')
>> hold on
>> z=sin(x);
>> plot(x,z,'b-')
>> gtext('2-D plots')
>> gtext('sin(t)')
>> gtext('sin(\pi/3)')
4、用三维表面图绘制,利用surfc命令来绘制三维表面图并加等高线,图如下所示。
>> x=-4:4;
>> [x,y]=meshgrid(x);
>> z=5*x.^2-y.^2;
>> surfc(x,y,z)
四、实验总结
1,掌握基本二维绘图函数plot。
2,掌握MATLAB图形窗口的功能。
实验四 符号运算
一、实验的教学目标
通过本次实验,要求学生熟练掌握符号对象的创建,符号表达式的化简,符号表达式的微分、积分和极限,符号方程的求解。
二、实验环境
计算机、MATLAB7.0集成环境
三、实验内容
1、要求用两种方法创建符号表达式:。
>> syms a b x y t
>> f=a*(2*x-t)^3+b*sin(4*y)
f =
a*(2*x-t)^3+b*sin(4*y)
>> f2=sym('a*(2*x-t)^3+b*sin(4*y)')
f2 =
a*(2*x-t)^3+b*sin(4*y)
2、创建符号表达式 :,将符号表达式化简成合并同类项、因式分解和嵌套的形式。
>> f=sym('x^3+5*x^2+7*x+3')
f =
x^3+5*x^2+7*x+3
>> g1=collect(f)
g1 =
x^3+5*x^2+7*x+3
>> g12=factor(f)
g12 =
(x+3)*(x+1)^2
>> g2=horner(f)
g2 =
3+(7+(5+x)*x)*x
3、创建两个符号表达式 : ,
(1)计算符号表达式f当x->1、 y->1的极限;
>> syms x y
>> f=(x^2+y^2)^(x*y)
f =
(x^2+y^2)^(x*y)
>> fxy=limit(limit(f,'y',1),'x',1)
fxy =
2
(2)计算符号表达式g的一阶微分和一重不定积分。
>> g=(1+sin(x))/1+cos(x)
g =
1+sin(x)+cos(x)
>> gdf1=diff(g)
gdf1 =
cos(x)-sin(x)
>> gint=int(g)
gint =
x-cos(x)+sin(x)
4、分别求符号方程的解:
(3)
(1) >> syms x
>> eqn='33.6*x^4-22.12*x+101.3=0'
eqn =
33.6*x^4-22.12*x+101.3=0
>> x=solve(eqn)
x =
[ -.93414589926892917083301037789686-1.0241164280845785484550700020173*i]
[ -.93414589926892917083301037789686+1.0241164280845785484550700020173*i]
[ .93414589926892917083301037789686-.83453140382444385548175136291714*i]
[ .93414589926892917083301037789686+.83453140382444385548175136291714*i]
(2)>> syms x y
>> eqn1='x+y=p';
>> eqn2='x*y=q';
>> [x,y]=solve(eqn1,eqn2)
x =
[ 1/2*p-1/2*(p^2-4*q)^(1/2)]
[ 1/2*p+1/2*(p^2-4*q)^(1/2)]
y =
[ 1/2*p+1/2*(p^2-4*q)^(1/2)]
[ 1/2*p-1/2*(p^2-4*q)^(1/2)]
(3)>> [x,y]=dsolve('2*Dx-4*x+Dy-y=exp(t),Dx+3*x+y=0','x(0)=3/2','y(0)=0')
x =
2*cos(t)-4*sin(t)-1/2*exp(t)
y =
14*sin(t)-2*cos(t)+2*exp(t)
四、实验总结
1, 通过本次实验,熟练掌握了符号对象的创建,多项式符号表达式的化简。
2, 符号表达式的微分、积分和极限,符号方程的求解。
实验五 程序设计和M文件
一、实验的教学目标
1、熟练运用M文件编辑/调试窗口中调试程序的方法
2、熟悉与函数相关的知识
3、熟练掌握分支结构、循环结构。
二、实验环境
计算机、MATLAB7.0集成环境
三、实验内容
1、编写程序,计算 2+4+6+8+…+(2n)的值(用 input 语句输入 n 的值, 用for语句实现)。
sum=0;
n=input('input n:');
for i=2:2:2*n
sum=sum+i;
end
sum
运行结果
input n:5
sum =
30
2、利用格里高利公式求π的近似值,要求精确到最后一项的绝对值小于(用while语句来实现)
sum=1;
i=1;
j=1;
while 1
sum=sum+(1/(2*j+1)*(-i));
i=-i;
j=j+1;
if abs(1/(2*j+1)*(-i))<abs(10^(-4))
break;
end
end
pi=sum*4;
pi
运行结果
pi =
3.1414
3、费波那契(fibonacci)数列:1 、1、2、 3、 5、 8、 13、 21、…
其递推公式为:
编程实现求n项的费波那契数列的函数。(要求:在命令行窗体中,调用求解n项的费波那契数列得函数)
function y=fibonacci(n)
a1=1;
a2=1;
if (n<=2)
str=['the xulie:',num2str(a1)];
disp(str);
str1=['the xulie:',num2str(a2)];
disp(str1);
else
str=['the xulie:',num2str(a1)];
disp(str);
str1=['the xulie:',num2str(a2)];
disp(str1);
for i=3:n
y=a1+a2;
a2=y;
a1=a2;
str3=['the xulie:',num2str(y)];
disp(str3);
end
end
四、实验总结
1,熟练运用M文件编辑/调试窗口中调试程序的方法。
2,熟悉与函数相关的知识。
实验六 程序设计和M文件(2)
一、实验的教学目标
熟练运用M文件编辑/调试窗口中调试程序的方法,熟悉与函数相关的知识,熟练掌握分支结构、循环结构。
二、实验环境
计算机、MATLAB7.0集成环境
三、实验内容
1、给定三个边长,看看它们是否能够组成一个三角形。
(编写M文件,输入为三个边长,而输出则为字符串,说明给定的边长是否能够组成三角形,若可能,可以进一步指出是否为等腰三角形。)
a=input('input a=');
b=input('input b=');
c=input('input c=');
if((a+b>c&&a-b<c)&&(a+c>b&&a-c<b)&&(b+c>a&&b-c<a))
str='能够组成三角形'
disp(str)
if(a==b||a==c||b==c)
str='等腰三角形'
disp(str)
if(a==b&&a==c||a==b&&b==c)
str='等边三角形'
disp(str)
end
else
str='不能够组成三角形'
disp(str)
end
2、编写函数文件myfunc.m,任意输入一个正整数,如果是偶数,用2除,如果是奇数,用3乘再加1,反复这个过程,知道所得到的数为1,将依次得到的这个数列。(数列中包括输入的正整数)。
a=input(‘input a=’)
str=[‘数列是:’,num2str(a)]
disp(str)
x=a
while(x~=1)
if rem(x,2)==0 x=x/2 str=[num2str(x)] disp(str)
else x=x*3+1 str=[num2str(x)] disp(str)
end
end
四、实验总结
1,熟悉与函数相关的知识,熟练掌握分支结构、循环结构。
2,主函数与子函数的调用。
实验7 图形用户界面设计(GUI)
一、实验目的
使用GUIDE编辑器编辑GUI,要分别编辑两个文件:一个是fig文件,包含了GUI对象的属性设置及其布局信息;另一个是M文件,包含了控制GUI 对象执行的回调函数。图形用户界面设计包括两个步骤,(1)GUI对象属性设置与布局;(2)编辑回调函数。
二、实验内容:
设计一个二进制与十进制相互转换的GUI界面,要求Edit text内输入正整数,当选中二进制时,该值转换为二进制,若选择为十进制,该值转换为十进制。
三、实验步骤:
(1)打开GUIDE编辑器,创建一个Edit text 和两个Radio Button 。设置属性:
a) Edit text
FontSize:10;HorizontalAlignment:right; String:0; Tag:num
b)第一个Radio Button
FontSize:10 ; String:binary; Tag:bin
c)第二个Radio Button
FontSize:10 ; String:decimal; Tag:dec; value:1
(2)编写回调函数,由十进制转换为二进制时,若文本框中输入非负数,先取整再转化;若文本框中输入非数或负数,提示“输入错误”。由二进制转换为十进制时,要求文本框中只能输入0和1,否则提示“输入错误”。
在Edit text对象上单击,选择View Callbacks|selectionChangeFcn,在该回调函数内编写如下代码:
str=get(handles.num,'string');
在第一个Radio Button对象上单击,选择View Callbacks|selectionChangeFcn,在该回调函数内编写如下代码:
switch get(hObject,'tag')
case 'bin'
val=floor(str2num(str));
if (~isempty(val))&&(val>=0)
set(handles.num,'string',dec2bin(val))
else
set(handles.num,'string','input error!')
end
case'dec'
if all(str=='0'|str=='1')
set(handles.num,'string',num2str(bin2dec(str)))
else
set(handles.num,'string','input error!')
end
end
在第二个Radio Button对象上单击,选择View Callbacks|selectionChangeFcn,在该回调函数内编写如下代码:
switch get(hObject,'tag')
case 'bin'
val=floor(str2num(str));
if (~isempty(val))&&(val>=0)
set(handles.num,'string',dec2bin(val))
else
set(handles.num,'string','input error!')
end
case'dec'
if all(str=='0'|str=='1')
set(handles.num,'string',num2str(bin2dec(str)))
else
set(handles.num,'string','input error!')
end
end
(3)保存GUI及其M文件,运行GUI。
四、实验总结
1,对GUI图形界面有了初步的了解,掌握了主要控件属性的设置。
2,了解编写回调函数的基本编程思想。