函數(shù)的可視化與Matlab作
2.1 實(shí)驗(yàn)與觀察:函數(shù)的可視化
2.1.1 Matlab二維繪圖命令
1.周期函數(shù)與線性p-周期函數(shù)
◆ 觀察 :
【 clf, x=linspace(0,8*pi,100);
F=inline('sin(x+cos(x+sin(x)))');
y1=sin(x+cos(x+sin(x))); y2=0.2*x+sin(x+cos(x+sin(x)));
plot(x,y1,'k:',x,y2,'k-') legend('sin(x+cos(x+sin(x))','0.2x+sin(x+cos(x+sin(x)))',2) 】
2. plot指令:繪制直角坐標(biāo)的二維曲線
3. 圖形的屬性設(shè)置和屏幕控制
【 h=plot([0:0.1:2*pi],sin([0:0.1:2*pi])); grid on
set(h,'LineWidth',5,'color','red'); set(gca,'GridLineStyle','-','fontsize',16) 】
◆設(shè)置y坐標(biāo)的刻度并加以說明,并改變字體的大小。
【 h=plot([0:0.1:2*pi],sin([0:0.1:2*pi]));grid on,
set(gca,'ytick',[-1 -0.5 0 0.5 1]), set(gca,'yticklabel','a|b|c|d|e'),
set(gca,'fontsize',20) 】
4. 文字標(biāo)注指令
【 plot(x,y1,'b',x,y2,'k-') ,
set(gca,'fontsize',15,'fontname','times New Roman'), %設(shè)置軸對象的字體為times
% New Roman,字體的大小為15
title(' \it{Peroid and linear peroid function}'); %加標(biāo)題,注意文字用單引號' ' 加上
%斜杠'\'后可輸入不同的設(shè)置,例如it{…}表示花括號里的文字為斜體;如果有多項(xiàng)設(shè)置,
%則可用\…\…\…連續(xù)輸入。
xlabel('x from 0 to 8*pi it{t}\'); ylabel('\it{y}'); %說明坐標(biāo)軸
text(x(49),y1(50)-0.4,'\fontsize{15}\bullet\leftarrowThe period function {\itf(x)}');
%在坐標(biāo)(x(49),y1(50)-0.4)處作文字說明, 各項(xiàng)設(shè)置用""隔開。
%\fontsize{15}\bullet\leftarrow的意義依次是:\字體大小=15 \ 畫圓點(diǎn) \左箭頭
text(x(14),y2(50)+1,'\fontsize{15}The linear period function {\itg(x)}\rightarrow
\bullet') %與上一語句類似,用右箭頭 】
圖2.5 文字標(biāo)注
◆觀察指令legend和num2str的用法:在同一張圖上畫出 , 這里 , 并進(jìn)行適當(dāng)?shù)臉?biāo)注。
zxy2_2.m
【 clf, t=0:0.1:3*pi;alpha=0:0.1:3*pi;
plot(t,sin(t),'r-');hold on; plot(alpha,3*exp(-0.5*alpha),'k:');
set(gca,'fontsize',15,'fontname','times New Roman'),
xlabel('\it{t(deg)}');ylabel('\it{magnitude}');
title(' \it{sine wave and {\it{Ae}}^{-\alpha{\itt}}wave}'); %注意\alpha的意義
text(6,sin(6),'\fontsize{15}The Value \it{sin(t)} at {\itt}=6\rightarrow\bullet', 'HorizontalAlignment','right'),
%上面的語句是一整行,如果要寫成兩行,必須使用續(xù)行號 … ,例如要在“ bullet',”
%后換行,需寫“bullet', …”后才能換行。
% 'HorizontalAlignment','right' 表示箭頭所指的曲線對象在 文字的右邊。
text(2,3*exp(-0.5*2),['\fontsize{15}\bullet\leftarrow The Value of \it{3e}^{-0.5 \it{t}}=',num2str(3*exp(-0.5*2)),' at \it{t} =2 ']);
%num2str的用法:['string1' ,num2str,'string2'],注意方括號的使用。
%legend('\itsin(t)','{\itAe}^{-\alphat}') % 請結(jié)合圖形觀察此命令的使用 】
運(yùn)行結(jié)果如圖2.6所示。
5. 圖形窗口的創(chuàng)建和分割
◆觀察:
【 clf,b=2*pi;x=linspace(0,b,50);
for k =1:9
y=sin(k*x);
subplot(3,3,k),plot(x,y),axis([0,2*pi,-1,1])
end 】
2.1.2多元函數(shù)的可視化與空間解析幾何(三維圖形)
本節(jié)通過高等數(shù)學(xué)的幾個例子觀察Matlab的三維繪圖功能和技巧。
1. 繪制二元函數(shù)
◆觀察:繪制 的圖象,作定義域的裁剪。
◆(1)觀察meshgrid指令的效果。
【 a=-0.98;b=0.98;c=-1;d=1;n=10;
x=linspace(a,b,n); y=linspace(c,d,n);
[X,Y]=meshgrid(x,y);
plot(X,Y,'+') 】
★三維繪圖指令mesh、meshc、surf。
◆(2)做函數(shù)的定義域裁剪,觀察上述三維繪圖指令的效果。
程序zxy2_4.m
【 clear,clf,
a=-1;b=1;c=-15;d=15;n=20;eps1=0.01;
x=linspace(a,b,n);y=linspace(c,d,n);
[X,Y]=meshgrid(x,y);
for i=1:n %計(jì)算函數(shù)值z ,并作定義域裁剪
for j=1:n
if (1-X(i,j))<eps1|X(i,j)-Y(i,j)<eps1 %if語句這樣用
z(i,j)=NaN; %作定義域裁剪,定義域以外的函數(shù)值為NaN
else
z(i,j)=1000*sqrt(1-X(i,j))^-1.*log(X(i,j)-Y(i,j));
end
end
end
zz=-20*ones(1,n);plot3(x,x,zz),grid off,hold on %畫定義域的邊界線
mesh(X,Y,z) %繪圖,讀者可用meshz, surf, meshc在此替換之
xlabel('x'),ylabel('y'),zlabel('z'), box on %把三維圖形封閉在箱體里 】
◆運(yùn)行了zxy2_4.m 以后,有關(guān)向量存儲在工作空間中,在此基礎(chǔ)上,觀察上述等值線繪制指令的運(yùn)行效果。
【 [cs,h]=contour(X,Y,z,15); clabel(cs,h,'labelspacing',244) 】
2. 三元函數(shù)可視化: slice指令
◆ 觀察: 繪制三元函數(shù) 的可視化圖形。
【 clf,x=linspace(-2,2,40); y=x; z=x;
[X,Y,Z]=meshgrid(x,y,z); w=X.^2+Y.^2+Z.^2;
slice(X,Y,Z,w,[-1,0,1],[-1,0,1],[-1,0,1]),colorbar 】
3. 空間曲線及其運(yùn)動方向的表現(xiàn):plot3和quiver指令
【 clf, t=0:0.1:1.5;
Vx=2*t;Vy=2*t.^2;Vz=6*t.^3-t.^2;
x=t.^2;y=(2/3)*t.^3;z=(6/4)*t.^4-(1/3)*t.^3; %由速度得到曲線
plot3(x,y,z,'r.-'),hold on %畫飛行軌跡
%算數(shù)值梯度,也就是重新計(jì)算數(shù)值速度矢量,這只是為了編程的方便,不是必須的
圖2.12 飛機(jī)的飛行軌跡與方向
Vx=gradient(x);Vy=gradient(y);Vz=gradient(z);
quiver3(x,y,z,Vx,Vy,Vz),grid on %畫速度矢量圖
xlabel('x'),ylabel('y'),zlabel('z') 】
2.2應(yīng)用、思考和練習(xí)
2.2.1 線性p周期函數(shù)
zxy2_3_f.m
【 function f=zxy2_3_f(x)
f=sin(x+cos(x)); 】
zxy2_3.m
【 clear,clf
a=-8;b=12;n=300;xx=linspace(a,b,n);
h=zxy2_3_f(xx);
S(1)=0;
for i=2:n
S(i)=S(i-1)+quad('zxy2_3_f',xx(i-1),xx(i));
end
subplot(1,2,1),plot(xx,S,'k-'),axis([a,b,-1.5,9])
subplot(1,2,2),plot(xx,[h;zeros(1,length(xx))],'k-'),axis([a,b,-1.5,1.5]) 】
2.2.2 平面截割法和曲面交線的繪制
◆用平行截面法討論由曲面 構(gòu)成的馬鞍面形狀。
zxy2_6.m ( 平行截割法示例 , 本程序的繪制兩曲面交線方法可以套用)
【 clf, a=-20;eps0=1;
[x,y]=meshgrid(-10:0.2:10); %生成平面網(wǎng)格
v=[-10 10 -10 10 -100 100]; %設(shè)定空間坐標(biāo)系的范圍
colormap(gray) %將當(dāng)前的顏色設(shè)置為灰色
z1=(x.^2-2*y.^2)+eps; %計(jì)算馬鞍面函數(shù)z1=z1(x,y)
z2=a*ones(size(x)); %計(jì)算平面 z2=z2(x,y)
r0=abs(z1-z2)<=eps0;
%計(jì)算一個和z1同維的函數(shù)r0,當(dāng)abs(z1-z2)<=eps時r0 =1;當(dāng)abs(z1-z2)>eps0時,r0 =0。
%可用mesh(x,y,r0)語句觀察它的圖形,體會它的作用,該方法可以套用。
zz=r0.*z2;xx=r0.*x;yy=r0.*y; %計(jì)算截割的雙曲線及其對應(yīng)的坐標(biāo)
subplot(2,2,2), %在第2圖形窗口繪制雙曲線
h1=plot3(xx(r0~=0),yy(r0~=0),zz(r0~=0),'+');
set(h1,'markersize',2),hold on,axis(v),grid on
subplot(2,2,1), %在第一圖形窗口繪制馬鞍面和平面
mesh(x,y,z1);grid,hold on;mesh(x,y,z2);
h2=plot3(xx(r0~=0),yy(r0~=0),zz(r0~=0),'.'); %畫出二者的交線
set(h2,'markersize',6),hold on,axis(v),
for i=1:5 %以下程序和上面是類似的,通過循環(huán)繪制一系列的平面去截割馬鞍面
a=70-i*30; %在這里改變截割平面
z2=a*ones(size(x)); r0=abs(z1-z2)<=1; zz=r0.*z2;yy=r0.*y;xx=r0.*x;
subplot(2,2,3),
mesh(x,y,z1);grid,hold on;mesh(x,y,z2);hidden off
h2=plot3(xx(r0~=0),yy(r0~=0),zz(r0~=0),'.'); axis(v),grid
subplot(2,2,4),
h4=plot3(xx(r0~=0),yy(r0~=0),zz(r0~=0),'o');
set(h4,'markersize',2),hold on,axis(v),grid on
end 】
2.2.3 微分方程的斜率場
◆ 繪制微分方程 的斜率場,并將解曲線畫在圖中,觀察斜率場和解曲線的關(guān)系。
zxy2_5.m ( 繪制一階微分方程的斜率場和解曲線)
【 clf,clear %清除當(dāng)前所有圖形窗口的圖像,清除當(dāng)前工作空間的內(nèi)存變量。
a=0;b=4;c=0;d=4;n=15;
[X,Y]=meshgrid(linspace(a,b,n),linspace(c,d,n)); %生成區(qū)域中的網(wǎng)格。
z=X.*Y; %計(jì)算斜率函數(shù)。
Fx=cos(atan(X.*Y));Fy=sqrt(1-Fx.^2); %計(jì)算切線斜率矢量。
quiver(X,Y,Fx,Fy,0.5),hold on,axis([a,b,c,d])
%在每一網(wǎng)格點(diǎn)畫出相應(yīng)的斜率矢量,0.5是控制矢量大小的控制參數(shù),可以調(diào)整。
[x,y]=ode45('zxy2_5f',[0,4],0.4); %求解微分方程。
%zxy2_5f.m是方程相應(yīng)函數(shù)f(x,y)的程序,單獨(dú)編制;[x0,xs]=[0,4]為求解區(qū)間;
%y0=0.4為初始值;輸出變量x,y分別為解軌線自變量和因變量數(shù)組。
plot(x,y,'r.-') %畫解軌線 】
zxy2_5f.m (微分方程的函數(shù)子程序)
【 function dy=zxy2_5f(x,y)
dy=x.*y; 】
2.2.4顏色控制和渲染及特殊繪圖指令
1.地球表面的氣溫分布(sphere指令)
◆
【 [a,b,c]=sphere(40);t=max(max(abs(c)))-abs(c);surf(a,b,c,t);
axis('equal'),colormap('hot'), shading flat,colorbar 】
2.旋轉(zhuǎn)曲面的生成:柱面指令cylinder和光照控制指令surfl
◆
【 x=0:0.1:10;z=x;y=1./(x.^3-2.*x+4);
[u,v,w]=cylinder(y);surfl(u,v,w,[45,45]);
shading interp 】
3.若干特殊圖形
◆ 運(yùn)行下面程序,了解各指令的用法和效果。
【 x=[1:10]; y=[5 6 3 4 8 1 10 3 5 6];
subplot(2,3,1),bar(x,y),axis([1 10 1 11])
subplot(2,3,2),hist(y,x),axis([1 10 1 4])
subplot(2,3,3),stem(x,y,'k'),axis([1 10 1 11])
subplot(2,3,4),stairs(x,y,'k'), axis([1 10 1 11])
subplot(2,3,5), x = [1 3 0.5 5];explode = [0 0 0 1];pie(x,explode)
subplot(2,3,6),z=0:0.1:100; x=sin(z);y=cos(z).*10;
comet3(x,y,z) 】
評論
查看更多