matlab画三维分段图

         小学期上matlab课,又复习了一遍matlab基本操作。画三维图一般给出x,y的划分,然后用到meshgrid命令,建立z坐标的函数,然后surf或mesh命令,mesh命令绘制的图形是一个一排排的彩色曲线组成的网格图,而surf命令绘制得到的是着色的三维曲面。z坐标的函数一般是由一个公式给出。

       如果给出的函数是三维分段函数,比如说

                                           

最容易想到的方法是用一个自定义函数解决,如下:

function z = testfun(x,y)
    temp = x+y;
    if temp > 1
        z = 0.54 * exp(-0.75*x.^2 - 3.75*y.^2 - 1.5*y);
    elseif temp >-1 && temp <= -1
        z =0.7575*exp(-x.^2-6*y.^2);
    elseif temp <-1
        z = 0.5457*exp(-0.75*x.^2-3.75*y.^2 +1.5*y);
    end
end

其实这样的做是不行的,x,y传入的是一个向量,无法执行  if temp > 1 判断,如果是用meshgrid命令则传入的是一个矩阵,更难操控。

       我的方法是根据划分的x,y,算出对应点的z,注意最后算出的Z经过转秩才能带入surf,因为surf命令接受的数据和我们尝试时相反的。具体代码:


x1 = -2:0.1:2;
y1 = -2:0.1:2;
[X,Y] = meshgrid(x1,y1);
N = size(X,2); 
M = size(Y,1);
Z = zeros(N,M);
for i = 1:N
    for j = 1:M
        if X(j,i) + Y(j,i) >1
            Z(i,j) = 0.54 * exp(-0.75*X(j,i).^2 - 3.75*Y(j,i).^2 - 1.5*Y(j,i));   
        elseif (X(j,i) + Y(j,i)<=1 && X(j,i) + Y(j,i) > -1)
            Z(i,j) = 0.7575*exp(-X(j,i).^2-6*Y(j,i).^2);
        else
            Z(i,j) = 0.5457*exp(-0.75*X(j,i).^2-3.75*Y(j,i).^2 +1.5*Y(j,i));      
        end    
    end    
end
surf(X,Y,Z')






猜你喜欢

转载自blog.csdn.net/github_19765307/article/details/39059033