我有一个简单的问题:在R ^ pi中给出p点(非共线)找到通过这些点的超平面(以帮助澄清我在R中输入所有内容):
p<-2
x<-matrix(rnorm(p^2),p,p)
b<-solve(crossprod(cbind(1,x[,-2])))%*%crossprod(cbind(1,x[,-2]),x[,2])
Run Code Online (Sandbox Code Playgroud)
那么,给定第p + 1个点与第一个p点不共线,我发现方向垂直于b:
x2<-matrix(rnorm(p),p,1)
b2<-solve(c(-b[-1],1)%*%t(c(-b[-1],1))+x2%*%t(x2))%*%x2
Run Code Online (Sandbox Code Playgroud)
也就是说,b2定义垂直于b并经过x2的p维超平面.现在,我的问题是:
公式来自我对这个维基百科条目的解释("solve(A)"是A ^ -1的R命令).为什么这不适用于p> 2?我究竟做错了什么 ?
PS:我看过这篇文章(在关注流量编辑:抱歉不能发布多个链接)但不知怎的,它对我没有帮助.
提前致谢,
当p> 2时,我对Liu的解决方案的实现/理解有问题:
不应该将明显矩阵的qr分解与超平面方向之间的点积设为0?(即,如果qr向量垂直于超平面)
即,当p = 2时
c(-b[2:p],1)%*%c(a1)
Run Code Online (Sandbox Code Playgroud)
给出0.当p> 2时,它不会.
这是我尝试实施Victor Liu的解决方案.
a)在R ^ p中给出p线性独立观测:
p<-2;x<-matrix(rnorm(p^2),p,p);x
[,1] [,2]
[1,] -0.4634923 -0.2978151
[2,] 1.0284040 -0.3165424
Run Code Online (Sandbox Code Playgroud)
b)将它们放在矩阵中并减去第一行:
a0<-sweep(x,2,x[1,],FUN="-");a0
[,1] [,2]
[1,] 0.000000 0.00000000
[2,] 1.491896 -0.01872726
Run Code Online (Sandbox Code Playgroud)
c)执行矩阵a0的QR分解.nullspace中的向量是我正在寻找的方向:
qr(a0)
[,1] [,2]
[1,] -1.491896 0.01872726
[2,] 1.000000 0.00000000
Run Code Online (Sandbox Code Playgroud)
确实; 这个方向与维基百科公式的应用给出的方向相同(使用x2 =(0.4965321,0.6373157)):
[,1]
[1,] 2.04694853
[2,] -0.02569464
Run Code Online (Sandbox Code Playgroud)
......具有更高尺寸的优点.
我还有最后一个问题:当p> 2时,另一个p-1(即(1,0)这里)QR向量的含义是什么?-提前致谢,
p-1维超平面由法向量和平面穿过的点定义:
n.(x-x0) = 0
Run Code Online (Sandbox Code Playgroud)
其中n,长度为p的法向量x0是超平面通过.的点,是点积,并且必须满足x平面上任何点的方程.我们也可以这样写
n.x = p
Run Code Online (Sandbox Code Playgroud)
哪里p = n.x0只是一个数字.这是超平面的更紧凑的表示,其由(n,p)参数化.要找到超平面,假设您的点是x1,...,xp.形成具有p-1行和p列的矩阵A,如下所述.p的行是xi-x1,布局为行向量,对于所有i> 1(它们只有p-1).如果你的p点不像你所说的那样"共线"(它们需要是仿射独立的),那么矩阵A将具有等级p-1,并且零空间维度为1.零空间中的一个向量是法线向量.超平面.一旦找到它(称之为n),那么p = n.x1.为了找到矩阵的零空间,您可以使用QR分解(有关详细信息,请参见此处).