2020年6月17日水曜日

学習環境

代数への出発 (新装版 数学入門シリーズ) (松坂 和夫(著)、岩波書店)の第6章(1次方程式、2次方程式)、練習問題8の解答を求めてみる。


  1. 求める2次関数を

    y = a x 2 + b x + c = a ( x - b 2 a ) 2 - b 2 - 4 a c 4 a

    とおく。

    点(1,0) を通るので、

    a + b + c = 0 c = - a - b

    最小値-2をもつので

    a > 0 - b 2 - 4 a c 4 a = - 2 b 2 - 4 a c = 8 a

    直線

    x + y = 0

    に接するので、

    - x = a x 2 + b x + c a x 2 + ( b + 1 ) x + c = 0 ( b + 1 ) 2 - 4 a c = 0 b 2 + 2 b + 1 - 4 a c = 0

    よって、

    { b 2 + 4 a ( a + b ) = 8 a b 2 + 2 b + 1 + 4 a ( a + b ) = 0 2 b + 1 = - 8 a b = - 8 a + 1 2
    64 a 2 + 16 a + 1 4 + 4 a ( a - 8 a + 1 2 ) = 8 a 64 a 2 + 16 a + 1 + 16 a - 6 a - 1 2 = 32 a 64 a 2 + 16 a + 1 - 48 a 2 - 8 a = 32 a 16 a 2 - 24 a + 1 = 0 a = 12 ± 144 - 16 16 = 12 ± 8 2 16 = 3 ± 2 2 4
    b = - 2 ( 3 ± 2 2 ) + 1 2 = - 7 ± 4 2 2 c = - 3 ± 2 2 4 + 7 ± 4 2 2 = 11 ± 6 2 4

    よって求める2次関数は

    y = 3 ± 2 2 4 x 2 - 7 ± 4 2 2 x + 11 ± 6 2 4

    (複号同順)

コード

#!/usr/bin/env python3
from unittest import TestCase, main
from sympy import symbols, plot, solveset, S, sqrt
from sympy.abc import x

print('8.')

y = -x
ys = [(3 + s * 2 * sqrt(2)) * x ** 2 / 4 -
      (7 + s * 4 * sqrt(2)) * x / 2 + (11 + s * 6 * sqrt(2)) / 4
      for s in [-1, 1]]


class Test(TestCase):
    def test(self):
        for y0 in ys:
            self.assertEqual(
                len(solveset(y0 - y, domain=S.Reals)),
                1
            )


p = plot(y, *ys, -2,
         (x, -10, 10),
         ylim=(-5, 15),
         legend=True,
         show=False)

colors = ['red', 'green', 'blue', 'brown', 'orange',
          'purple', 'pink', 'gray', 'skyblue', 'yellow']

for o, color in zip(p, colors):
    o.line_color = color
p.save('sample8.png')
p.show()

if __name__ == "__main__":
    main()

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

% ./sample8.py -v
8.
test (__main__.Test) ... ok

----------------------------------------------------------------------
Ran 1 test in 0.433s

OK
%

0 コメント:

コメントを投稿