2020年7月8日水曜日

学習環境

ラング線形代数学(上) (ちくま学現文庫)(S.ラング (著)、芹沢 正三 (翻訳)、筑摩書房)の7章(スカラー積と直交性)、2(正値スカラー積)、練習問題2の解答を求めてみる。



    1. 直交基底。

      (1,2,1,0)
      (1,2,3,1)-(1,2,3,1)·(1,2,1,0)(1,2,1,0)·(1,2,1,0)(1,2,1,0)
      =(1,2,3,1)-43(1,2,1,0)
      =13(-1,-2,5,3)

      よって 正基直交基底は、

      (1,2,1,0)(1,2,1,0)=16(1,2,1,0)
      (-1,-2,5,3)(-1,-2,5,3)=139(-1,-2,5,3)

    2. (1,1,0,0)
      (1,-1,1,1)-(1,-1,1,1)·(1,1,0,0)(1,1,0,0)·(1,1,0,0)(1,1,0,0)=(1,-1,1,1)
      (-1,0,2,1)-(-1,0,2,1)·(1,-1,1,1)(1,-1,1,1)·(1,-1,1,1)(1,-1,1,1)-(-1,0,2,1)·(1,1,0,0)(1,1,0,0)·(1,1,0,0)(1,1,0,0)
      (-1,0,2,1)-12(1,-1,1,1)+12(1,1,0,0)=12(-2,2,3,1)

      よって、

      (1,1,0,0)(1,1,0,0)=12(1,1,0,0)
      (1,-1,1,1)(1,-1,1,1)=12(1,-1,1,1)
      (-2,2,3,1)(-2,2,3,1)=132(-2,2,3,1)

コード

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

print('2.')


class Test(TestCase):
    def test_a(self):
        a = Matrix([1, 2, 1, 0]) / sqrt(6)
        b = Matrix([-1, -2, 5, 3]) / sqrt(39)
        for v in [a, b]:
            self.assertEqual(v.norm(), 1)
        self.assertEqual(a.dot(b), 0)

    def test_b(self):
        a = Matrix([1, 1, 0, 0]) / sqrt(2)
        b = Matrix([1, -1, 1, 1]) / 2
        c = Matrix([-2, 2, 3, 1]) / (3 * sqrt(2))
        for v in [a, b, c]:
            self.assertEqual(v.norm(), 1)
        for v in [a, b, c]:
            for w in [a, b, c]:
                if v != w:
                    self.assertEqual(a.dot(b), 0)


if __name__ == "__main__":
    main()

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

% ./sample2.py -v
2.
test_a (__main__.Test) ... ok
test_b (__main__.Test) ... ok

----------------------------------------------------------------------
Ran 2 tests in 0.052s

OK
%

0 コメント:

コメントを投稿