利用Julia方法求解n维n点超空间非奇异方程组

利用Julia方法求解n维n点超空间非奇异方程组,julia,linear-algebra,Julia,Linear Algebra,朱莉娅有一个简单的问题:我想找到一个超平面通过n维n点的方程。有什么简单的方法可以做到这一点吗?我在解一个线性方程组,但它可能是非奇异的,在这种情况下,Julia返回一个错误。在Julia中,有没有已知的方法来求解参数或非奇异方程组 作为一个例子,考虑3D点〔1 0 0〕、〔0 0 1〕和〔1 0 1〕。 我想用y=0作为一个解,通过系数向量[0 1 0 0] 圣贤 a,b,c,d = var('a b c d') f1 = a + d f2 = a + c + d f3 = c + d sol

朱莉娅有一个简单的问题:我想找到一个超平面通过n维n点的方程。有什么简单的方法可以做到这一点吗?我在解一个线性方程组,但它可能是非奇异的,在这种情况下,Julia返回一个错误。在Julia中,有没有已知的方法来求解参数或非奇异方程组

作为一个例子,考虑3D点〔1 0 0〕、〔0 0 1〕和〔1 0 1〕。 我想用y=0作为一个解,通过系数向量[0 1 0 0]

圣贤

a,b,c,d = var('a b c d')
f1 = a + d
f2 = a + c + d
f3 = c + d
solve([f1==0,f2==0,f3==0],a,b,c,d)
给予


非常感谢您的帮助。

我不确定我是否完全理解这个问题,但是如果我们使用系数矩阵和向量来表达上述问题,Julia允许

julia> [1 0 0 1; 1 0 1 1; 0 0 1 1] \ [0; 0; 0]
4-element Array{Float64,1}:
 -0.0
  0.0
 -0.0
 -0.0
得到一个特定的解决方案,并

julia> nullspace([1 0 0 1; 1 0 1 1; 0 0 1 1])
4×1 Array{Float64,2}:
  3.92523e-17
  1.0        
  0.0        
 -3.92523e-17
以获得解空间的基。(这里的数字问题有点不幸,理想情况下应该是[0;1;0;0],当然。)如果我们把它理解为
[a;b;c;d]=[0;0;0;0]+r*[0;1;0;0]
,这基本上就是问题中给出的解决方案


如果矩阵秩不足,例如,因为点是共线的,您仍然可以从
\
中获得特定的解,但是
零空间
将返回一个包含多个向量的基。

一种方法是为点的协方差矩阵的最小特征值找到一个特征向量。不过,这在计算上有点繁重

我们可以用单位向量n和标量d来表示超平面。超平面的点是n'*x+d=0的x。对于点xn'*x+d是x到平面的距离。我们可以通过最小二乘法找到超平面:

如果X[]是k个给定点,我们寻求n,d最小化

Q(n,d) = Sum{ i | sqr( X[i]'*n+d)}/k
给定n,最小化d将是-Xbar.n,其中Xbar是X的平均值,因此我们不妨插入此d并最小化

Q(n) = Sum{ i | sqr( x[i]'*n)}/k = n'*C*n 
在哪里

该Q将通过n最小化,n是C的最小特征值的特征向量

因此,练习是:计算Xbar和C。对角化C(如U*D*U'所说),如果D的最小项在(i,i)处,选择U的第i列作为n),最后计算D为-n'*Xbar


请注意,这里唯一的困难是这里可能有许多最小的D值——例如,如果所有的点都位于n-2维平面上

这是用包裹吗?SymPy?在sage no中,它只是默认的解算器。在《朱莉娅》一书中,我读到了关于辛普森的故事,但我无法解出方程组。谢谢你的回答。我认为
nullspace
会起到作用,通过一些合适的取整,似乎机器错误比我想象的更不稳定。当空间的维数n增长(~=400)时,由于某种原因,n个非仿射相关点的维数为2的空空间是错误的。现在,解决这个问题的方法如下:这个超平面是单纯形的刻面支持。给定n维n中的n+1(仿射独立)点,是否有任何方法可以获得单纯形的H-表示,如polymake?我搜索了一下,但我不清楚cdd算法是否在julia中实现。。。谢谢你的帮助
Q(n) = Sum{ i | sqr( x[i]'*n)}/k = n'*C*n 
x[i] = X[i] - Xbar
C = Sum{ i | x[i]*x[i]'}/k -- the covariance of the data