plot3(x,y,z)中,x,y,z均为同维向量,记x=(x1,x2,…,xn),y=(y1,y2,…,yn),z=(z1,z2,…zn),则x,y,z应满足:zi=f(xi,yi),但有时我们得到的原始数据是以二维表形式给出的,这时就涉及到将二维表数据转换成向量的问题,现通过以下实例来说明转换方法。
有二维表如fig.1所示,则坐标向量应为:x=(1 1 1 1;2 2 2 2;3 3 3
3);y=(2 3 4 5;2 3 4 5;2 3 4 5),表内除去首行首列后的元素应表示为:z=(3 4 5 6;4 5 6
7;5 6 7 8)。
fig.1
a.坐标向量的生成:
>> y=2:5;
>>
y=repmat(y,3,1);
>>
y=reshape(y',1,12);
>> y
y =
Columns 1 through 9
2
3
4 5
2
3 4
5
2
Columns 10 through 12
3
4
5
>> x=1:3;
>>
x=repmat(x,4,1);
>>
x=reshape(x,1,12);
>> x
x =
Columns 1 through 8
1
1
1 1
2
2 2
2
Columns 9 through 12
3
3
3
3
>>
b.因变量向量的生成:
i.在Matlab工作目录新建文本文件,将excel表格内的因变量数据复制进去
fig.2
ii.Matlab命令窗口输入如下代码:
>>
z=load('Data.txt');
>>
z=reshape(z',1,12);
>> z
z =
Columns 1 through 9
3
4
5 6
4
5 6
7
5
Columns 10 through 12
6
7
8
>>
c.plot3绘制结果:
fig.3
d.总结
关键用到了两个函数,即repmat和reshape函数。
repmat函数在之前的博文中已有介绍,故不再赘述。
reshape函数:该例中所用函数格式为:reshape(X,M,N),表示返回一个M*N矩阵,不妨记为R,R的元素均按列取自矩阵X。现举例说明其用法,设X为2*3矩阵,则执行reshape(X,3,2)的过程可理解为先将X转换成列向量[x11
x21 x12 x22 x13 x23]'(注:" ' "在matlab中表示对矩阵进行转置),再将该列向量分成两块:[x11 x21
x12]'及[x22 x13 x23]'分别作为R的第一列和第二列,如下示例所示:
>> z
z =
1
2
3
4
5
6
>> reshape(z,3,2)
ans =
1
5
4
3
2
6
一般地,X为p*q矩阵,则执行reshape(X,M,N)的过程可理解为:
1.将X转换成列向量[x11 x21……xp1 x12 x22……xp2……x1q x2q……xpq]';
2.将步骤1中的列向量分成N份,L1,L2……LN;
3.R(:,j)=Lj;