matlab如何用网格截取计算三维图??求助!!

已经有了一个截断中间段的三维图,想用100*100的网格(按坐标系)将三维图分开,分别计算网格中nan出现的概率(有三维图的矩阵),显示出nan出现概率最小的网格。在线等... 已经有了一个截断中间段的三维图,想用100*100的网格(按坐标系)将三维图分开,分别计算网格中nan出现的概率(有三维图的矩阵),显示出nan出现概率最小的网格。在线等!!~~ 展开
 我来答
showtime_97
推荐于2016-02-24 · TA获得超过4778个赞
知道大有可为答主
回答量:1005
采纳率:90%
帮助的人:768万
展开全部

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最少的分块区域');

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式