matlab用三个for循环画三变量函数图,代码如下,运行错误代码如下,错在哪里,怎么改

代码:x1=linspace(-2,2,10);
y1=linspace(-3,3,10);
z1=linspace(-4,4,10);
f=zeros(length(x1),length(y1),length(z1));
count1=1;
for x=x1
count2=1;
for y=y1
count3=1;
for z=z1;
f(count1,count2,count3)=x+y+z;
count3=count3+1;
end
count2=count2+1;
end
count1=count1+1;
end
surf(x1,y1,z1,f)

错误:??? Error using ==> surf at 78
Z must be a matrix, not a scalar or vector.
Error in ==> three_for at 18
surf(x1,y1,z1,f)

这个稍微一想就想通了。

matlab里边surf就是surface,本来的意思就是表面。所谓画出来的四维的图,不过是一个三维图,每个点再配上一个与第四维对应的颜色罢了。

而你这个x1,y1,z1根本就画不出平面来。如果要是个平面,z1需要是x1*y1大小的矩阵,而不应该是个向量。追问

我这里的z1是一个自变量,f是因变量,z1跟x1和y1的性质是一样的,z1为什么必须得是矩阵呢

追答

那样你就画不出图来了。你能想想一个四维图像是什么样么?
如果x1是自变量,y1是因变量,那么是平面上的一条曲线。有两条坐标轴。
如果是自变量,z1是因变量,那么是一条空间曲线或者曲面。有三条坐标轴。

如果x1,y1,z1是自变量,f1是因变量,你觉着你画出来的是什么?我想象不出来四个轴的图。

追问

x y z分别是三个坐标轴,f是第四维,在xyz的空间中用颜色表示大小,这样不行吗。

追答

我觉着你自己都不清楚自己要的是什么图。只要你能想象出来的,matlab就能画。
你先自己想啊,你觉着空间中每个点都有一个颜色那样的图是个什么图?
就像你出门,每个点都有颜色,那不就是放大雾,能见度为零,除了你面对的这个面,其他什么都看不到么?

追问

那这个f=x+y+z的函数就没办法用图像表示了吗

追答

你先问问你自己么,你看到过类似的图没有?

追问

我见识少

追答

那你就动脑子想想~

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-02-23
Z必须是矩阵,你的z1是数组或者向量,步进一下看看
surf(x,y,z,c),一般情况下,x,y,z是相同维数的矩阵,xy是网格坐标矩阵,z是在x,y网格坐标上的值的矩阵,c是不同高度的颜色值追问

那这个f=x+y+z能画吗

追答

可以x,y,z是坐标,是矩阵,f是颜色
首先你要画什么?确定你要什么效果,再来想怎么画

相似回答