matlab中怎么把f=@(x,y,z)x.^2+y.^2+4*z.^4+(4*y-4).*z.^2这个方程化成立体的形式,类似下图

2025-01-21 12:06:38
推荐回答(2个)
回答1:

你这个是个三元函数,要是画图就是四维的了

按你的意思,你说要画满足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');



得到的图像如下


像是两个筒其中有一点连起来

由于在边界处,计算的点出现虚数被删除,曲面边缘出现有点不连续

回答2:

不会这个呢