如何检查矩阵是否必须有相反符号的条目?

时间:2015-02-04 11:21:09

标签: matlab matrix

我感兴趣的是,是否有一种简单的方法可以显示大量矩阵(不能)具有1个正数和1个负数的列。因此,我想采用以下矩阵并返回false:

[    0, p1_2,    0, p1_4,     0,  p1_4,    0, p1_4,     0]
[ p2_1,    0,    0,    0, -p2_1, -p2_1,    0,    0, -p2_1]
[ p3_1, p3_2, p3_3,    0,     0,     0, p3_2, p3_3,  p3_3]
[    0,    0, p4_3, p4_4,  p4_4,     0, p4_4,    0,     0]

其中所有条目都是限制为实数的符号变量。 从第6(6)栏可以看出,我们有p1_4和p2_1是相同的符号。从(9)我们得到p2_1和p3_3相同的符号。但是从(8)我们得到p1_4和p3_3是相反的符号,所以我们想要返回一个失败并从中考虑抛出这个矩阵。

有关于做什么的想法?谢谢! (顺便说一句,我在matlab工作)

1 个答案:

答案 0 :(得分:0)

这回答了问题的初始版本,没有提到变量是符号的

可以实现您的目标
any(any(sign(A)==-1, 1) & any(sign(A)==1, 1), 2)

其中A是您的矩阵。

工作原理any(sign(A)==-1, 1)是一个行向量,其中包含1列,其中包含一些负数。 any(sign(A)==1, 1)类似但是为正数。 &检查每列是否满足两个条件。最外面的any检查某些列是否发生了这种情况。

如果您将多个矩阵存储在3D数组中B(:,:,1)B(:,:,2),...,则可以使用几乎相同的代码:

squeeze(any(any(sign(B)==-1, 1) & any(sign(B)==1, 1), 2))

这将为您提供长度为size(B,3)的向量,其中每个条目都包含其中一个矩阵的结果。