MATLAB创建网格函数汇编

839 阅读10分钟

网格图与曲面图的绘制非常相似,调用格式也近乎一致。绘图之前先要形成字变量的格点矩阵。以下汇总了几种matlab中创建网格的几个函数,供大家参考~~~~

先点赞再看,不然都是流氓

linspace:生成线性间距向量

语法

y = linspace(x1,x2)
y = linspace(x1,x2,n)

说明

y = linspace(x1,x2) 返回包含 x1 和 x2 之间的 100 个等间距点的行向量。

y = linspace(x1,x2,n) 生成 n 个点。这些点的间距为 (x2-x1)/(n-1)。

linspace类似冒号运算符“:”,但可以直接控制点数并始终包括端点。

“linspace”名称中的“lin”指示生成线性间距值而不是同级函数logspace,后者会生成对数间距值。

示例

等间距数字向量

创建一个由区间 [-5,5] 中的 100 个等距点组成的向量。

y = linspace(-5,5);

包含指定数量的值的向量

创建一个由区间 [-5,5] 中的 7 个等距点组成的向量。

>> y1 = linspace(-5,5,7)
>
y1 = 1×7

   -5.0000   -3.3333   -1.6667         0    1.6667    3.3333    5.0000

由均匀分布的复数组成的向量

创建一个复数向量,包含介于 1+2i 和 10+10i 之间的 8 个等距点。

>> y = linspace(1+2i,10+10i,8)
>
y = 1×8 complex

   1.0000 + 2.0000i   2.2857 + 3.1429i   3.5714 + 4.2857i   4.8571 + 5.4286i   6.1429 + 6.5714i   7.4286 + 7.7143i   8.7143 + 8.8571i  10.0000 +10.0000i

输入参数

x1,x2 - 点区间

点区间,指定为数值标量对组。x1 和 x2 定义 linspace 生成点的区间。x1 和 x2 可以是实数或复数,x2 可以大于或小于 x1。如果 x2 比 x1 小,则向量包含递减的值。

数据类型: single | double | datetime | duration
复数支持:

n - 点的数目

100 (默认) | 实数标量
点的数目,指定为实数标量。

如果 n 为 1,则 linspace 返回 x2。

如果 n 为零或负数,则 linspace 返回 1×0 空矩阵。

如果 n 不是整数,则 linspace 向下舍入并返回 floor(n) 个点。

logspace:生成对数间距向量

语法

y = logspace(a,b)
y = logspace(a,b,n)
y = logspace(a,pi)
y = logspace(a,pi,n)

说明

y = logspace(a,b) 生成一个由在 10 a 和 10 b(10 的 N 次幂)之间的 50 个对数间距点组成的行向量 y。logspace 函数对于创建频率向量特别有用。该函数是 linspace 和“:”运算符的对数等价函数。

y = logspace(a,b,n) 在 10 的幂 10 a 和 10 b(10 的 N 次幂)之间生成 n 个点。

y = logspace(a,pi) 在 10 ^ a 和 pi 之间生成 50 个点,这对于在区间 [10^a,pi] 中创建对数间距频率的数字信号处理很有用。

y = logspace(a,pi,n) 在 10^a 和 pi 之间生成 n 个点。

示例

由对数间距的数值组成的向量

创建一个由区间 [101,105] 内的 50 个对数间距点组成的向量。

y = logspace(1,5);

包含指定数量的值的向量

创建一个由区间 [101,105] 内的 7 个对数间距点组成的向量。

>> y1 = logspace(1,5,7)
>
y1 = 1×7
105 ×

    0.0001    0.0005    0.0022    0.0100    0.0464    0.2154    1.0000

由对数间距的复数组成的向量

创建一个由 10(1+2i)和 10(5+5i)之间的 8 个对数间距点组成的复数向量。

>> y = logspace(1+2i,5+5i,8)
y = 1×8 complex

104 ×

  -0.0001 - 0.0010i   0.0029 - 0.0024i   0.0133 + 0.0040i   0.0147 + 0.0497i  -0.1242 + 0.1479i  -0.7150 - 0.0822i  -1.2137 - 2.3924i   4.9458 - 8.6913i

输入参数

a - 第一个边界

第一个边界,指定为数值标量。a 参数定义 logspace 生成的点所在区间的一个边界。a 可以是实数或复数,另一个边界 b 可以大于或小于 a。如果 b 比 a 小,则向量包含递减的值。

数据类型: single | double
复数支持:

b - 第二个边界

第二个边界,指定为数值标量。b 参数定义 logspace 生成的点所在区间的一个边界。b 可以是实数或复数,b 可以大于或小于另一个边界 a。如果 b 比 a 小,则向量包含递减的值。

数据类型: single | double
复数支持:

n - 点的数目

50 (默认) | 实数标量
点的数目,指定为实数标量

如果 n 为 1,则 logspace 返回 10b

如果 n 为零或负数,则 logspace 返回一个空的行向量。

如果 n 不是整数,则 logspace 将 n 向下舍入并返回 floor(n) 个点。

freqspace:频率响应的频率间距

语法

[f1,f2] = freqspace(n)
[f1,f2] = freqspace([m n])
[x1,y1] = freqspace(...,'meshgrid')
f = freqspace(N)
f = freqspace(N,'whole')

说明

freqspace 返回等距频率响应的暗含频率范围。当为各种一维和二维应用程序创建所需频率响应时,freqspace 特别有用。

[f1,f2] = freqspace(n) 为 n×n 矩阵返回二维频率向量 f1 和 f2。

对奇数 n,f1 和 f2 为 [-n+1:2:n-1]/n。

对偶数 n,f1 和 f2 为 [-n:2:n-2]/n。
123

[f1,f2] = freqspace([m n]) 为 m×n 矩阵返回二维频率向量 f1 和 f2。

[x1,y1] = freqspace(...,'meshgrid') 等效于

[f1,f2] = freqspace(...);
[x1,y1] = meshgrid(f1,f2);

f = freqspace(N) 返回一维频率向量 f 并假定围绕单位圆有 N 个等距点。对于奇数或偶数 N,f 为 (0:2/N:1)。对于偶数 N,freqspace 将返回 (N+2)/2 个点。对于奇数 N,它将返回 (N+1)/2 个点。

f = freqspace(N,'whole') 返回围绕整个单位圆的 N 个等距点。在本示例中,f 为 0:2/N:2*(N-1)/N。

meshgrid:二维和三维网格

语法

[X,Y] = meshgrid(x,y)
[X,Y] = meshgrid(x)
[X,Y,Z] = meshgrid(x,y,z)
[X,Y,Z] = meshgrid(x)

说明

[X,Y] = meshgrid(x,y) 基于向量 x 和 y 中包含的坐标返回二维网格坐标。X 是一个矩阵,每一行是 x 的一个副本;Y 也是一个矩阵,每一列是 y 的一个副本。坐标 X 和 Y 表示的网格有 length(y) 个行和 length(x) 个列。

[X,Y] = meshgrid(x) 与 [X,Y] = meshgrid(x,x) 相同,并返回网格大小为 length(x)×length(x) 的方形网格坐标。

[X,Y,Z] = meshgrid(x,y,z) 返回由向量 x、y 和 z 定义的三维网格坐标。X、Y 和 Z 表示的网格的大小为 length(y)×length(x)×length(z)。

[X,Y,Z] = meshgrid(x) 与 [X,Y,Z] = meshgrid(x,x,x) 相同,并返回网格大小为 length(x)×length(x)×length(x) 的三维网格坐标。

示例

二维网格

使用向量 x 定义的 x 坐标和向量 y 定义的 y 坐标创建二维网格坐标。

>> x = 1:3;
>> y = 1:5;
>> [X,Y] = meshgrid(x,y)
>
X = 5×3

     1     2     3
     1     2     3
     1     2     3
     1     2     3
     1     2     3

Y = 5×3

     1     1     1
     2     2     2
     3     3     3
     4     4     4
     5     5     5

在二维网格上计算表达式 x2+y2

>> X.^2 + Y.^2
>
ans = 5×3

     2     5    10
     5     8    13
    10    13    18
    17    20    25
    26    29    34

绘制曲面图

使用均匀分布的 x 坐标和 y 坐标在区间 [-2,2] 内创建二维网格。

x = -2:0.25:2;
y = x;
[X,Y] = meshgrid(x);

在二维网格上计算并绘制函数 f(x,y)=xe^ (−x 2−y2)。

F = X.*exp(-X.^2-Y.^2);
surf(X,Y,F)

在这里插入图片描述

从 R2016b 开始,操作网格之前并不总是需要先创建网格。例如,计算表达式 xe^ (−x2−y2) 将隐式扩展向量 x 和 y。

surf(x,y,x.*exp(-x.^2-(y').^2))

在这里插入图片描述

三维网格

在区间 [0,6] 内使用定义的 x、y 和 z 坐标创建三维网格坐标,并计算表达式 x2+y2+z2

x = 0:2:6;
y = 0:1:6;
z = 0:3:6;
[X,Y,Z] = meshgrid(x,y,z);
F = X.^2 + Y.^2 + Z.^2;

确定网格的大小。三个坐标向量具有不同的长度,构成一个网格点矩形框。

>> gridsize = size(F)
>
gridsize = 1×3

     7     4     3

使用单输入语法,基于 x 中定义的坐标生成均匀分布的三维网格。新网格构成一个网格点正方体。

>> [X,Y,Z] = meshgrid(x);
>> G = X.^2 + Y.^2 + Z.^2;
>> gridsize = size(G)
>
gridsize = 1×3

     4     4     4

输入参数

x - 点的 x 坐标

点的 x 坐标,指定为向量。

数据类型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

y - 点的 y 坐标

点的 y 坐标,指定为向量。

数据类型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

z - 点的 z 坐标

点的 z 坐标,指定为向量。

数据类型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

输出参数

X - 网格上的 x 坐标

二维或三维数组
网格上的 x 坐标,以二维数组(两个输入)或三维数组(三个输入)的形式返回。

Y - 网格上的 y 坐标

二维或三维数组
网格上的 y 坐标,以二维数组(两个输入)或三维数组(三个输入)的形式返回。

Z - 网格上的 z 坐标

三维数组
网格上的 z 坐标,以三维数组形式返回。

ndgrid:N 维空间中的矩形网格

语法

[X1,X2,...,Xn] = ndgrid(x1,x2,...,xn)
[X1,X2,...,Xn] = ndgrid(xg)

说明

[X1,X2,...,Xn] = ndgrid(x1,x2,...,xn) 复制网格向量 x1,x2,…,xn 以生成 n 维满网格。

[X1,X2,...,Xn] = ndgrid(xg) 指定对所有维度使用单一网格向量 xg。您指定的输出参数的数目决定输出的维度 n。

示例

创建二维网格

根据向量 [1 3 5 7 9 11 13 15 17 19] 和 [2 4 6 8 10 12] 创建一个二维网格。

>> [X,Y] = ndgrid(1:2:19,2:2:12)
>
X = 10×6

     1     1     1     1     1     1
     3     3     3     3     3     3
     5     5     5     5     5     5
     7     7     7     7     7     7
     9     9     9     9     9     9
    11    11    11    11    11    11
    13    13    13    13    13    13
    15    15    15    15    15    15
    17    17    17    17    17    17
    19    19    19    19    19    19

Y = 10×6

     2     4     6     8    10    12
     2     4     6     8    10    12
     2     4     6     8    10    12
     2     4     6     8    10    12
     2     4     6     8    10    12
     2     4     6     8    10    12
     2     4     6     8    10    12
     2     4     6     8    10    12
     2     4     6     8    10    12
     2     4     6     8    10    12

在网格域上计算函数

计算并绘制函数
在这里插入图片描述

在网格域

−2<x1<2 和 −2<x2<2。

创建一个由域值构成的网格。

[X1,X2] = ndgrid(-2:.2:2);

在域上计算函数。

Z = X1 .* exp(-X1.^2 - X2.^2);

生成函数的网格图。

mesh(X1,X2,Z)

在这里插入图片描述

在 R2016b 及更高版本中,此任务不需要使用 ndgrid。您可以对这些命令使用隐式扩展来构建网格:

x = -2:.2:2;

Z1 = x.' .* exp(-(x.').^2 - x.^2);

插入数据

创建一个二维网格并计算网格上的一些函数值。在指定的值之间插值以细化网格。

在范围 [−5,5] 内创建 (x,y) 粗网格。

[X,Y] = ndgrid(-5:0.5:5);

计算网格上的一些函数值并绘制函数图。

f = sin(X.^2) * cos(Y.^2);
surf(X,Y,f)

在这里插入图片描述

使用更精细的网格在点之间插值,并绘制结果图。

[X1,Y1] = ndgrid(-5:0.125:5);
F = interpn(X,Y,f,X1,Y1,'spline');
surf(X1,Y1,F)

在这里插入图片描述

输入参数

x1,x2,…,xn - 网格向量(以单独参数指定)

网格向量,指定为包含每个维度的网格坐标的向量。网格向量隐式定义了网格。例如在二维空间中:
在这里插入图片描述
数据类型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64
复数支持: 是

xg - 所有维度的网格向量

所有维度的网格向量,指定为包含网格坐标的向量。ndgrid 使用 xg 作为每个维度的网格向量。

数据类型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64
复数支持: 是

输出参数

X1,X2,…,Xn - 完整网格表示
完整网格表示,以单独的数组形式返回。对于每个输出数组 Xi,第 i 维包含网格向量 xi 的副本。

资源传送门

  • 关注【做一个柔情的程序猿】公众号
  • 在【做一个柔情的程序猿】公众号后台回复 【python资料】【2020秋招】 即可获取相应的惊喜哦!

「❤️ 感谢大家」

  • 点赞支持下吧,让更多的人也能看到这篇内容(收藏不点赞,都是耍流氓 -_-)
  • 欢迎在留言区与我分享你的想法,也欢迎你在留言区记录你的思考过程。