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

本文详细介绍了如何在MATLAB中使用contour函数绘制等高线图,包括使用meshgrid函数和for循环生成数据矩阵的方法,以及如何确保坐标对称以获得完整的圆形等高线。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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循环,并且要保证每个循环变来量的长度相同。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我一直在流浪

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值