在python中确定线性方程组的求解

时间:2014-02-23 16:46:16

标签: python linear

考虑以下问题:

  

查找:x_1,x_2,x_3> 0   这样67.5 = 60 * x_1 + 90 * x_2 + 120 * x_3   60 = 30 * x_1 + 120 * x_2 + 90 * x_3

有没有办法在Python中解决这个等式? (类似的问题已经被要求用于MATLAB)

任何人都可以举例说明如何在python中使用scipy.nnls()来获得任何欠定的方程式

1 个答案:

答案 0 :(得分:3)

用sympy象征性地解决方程式

from sympy import * 

x_1, x_2, x_3 = symbols('x_1 x_2 x_3')

res = solve([Eq(60*x_1+90*x_2+120*x_3, 67.5),
             Eq(30*x_1+120*x_2+90*x_3, 60)],
             [x_1, x_2, x_3])
print res
#{x_1: -1.4*x_3 + 0.6, x_2: -0.4*x_3 + 0.35}

使用scipy.optimize.nnls

import numpy as np
import matplotlib.pyplot as plt
from scipy.optimize import nnls 

A = np.array([[60, 90, 120], 
              [30, 120, 90]])

b = np.array([67.5, 60])

x, rnorm = nnls(A,b)

print x
#[ 0.          0.17857143  0.42857143]
print rnorm
#0.0

Altough这只承诺一个参数为x>=0的解决方案,因此您可以获得零,就像您在此示例中所做的那样。