百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 热门文章 > 正文

Matlab图像处理之函数的可视化与作图

bigegpt 2024-09-16 12:23 11 浏览

1. 实验与观察:函数的可视化

1.1 Matlab二维绘图命令

1. 周期函数与线性-周期函数

观察:

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指令:绘制直角坐标的二维曲线

3. 图形的属性设置和屏幕控制

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)

设置y坐标的刻度并加以说明,并改变字体的大小。

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. 文字标注指令

plot(x,y1,'b',x,y2,'k-') ,  
set(gca,'fontsize',15,'fontname','times New Roman'),  %设置轴对象的字体为times New Roman,字体的大小为15  
title(' \it{Peroid and linear peroid function}');     
%加标题,注意文字用单引号' '加上斜杠'\'后可输入不同的设置,例如it{…}表示花括号里的文字为斜体;如果有多项设置,则可用\…\…\…连续输入。  
xlabel('x from 0 to 8*pi it{t}\'); ylabel('\it{y}');   %说明坐标轴  
text(x(49),y1(50)-0.4,'\fontsize{15}\bullet\leftarrowThe period function {\itf(x)}');
%在坐标(x(49),y1(50)-0.4)处作文字说明, 各项设置用"\"隔开。  
%\fontsize{15}\bullet\leftarrow的意义依次是:\字体大小=15 \ 画圆点 \左箭头  
text(x(14),y2(50)+1,'\fontsize{15}The linear period  function {\itg(x)}\rightarrow\bullet')   %与上一语句类似,用右箭头

图1 文字标注

观察指令legend和num2str的用法:在同一张图上画出,这里, 并进行适当的标注。

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'),  
%上面的语句是一整行,如果要写成两行,必须使用续行号 … ,例如要在“ 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}')   % 请结合图形观察此命令的使用

5. 图形窗口的创建和分割

观察:

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

1.2多元函数的可视化与空间解析几何(三维图形)

本节通过高等数学的几个例子观察Matlab的三维绘图功能和技巧。

1. 绘制二元函数

◆ 观察:绘制的图象,作定义域的裁剪。

◆ (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) 做函数的定义域裁剪,观察上述三维绘图指令的效果。

程序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             %计算函数值z ,并作定义域裁剪  
for j=1:n  
if (1-X(i,j))<eps1|X(i,j)-Y(i,j)<eps1  %if语句这样用  
z(i,j)=NaN;                         %作定义域裁剪,定义域以外的函数值为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    %把三维图形封闭在箱体里

运行了zxy2_4.m 以后,有关向量存储在工作空间中,在此基础上,观察上述等值线绘制指令的运行效果。

[cs,h]=contour(X,Y,z,15);  clabel(cs,h,'labelspacing',244)

2. 三元函数可视化: slice指令

◆ 观察:绘制三元函数 的可视化图形。

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. 空间曲线及其运动方向的表现: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                    %画飞行轨迹  
%算数值梯度,也就是重新计算数值速度矢量,这只是为了编程的方便,不是必须的  
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应用、思考和练习

2.1 线性周期函数

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 平面截割法和曲面交线的绘制

◆ 用平行截面法讨论由曲面构成的马鞍面形状。

zxy2_6.m (平行截割法示例,本程序的绘制两曲面交线方法可以套用)

clf, a=-20;eps0=1;  
[x,y]=meshgrid(-10:0.2:10);  %生成平面网格  
v=[-10 10 -10 10 -100 100];  %设定空间坐标系的范围  
colormap(gray)               %将当前的颜色设置为灰色  
z1=(x.^2-2*y.^2)+eps;        %计算马鞍面函数z1=z1(x,y)  
z2=a*ones(size(x));          %计算平面 z2=z2(x,y)  
r0=abs(z1-z2)<=eps0;  
%计算一个和z1同维的函数r0,当abs(z1-z2)<=eps时r0 =1;当abs(z1-z2)>eps0时,r0 =0。  
%可用mesh(x,y,r0)语句观察它的图形,体会它的作用,该方法可以套用。  
zz=r0.*z2;xx=r0.*x;yy=r0.*y;   %计算截割的双曲线及其对应的坐标  
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           %以下程序和上面是类似的,通过循环绘制一系列的平面去截割马鞍面  
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.3 微分方程的斜率场

◆ 绘制微分方程 的斜率场,并将解曲线画在图中,观察斜率场和解曲线的关系。

zxy2_5.m (绘制一阶微分方程的斜率场和解曲线)

clf,clear    %清除当前所有图形窗口的图像,清除当前工作空间的内存变量。  
a=0;b=4;c=0;d=4;n=15;  
[X,Y]=meshgrid(linspace(a,b,n),linspace(c,d,n));   %生成区域中的网格。  
z=X.*Y;                                            %计算斜率函数。   
Fx=cos(atan(X.*Y));Fy=sqrt(1-Fx.^2);  %计算切线斜率矢量。  
quiver(X,Y,Fx,Fy,0.5),hold on,axis([a,b,c,d])  
%在每一网格点画出相应的斜率矢量,0.5是控制矢量大小的控制参数,可以调整。  
[x,y]=ode45('zxy2_5f',[0,4],0.4);    %求解微分方程。  
%zxy2_5f.m是方程相应函数f(x,y)的程序,单独编制;[x0,xs]=[0,4]为求解区间;  
%y0=0.4为初始值;输出变量x,y分别为解轨线自变量和因变量数组。  
plot(x,y,'r.-')   %画解轨线

zxy2_5f.m (微分方程的函数子程序)

function dy=zxy2_5f(x,y)  
dy=x.*y;

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. 旋转曲面的生成:柱面指令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. 若干特殊图形

◆ 运行下面程序,了解各指令的用法和效果。

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)

相关推荐

最全的MySQL总结,助你向阿里“开炮”(面试题+笔记+思维图)

前言作为一名编程人员,对MySQL一定不会陌生,尤其是互联网行业,对MySQL的使用是比较多的。对于求职者来说,MySQL又是面试中一定会问到的重点,很多人拥有大厂梦,却因为MySQL败下阵来。实际上...

Redis数据库从入门到精通(redis数据库设计)

目录一、常见的非关系型数据库NOSQL分类二、了解Redis三、Redis的单节点安装教程四、Redis的常用命令1、Help帮助命令2、SET命令3、过期命令4、查找键命令5、操作键命令6、GET命...

netcore 急速接入第三方登录,不看后悔

新年新气象,趁着新年的喜庆,肝了十来天,终于发了第一版,希望大家喜欢。如果有不喜欢看文字的童鞋,可以直接看下面的地址体验一下:https://oauthlogin.net/前言此次带来得这个小项目是...

精选 30 个 C++ 面试题(含解析)(c++面试题和答案汇总)

大家好,我是柠檬哥,专注编程知识分享。欢迎关注@程序员柠檬橙,编程路上不迷路,私信发送以下关键字获取编程资源:发送1024打包下载10个G编程资源学习资料发送001获取阿里大神LeetCode...

Oracle 12c系列(一)|多租户容器数据库

作者杨禹航出品沃趣技术Oracle12.1发布至今已有多年,但国内Oracle12C的用户并不多,随着12.2在去年的发布,选择安装Oracle12c的客户量明显增加,在接下来的几年中,Or...

flutter系列之:UI layout简介(flutter-ui-nice)

简介对于一个前端框架来说,除了各个组件之外,最重要的就是将这些组件进行连接的布局了。布局的英文名叫做layout,就是用来描述如何将组件进行摆放的一个约束。在flutter中,基本上所有的对象都是wi...

Flutter 分页功能表格控件(flutter 列表)

老孟导读:前2天有读者问到是否有带分页功能的表格控件,今天分页功能的表格控件详细解析来来。PaginatedDataTablePaginatedDataTable是一个带分页功能的DataTable,...

Flutter | 使用BottomNavigationBar快速构建底部导航

平时我们在使用app时经常会看到底部导航栏,而在flutter中它的实现也较为简单.需要用到的组件:BottomNavigationBar导航栏的主体BottomNavigationBarI...

Android中的数据库和本地存储在Flutter中是怎样实现的

如何使用SharedPreferences?在Android中,你可以使用SharedPreferencesAPI来存储少量的键值对。在Flutter中,使用Shared_Pref...

Flet,一个Flutter应用的实用Python库!

▼Flet:用Python轻松构建跨平台应用!在纷繁复杂的Python框架中,Flet宛如一缕清风,为开发者带来极致的跨平台应用开发体验。它用最简单的Python代码,帮你实现移动端、桌面端...

flutter系列之:做一个图像滤镜(flutter photo)

简介很多时候,我们需要一些特效功能,比如给图片做个滤镜什么的,如果是h5页面,那么我们可以很容易的通过css滤镜来实现这个功能。那么如果在flutter中,如果要实现这样的滤镜功能应该怎么处理呢?一起...

flutter软件开发笔记20-flutter web开发

flutterweb开发优势比较多,采用统一的语言,就能开发不同类型的软件,在web开发中,特别是后台式软件中,相比传统的html5开发,更高效,有点像c++编程的方式,把web设计出来了。一...

Flutter实战-请求封装(五)之设置抓包Proxy

用了两年的flutter,有了一些心得,不虚头巴脑,只求实战有用,以供学习或使用flutter的小伙伴参考,学习尚浅,如有不正确的地方还望各路大神指正,以免误人子弟,在此拜谢~(原创不易,转发请标注来...

为什么不在 Flutter 中使用全局变量来管理状态

我相信没有人用全局变量来管理Flutter应用程序的状态。毫无疑问,我们的Flutter应用程序需要状态管理包或Flutter的基本小部件(例如InheritedWidget或St...

Flutter 攻略(Dart基本数据类型,变量 整理 2)

代码运行从main方法开始voidmain(){print("hellodart");}变量与常量var声明变量未初始化变量为nullvarc;//未初始化print(c)...