【问题标题】:Solving a non-singular system of equations, hyperspace through n points in n-dim using Julia使用 Julia 通过 n-dim 中的 n 个点求解非奇异方程组、超空间
【发布时间】:2016-10-07 21:14:22
【问题描述】:

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

例如,考虑 3d 点 [1 0 0]、[0 0 1] 和 [1 0 1]。 我想通过系数向量 [0 1 0 0] 将 y = 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)

给予

[[a == 0, b == r1, c == 0, d == 0]]

非常感谢您的帮助。

【问题讨论】:

  • 这是用包吗? SymPy?
  • 在 sage no 中,它只是默认的求解器。在 Julia 中,我读到了 SymPy,但我无法求解方程组

标签: julia linear-algebra


【解决方案1】:

我不确定我是否完全理解这个问题,但如果我们使用系数矩阵和向量来表述上述问题,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],基本上就是问题中给出的解决方案。

如果矩阵是秩不足的,例如因为这些点是共线的,你仍然会从\ 得到一个特定的解决方案,但nullspace 将返回一个包含多个向量的基。

【讨论】:

  • 感谢您的回复。我认为nullspace 可以解决问题,并进行一些适当的舍入
  • 不幸的是,机器错误似乎比我想象的更不稳定。当空间的维度 n 增长(~= 400)时,由于某种原因,n 个非仿射依赖点有一个维度为 2 的零空间,这是错误的。现在,解决这个问题的方法如下:这个超平面是支持单纯形的平面。给定n维n+1(仿射独立)点,有没有办法获得单纯形的H表示,就像在polymake中一样?我搜索了一下,但不清楚是否在 julia 中实现了 cdd 算法...感谢您的帮助
【解决方案2】:

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

我们可以用一个单位向量 n 和一个标量 d 来表示一个超平面。那么超平面的点就是 x 且 n'*x+d = 0。对于点 x,n'*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 

在哪里

x[i] = X[i] - Xbar
C = Sum{ i | x[i]*x[i]'}/k -- the covariance of the data

这个 Q 将被一个 n 最小化,n 是一个 C 的最小特征值的特征向量。

所以练习是:计算 Xbar 和 C。对角化 C(如 U * D * U' 说),如果 D 的最小条目位于 (i,i),则选择 n 的第 i 列U),最后计算 d 为 -n'*Xbar。

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

【讨论】:

    猜你喜欢
    • 2023-02-03
    • 2018-01-14
    • 1970-01-01
    • 2014-01-02
    • 2014-04-30
    • 2012-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多