如何检查向量b是否在Col A中?

时间:2014-04-18 06:14:29

标签: matlab

如何在matlab中确定是否b∈ColA或b∉Col? A是m×n矩阵,其中m> = n,并且b是矢量。是否有内置功能,或者我需要创建一个?如果b∈ColA,我将如何确定矩阵A是否具有正交列/正交?

3 个答案:

答案 0 :(得分:2)

您可以按照上一个答案中的说明使用ismember

// some sample data
A = [eye(3); zeros(3)];
v = [0; 1; 0; 0; 1; 0];

ismember(A', v', 'rows')

要检查正交性,您可以执行以下操作

// A scalar initialised outside the for-loop. It stores sums of inner products.
dp = 0;

// Take the columns of A one by one and compute the inner product with all subsequent columns. If A is orthogonal, all the inner products have to be zero and, hence, their sum has to be zero.
for i = 1:size(A, 2)
    dp = dp + sum(A(:, i)'*A(:, i+1:end));
end

if (dp == 0)
    disp('The columns are orthogonal')
else
    disp('The columns are not orthogonal')
end

要使用正交列,每列的范数必须为1,所以:

// Check each column for unit length
M = mat2cell(A, size(A, 1), ones(size(A, 2), 1));

if find(cellfun(@(x)norm(x,2), M) ~= 1)
    disp('Columns are not of unit length')
else
    disp('Columns are of unit length')
end

请注意,如果m = n,所有这些操作都会变得更简单,更快(因为您允许这种情况)。

答案 1 :(得分:1)

假设您有A的矩阵nxmb的向量nx1,并且您想查看b是{{1}中的列}}

您可以通过转换AA,然后查看向量b是否为b的成员来执行此操作。这是代码:

A

因此,member = ismember(A',b','rows'); Here is an example; A = 1 5 2 2 3 3 4 4 b = 1 2 3 4 member = ismember(A',b','rows') member = 1 0 A的第一列是匹配,但bA的第二列不一样。如果要检查列的正交性,可以执行以下操作:

b

如果上三角矩阵上有任何零,则列是正交的。 orthcheck = triu(A'*A); 检查所有列的点积,您只需要上三部分,因为矩阵是对称的。

答案 2 :(得分:0)

另一种测试vA

的方法
any(all(bsxfun(@eq,A,v))) %// gives 1 if it is; 0 otherwise

测试A是否正交:

product = A*A'; %'// I'm using ' in case you have complex numbers
product(1:size(A,1)+1:end) = 0; %// remove diagonal
all(product(:)==0) %// gives 1 if it is; 0 otherwise