第5章 数据和函数的可视化
习题5及解答
?x?acost1 已知椭圆的长、短轴a?4,b?2,用“小红点线”画椭圆?。
y?bsint?(参见图p5-1)
?
〖解答〗
clf
a=4;b=2;
t=0:pi/80:2*pi; x=a*cos(t); y=b*sin(t);
plot(x,y,'r.','MarkerSize',15) axis equal xlabel('x') ylabel('y') shg
3210y-1-2-3-4-3-2-10x1234图 p5-1
2 根据表达式??1?cos?绘制如图p5-2的心脏线。(提示:采用极
坐标绘线指令polar)
〖解答〗
clf
theta=0:pi/50:2*pi; rho=1-cos(theta);
h=polar(theta,rho,'-r'); set(h,'LineWidth',4) axis square title('\\rho =1-cos\\theta')
%极坐标绘线指令。h是所画线的图柄。
%利用set设置h图形对象的“线宽” %保证坐标的圆整性 %采用特殊字符映射
1
?=1-cos?12090 2 1.5150 1 0.518003060210330240270300图 p5-2
3 A,B,C三个城市上半年每个月的国民生产总值如见表p5.1。试画
出如图p5-3所示的三城市上半年每月生产总值的累计直方图。
表p5.1 各城市生产总值数据(单位:亿元) 城市 A B C 1月 170 120 70 2月 120 100 50 3月 180 110 80 4月 200 180 100 5月 190 170 95 6月 220 180 120 〖目的〗
? 借助MATLAB的帮助系统,学习直方图指令polar的使用。
? bar指令常用格式之一:bar(x,Y,'style') 。x是自变量列向量;Y是与x行数相同的矩阵,
Y的每一行被作为“一组”数据;style取stacked时,同一组数据中每个元素对应的直方条被相互层叠。
? 在本例中,Y中的一列代表一个城市。绘图时,各列的颜色,取自“色图”;图形窗
的默认色图是jet。 〖解答〗
x=(1:6)';
Y=[170,120,180,200,190,220;120,100,110,180,170,180;70,50,80,100,95,120]';
%以下两条指令是为了让读者看清x,Y中对应数据关系而写的。它们不影响画图。
disp([blanks(5),'x',blanks(4),'YA',blanks(4),'YB',blanks(4),'YC']) disp([x,Y]) %
bar(x,Y,'stacked'); %层叠直方条 colormap(cool); %采用cool色图
legend('A','B','C',2); %该指令的第4个输入量,用来控制图例的位置。 axis([0,7,0,600]) shg
x YA YB YC 1 170 120 70 2 120 100 50 3 180 110 80 4 200 180 100 5 190 170 95 6 220 180 120
2
6005004003002001000 ABC 123456图 p5-3
4 二阶线性系统的归一化(即令?1?? t?esin(? t)???y(t)??te?t?1e?(???)t?e?(???)t?2??n?1)冲激响应可表示为:
0???1????1, ??1|1??2|,?为阻尼系数。(1)希望在同一张图上,绘制t?[0,18]区间内
??0.2:0.2:1.4不同取值时的各条曲线(参见图p5-4)。在此图上,??1的各条曲线为细蓝线;??1为粗黑线;??1为细红线;并且对最上方及最下方的两条曲线给出??0.2和??1.4的醒目标志。(2)读者运行题下程序exmp504.m,可以发现该程序画出的曲线
其中??中没有“粗黑线”。你能讲出原因吗?如何对exmp504.m作最少的修改(比如只改一条指令),就可画出所需图形。(提示:该题深层次地暴露数值计算可能存在的隐患。) 〖解答〗
clc,clf,clear;
t=(0:0.05:18)';N=length(t);
zeta=0.2:0.2:1.4; % 可能画不出黑线。<3> %zeta=linspace(0.2,1.4,7); L=length(zeta); y=zeros(N,L); hold on for k=1:L
zk=zeta(k);
beta=sqrt(abs(1-zk^2)); if zk<1
y=1/beta*exp(-zk*t).*sin(beta*t); plot(t,y,'b') if zk<0.4
text(2.2,0.63,'\\zeta = 0.2') end
elseif zk==1
y=t.*exp(-t);
plot(t,y,'k','LineWidth',2) else
y=(exp(-(zk-beta)*t)-exp(-(zk+beta)*t))/(2*beta);
3