如何生成与其他向量正交的向量?

时间:2016-10-03 05:37:48

标签: matlab vector

我有一个矩阵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])。

注意:两个向量为u的向量vu.v=0(即向量垂直)被称为正交。

2 个答案:

答案 0 :(得分:1)

AVK中也提及了commentsv_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代表必须为0的字词,而x代表可以是01的字词。

如果从整体上看,{em> v前4列必须,以便输出与{{1}的所有行的对角线对齐}}。 第5列可以为零或1

所以, A可以是:v_newv_new = [0 0 0 0 1]

从上面的说明中,您还可以看到v_new = [0 0 0 0 0]第二第4行[0 1 0 0 1]

不是对角线

<强>解决方案: -

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

答案 1 :(得分: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维中生成两个向量。要检查正交性,只需转置其中一个向量并与另一个向量相乘。如果它们是正交的,你应该得到零。

我使用的例子确保我确实为零。