MATLAB之物理场可视化

这篇具有很好参考价值的文章主要介绍了MATLAB之物理场可视化。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


物理场指一个物理量的值在时间和空间中的分布,其定义是一个向量到另一个向量或数的映射。物理场分标量场和矢量场,对于标量场,在二维情况下可以使用等值线表示,在三维情况下则可以使用 MATLAB绘图加强篇中提到的四维数据绘图方法,即使用颜色表示,当然也可以使用等值曲面表示;对于矢量场,我们则可以使用箭头、流线等来表示。

注:在矢量场中如果有需要也可根据场强大小绘制出等值线或等值面。

二维标量场

二维标量场使用等值线表示,函数contour可以绘制平面等值线。

z=peaks;		% peaks为MATLAB自带的演示函数
contour(peaks)		% 使用contourf函数绘制等值线

MATLAB之物理场可视化
如果您觉得这样不够直观,那还可以使用contour3函数绘制立体等值线。(图片清晰度被降低了,读者可以自行去MATLAB跑一下代码,只需将contour替换为contour3即可)
MATLAB之物理场可视化
又或者使用contourf函数在等值线内填充颜色。
在这里插入图片描述

三维标量场

四维数据作图

利用四维数据作图的技巧在MATLAB绘图加强篇已提到,此处直接给出代码,不再赘述。

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])		% 通过方位角和俯仰角,设置观察角度

在这里插入图片描述

等值面

除了使用第四维数据作图来清晰的表示物理场之外,我们也可以仿照二维标量场,使用等值面来描绘物理场。

clc;clear all;close all
[x y z v]=flow;     % 数据来自MATLAB自带的演示函数
p=patch(isosurface(x,y,z,v,-3));    % 光照函数
isonormals(x,y,z,v,p)   % 数据归一化
set(p,'FaceColor','red','EdgeColor','none');    % 设置表面与边界颜色
daspect([1 1 1])    % 设置坐标轴比例
view(3)     % 视角
axis tight; grid on
camlight;   lighting phong  % 光照
alpha(.5)   % 设置表面透明度

在这里插入图片描述

二维矢量场

不同于二维标量场,矢量场在某点处既有大小又有方向,自然不能继续使用等值线表示,而是要使用 “带有箭头的等值线” ——流线以及大量的小箭头 来表示。

小箭头和流线的区别在于:小箭头只会根据某点的场强大小和方向两个属性绘图,小箭头仅表示该点的属性,与周围的场变化无关;而流线则不止受一个点的场强大小及方向影响,而流线密度同样反应了场的大小,因此流线可以更直观地反映出场的情况。

二维矢量场的箭头表示

二维矢量场可以使用quiver函数构成用来表示矢量场大小和方向的箭头,quiver(x,y,u,v)中x,y表示自变量,u,v表示矢量场的两个分量。

我们以电偶极子为例,假设有电量为 4 π ε 0 4\pi \varepsilon_0 4πε0 的正负电荷分别放置在 ( 0.2 , 0 ) (0.2, 0) (0.2,0) ( − 0.2 , 0 ) (-0.2, 0) (0.2,0) 处,形成一个电偶极子,则空间电势为 V = 1 ( x − 0.2 ) 2 + y − 0.2 ) 2 − 1 ( x + 0.2 ) 2 + y − 0.2 ) 2 V=\frac{1}{\sqrt{(x-0.2)^2}+\sqrt{y-0.2)^2}}-\frac{1}{\sqrt{(x+0.2)^2}+\sqrt{y-0.2)^2}} V=(x0.2)2 +y0.2)2 1(x+0.2)2 +y0.2)2 1,有了电势以后我们就可以求出其等势线和电场强度,进而将矢量场画出。

clc;clear all;close all
h=0.041; x=-0.3:h:0.3; y=-0.3:h:0.3;    % 此处h设置的是绘图精度,单独使用变量表示是为了方便后续调试代码
[X Y]=meshgrid(x,y);
Z=1./sqrt((X-0.2).^2+Y.^2)-1./sqrt((X+0.2).^2+Y.^2);	
[PX PY]=gradient(-Z,h);	% 利用梯度生成矢量场,电势的梯度为电场
contour(x,y,Z,[-12,-8,-5,-3,-2,-1,-.5,-0.1,0.1,0.5,1,2,3,5,8,12],'b')		% 绘制电势标量场的等值线——等势线
hold on
quiver(X,Y,PX,PY,'k')

在这里插入图片描述

二维矢量场的流线表示

streamline函数则可以构成流线,其所需的三组参数为空间坐标、矢量场的分量、流线起点。

clc;clear all;close all
load wind   % 数据为MATLAB内部的大气某处风速的数据
zmax=max(z(:));   zmin=min(z(:));
streamslice(x,y,z,u,v,w,[],[],(zmax-zmin)/2)
axis([70.1879, 134.3, 17.4999, 60]) 

在这里插入图片描述

三维矢量场

MATLAB提供了多种三维矢量场的可视化方法:可以用箭头quiver3或三维椎体coneplot表示各点场的大小;流线streamline,流线的切线表示该点场的大小,流线的密度表示场的大小;流管streamtube,流管的粗细反应矢量场的散度;流带streamribbon表示矢量场的旋转情况。

三维箭头 quiver3

clc;clear all;close all
t=0:0.5:8;  
x=sin(t);   y=cos(t);   z=t;
plot3(x,y,z,'linewidth',2)
hold on
u=gradient(x);  v=gradient(y);  w=gradient(z);
quiver3(x,y,z,u,v,w,0,'linewidth',2)
view(-60,60)

在这里插入图片描述

椎体 coneplot

clc;clear all;close all
load wind

% 确定要用于放置切片平面和指定圆锥体绘图所在位置的数据范围。
xmin = min(x(:)); xmax = max(x(:));  
ymin = min(y(:)); ymax = max(y(:)); zmin = min(z(:));

% 定义绘制圆锥体的位置
xrange = linspace(xmin,xmax,8);  yrange = linspace(ymin,ymax,8);  zrange = 3:4:15;  
[cx,cy,cz] = meshgrid(xrange,yrange,zrange);   

% 绘制圆锥体,并将缩放因子设置为5,使圆锥体大于默认大小。
figure
hcone = coneplot(x,y,z,u,v,w,cx,cy,cz,5);   

% 设置圆锥图颜色。
hcone.FaceColor = 'red';    
hcone.EdgeColor = 'none';

% 计算向量场的模(代表风速),以生成用于切片命令的标量数据。
hold on
wind_speed = sqrt(u.^2 + v.^2 + w.^2);

hsurfaces = slice(x,y,z,wind_speed,[xmin,xmax],ymax,zmin);
set(hsurfaces,'FaceColor','interp','EdgeColor','none')
hold off

view(30,40);     daspect([2,2,1])	% 更改坐标区视图并设置数据纵横比

camlight right;     lighting gouraud	% 在相机的右侧添加光源,并设置光照
set(hsurfaces,'AmbientStrength',0.6);    hcone.DiffuseStrength = 0.8;

在这里插入图片描述

流线 streamline

clc;clear all;close all
load wind

% 标出流线起点
[startx,starty,startz] = meshgrid(80,20:10:50,0:5:15);
plot3(startx(:),starty(:),startz(:),'*r');

% 绘制流线
streamline(x,y,z,u,v,w,startx,starty,startz)
axis tight
view(3);

在这里插入图片描述

流管 streamtube

clc;clear all;close all

load wind
[sx,sy,sz] = meshgrid(80,[20 30 40],[5 10]);
verts = stream3(x,y,z,u,v,w,sx,sy,sz);
div = divergence(x,y,z,u,v,w);
streamtube(verts,x,y,z,-div);
view(3);
axis tight
shading interp
camlight 
lighting gouraud

在这里插入图片描述

流带 streamribbon

clc;clear all;close all
load wind
[sx,sy,sz] = meshgrid(80,[20 30 40],[5 10]);
verts = stream3(x,y,z,u,v,w,sx,sy,sz);
cav = curl(x,y,z,u,v,w);
spd = sqrt(u.^2 + v.^2 + w.^2).*.1;
streamribbon(verts,x,y,z,cav,spd);
axis tight
shading interp
view(3);
camlight; 
lighting gouraud

在这里插入图片描述

三维矢量场的综合表现

在这里插入图片描述
虽然我们说三维矢量场表示比较困难,但在MATLAB提供了如此多函数用以表示三维矢量场,根据要表示的场选择合适的函数,总能将自己想要表示的效果展现出来。

总结

总结部分笔者现在先放在这里,本篇文章可能还没有结束更新,等笔者掌握更多的物理场可视化方法之后再回来写下总结。文章来源地址https://www.toymoban.com/news/detail-400411.html

到了这里,关于MATLAB之物理场可视化的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • matlab流场可视化后处理

    流体力学中常见的标量为位置、速度绝对值、压强等。 常用的云图绘制有pcolor、image、imagesc、imshow、contourf等函数。 这里利用matlab自带的wind数据作为演示案例,显示二维云图的速度场。 复制 绘制结果如下: 切片图常用于可视化复杂的三维流动。 由于二维计算机屏幕和二维

    2023年04月09日
    浏览(44)
  • MATLAB第九章_数据图形可视化

    目录 数据图形可视化 MATLAB图形窗口 函数绘制 一元函数绘制  二元函数绘图 数据图形绘制简介 离散数据可视化 连续函数可视化 二维绘图函数 基本绘图 快速方程式画图 特殊二维图形  三维绘图函数 绘制三维曲面 生成栅格数据 网格曲线绘制 隐藏线的显示和关闭        

    2024年02月08日
    浏览(33)
  • MATLAB 之 可视化图形用户界面设计

    MATLAB 提供了图形用户界面开发环境(Graphical User Interface Development Environment,GUIDE),在这种开发环境下,用户界面设计变得方便、直观,实现了 “所见即所得” 的可视化设计。 1.1 图形用户界面设计模板 在 MATLAB 命令行窗口输入 guide 命令,或在 MATLAB 主窗口中选择 “主页”

    2024年02月11日
    浏览(35)
  • MATLAB数学建模:数据图形可视化-三维绘图函数

    在 MATLAB 中, 我们可使用函数 surf 和 surfc 绘制三维曲面图. 调用格式如下: 以矩阵 ZZZ 所指定的参数创建一个渐变的三维曲面. 坐标 $x = 1:n, y = 1:m, $ 其中 [m,n]=size(Z)[m,n] = size(Z)[m,n]=size(Z) 以 ZZZ 确定的曲面高度和颜色, 按照 X,YX,YX,Y 形成的格点矩阵, 创建一个渐变的三维曲面. X,

    2024年02月06日
    浏览(44)
  • MATLAB中3D点云数据的处理与可视化

    3D点云数据是表示3D形状的一种数据结构,它通常是通过激光扫描、立体摄影或其他3D扫描技术获得的。处理和可视化这些数据在很多领域中都非常有用,比如计算机视觉、机器人技术、地理信息系统等。MATLAB提供了一系列的工具,可以帮助我们方便地进行3D点云数据的处理与

    2024年02月03日
    浏览(42)
  • 构建一个动态数据可视化仪表板

    在现代Web开发中,JavaScript不仅是网页交互的核心,而且已经成为实现复杂前端功能的重要工具。在本篇博客中,我将展示如何使用JavaScript构建一个动态数据可视化仪表板。该仪表板能够实时展示从服务器获取的数据,并通过图表和统计信息为用户提供直观的数据概览。 在开

    2024年02月22日
    浏览(36)
  • 数据预处理matlab matlab数据的获取、预处理、统计、可视化、降维

    1.1 从Excel中获取 使用readtable() 例1: 使用 spreadsheetImportOptions(Name,Value) 初步确定导入信息, 再用 opts.Name=Value 的格式添加。 例2: 先初始化 spreadsheetImportOptions 对象, 再用 opts.Name=Value 的格式逐个添加。 例3: 将导入信息存到变量里, 再使用 spreadsheetImportOptions(Name,Value)

    2024年02月15日
    浏览(44)
  • Three.js - 实现一个3D地球可视化

    3D地球可视化效果 3D地球的开发并不复杂,对球形物体进行贴图操作,完成球体自转和月球公转,太阳场景设置等即可 上代码 更多详细代码请关注公众号索取(备注:公众号):

    2024年02月04日
    浏览(42)
  • matlab-对数据集加噪声并实现tsne可视化

    最近才知道,原来可以不用模型,也能实现对数据集数据的可视化。 问题: 前提:首先对COIL-100数据集根据角度0°-175°和180°-255°,分别划分成C1,C2两个子数据集。 目的: ①实现C1-C2的tsne可视化; ②对COIL-100数据集添加遮挡物,实现C1-C2的tsne可视化。 平台: matlabR2019b 以及

    2024年02月10日
    浏览(30)
  • 基于 Matlab 的方差-协方差矩阵可视化表示(椭圆、椭球)

    因为在学习模糊度固定的时候涉及了『搜索椭球』这一概念,很想知道是如何用椭球来表示搜索空间的。出于好奇,在查阅了一些相关文献,终于解决了笔者的疑惑,此篇博文就简要记录一下如何根据协方差矩阵来绘制椭球。 下面是得到的一些结论: 对协方差矩阵进行奇异

    2024年02月06日
    浏览(60)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包