2011-01-21 45 views
5

这似乎应该很容易,但我不是专家,谷歌没有帮助。Matlab:简单的获取标准基础矢量的方法?

我想在Matlab中生成一个n维空间的标准有序基向量的优雅方式。例如,行为类似于以下:

>> [e1, e2] = SOB(2); 
>> e1 

    e1 = 1  0 

>> e2 

    e2 = 0  1 

希望为1班轮,并不能真正想写的东西这么简单的功能。

谢谢

回答

17

为什么不

A = eye(N); 

然后A(:,i)是你的第i个基向量

4

两条线会好吗?用EYE创建单位矩阵,使用MAT2CELL将载体复制到单元阵列中,然后用DEAL分配它们。

tmp = mat2cell(eye(N),N,ones(N,1)); 
[e1,e2,...,eN] = deal(tmp{:}) 
+0

2行可以工作...虽然(对我来说)这是相当神秘:) – des4maisons 2011-01-21 02:55:42

+0

@ des4maisons:我编辑了一下澄清。基本上,如果将基本向量组合到一个数组中,您就可以获得身份。所以我构建了身份矩阵并将其分开。 – Jonas 2011-01-21 02:58:33

0

如果匿名函数,那就更方便了。

e = @(x) eye(size(A))(:,x); 

如果A的大小乘以6,则返回6乘1的向量。

e(1) = [1;0;0;0;0;0] 
1

为了获得单个基底矢量,说在N尺寸k个标准基向量,可以使用:

yourbasisvector = double(1:N == k) 

1:N产生矢量1 2 ... N,其== k逐元素测试与k相等; double将逻辑值转换为数字。