每日一个小工具:Mathlab曲面、多边形及体(场)

一、Matlab是什么

Matlab 是一款强大的科学计算和工程仿真软件,由美国 MathWorks 公司开发。它集数值计算、可视化、编程于一体,在众多科学和工程领域中得到广泛应用。

  1. 强大的数值计算能力
    • 能够高效地处理各种数学运算,包括矩阵运算、线性代数、数值分析等。例如,对于大规模矩阵的计算,Matlab 可以快速准确地求解特征值、行列式等。
    • 提供了丰富的数学函数库,涵盖了常见的数学函数以及各种专业领域的特殊函数,方便用户直接调用进行复杂的数学计算。
  2. 出色的可视化功能
    • 正如本文后续将要展示的各种图形绘制,Matlab 可以将数据以直观的图形形式展现出来,如二维和三维的线图、散点图、曲面图等。这有助于用户更好地理解数据的分布、趋势和关系。
    • 支持多种图形格式的输出,方便用户将绘制好的图形用于报告、论文等文档中,提高文档的质量和可读性。
  3. 高效的编程环境
    • 采用简洁的编程语言,语法相对容易学习,适合快速开发和原型设计。用户可以通过编写脚本或函数来实现自定义的计算和分析任务。
    • 提供了丰富的编程工具和调试功能,方便用户编写、测试和优化代码,提高开发效率。

二、Matlab的曲面、多边形及体(场)

1.矩形网格点示图

  • 调用ndgrid函数生成网格矩阵,并用plot函数画出平面网格图形。

image-20241210103620494

脚本如下:

>> [x, y] = ndgrid(1:4, 2:5)
>> plot(x,y, 'r', x',y','r',x,y,'k.','MarkerSize', 18) % 绘制平面网格
>> axis([0 5 1 6]) % 设置坐标轴的范围
>> xlabel('X');ylabel('Y')

2.三维举行网格图和曲面图

  • 分别调用meshsurf函数绘制曲面 z = c o s ( x ) s i n ( y ) ( − π ≤ x , y ≤ π ) z = cos(x)sin(y)(-\pi \leq x, y \leq \pi) z=cos(x)sin(y)(πx,yπ)的图像

image-20241210105246246

脚本如下:

>> t = linspace( -pi, pi, 20); % 等间隔产生从 -pi 到 pi 包含 20 个元素的向量 x
>> [X , Y] = meshgrid(t)
>> Z = cos(X) .* sin(Y);
>> subplot(1,2,1); % 绘制 1 行 2 列子途中的第1个
>> mesh(X, Y, Z); % 绘制网格图
>> title('mesh')
>> subplot(1,2,2); % 绘制 1 行 2 列子途中的第 2 个
>> surf(X, Y, Z); % 绘制曲面图
>> alpha(0.5); % 设置透明度为半透明
>> title('surf')

3.等高线图与向量场图

  • 分别调用contourcontourfcontour3surfnorm函数绘制 z = x e − ( x 2 + y 2 ) ( − 2 ≤ x , y ≤ 2 ) z=xe^{-(x^2 + y^2)}(-2 \leq x,y \leq 2) z=xe(x2+y2)(2x,y2)的平面等高图、平面填充式等高图、三维等高图和带法线的曲面图,并在平面等高图上叠加梯度场

image-20241210152555799

脚本如下:

>> [X, Y] = meshgrid(-2:0.2:2); % 生成区域 [-2, 2, -2, 2]的矩形网格矩阵
>> Z = X .* exp(-X .^ 2 - Y .^ 2); % 计算网格点处曲面上的 Z 值
>> [DX, DY] = gradient(Z, 0.2, 0.2); % 计算网格点处的梯度值
>> subplot(2,2,1) % 绘制 2 行 2 列子图中的第 1 个
>> contour(X, Y, Z, 'ShowText', 'on') % 绘制平面等高线图,并线上等高线上的高度值
>> hold on; % 开启图形保持,允许叠加绘图
>> quiver(X, Y, DX, DY); % 绘制由梯度方向箭头构成的梯度场
>> title('contour')
>> subplot(2,2,2)
>> contourf(X, Y, Z, 'ShowText', 'on') % 绘制平面填充式等高线
>> title('contourf')
>> subplot(2,2,3)
>> contour3(X, Y, Z, 'ShowText', 'on') % 绘制三维等高线图
>> title('contour3')
>> subplot(2,2,4)
>> surfnorm(X, Y, Z)
>> title('surfnorm')

4.四维数据的立体切面图和等值面图

  • 绘制三元函数 V ( x , y , z ) = c o s ( x ) + c o s ( y ) + c o s ( z ) ( − π ≤ x , y , z ≤ π ) V(x, y, z) = cos(x) + cos(y) + cos(z)(- \pi \leq x, y,z \leq \pi) V(x,y,z)=cos(x)+cos(y)+cos(z)(πx,y,zπ)的立体切面图与 0 等值面图

image-20241210161905620

脚本如下:

>> [X, Y, Z] = meshgrid(linspace(-pi, pi, 30)); % 生成三维网格数组
>> V = cos(X) + cos(Y) + cos(Z)
>> subplot(1,2,1)
>> slice(X, Y, Z, V, [-1,1], 0, 0);
>> shading interp; % 设置着色方式为差值着色
>> alpha(0.5)
>> xlabel('X'); ylabel('Y'), zlabel('Z');
>> title('立体切片图')
>> subplot(1,2,2)
>> fv = isosurface(X, Y, Z, V, 0); % 从体数据中提取 0 等值面数据
>> p = patch(fv); % 绘制等值面
>> isonormals(X, Y, Z, V, p); % 基于三位体重新计算等值面法向量
>> set(p, 'FaceColor', 'r', 'EdgeColor', 'none'); % 设置面的颜色为红色,边线的颜色为无色
>> view(3); % 设置三维视角
>>  xlabel('X'); ylabel('Y');zlabel('Z')
>> title('等值面图')
>> camlight % 在照相机位置创建光源
>> lighting gouraud % 计算订单发向量并在各个面中进行线性差值以修改表面颜色

5.球面与旋转面

  • 调用shaere函数生成球面 ( x − 1 ) 2 + ( y − 1 ) 2 + ( z − 1 ) 2 = 100 (x-1)^2 + (y-1)^2 + (z - 1)^2 = 100 (x1)2+(y1)2+(z1)2=100,调用clinder函数绘制曲线 y = 2 + c o s ( z ) y=2+cos(z) y=2+cos(z) z z z轴旋转形成的旋转面,成为哑铃图。

image-20241210205459469

脚本如下:

>> subplot(1,2,1); % 绘制 1 行 2 列子图中的第 1 个
>> [x, y, z] = sphere; % 产生单位球面网格数据
>> surf(10 * x + 1, 10 * y + 1, 10 * z + 1); % 绘制球面
>> axis equal; % 设置坐标轴显示比例相同
>> title('球面')
>>
>>subplot(1,2,2);
>>z = linspace(0,2 * pi, 30); % 定义角度向量 z
>>[X, Y, Z] = cylinder(2 + cos(z)); % 产生旋转面网格数据
>>surf(X,Y,Z); % 绘制旋转面
>>title('哑铃面')

关联阅读: 每日一个小工具:Matlab 画图-线图与散点图

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值