2016-10-03 137 views
0

我有一个矩阵A,其是如何生成与其他矢量正交的矢量?

A=[1 0 0 1 0; 
    0 1 1 0 0; 
    0 0 1 1 0; 
    1 1 1 0 0] 

和给定的矢量v=[ 0 0 1 1 0],其具有两个元件之一。我必须改变元素1的位置,使得新矢量v与矩阵A中的所有行正交。 我如何在Matlab中执行此操作?

要验证正确的答案,只需检查gfrank([A;v_new])5(即v_new=[0 1 0 0 1])。

请注意:两个向量uv的点积是u.v=0(即矢量是垂直的)据说是正交的。

+1

'v_new'与'A'的行不正交。你的意思是'v_new = [0 0 0 0 1]'? – AVK

回答

1

AVK如在comments也提到过,v_new = [0 1 0 0 1]不正交于所有A

说明: -

A=[1 0 0 1 0; 
    0 1 1 0 0; 
    0 0 1 1 0; 
    1 1 1 0 0] 

对于A(1,:).*v = 0A(4,:).*v = 0

0 x x 0 x  % elements of v so that it's orthagonal to the 1st row of A 
x 0 0 x x  % -------------------------------------------- 2nd row of A 
x x 0 0 x  % -------------------------------------------- 3rd row of A 
0 0 0 x x  % -------------------------------------------- 4th row of A 

其中0表示必须0x术语表示其可以是01术语。

如果你看作为一个整体,前4列的v必须使输出是orthagonal到A所有行。 第5列可以是或者是零或者1

所以, v_new可以是:v_new = [0 0 0 0 1]v_new = [0 0 0 0 0]

从上面的解释,你也可以看到,[0 1 0 0 1]不orthagonal到第二第4行A


解决方案: -

要找到v_new,您可以使用null功能:v_new = null(A).'
这给:v_new = [0 0 0 0 1]为此gfrank([A;v_new])也给5

+0

谢谢。 'v_new'我错了。 'null'函数是一个很好的函数。如果我想找到线性独立矢量,而不是正交矢量。你知道任何功能支持吗? – Jame

+0

@ user8430一个新问题应该作为一个新问题单独提出!在这之前,请考虑搜索网页。如果这个答案解决了你的问题,那么[标记为接受](http://meta.stackexchange.com/a/5235/335102),这是说谢谢 –

+0

正确的方式我检查'null'函数。如果我在GF(2)中工作,(表示二进制矩阵),那么您的方法'null(A)。''不提供二进制解决方案 – Jame

0

也许这会帮助你看到N维中两个向量之间的正交性。

N=100; 
B1 = ones(1,N); 
B2 = -1*ones(1,N/2); 
B2 = [ones(1,N/2) B2]; 
B2 = transpose(B2); 
B3 = dot(B1,B2); 

上述代码在N维中生成两个向量。检查正交性只需转置其中一个矢量并与另一个矢量相乘即可。如果它们是正交的,你应该得到零。

我使用的例子确保我确实得到零。