MATLAB绘图——加强篇_matlab实时绘图-程序员宅基地

技术标签: matlab  矩阵  可视化  计算物理  绘图  MATLAB  

虽然在MATLAB绘图/数据可视化中介绍了绘图函数并给出了可直接使用的代码,但如果仅掌握这些,还远做不到随心所欲的绘图,因此,本篇博客将在上篇的基础上进一步深入讲解绘图方法。

结合矩阵作图

例如,我们在上一篇介绍了plot函数。plot(list0)为以列表list0中元素下标为横坐标,元素值为纵坐标的点所组成的折线图;plot(list_x,list_y)是以list_x为横坐标,list_y为纵坐标的点所组成的折线图;plot(list_x1,list_y1,list_x2,list_y2,...)则可在同一窗口中绘制多条二维曲线。但如果使用多个列表分别储存list_x1,list_y1,… 的值则过于繁琐,因此我们可以将其与矩阵的知识结合。

例:绘制 sin(x), sin(4x) 的函数。

x=0:0.1:6;
A=[x; 4*x];
B=sin(A);
plot(x,B(1,:), x,B(2,:))

通过实例我们可以发现,矩阵有同时储存多个列表减少变量数目的优势,而且我们可以通过类似B=sin(A)的操作对A内所有元素进行统一处理,同时在plot(x,B(1,:), x,B(2,:))形式简洁,不会造成混乱。

利用函数表达式作图

在使用plot函数作图时,我们需要先将记录点横纵坐标的列表给出,这样必然是比较麻烦的,MATLAB也给出了更简单的作图方法——fplotezplot方法。

ezplotfplot也是作图函数,并且二者均不需要计算函数值,可直接画图。

ezplot的优势在于其可以完成 f ( x , y ) = 0 f(x,y)=0 f(x,y)=0 (例: x 2 + y 2 = 1 x^2+y^2=1 x2+y2=1) 这样的隐函数图形;而fplot由于其自适应取点的特点,可以对有奇点的函数进行绘图。

clear all; clc; close all
%% plot函数
x=0:0.01:2*pi;
y=sin(x);
plot(x,y);

%% ezplot函数
ezplot('x*x+y*y=1',[-1,1]);

%% fplot函数
fplot(@(x)sin(1/x), [0 2*pi]);

交互式作图

在Python中我们可以通过print函数以及input函数实现简单的交互功能,而在MATLAB作图过程中我们同样可以做到交互式作图。

clear all;clc;close all
disp('该程序计算室温下Maxwell分布律')
y=input('请输入一种分子名称(N/O):','s')
switch y
	case ('N')
		mu=28e-3;
	case('O')
		mu=32e-3;
	otherwise
	warning('只能输入大写N,O')
end

T=300;		v=0:1500;
k=1.38e-23;		NA=6.02e23;
m=mu/NA;
f=4*pi*(m/(2*pi*k*T))^(3/2)*exp(-m*v.^2./(2*k*T)).*v.^2;
plot(v,f)

在这里插入图片描述

在这里插入图片描述

四维数据作图

我们前面已介绍了利用二维数据的平面作图以及利用三维数据的空间作图的方法,但有些读者可能不大清楚,我们的空间就是三维空间,三维数据作图难道还不够吗,为什么还要讨论四维数据作图的情况呢?

对此,必须要先说明,三维数据确实不够。例如我们要描述一个房间内的温度场,光有三维空间坐标可什么都做不了,必须引入第四维数据表示温度。类似的情况还有很多,如果只有三维坐标那我们只能表示空间中的位置,而做不到物理量的表示,因此,我们必须引入第四维数据。

那么这个第四维数据应当如何表示呢,在空间作图时我们好像已经把xyz三个坐标都使用到了,如果来表示这个第四维的数据呢?

答案是颜色,如果有玩过热成像仪的朋友应该明白,我们在空间坐标之外还有颜色可以用来表示物理量!我们只要在一般的三维作图基础上加上不同的颜色加以区分就可以利用四维数据作图。
一张可以生动地表示温度的热成像图片
好了,铺垫已经够多了,我们开始动手吧。

clear all;clc;close all
[x,y,z]=meshgrid(-2:.2:2);	% .2=0.2,,meshgrid生成三维空间网格
v=x.*exp(-x.^2-y.^2-z.^2);	% 生成物理场
slice(v,[5 15],15,10)			% v所对应物理场的切片,分别在x=5,x=15,y=15,z=10处切片
axis([0 21 0 21 0 21]);		% 设置xyz坐标范围
hold on
colorbar('horiz')	% 在竖直方向显示温度表
colorbar('vert')		% 在水平方向显示温度表
view([-25 65])		% 通过方位角和俯仰角,设置观察角度

在这里插入图片描述
怎么样,是不是看着很清晰,我们可以很容易看出, v v v所代表的物理场在空间中有一个“热源”和一个“冷源”,在其他地区则比较“稳定”。

我们来回看一下绘图所用的代码。[x,y,z]=meshgrid(-2:.2:2)生成了一个三维的表示空间坐标的数组,接下来使用v=x.*exp(-x.^2-y.^2-z.^2)生成了一个物理场v,然后我们使用了切片函数slice选取了物理场v的空间剖面图,然后根据剖面图上v值的大小对剖面图上色。

如何选取合适的剖面是四维数据绘图中最重要的一步。

复数作图

使用复数作图的优点:可以对复变函数进行作图;可以通过乘 e i k π e^{ik\pi} eikπ 项旋转或加一个复数进行平移。

plot函数会使用两个列表画出折线图,而我们知道,复数列表自带一个实数列表和一个虚数列表,因此仅对一个复数列表作图,就可以得到以其实数为x轴,虚数为y轴的图形。plot(z)即为plot(real(z), imag(z))

clear all;clc;close all
t = 0: pi/10: 2*pi;
plot(exp(i*t), '-o')
axis equal

在这里插入图片描述

如果对两个复数列表使用plot函数,则只会利用两个复数的实数作图,即plot(z1,z2)=plot(real(z1), real(z2))

MATLAB提供了多种对复变函数绘图的函数。cplxgrid(m)在复变量平面的单位圆内绘制 ( m + 1 ) × ( 2 m + 1 ) (m+1)\times (2m+1) (m+1)×(2m+1) 极坐标的数据网格,cplxmap(u,f(u))绘制复变函数图形,cplxroot(n)绘制复数n次方根的图形。

复数complex的简写为cplx

以复数的平方 u 2 u^2 u2为例:

clear all;clc;close all
u=cplxgrid(20);
cplxmap(u,u.^2)
colormap('winter')
colorbar

在这里插入图片描述

再以复数方根 u 1 / 2 u^{1/2} u1/2为例:

clear all;clc;close all
u=cplxgrid(20);
cplxroot(2)
colormap('winter')
colorbar

在这里插入图片描述

GIF制作

虽然图片很直观,但对于类似驻波、干涉条纹变化这样的概念,仅有静态图片还是不够的,我们还需要学会制作GIF。

下面给出行波的动画程序

pic_num = 1;
t=0:pi/20:4*pi; x=0:0.1*pi:4*pi;    % 不会在循环中改变的变量可以放在循环之外
for i=1:40
    f=figure(1);    % 令f为当前图形窗口
    
    y=sin(x-t(i));
    plot(x,y);
    axis([0,12,-1,1]);

    F=getframe(gcf);    % getframe函数将图形作为影片帧,gcf为获取当前图窗的句柄
    I=frame2im(F);      % 返回与影片帧关联的图像数据
    [I,map]=rgb2ind(I,256);     % 将 RGB 图像转换为索引图像
    if pic_num == 1
        imwrite(I,map,'test2.gif','gif','Loopcount',inf,'DelayTime',0.2);   % imwrite函数可将图像写入图形文件
    else
        imwrite(I,map,'test2.gif','gif','WriteMode','append','DelayTime',0.2);
    end
    pic_num = pic_num + 1;
end

在这里插入图片描述

也可以通过句柄图形系统实现实时动画制作:

t=0:pi/20:4*pi; x=0:0.1*pi:6*pi; y=sin(x);

h=plot(x,y);
axis([0,12,-1,1]);
set(h,'EraseMode','xor')
for i=2:60
    y=sin(x-t(i));
    set(h,'XData',x,'YData',y)
    drawnow
    pause(0.2)
end
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/woaiwulima/article/details/125116976

智能推荐

aiXcoder插件安装使用_aixcoder-0.1.12-comm-程序员宅基地

文章浏览阅读713次。https://aixcoder.com/#/localServer法1:将解压缩后「server」目录下的所有文件,手动移动到 C:\Users\24390\aiXcoder\installer\localserver2\current\server下(24390是我的用户文件夹名)法2:直接运行install_localserver.bat文件..._aixcoder-0.1.12-comm

【可供参考】tmux配置文件_# switch panes using alt-arrow without prefix-程序员宅基地

文章浏览阅读317次。# 0 is too far from ` ;)set -g base-index 1# Automatically set window title#set-window-option -g automatic-rename on#set-option -g set-titles on# Send prefixset-option -g prefix C-a unbind-k..._# switch panes using alt-arrow without prefix

PowerDesigner 连接oracle直接生成数据库表的方法_powerdesigner生成oracle表-程序员宅基地

文章浏览阅读586次。创建于 2012-05-08迁移自个人的百度空间--------------------------------首先机子要装有oracle驱动程序(在装oracle服务器端或客户端就自动安装上的oracle的驱动程序) 然后依据下面步骤:1、database->generate database 2、general->Direct generation 如果没有..._powerdesigner生成oracle表

学习JAVA容器之Collections工具类_java 容器工具类-程序员宅基地

文章浏览阅读167次。Collections是一个可以操作set map list的工具类常用方法:T 19:57:25●排序操作: (均为static方 法)➢reverse(List):反转List中元素的顺序➢shuffle(List):对List集合元素进行随机排序➢sort(List):根据元素的自然顺序对指定List 集合元素按升序排序➢sort(List,Comparator): 根据指定..._java 容器工具类

让你提前认识软件开发(47):同行评审_代码同级评审-程序员宅基地

文章浏览阅读3.5k次,点赞5次,收藏4次。第3部分 软件研发工作总结同行评审 在《浪潮之巅》这本书中,吴军老师描述了在Google早期的工作方式,其中有一段是这么写的:我一般会在吃完晚饭后把代码修改的清单发给克雷格做代码审核,他一般晚上10点左右会回复我,给我修改意见,详细到某一行多了一个空格。 吴军老师所描述的内容,其实就是软件开发中的同行评审流程。 几乎在所有的软件项目中,都需要同行评审。_代码同级评审

Vue性能优化_vue 应用性能优化指南-程序员宅基地

文章浏览阅读3.1k次。前言一般来说,你不需要太关心vue的运行时性能,它在运行时非常快,但付出的代价是初始化时相对较慢。在最近开发的一个Hybrid APP里,Android Webview初始化一个较重的vue页面竟然用了1200ms ~ 1400ms,这让我开始重视vue的初始化性能,并最终优化到200 ~ 300ms,这篇文章分享我的优化思路。性能瓶颈在哪里?先看一下常见的vue写法:在html里放一..._vue 应用性能优化指南

随便推点

Linux—nmap、nc命令 –网络探测工具和安全和端口扫描器_nmap 和 nc-程序员宅基地

文章浏览阅读2k次,点赞4次,收藏6次。文章目录nmap命令语法格式:常用参数:参考实例:nc命令语法格式:常用参数:参考实例:nmap命令nmap (“Network Mapper(网络映射器)”) 是一款开放源代码的 网络探测和安全审核的工具。它的设计目标是快速地扫描大型网络,当然用它扫描单个 主机也没有问题。Nmap以新颖的方式使用原始IP报文来发现网络上有哪些主机,那些主机提供什么服务(应用程序名和版本),那些服务运行在什么操作系统(包括版本信息), 它们使用什么类型的报文过滤器/防火墙,以及一堆其它功能。虽然Nmap通常用于安全审核_nmap 和 nc

发票查验API-票据管理自动化_发票查验api是免费的吗-程序员宅基地

文章浏览阅读346次。现如今,随着经济的不断发展,社会的不断进步,企业模式的不断转型,越来越多的业务需要发票进行报销,也正是随着发票的普及,越来越多的假发票混入我们的生活,一些不法分子以此为商机,制售假发票为他人报销提供非正常途径。为防止假发票、问题发票入账,企业要求财务工作者在接收到发票时必须做到“先查验、后报销、再入账”,但如此一来,企业产生的海量发票无疑增加了财务人员的工作量。对于发票查验量小的企业而言,可以通过上税务局官网的方式一张一张免费进行查询,但对于发票查验需求量大的企业而言,传统人工查验的方式不仅速度慢、效率低_发票查验api是免费的吗

win7下安装oracle时,提示程序异常终止,发生未知错误_error in process: e:\oracle\product\19.3.0.0\db_1\-程序员宅基地

文章浏览阅读4.5k次。1、修改oracle安装包内refhost.xml文件2、修改oracle安装包内oraparam.in文件3、以兼容模式运行这个程序,并选择 windows xp(service pack 3)4、以管理员身份运行_error in process: e:\oracle\product\19.3.0.0\db_1\bin\orapwd.exe

Disruptor框架详解-程序员宅基地

文章浏览阅读5.7k次。1.x disruptor框架介绍与Hello World2.x disruptor 详细说明与使用3.x disruptor 应用(并发场景实例讲解)1.1 Disruptor并发框架简介Martin Fowler在自己网站上写了一篇LMAX架构的文章,在文章中他介绍了LMAX是一种新型零售金融交易平台,它能够以很低的延迟产生大量交易。这个系统是建立在JVM平台上,其核心是一个业..._disruptor

星速配资:高毅资产持股量位居首位-程序员宅基地

文章浏览阅读122次。高毅资产在二季度仍是当之无愧的“持有王”,不仅延续一季度对海康威视、紫光国微、紫金矿业和睿创微纳的青睐,还新进了天山铝业、恒立液压、华润三九、久立特材和西部超导等5只个股。据数据显示,二季度高毅资产持有24只个股,合计持有市值为374.42亿元,其中,持有的海康威视市值就高达138.68亿元;其次,持有的紫金矿业市值达68.35亿元;从持股量或持有市值来看,高毅资产均居首位。同时,玄元投资和迎水投资也在同期持有不少个股。玄元投资二季度持有三棵树、中泰化学、伊之密、聚隆科技和沃尔核材等17只个股,合计

1、在不配置CATALINA_HOME环境变量的情况下启动tomcat-程序员宅基地

文章浏览阅读594次。场景:tomcat执行startup.bat的时候,会寻找全局环境变量CATALINA_HOME,如果CATALINA_HOME对应的tomcat目录不是当前tomcat的目录,则就会启动报错,解决方法如下:1、打开bin目录下的startup.bat文件,添加如下代码:这样的话,当前tomcat启动时,就会使用当前的tomcat,而不会去使用环境变量CATALINA_HOM..._linux 启动tomcat 不使用系统变量catalina_home