matlab三维画图变量范围显示

两组数据:x1,y1,z1和x2,y2,z2,其中x1=x2=0.01:0.01:0.1.y1=[110.920.760.620.480.360.270.220.20];... 两组数据:x1,y1,z1和x2,y2,z2,其中x1=x2=0.01:0.01:0.1.
y1=[1 1 0.92 0.76 0.62 0.48 0.36 0.27 0.22 0.20];
z1=[5 5 3.87 3.85 2.73 2.89 1.69 1.94 1 1];
y2=[1 1 0.95 0.80 0.66 0.52 0.37 0.26 0.21 0.20];
z2=[5 5 4.57 4.0 3.07 2 .0 1.4 1.01 1 1];
先在要把这两个曲面放在一个图上,而且只显示y1*z1<1 以及y2*z2<1的部分,求问怎么解决?
展开
 我来答
showtime_97
推荐于2016-03-16 · TA获得超过4783个赞
知道大有可为答主
回答量:1005
采纳率:90%
帮助的人:821万
展开全部

一维向量哪来的曲面,只能画曲线。

x1=[0.01:0.01:0.1];

y1=[1 1 0.92 0.76 0.62 0.48 0.36 0.27 0.22 0.20];

z1=[5 5 3.87 3.85 2.73 2.89 1.69 1.94 1 1];


x2=[0.01:0.01:0.1];

y2=[1 1 0.95 0.80 0.66 0.52 0.37 0.26 0.21 0.20];

z2=[5 5 4.57 4.0 3.07 2.0 1.4 1.01 1 1];


figure(1)

plot3(x1,y1,z1,'-b*',x2,y2,z2,'-.r+'),grid on

xlabel('X'),ylabel('Y'),zlabel('Z');

h = legend('Z1','Z2',-1);


z4=z1;z4(z4>=(1./y1))=NaN;

z5=z2;z5(z5>=(1./y2))=NaN;


figure(2)

plot3(x1,y1,z4,'-b*',x2,y2,z5,'-.r+'),grid on

xlabel('X'),ylabel('Y'),zlabel('Z');

h = legend('Y1*Z1<1','Y2*Z2<1',-1);


追问
不能画成曲面么?
追答

当然不能,又不是二维网格数据,哪来的面,如果是面,面上的数据是咋取值的?想想就知道了。你硬要画曲面,用griddata实际上从数学上是有问题的,你自己斟酌。


x1=[0.01:0.01:0.1];

y1=[1 1 0.92 0.76 0.62 0.48 0.36 0.27 0.22 0.20];

z1=[5 5 3.87 3.85 2.73 2.89 1.69 1.94 1 1];


x2=[0.01:0.01:0.1];

y2=[1 1 0.95 0.80 0.66 0.52 0.37 0.26 0.21 0.20];

z2=[5 5 4.57 4.0 3.07 2.0 1.4 1.01 1 1];


[X1,Y1,Z1]=griddata(x1,y1,z1,linspace(0.01,0.1)',linspace(0.1,1),'v4');

[X2,Y2,Z2]=griddata(x2,y2,z2,linspace(0.01,0.1)',linspace(0.1,1),'v4');


figure(1)

mesh(X1,Y1,Z1),grid on

hold on

mesh(X2,Y2,Z2),grid on,alpha(0.2);

hold off

xlabel('X'),ylabel('Y'),zlabel('Z');


Z4=Z1;Z4(Z1>=(1./Y1))=NaN;

Z5=Z2;Z5(Z2>=(1./Y2))=NaN;


figure(2)

mesh(X1,Y1,Z4),grid on

hold on

mesh(X2,Y2,Z5),grid on,alpha(0.2);

hold off

xlabel('X'),ylabel('Y'),zlabel('Z');


figure(3)

mesh(X1,Y1,Z1),grid on

hold on

mesh(X2,Y2,Z2),alpha(0.2);

surf(X1,Y1,Z4),alpha(0.2);

surf(X2,Y2,Z5),alpha(0.2);

hold off

xlabel('X'),ylabel('Y'),zlabel('Z');




tianxiawulang
2015-09-17 · TA获得超过2.7万个赞
知道大有可为答主
回答量:4732
采纳率:89%
帮助的人:2576万
展开全部

把超出范围的数据设为NaN即可。

下面的代码首先用灰色画出完整的曲线,再用彩色画出符合要求的部分。

 

参考代码:

x1=0.01:0.01:0.1;
x2=x1;
y1=[1 1 0.92 0.76 0.62 0.48 0.36 0.27 0.22 0.20];
z1=[5 5 3.87 3.85 2.73 2.89 1.69 1.94 1 1];
y2=[1 1 0.95 0.80 0.66 0.52 0.37 0.26 0.21 0.20];
z2=[5 5 4.57 4.0 3.07 2 .0 1.4 1.01 1];

clf
plot3(x1,y1,z1,x2,y2,z2,'color',[1 1 1]*0.85)
hold on

inx1 = y1.*z1>=1;
inx2 = y2.*z2>=1;
x1(inx1) = NaN;
x2(inx2) = NaN;
plot3(x1,y1,z1,'.-',x2,y2,z2,'.-')

追问

多谢回答,如果把曲线画成曲面怎么表示。 比如

[X,Y,Z]=griddata(x,y,z,linspace(0.01,0.1)',linspace(0.1,1),'v4');

mesh(X,Y,Z)

然后怎么只显示y*z<1的部分啊?

追答

和前面的做法类似,把超出范围的数据设为NaN即可:

[X,Y,Z]=griddata(x,y,z,linspace(0.01,0.1)',linspace(0.1,1),'v4');
clf
mesh(X,Y,Z,'EdgeAlpha',0.2,'FaceAlpha',0.2);
 hold on
X(Y.*Z>=1) = NaN;
mesh(X,Y,Z)

图中把不满足y*z<1条件的部分设置为半透明。

注意到边缘并不平滑,这一点没有太好的办法解决。这是因为,面本身是分成小的网格,如果条件是关于自变量x和y的,还可以采用一些技巧设置非规则的网格使得边缘刚好与某网格重合,但现在的条件里面有因变量z,可用的做法大概也就是把网格设置更密集一些了,例如:

[X,Y,Z]=griddata(x,y,z,linspace(0.01,0.1,200)',linspace(0.1,1,200),'v4');

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式