使用surf plot忽略某些矩阵项

8个视图(过去30天)
捷克伯·维尔森
捷克伯·维尔森 2021年8月9日
你好
我试图用surf命令在矩阵中绘制一些数据。每个非零元素恰好被零元素(即元素)填充 对于每一个非零都是零 .我想只画一个非零元素的曲面,但我已经尝试了很多东西,还没有弄清楚如何排除零元素。例如,我试过
MatrixName (MatrixName = = 0) =南;
Surf(x,y,MatrixName);
但是这种方法忽略了包含零元素点的所有面片,并且由于我的矩阵的性质,所有曲面面片都被忽略。
有人知道如何要求matlab在生成曲面图时忽略零元素吗?
真诚地
雅各布

公认的答案

戴夫B
戴夫B 2021年8月9日
我想到了一些万博 尤文图斯解决方案,它们都利用了插值,这取决于“忽略”的解释方式(我使用了NaN,但您可以使用 ==0 代替 伊斯南(z) ):
%一些虚假数据
[x,y]=网格(-5:5,-5:5);
z=50-(x.^2+y.^2);
奈克斯提尔
冲浪(x,y,z)
头衔(“原件”)
%标记为nan,注意每个非nan的邻居都是nan:
z(1:2:end,:)=nan;
z(1:2,::结束)=南;
奈克斯提尔
冲浪(x,y,z);
头衔(“问题”)
%解决方案1:使用最近的
badind=isnan(z);
f=散射的内极体(x(~badind),y(~badind),z(~badind),“最近的”);
zfixed=z;
zfixed(badind)=f(x(badind),y(badind));
奈克斯提尔
冲浪(x、y、Z固定)
头衔(“soln 1”)
%解决方案2:使用线性插值(更平滑)
f=散射的内极体(x(~badind),y(~badind),z(~badind),“线性”);
zfixed=z;
zfixed(badind)=f(x(badind),y(badind));
奈克斯提尔
冲浪(x、y、Z固定)
头衔(“soln 2”)
%解决方案3:插值为每个非nan生成4个值
奈克斯提尔
zi=interp2(z);
席=林空间(x(1),x(结尾),宽度(ZI));
yi=linspace(y(1)、y(end)、高度(zi));
冲浪(xi,咦,interp2 (z,“最近的”))
头衔(“soln 3”)
1评论
捷克伯·维尔森
捷克伯·维尔森 2021年8月9日
这正是我想要的。我没有意识到MATLAB对于分散的数据有这样的插值功能。很酷!
非常感谢您提供的解决方案以及在介绍过程中所采取的谨慎态度。

登录以发表评论。

更多答案(1)

达洛瓦
达洛瓦 2021年8月9日
不要使用“==”等号来比较双数
ii=abs(矩阵名称-0)<0.1;%精密度
MatrixName(ii)=NaN;

s manbetx 845


释放

R2021a

社区寻宝

在MATLAB Central中查找宝藏,了解社区如何帮助您!

开始狩猎!