matlab 画图, for 循环,用hold on每次循环都添加一条曲线,但是legend(×)会把上次的覆盖,如何解决?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了matlab 画图, for 循环,用hold on每次循环都添加一条曲线,但是legend(×)会把上次的覆盖,如何解决?相关的知识,希望对你有一定的参考价值。
例如:
figure; hold on;
for I = 1:n
plot(*****); legend(****);
end
hold off;
name=num2str(i
)
lgnamei=[name,'次计算']
plot(i,f(i));legend(lgname)
end 参考技术B 改为:(以3为例)
figure;
for I = 1:3
plot(*****);
hold on
end
legend('1','2','3'); 参考技术C 只有画完图之后才能legend。
matlab 画图 三元函数
|x|+|y|+|z|=1这个图形用matlab怎么画呢?(最好有程序)
谢谢啦!!!!!!
首先考虑了用隐函数生成图像,函数如下
>> ezsurf('(abs(x)+abs(y)-1).*((abs(x)+abs(y))<1)',[-1 1 -1 1 ])
>> hold on
>> ezsurf('-(abs(x)+abs(y)-1).*((abs(x)+abs(y))<1)',[-1 1 -1 1 ])
>> axis equal
>> view(-30,10);
>>
图片如图所示,不过存在一个没法解决的问题,就是显示范围,这个隐函数在
[-1 1 -1 1]整个范围内都能算出值,虽然在我把xy超出范围的值都置0了,不过0也能画出来。
想了半天也想不出来怎么把筛选矩阵abs(x)+abs(y))<1的0都变成NaN,因为不能直接一个语句就表达出来。
画这个东西还有个方法,就是用patch,这个函数是能画出一系列的多边形,你可以直接用这个函数画8个三角形出来。
用patch的方法我写了一个m函数,很简单
function point
p=[1 0 0;0 -1 0;-1 0 0;0 1 0;0 0 1 ;0 0 -1];
v=[1 2 6;1 4 6;2 3 6;3 4 6;1 2 5;1 4 5;2 3 5;3 4 5];
clf;
patch('faces',v,'vertices',p,'facevertexcdata',jet(8),'facecolor','flat');
axis equal;
axis([-1 1 -1 1 -1 1]);
grid on;
view(-20,10);
参考技术A 这明显是一个曲面方程所以二三楼的plot用错了
至少应该用surf
不过我们可以分析该式子的几何意义:
在空间中某一点到原点O的距离R的5次方即:[(R^2)^2.5]
等于该点的z坐标的3次方,z>0有意义
R^5=Z^3
应该想象得到该曲面应该是一个z为轴的旋转曲面
可以得到旋转母线的方程
r=sqrt(z^(3/5)-z^2);
%%%%%%%%%%%%%%%%%%%%
z=0:0.1:10;
r=sqrt(z.^.(3./5)-z.^2);
然后用cylinder函数一部搞定
具体的参数写法查一下help,因为我很久没用这个函数了
%%%%%%%%%%%%%%%%%%%%%
>>z=0:0.1:10;
>>r=sqrt(z.^(3/5)-z.^2);
>>[x,y,z]=cylinder(r);
>>surf(x,y,z)
>>axis([-11-110.1]) 参考技术B
%定义函数f(x,y,z)=|x|+|y|+|z|-1
f=@(x,y,z)abs(x)+abs(y)+abs(z)-1;
%生成网格
t=linspace(-1,1,25);
[x,y,z]=meshgrid(t,t,t);
v=f(x,y,z);
%用isosurface绘制隐函数
h=isosurface(x,y,z,v,0);
p=patch(h);
set(p,'facevertexcdata',jet(size(h.vertices,1)),'edgecolor','flat','facecolor','w');
view(3);axis equal
参考技术C 这是二元函数 参考技术D 先用meshgrid形成XYZ三轴的矩阵,然后用slice(X,Y,Z,A,B,C)ABC分表表示XYZ所且的横截面,只要切的细一点,看起来就是个完整的图,比如ABC都取1:0.01:2,就表示数据从1到2,步长0.01切一个横截面,这么多面放在一起就是一个完整的图;参考如下:
[K,H,E] = meshgrid(-1:.25:1,2:-.25:0,5:1:30);
v = K.*exp(-K.^2-H.^2-E.^2);
xslice = [1];
yslice = [ ];
zslice = [5,20];
hx=slice(K,H,E,v,xslice,yslice,zslice);
set(hx,'FaceColor','interp','EdgeColor','none')
%colormap hsv;
%shading interp;
xlabel('K');
ylabel('H');
zlabel('E');
%grid off
whitebg('w')
以上是关于matlab 画图, for 循环,用hold on每次循环都添加一条曲线,但是legend(×)会把上次的覆盖,如何解决?的主要内容,如果未能解决你的问题,请参考以下文章