Matlab 如何检查向量b是否在A列中?
我如何确定b∈A或b列∉matlab中的cola?A是m x n矩阵,其中m>=n,b是向量。是否已经有用于此的内置函数,或者我需要创建一个?如果b∈Col A,我如何确定矩阵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
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是正交的,因此它的列也是正交的。列的正交性如何?谢谢,刚才我正在寻找的