MATLAB实验三
MATLAB计算可视化
试验报告说明:
1 做试验前请先预习,并独立完成试验和试验报告。
2 报告解答方式:将MATLAB执行命令和最后运行结果从命令窗口拷贝到每题的题目下面,请将报告解答部分的底纹设置为灰色,以便于批阅。
3 在页眉上写清报告名称,学生姓名,学号,专业以及班级。
3 报告以Word文档书写。
文档命名方式: 学号+姓名+_(下划线)+试验几.doc 如:110400220张三_试验1.doc
4 试验报告doc文档以附件形式发送到maya_email@tom.com。凡文档命名不符合规范,或者发送方式不正确,不予登记。
5 每次试验报告的最后提交期限:下周试验课之前。
6 欢迎访问我的教学论坛:http://www.qszy.com/nbbs,由此进入Matlab专栏。论坛注册时请在个人签名档写上自己的姓名和学号,以便于权限设置,可在论坛上交流学习,并可下载发布的试验报告和解答参考等相关资料。
一目的和要求
(1)熟练掌握MATLAB二维曲线的绘制
(2)熟练掌握图形的修饰
(3)掌握三维图形的绘制
(4)熟练掌握各种特殊图形的绘制
(5)掌握句柄图形的概念
(6)了解GUI设计
二内容和步骤
(说明:绘图题需在报告中粘贴图形结果。)
1 绘制二维曲线(必做)
查阅stem绘图指令,利用stem绘制复指数序列(其中)的相关图形,要求:(1)把窗口分成2行2列。(2)左上窗口绘制复指数序列的实部波形,窗口右上角绘制复指数序列的虚部波形,左下角绘制复指数序列的幅度波形,右下角绘制窗口的相位波形。要求每个子图标注标题,X,Y轴说明。要求显示网格。
% 复指数序列程序
n=-10:10;
alpha=-0.1+0.3*j;
x=exp(alpha*n);
real_x=real(x); % 实部
img_x=imag(x); % 虚部
mag_x=abs(x); % 幅值
phase_x=(180/pi)*angle(x); % 相角,转为角度
subplot(2,2,1)
stem(n,real_x);title('实数部分');xlabel('n');ylabel('real');
grid on
subplot(2,2,2)
stem(n,img_x);title('虚数部分');xlabel('n');ylabel('imag');
grid on
subplot(2,2,3)
stem(n,mag_x);title('幅度');xlabel('n');ylabel('abs');
grid on
subplot(2,2,4)
stem(n,phase_x);title('相位');xlabel('n');ylabel('phase');
grid on
同学解题过程存在的问题:
1注意括号应用,有同学如此定义指数序列:x=exp(-0.1+j*0.3)*n,思考错在哪里?
2绘图程序最好放在M脚本中编辑,部分同学是在命令窗口中,这样不便于对程序的调试和修正。
3 部分同学的作业显示绘图的思路零乱,没能理清作图的过程。在发布的PPT 上就二维三维图形的一般作图过程有专门的总结,希望大家好好看看,注意绘图顺序过程,一般先调用subplot命令之后再调用title,xlabel等命令对子图进行设置。
2 绘制多条曲线(必做)
在同一图形窗口绘制。利用plot绘图指令绘图命令。
(1) 在窗口上部绘制正弦信号,。要求曲线为黑色实线。
(2) 使用hold on命令在同一窗口重叠绘制信号,。要求曲线线型为红色点划线。
(3) X轴标注“时间t”, y轴标注“”,标题为“正弦/指数序列”。
(4) 使用legend命令在图的右上角标注两条曲线的图例。
(5) 使用gtext交互式图形命令,分别标注曲线和。
% 绘制多条曲线
t=0:0.1:4*pi;
x=sin(0.5*pi.*t+pi/4);
plot(t,x,'k-');
title('正弦信号');
xlabel('时间t');
ylabel('x(t)');
hold on
g=x.*(0.5.^t);
plot(t,g,'r-.')
title('指数序列');
xlabel('序列t');
ylabel('g(n)');
%添加图例
legend('sin(0.5*pi*t+pi.4)','x(t)*0.5^t',1)
% gtext标注曲线
gtext('sin(0.5*pi*t+pi.4)');
gtext('x(t)*0.5^t');
3 句柄的学习
(1)获取图形句柄:(必做)
1)显示并获取上图(题2)的标题句柄。
h_axis=gca; %获取坐标轴句柄
h_title=get(gca,'title') %获取标题句柄
%也可在生成标题对象时直接返回句柄
p=title('指数序列');
(2)设置图形对象属性:(必做)
1)利用set 命令设置图形标题的颜色为蓝色,字体大小14。
set(h_title,'color','blue','fontsize',14)
2)使用图形窗口功能。选择菜单“Edit”---“Figure Properties”打开图形属性窗口(或直接在命令窗口输入命令:propedit(gcf)直接打开图形属性窗口)。在图形属性窗口中,修改曲线的颜色和线条宽度。(必做)
(本题解答略)
(3) 分别set命令和图形属性窗口重新设置Y轴的刻度令其为[-1 -0.5 0 0.5 1](选做)
set(gca,'ytick',[-1 -0.5 0 0.5 1])
通过本题希望大家理解图形对象和句柄的概念。句柄是图形对象的标识,通过这个标识,我们可以找到这个对象,并通过set函数对对象的属性进行任意的修改。当然我们已可以在图形对象的属性窗口中直接修改
4 绘制三维曲线(必做)
1. 绘制曲线的网线图。 D, 显示要求去掉坐标轴,显示色图。
x=-2:0.1:2
y=-2:0.1:2
[X,Y]=meshgrid(x,y); % 或[x,y]=meshgrid([-2:0.1:2]); 产生XY平面上的栅格点阵。
Z=X.*exp((X.^2+Y.^2)); % 计算XY平面上的各栅格点在Z轴上的对应值
surf(X,Y,Z) % 根据XYZ三维作标值绘制曲面
colormap hot % 指定hot色图
colorbar % 显示色图
axis off % 不显示坐标轴
本题存在的问题:
1 理清三维作图的一般顺序。尤其是理解meshgrid函数产生二维平面栅格点阵的作用。
2 注意几个函数的区别:Colormap命令用于指定色图,colorbar命令用于显示色图。
2 设计动画程序,改变上图的观测角度,实现上图视角绕z 轴的360度的连续观测。(自学动画同学选做)
x=-2:0.1:2
y=-2:0.1:2
[X,Y]=meshgrid(x,y);
Z=X.*exp(-(X.^2+Y.^2));
surf(X,Y,Z)
colormap hot
axis off
clear M %清除用于存放影片各帧的M矩阵
n=50;
for k=1:n % for循环连续产生50个不同视角的图像
view([-37.5+360*k/n, 30]); % 改变视角。
M(k)=getframe; % 抓图
end
movie(M,3) % 播放3次
第二篇:实验3 参考答案
一、把数学式子转换成VB表达式:
1. 3x (3*x
2. 10≤X<20 ( x>=10 and x<20
3. 5÷6 (5/6
4. (x+3)(y+4)+xy<1000、 ((x+3) *(y+4)+x*y <1000
5. 将任意两位数x的个位数和十位数对换。(X mod 10)*10+x \10
6. 产生一个”C”~”L”范围内的大写字母(包含C和L) Chr(int(rnd*(asc(“L”)-asc(“C”)+1)+asc(“C”)))
二、写出下列表达式的值:
1. 45<54 or“123”>”234” T
2. 156\10+156\100 16
3. #01/20/04#-#12/01/03# 50
4. 156/10+156/100 17.16
5. 156+23mod10\7+Asc(“B”) 222
6. Int(45.5*100+0.4)/100 45.5
7. 100 + “100” & 100 200100
三、求下列函数和表达式的值
1. Int(Rnd*100) 1~100之间的数
2. int(-12.3) -13
3. Cint(-12.3) -12
4. Cint(-12.8) -13
5. fix(-12.8) -12
6. fix(-12.3) -12
7. Int(-12.8) -13
8. Len( "VB可视化开发环境" ) 9
9. mid("我喜欢vb“,2,3) 喜欢
10. weekday(#3/21/2007#) 4
11. Asc("A")+Len("ABCDE ")+mid("12345 ",2,2) 94
12. Val("123.45abc")+345 468.45
四、
1. int(rnd*(b-a+1)+a) b>a, 求出来的是[a,b]间的整数)
2. int(rnd*(b-a)+a) b>a, 求出来的是[a,b)间的整数)
3. int(rnd*(b-a) +1+a) b>a, 求出来的是(a,b]间的整数)
编程作业:
1.输入一个华氏温度,要求在窗体上输入其对应的摄氏温度值。(摄氏温度与华氏温度的转换公式为:C=5/9*(F-32),其中C代表摄氏温度,F代表华氏温度)。
提示:整个代码放在Form_click 事件中,通过单击窗体来运行程序。
第一步:定义两个变量。
第二步:通过inputbox语句提示用户输入一个华氏温度。
第三步:利用华氏与摄氏温度的转换公式,把华氏变化成摄氏温度。
第四步:通过print语句在窗体上分别显示华氏温度和转换后的摄氏温度。
Private Sub Form_Click()
Dim f As Single, c As Single
f = Val(InputBox("请输入华氏温度:", "输入框", 100))
c = 5 / 9 * (f - 32)
Print "该华氏温度对应的摄氏温度为:"; c
End Sub
2.编写程序要求输入的三角形的底和高,计算三角形的面积。
要求:整个代码放在Form_click 事件中,通过单击窗体来运行程序。
通过inputbox语句提示用户输入。
通过msgbox语句显示结果。
Private Sub Form_Click()
Dim a As Single, b As Single, s As Single
a = Val(InputBox("请输入三角形的高:"))
b = Val(InputBox("请输入三角形的底:"))
s = a * b / 2
MsgBox "该三角形的面积为" & s
3.任意输入圆的半径输出该圆的面积。要求:整个代码放在Form_click 事件中,通过单击窗体来运行程序。通过inputbox语句提示用户输入。通过msgbox语句显示结果。
Private Sub Form_Click()
Dim r As Single, s As Single
Const pi As Double = 3.1415926
r = Val(InputBox("请输入圆的半径:"))
s = r * r * pi
MsgBox "该圆的面积为:" & s
End Sub