2020年6月10日水曜日

学習環境

続 解析入門 (原書第2版) (S.ラング(著)、松坂 和夫(翻訳)、片山 孝次(翻訳)、岩波書店)の第1章(ベクトル)、4(ベクトルのノルム)の練習問題6の解答を求めてみる。



    1. A = ( 2 , - 1 , 1 ) B = ( 1 , - 3 , - 5 ) C = ( 3 , - 4 , - 4 )

      とおく。

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

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

コード

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

print('6.')


class TestTriangleCosine(TestCase):
    def test(self):
        As = [Matrix(t) for t in [(2, -1, 1),
                                  (3, 1, 1)]]
        Bs = [Matrix(t) for t in [(1, -3, -5),
                                  (-1, 2, 1)]]
        Cs = [Matrix(t) for t in [(3, -4, -4),
                                  (2, -2, 5)]]
        cs = [(sqrt(35) / sqrt(41), sqrt(6) / sqrt(41), 0),
              (1 / sqrt(17 * 26), 16 / sqrt(17 * 41), 25 / sqrt(26 * 41))]
        for i, (A, B, C, (ca, cb, cc)) in enumerate(zip(As, Bs, Cs, cs)):
            print(f'({chr(ord("a") + i)})')
            self.assertEqual((B - A).dot(C - A) / ((B - A).norm() * (C - A).norm()),
                             ca)
            self.assertEqual((C - B).dot(A - B) / ((C - B).norm() * (A - B).norm()),
                             cb)
            self.assertEqual((B - C).dot(A - C) / ((B - C).norm() * (A - C).norm()),
                             cc)


if __name__ == "__main__":
    main()

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

% ./sample6.py -v
6.
test (__main__.TestTriangleCosine) ... (a)
(b)
ok

----------------------------------------------------------------------
Ran 1 test in 0.048s

OK
%

0 コメント:

コメントを投稿