matlab如何用网格截取计算三维图?已经有了一个截断中间段的三维图,想用100*100的网格(按坐标系)将三维图分开,分别计算网格中nan出现的概率(有三维图的矩阵),显示出nan出现概率最小的

来源:学生作业学帮网 编辑:学帮网 时间:2024/05/05 08:15:21

matlab如何用网格截取计算三维图?
已经有了一个截断中间段的三维图,想用100*100的网格(按坐标系)将三维图分开,分别计算网格中nan出现的概率(有三维图的矩阵),显示出nan出现概率最小的网格.

clear all
[X,Y] = meshgrid(linspace(-3,3));
Z = peaks(X,Y);%生成数据z
 
zR=[1,6];%设置z范围,你自己可以改
z1=Z.*(Z>=zR(1)&Z<=zR(2));%为取出设定范围数据而得到逻辑数组
z2=Z;%为不覆盖原始Z,新建变量
z2(z1(:)==0)=NaN;%设定范围外的值改为NAN,得到初始数据

s=size(z2);
s1=[5,10];%设置分块大小(按数据点),你自己可以改,但必须根据原始数据大小能够整除,如不能整除可以剪裁或添加数据
%如果是按坐标系,你需要计算100×100的坐标中有多少个数据点,再来更改上面的设置
s2=[s(1)/s1(1),s(2)/s1(2)];%计算分多少块
for i=1:s2(1);
    for j=1:s2(2);
        b=z2((i-1)*s1(1)+1:i*s1(1),(j-1)*s1(2)+1:j*s1(2));%分块数据
        a(i,j)=length(find(isnan(b)));%计算每个分块中NaN的个数
    end
end

for i=1:s2(1);
    for j=1:s2(2);
        c((i-1)*s1(1)+1:i*s1(1),(j-1)*s1(2)+1:j*s1(2))=a(i,j);%让每一分块赋值为该块的个数       
    end
end

z3=(c<=min(c(:)));%为取出概率最小的数据重新赋颜色而得到逻辑数组
z4=Z;%为不覆盖原始Z,新建变量
z4(z3(:)==1)=max(Z(:));%设定概率最小的数据颜色暗红色

figure(2)
mesh(X,Y,z2,Z);
% surf(X,Y,z2,a2);
axis([-3 3 -3 3 -10 10])
% shading interp
title('裁剪的原始数据');
figure(3)
mesh(X,Y,z2,c);
% surf(X,Y,z2,a2);
axis([-3 3 -3 3 -10 10])
% shading interp
title('裁剪的原始数据分块NaN个数的分布');
figure(4)
mesh(X,Y,z2,z4);
% surf(X,Y,z2,a2);
axis([-3 3 -3 3 -10 10])
% shading interp
title('裁剪的原始数据NaN最少的分块区域');