2020年1月6日月曜日

学習環境

解析入門 原書第3版 (S.ラング(著)、松坂 和夫(翻訳)、片山 孝次(翻訳)、岩波書店)の第Ⅵ部(多変数の関数)、第17章(ベクトル)、4(ベクトルのノルム)の練習問題5の解答を求めてみる。



    1. 三角形の 3点を

      A = 2 , - 1 , 1 B = 1 , - 3 , - 5 C = 3 , - 4 , - 4

      各角の余弦について、

      cos A = - 1 , - 2 , - 6 · 1 , - 3 , - 5 1 + 4 + 36 · 1 + 9 + 25 = - 1 + 6 + 30 41 35 = 35 41 35 cos B = 1 , 2 , 6 · 2 , - 1 , 1 1 + 4 + 36 4 + 1 + 1 = 6 41 · 6 cos C = - 1 , 3 , 5 · - 2 , 1 , - 1 1 + 9 + 25 4 + 1 + 1 = 0

    2. cos A = - 4 , 1 , 0 · - 1 , - 3 , 4 16 + 1 1 + 9 + 16 = 1 17 · 26 cos B = 4 , - 1 , 0 · 3 , - 4 , 4 16 + 1 9 + 16 + 16 = 16 17 · 41 cos C = 1 , 3 , - 4 · - 3 , 4 , - 4 1 + 9 + 16 9 + 16 + 16 = - 3 + 12 + 16 26 · 41 = 25 26 · 41

コード

#!/usr/bin/env python3
from unittest import TestCase, main
from sympy import Matrix, sqrt

print('5.')


def cos(a, b):
    return a.dot(b) / (a.norm() * b.norm())


class MyTestCase(TestCase):
    def test_a(self):
        a = Matrix([2, -1, 1])
        b = Matrix([1, -3, -5])
        c = Matrix([3, -4, -4])
        self.assertEqual(cos(b - a, c - a), 35 / sqrt(41 * 35))
        self.assertEqual(cos(a - b, c - b), 6 / sqrt(41 * 6))
        self.assertEqual(cos(a - c, b - c), 0)

    def test_b(self):
        a = Matrix([3, 1, 1])
        b = Matrix([-1, 2, 1])
        c = Matrix([2, -2, 5])
        self.assertEqual(cos(b - a, c - a), 1 / sqrt(17 * 26))
        self.assertEqual(cos(a - b, c - b), 16 / sqrt(17 * 41))
        self.assertEqual(cos(a - c, b - c), 25 / sqrt(26 * 41))


if __name__ == '__main__':
    main()

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

% ./sample5.py -v
5.
test_a (__main__.MyTestCase) ... ok
test_b (__main__.MyTestCase) ... ok

----------------------------------------------------------------------
Ran 2 tests in 0.055s

OK
%

0 コメント:

コメントを投稿