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

Matlab 如何检查向量b是否在A列中?,matlab,Matlab,我如何确定b∈A或b列∉matlab中的cola?A是m x n矩阵,其中m>=n,b是向量。是否已经有用于此的内置函数,或者我需要创建一个?如果b∈Col A,我如何确定矩阵A是否有正交列/正交?假设你有一个矩阵A,即nxm和一个向量b,即nx1,你想看看b是否是A中的列 您可以通过将A和b进行转置,然后查看向量b是否是A的成员来完成此操作。代码如下: member = ismember(A',b','rows'); Here is an example; A = 1

我如何确定b∈A或b列∉matlab中的cola?A是m x n矩阵,其中m>=n,b是向量。是否已经有用于此的内置函数,或者我需要创建一个?如果b∈Col A,我如何确定矩阵A是否有正交列/正交?

假设你有一个矩阵
A
,即
nxm
和一个向量
b
,即
nx1
,你想看看b是否是
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);

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

您可以使用
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(因为您允许这种情况),则所有这些操作都会变得更简单、更快。

如果
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

嘿,谢谢!投票表决。在选择这个作为正确答案之前,我想看看其他人是否还有其他答案。另外,你知道矩阵A是否有正交列吗?“如果上三角矩阵上有任何零,则列是正交的”!=true@RDizzl3那么
A=[眼睛(3);零(3)];A(2,1)=1?列不是正交的,但是
A'*A
的上三角部分有零。列怎么不是正交的?他们所有的点积都是零。在你的解决方案中,你说拿这个列,计算其他列的内积。这正是A'*A所做的。在这个例子中,你给出了一个(:,1)点A(:,2)=1*0+0*1+0*0+0*0+0*0=0,与其他列相同。根据正交矩阵A'*A=I的定义。你提供的例子满足这个条件,这意味着A是正交的,因此它的列也是正交的。列的正交性如何?谢谢,刚才我正在寻找的