2020年4月13日月曜日

学習環境

代数への出発 (新装版 数学入門シリーズ) (松坂 和夫(著)、岩波書店)の第5章(連立方程式と高次方程式)、2(連立2次方程式)、問10の解答を求めてみる。



    1. x=2y+52y+5+y-z=-4z=3y+92y+52+2y2-3y+32=04y2+20y+25+2y2-9y2-54y-81=03y2+34y+56=0y=-17±172-1683=-17±113=-2,-283{x=1y=-2z=3{x=-413y=-283z=-19

    2. x+y+z2=25x+y+z=±5{x=±85y=±125z=±1

      (複号同順)


    3. y=420xz=70-x+y=70-x+420xx2+420x2=70-x+420x2702-2·70x+420x+2·420=035-x-420x+6=0x2-41x+420=0x-20x-21=0{x=20y=21z=29{x=21y=20z=29

    4. yz=4-xy8-2xy+zx=-32zx=2xy-402xy-40-8xy=-16-6xy=24xy=-4yz=8zx=-48xyz2=4·8·48xyz2=42·2·42·3xyz=±166x=±26y=16486=63z=46

      (複号同順)

コード

#!/usr/bin/env python3
from unittest import TestCase, main
from typing import List
from sympy import symbols, solve, Rational, sqrt

print('10.')

x, y, z = symbols('x, y, z')


def k(d: dict) -> float:
    return (d[x], d[y], d[z])


def sorted_xyz(d: List[dict]) -> List[dict]:
    return sorted(d, key=k)


class TestEquations(TestCase):
    def test1(self):
        self.assertEqual(
            sorted_xyz(solve([x - 2 * y - 5,
                              x + y - z + 4,
                              x ** 2 + 2 * y ** 2 - z ** 2])),
            sorted_xyz([{x: 1, y: -2, z: 3},
                        {x: -Rational(41, 3), y: -Rational(28, 3), z: -19}])
        )

    def test2(self):
        self.assertEqual(
            sorted_xyz(solve([x * (x + y + z) - 8,
                              y * (x + y + z) - 12,
                              z * (x + y + z) - 5])),
            sorted_xyz([{x: s * Rational(8, 5),
                         y: s * Rational(12, 5),
                         z: s * 1}
                        for s in [-1, 1]])
        )

    def test3(self):
        self.assertEqual(
            sorted_xyz(solve([x + y + z - 70,
                              x * y - 420,
                              x ** 2 + y ** 2 - z ** 2])),
            sorted_xyz([{x: 20, y: 21, z: 29},
                        {x: 21, y: 20, z: 29}])
        )

    def test4(self):
        self.assertEqual(
            sorted_xyz(solve([x * y + y * z - 4,
                              2 * y * z + z * x + 32,
                              z * x - 8 * x * y + 16])),
            sorted_xyz([{x: s * 2 * sqrt(6),
                         y: s * -sqrt(6) / 3,
                         z: s * -4 * sqrt(6)}
                        for s in [-1, 1]])
        )


if __name__ == "__main__":
    main()

入出力結果(Zsh、PowerShell、Terminal、Jupyter(IPython))

% ./sample10.py -v
10.
test1 (__main__.TestEquations) ... ok
test2 (__main__.TestEquations) ... ok
test3 (__main__.TestEquations) ... ok
test4 (__main__.TestEquations) ... ok

----------------------------------------------------------------------
Ran 4 tests in 0.390s

OK
%

0 コメント:

コメントを投稿