2011-01-21 46 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將邏輯值轉換爲數字。