【发布时间】:2014-01-17 19:54:18
【问题描述】:
目标
给定一组点,我试图找到满足所提供的所有点的线性方程的系数。
例如,如果我想找到线性方程(ax + by + c = z):
3x + 2y + 2 = z
我至少需要三个三维点:
(2, 2, 12)
(3, 4, 19)
(4, 5, 24)
给定足够多的坐标 (x, y, z) 点,我应该能够使用高斯消元法找到 (a, b, c)。
但是,我认为在特殊情况下求解矩阵时遇到了问题。你可以在这里查看我对 python 实现的第一次尝试:https://gist.github.com/anonymous/8188272
我们来看几个例子……
数据集 1
使用以下“手工”点(x、y、z):
(2, 2, 12)
(3, 4, 19)
(4, 5, 24)
对以下矩阵进行 LU 分解:
[[ 2. 2. 1. 12.]
[ 3. 4. 1. 19.]
[ 4. 5. 1. 24.]]
反解U矩阵:
[[ 4. 5. 1. 24. ]
[ 0. -0.5 0.5 0. ]
[ 0. 0. 0.5 1. ]]
返回结果(a,b,c):
[3.0, 2.0, 2.0]
正确!一切似乎都很好......
数据集 2
使用以下“手工”点(x、y、z):
(3, 4, 19)
(4, 5, 24)
(5, 6, 29)
对以下矩阵进行 LU 分解:
[[ 3. 4. 1. 19.]
[ 4. 5. 1. 24.]
[ 5. 6. 1. 29.]]
反解U矩阵:
[[ 5.00000000e+00 6.00000000e+00 1.00000000e+00 2.90000000e+01]
[ 0.00000000e+00 4.00000000e-01 4.00000000e-01 1.60000000e+00]
[ 0.00000000e+00 0.00000000e+00 4.44089210e-16 0.00000000e+00]]
返回结果(a,b,c):
[1.0, 4.0, 0.0]
虽然从技术上讲这是一个解决方案,但不是我想要的!
数据集 3
使用以下“手工”点(x、y、z):
(5, 6, 29)
(6, 7, 34)
(7, 8, 39)
对以下矩阵进行 LU 分解:
[[ 5. 6. 1. 29.]
[ 6. 7. 1. 34.]
[ 7. 8. 1. 39.]]
反解U矩阵:
[[ 7.00000000e+00 8.00000000e+00 1.00000000e+00 3.90000000e+01]
[ 0.00000000e+00 2.85714286e-01 2.85714286e-01 1.14285714e+00]
[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 3.55271368e-15]]
实现崩溃...
想法
在数据集 2 和 3 中,最后一行和倒数第二行是“特殊的”。倒数第二行的“b”和“c”具有相同的值(在我的特殊示例中是这样!)。不幸的是,我缺乏从中得出正面或反面的数学知识。
当最后一行全为零并且它上面的行具有相等的值时,我需要处理一些特殊情况吗?
提前致谢!
【问题讨论】:
-
我认为这可能是一道数学题,请考虑将其移至math.stackexchange.com
标签: python numpy matrix scipy linear-algebra