2020年6月10日水曜日

学習環境

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



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

      とおく。

      AB=(-1,-2,-6)AC=(1,-3,-5)BA=(1,2,6)BC=(2,-1,1)CA=(-1,3,5)CB=(-2,1,-1)
      cosCAB=AC·ABACAB=-1+6+301+9+251+4+36=353541=3541
      cosABC=2-2+61+4+364+1+1=6416=641
      cosBCA=0

    2. A=(3,1,1),B=(-1,2,1),C=(2,-2,5)
      AB=(-4,1,0)AC=(-1,-3,4)BA=(4,-1,0)BC=(3,-4,4)CA=(1,3,-4)CB=(-3,4,-4)
      cosCAB=4-31726=11726
      cosABC=12+41741=1617·41
      cosBCA=-3+12+162641=2526·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 コメント:

コメントを投稿