2012年9月23日

Sympy を利用して連立方程式(system of equations)を解く

概要

Python の 記号計算ライブラリ「SymPy」を利用して、連立方程式を解いてみる。

連立一次方程式

サンプルとして、以下の三元連立一次方程式を解いてみる。
System of equations

以下のように「solve」を利用して解ける。solve を利用する場合、右辺が0になるように入力する必要がある。 解は dict で出力される。

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import unittest

from sympy import (
    Rational,
    solve,
    symbols,
)


class TestSolve(unittest.TestCase):

    def test_system_of_equations(self):
        """連立一次方程式"""
        x, y, z = symbols('x y z')
        self.assertEqual(
            {x: 1, y: -2, z: -2},
            solve([3 * x + 2 * y - z - 1,
                   2 * x - 2 * y + 4 * z + 2,
                   -x + Rational(1, 2) * y - z],
                  [x, y, z]))

if __name__ == '__main__':
    unittest.main()

連立二次方程式

サンプルとして、以下の二元連立二次方程式を解いてみる。
System of quadratic equation

連立一次方程式と同じように解ける。

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import unittest

from sympy import (
    solve,
    symbols,
)


class TestSolve(unittest.TestCase):

    def test_system_of_equations(self):
        """連立二次方程式"""
        x, y = symbols('x y')
        self.assertEqual(
            [(-7, 2), (-1, -1)],
            solve([x + 2 * y + 3,
                   x ** 2 + 4 * x * y + y ** 2 + 3 * y - 3],
                  [x, y]))

if __name__ == '__main__':
    unittest.main()

まとめ

連立方程式以外も様々なことができるが、サンプルがすぐに思いつかないので、思いついたらまた書く。

blog comments powered by Disqus