是否有任何算法可以找到该方程的所有可能解:
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。
答案 0 :(得分:3)
首先,您提供的方程式是R^n
中半径为1的球体的一般描述。因此,所有可能点的数量是无限且不可数的!
如果希望所有点的精度为1位小数,则可以轻松地将其概括。假设您想要一种n = 3
的算法。将x_3
固定为0到1(0.1, 0.2, ..., 0.9
)之间的值。这意味着您设置了一个与R^3
中的球面相交的平面。现在,您想要找到x1
和x2
,以便在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),...是解。
因此,最后,我们将浮点问题简化为一个整数问题,该问题易于进行数字检查。
与此问题相关的是:
如果您想加快速度,您可能还会对以下内容感兴趣: