如何在matlab中确定是否b∈ColA或b∉Col? A是m×n矩阵,其中m> = n,并且b是矢量。是否有内置功能,或者我需要创建一个?如果b∈ColA,我将如何确定矩阵A是否具有正交列/正交?
答案 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
的矩阵nxm
和b
的向量nx1
,并且您想查看b是{{1}中的列}}
您可以通过转换A
和A
,然后查看向量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
的第一列是匹配,但b
和A
的第二列不一样。如果要检查列的正交性,可以执行以下操作:
b
如果上三角矩阵上有任何零,则列是正交的。 orthcheck = triu(A'*A);
检查所有列的点积,您只需要上三部分,因为矩阵是对称的。
答案 2 :(得分:0)
另一种测试v
是A
列
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