2016-05-01 19 views
1

有沒有一種快速簡單的方法來獲取一些矢量[x,y,z]並生成[xx,xy,xz,yy,yz,zz]如何在matlab中輕鬆應用二次增強

nchoosek將忽略平方項。我可以手動添加它們...只是想知道是否有更好的解決方案

+1

什麼是'xx'?你在這裏沒有錯過一個'*'號嗎?另外,什麼是'x','y','z'?標量或矩陣?這一點很重要,因爲乘法可能不可交換。 – Jubobs

回答

2

假設矢量只包含單個元素,我建議的一種方法是使用findtriu的組合。鑑於您的矢量被存儲在變量A,嘗試:

[X,Y] = find(triu(ones(numel(A)))); 
P = A(X).*A(Y); 

triu提取出來的矩陣的上三角形部分。通過提取完整矩陣的上三角部分,我們可以使用find來確定非零條目的行和列位置。每行和列的位置對應於向量中的一對位置,您可以將它們相乘以獲得所需的結果。行和列位置將分別存儲在XY中,然後您將使用它們訪問矢量A和元素方式乘法以獲得所需的結果。

+0

你回答了,但是如果'x,y,z'是每個列向量本身呢? – 2c2c

+0

@ 2c2c我在你的文章中假設元素'x''y'和'z'都是單個元素。如果你希望這些是列向量,而不是看看這個規範的職位:http://stackoverflow.com/questions/21895335/generate-a-matrix-containing-all-combinations-of-elements-taken-from-正矢量/ 21895344#21895344 – rayryeng