求解线性方程组

有若干线性方程(类似2x + 10y + 8z = 54的方程),希望给出x、y、z的值。

 

创建两个Matrix对象,第一个Matrix应当包含方程的系数(2x + 10y + 8z = 54中的2、10、8),第二个应当包含常数结果(2x + 10y + 8z = 54中的54)。

 

例如,考虑下面3个带3个变量的线性方程:

 

2x + 10y + 8z = 54

7y + 4z = 30

5x + 5y + 5z = 35

 

要解这些方程,需要创建两个矩阵:

 

    require 'matrix'
    require 'rational'
    coefficients = [[2, 10, 8], [0, 7, 4], [5, 5, 5]].collect! do |row|
      row.collect!{|x| Rational(x)}
    end
    coefficients = Matrix[*coefficients]
    # => Matrix[[Rational(2, 1), Rational(10, 1), Rational(8, 1)],
    #            [Rational(0, 1), Rational(7, 1), Rational(4, 1)],
    #            [Rational(5, 1), Rational(5, 1), Rational(5, 1)]]
    constants = Matrix[[Rational(54)], [Rational(30)], [Rational(35)]]
    solutions = coefficients.inverse * constants
    puts solutions # => Matrix[[1], [2], [4]]

 

这意味着,对于原始方程x=1、y=2、z=4。

你可能感兴趣的:(求解线性方程组)