如何解决这个方程组?

时间:2017-04-26 12:39:56

标签: python numpy math scipy equation

我有一组n个形式的方程式:

enter image description here

其中c_i是浮点常数。我想解决这个方程组。

该系统可以简化为Ax = [O]的矩阵形式,其中解x是矩阵的零空间。

以下是从给定的c_i生成矩阵的过程。

n = len(c)
m = []
for i in xrange(n):
    coef = []
    for j in xrange (n):
        if i == j :
            coef.append(c[i]-1)
        else :
            coef.append(c[i])
    m.append(coef)
    A = matrix(m)

对于存在的非平凡解,我们需要这个矩阵的行列式是非零的,而事实并非如此。

使行列式为零的一种方法是使矩阵的最后一行为零。通过这样做,除了最后一行之外,我们正确地得到所有x_i。以下是相同的代码:

import scipy
from scipy import linalg, matrix

def null(A, eps=1e-15):
    u, s, vh = scipy.linalg.svd(A)
    null_mask = (s <= eps)
    null_space = scipy.compress(null_mask, vh, axis=0)
    return scipy.transpose(null_space)

def solve_for_values(c):
    n = len(c)
    m = []
    for i in xrange(n-1):
        coef = []
        for j in xrange (n):
            if i == j :
                coef.append(c[i]-1)
            else :
                coef.append(c[i])
        m.append(coef)
    z = [0 for _ in xrange(n)]
    m.append(z)
    A = matrix(m)
    return null(A)
# Testing   
if __name__ == "__main__" :
    c_array = [0.037105,0.548525,0.102255,0.008687,0.203427]
    x = solve_for_values(c_array)
    print x
    for item in x :
        print item/sum(x)

输出

[0.037105,0.548525,0.102255,0.008687,0.303428]

请注意,前四个值与代码中的c_array匹配,但最后一个除外。

这是我们能做的最好的吗?我也愿意接近解决方案。

0 个答案:

没有答案