我有一个矩阵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
的向量v
和u.v=0
(即向量垂直)被称为正交。
答案 0 :(得分: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 = 0
至A(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
代表可以是0
或1
的字词。
如果从整体上看,{em> v
的前4列必须零,以便输出与{{1}的所有行的对角线对齐}}。 第5列可以为零或1 。
所以,
A
可以是:v_new
或v_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维中生成两个向量。要检查正交性,只需转置其中一个向量并与另一个向量相乘。如果它们是正交的,你应该得到零。
我使用的例子确保我确实为零。