【MATLAB】contour函数的使用(绘制等高线的深入讲解)

1 .语法:
 contour(Z)
 contour(X,Y,Z)
 contour(___,levels)

2.说明:
 1.contour(Z) 创建一个包含矩阵 Z 的等值线的等高线图,
  其中 Z 包含 x-y 平面上的高度值。
  MATLAB® 会自动选择要显示的等高线。
  Z 的行索引和列索引分别是平面中的 x 和 y 坐标。
 2.contour(X,Y,Z) 指定 Z 中各值的 x 和 y 坐标。
 
3 .示例:

x = -6:1:6;
y = -5:1:5;
[X,Y] = meshgrid(x,y)
Z=X.^2+Y.^2 %点乘代表对应为相乘,数组乘法而不是矩阵乘法

%每一行代表x的一个副本,length(y) x legnth(x)
X =
    -6    -5    -4    -3    -2    -1     0     1     2     3     4     5     6
    -6    -5    -4    -3    -2    -1     0     1     2     3     4     5     6
    -6    -5    -4    -3    -2    -1     0     1     2     3     4     5     6
    -6    -5    -4    -3    -2    -1     0     1     2     3     4     5     6
    -6    -5    -4    -3    -2    -1     0     1     2     3     4     5     6
    -6    -5    -4    -3    -2    -1     0     1     2     3     4     5     6
    -6    -5    -4    -3    -2    -1     0     1     2     3     4     5     6
    -6    -5    -4    -3    -2    -1     0     1     2     3     4     5     6
    -6    -5    -4    -3    -2    -1     0     1     2     3     4     5     6
    -6    -5    -4    -3    -2    -1     0     1     2     3     4     5     6
    -6    -5    -4    -3    -2    -1     0     1     2     3     4     5     6
    
%每一列代表y的一个副本,length(y) x legnth(x)
Y =
    -5    -5    -5    -5    -5    -5    -5    -5    -5    -5    -5    -5    -5
    -4    -4    -4    -4    -4    -4    -4    -4    -4    -4    -4    -4    -4
    -3    -3    -3    -3    -3    -3    -3    -3    -3    -3    -3    -3    -3
    -2    -2    -2    -2    -2    -2    -2    -2    -2    -2    -2    -2    -2
    -1    -1    -1    -1    -1    -1    -1    -1    -1    -1    -1    -1    -1
     0     0     0     0     0     0     0     0     0     0     0     0     0
     1     1     1     1     1     1     1     1     1     1     1     1     1
     2     2     2     2     2     2     2     2     2     2     2     2     2
     3     3     3     3     3     3     3     3     3     3     3     3     3
     4     4     4     4     4     4     4     4     4     4     4     4     4
     5     5     5     5     5     5     5     5     5     5     5     5     5
Z =
    61    50    41    34    29    26    25    26    29    34    41    50    61
    52    41    32    25    20    17    16    17    20    25    32    41    52
    45    34    25    18    13    10     9    10    13    18    25    34    45
    40    29    20    13     8     5     4     5     8    13    20    29    40
    37    26    17    10     5     2     1     2     5    10    17    26    37
    36    25    16     9     4     1     0     1     4     9    16    25    36
    37    26    17    10     5     2     1     2     5    10    17    26    37
    40    29    20    13     8     5     4     5     8    13    20    29    40
    45    34    25    18    13    10     9    10    13    18    25    34    45
    52    41    32    25    20    17    16    17    20    25    32    41    52
    61    50    41    34    29    26    25    26    29    34    41    50    61

在这里插入图片描述

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

在这里插入图片描述
想要出来完整的圆形的等高线,需要坐标是对称的,否则出来的图将不完整

上面的图
我们是把x,y用meshgrid函数转换为网格矩阵,然后画图,思考能不能用for循环的形式?如何完成两者的相互转换?

x =-6:1:6;
y = -6:1:6;
for i=1:length(x)
    for j=1:length(y)
        m=x(i);
        n=y(j);
        z(i,j)=m.^2+n.^2;
   end
end
contour(x,y,z);

在这里插入图片描述
如果采用for循环的形式,有一点需要注意,就是length(x)和length(y)一定要相等。

如果用三层for循环,如何求x^2+y^2+z^2并画出等高线图呢?

x =-6:1:6;
y = -6:1:6;
z = -6:1:6;
for i=1:length(x)
    for j=1:length(y)
        for k=1:length(z)
        m=x(i);
        n=y(j);
        l=z(k);
        c(i,j)=m.^2+n.^2+l.^2;
        end
    end
end
contour(x,y,c);

在这里插入图片描述
思考一下能不能改成用meshgrid函数来做?不可以

x =-6:1:6;
y = -6:1:6;
z = -6:1:6;
[X,Y,Z]=meshgrid(x,y,z);
c=X.^2+Y.^2+Z.^2
contour(X,Y,c);

看一下工作区变量:

>> whos
  Name       Size               Bytes  Class     Attributes

  X         13x13x13            17576  double              
  Y         13x13x13            17576  double              
  Z         13x13x13            17576  double              
  c         13x13x13            17576  double              
  x          1x13                 104  double              
  y          1x13                 104  double              
  z          1x13                 104  double    

由工作区变量可以看出,不能画出等高线图,所以如果想使用三维循环变量就使用for循环,并且要保证每个循环变来量的长度相同。

©️2020 CSDN 皮肤主题: 点我我会动 设计师:上身试试 返回首页