matlab中怎么把f=@(x,y,z)x.^2+y.^2+4*z.^4+(4*y-4).*z.^2这个方程化成立体的形式,类似下图
你这个是个三元函数,要是画图就是四维的了
按你的意思,你说要画满足f(x,y,z)=0方程的曲面吧
那么比较麻烦,先要解出方程z=fz(x,y),再根据fz画图
由于是四次方程,所以有四个解,还要考虑在实数范围
根据以上种种,写出了程序
f=@(x,y,z)x.^2+y.^2+4*z.^4+(4*y-4).*z.^2;
%从f(x,y,z)=0 解出来的z(x,y),有四组解分别是z1(x,y) z2(x,y) -z1(x,y) -z2(x,y)
z1=@(x,y) sqrt((1-sqrt(- x.^2 - 2*y + 1) - y)/2);
z2=@(x,y) sqrt((1+sqrt(- x.^2 - 2*y + 1) - y)/2);
[xx,yy]=meshgrid(-3:0.1:3,-3:0.1:0.6);%x范围-1~1 y范围-1.5~0.5(实数范围内y不会超过0.5)
zz1=z1(xx,yy);
zz1(abs(imag(zz1))>1e-6)=nan;%考虑在实数范围内,去除虚数部分
zz1=real(zz1);
zz2=z2(xx,yy);
zz2(abs(imag(zz2))>1e-6)=nan;
zz2=real(zz2);
zz3=-zz1;
zz4=-zz2;
mesh(xx,yy,zz1);hold on;
mesh(xx,yy,zz2);
mesh(xx,yy,zz3);
mesh(xx,yy,zz4);hold off;
xlabel('x');
ylabel('y');
zlabel('z');
得到的图像如下
像是两个筒其中有一点连起来
由于在边界处,计算的点出现虚数被删除,曲面边缘出现有点不连续
你好厉害,但是我不是想画这个图,这个图我能画出来,我只是想在它上面立体感强,如我发的图上有等势线,然后是立体的感觉,好的话我再追加
不是太明白你的意思
2014-04-02