查找x1²+x2²+ ... +xn²= 1的所有可能解的算法

时间:2019-07-18 18:06:01

标签: algorithm math equation non-linear

是否有任何算法可以找到该方程的所有可能解:

  

x1²+x2²+ ... +xn²= 1

其中xi> 0和n> = 2

要限制解,我们可以将x的小数点固定为1。 例如:

如果n = 2,则找到满足x1²+x2²= 1的所有元组(x1,x2) 该函数的返回结果类似于(将小数点固定为1):

[
    [0.1, 1],
    [0.2, 1],
    [0.3, 0.9],
    [0.4, 0.9],
    [0.5, 0.9],
    [0.6, 0.8],
    [0.7, 0.7],
    [0.8, 0.6],
    [0.9, 0.4],
    [1, 0.1],
    [1, 0.2],
    ...
    [0.4, 0.9]
]

对于n = 2来说很容易,但是我需要归纳为n> = 2。

2 个答案:

答案 0 :(得分:3)

首先,您提供的方程式是R^n中半径为1的球体的一般描述。因此,所有可能点的数量是无限且不可数的!

如果希望所有点的精度为1位小数,则可以轻松地将其概括。假设您想要一种n = 3的算法。将x_3固定为0到1(0.1, 0.2, ..., 0.9)之间的值。这意味着您设置了一个与R^3中的球面相交的平面。现在,您想要找到x1x2,以便在1-x^3中有一个半径为R^2的圆。如您所说,您知道如何解决2D问题。

现在,您知道了如何解决n = 3的问题。因此,您可以递归求解此问题并将其推广为n> 3。

答案 1 :(得分:1)

如@OmG所示,您的方程式类似于n-Sphere的方程式。因此,尝试找到所有可能的解决方案非常困难,因为它们的数量是无限的。可以使用一个简单的参数方程找到所有解决方案的参数化版本:

2D: x1=cos(t1)                          t1 in [0,2pi[
    x2=sin(t1)
3D: x1=cos(t1)                          t1 in [0,pi]
    x2=sin(t1) cos(t2)                  t2 in [0,2pi[
    x3=sin(t1) sin(t2)
4D: x1=cos(t1)                          t1 in [0,pi]
    x2=sin(t1) cos(t2)                  t2 in [0,pi]
    x3=sin(t1) sin(t2) cos(t3)          t3 in [0,2pi[
    x4=sin(t1) sin(t2) sin(t3)
...

请参见https://en.m.wikipedia.org/wiki/N-sphere

如果您只是对达到给定十进制精度的解决方案感兴趣,则不应使用浮点数,而应使用整数。例如,如果您对所有解决方案 x 1 x 2 x 公式 x 1 2 + x 2 2 的3 + x 3 2 = 1 。其中 x 1,2,3 = ±ab ,其中a = 0或1,b为0,1,2,3,4, 5,6,7,8或9。这样就更容易处理整数,以避免由于浮点逼近而导致的数值错误(请参见Is floating point math broken?)。您所要做的就是将数字乘以10( y 1 = 10·x 1 )并求解方程 y < sub> 1 2 + y 2 2 + y 3 2 = 100 从整数的角度来看。

在这种情况下,一种简单而蛮力的算法就是:

do i=0,10
  do j=0,i
    if (i*i + j*j > 100) jump out of j-loop
    do k=0,j
      if (i*i+j*j+k*k == 100) print i,j,k
    end do
  end do
end do

上面将打印i,j,k。但是,所有可能的排列和符号更改也是有效的解决方案。因此,解(8,6,0)也意味着(-8,6,0),(-6,0,8),(0,8,6),...是解。

因此,最后,我们将浮点问题简化为一个整数问题,该问题易于进行数字检查。

与此问题相关的是:

如果您想加快速度,您可能还会对以下内容感兴趣: