matlab中怎么把f=@(x,y,z)x.^2+y.^2+4*z.^4+(4*y-4).*z.^2这个方程化成立体的形式,类似下图
答案:2 悬赏:0 手机版
解决时间 2021-01-11 08:44
- 提问者网友:我是女神我骄傲
- 2021-01-11 05:32
matlab中怎么把f=@(x,y,z)x.^2+y.^2+4*z.^4+(4*y-4).*z.^2这个方程化成立体的形式,类似下图
最佳答案
- 五星知识达人网友:舊物识亽
- 2021-01-11 06:26
你这个是个三元函数,要是画图就是四维的了
按你的意思,你说要画满足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');
得到的图像如下
像是两个筒其中有一点连起来
由于在边界处,计算的点出现虚数被删除,曲面边缘出现有点不连续
追问你好厉害,但是我不是想画这个图,这个图我能画出来,我只是想在它上面立体感强,如我发的图上有等势线,然后是立体的感觉,好的话我再追加追答不是太明白你的意思
按你的意思,你说要画满足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');
得到的图像如下
像是两个筒其中有一点连起来
由于在边界处,计算的点出现虚数被删除,曲面边缘出现有点不连续
追问你好厉害,但是我不是想画这个图,这个图我能画出来,我只是想在它上面立体感强,如我发的图上有等势线,然后是立体的感觉,好的话我再追加追答不是太明白你的意思
全部回答
- 1楼网友:一袍清酒付
- 2021-01-11 07:30
不会这个呢
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯