練習問題 メモ 4#
4.1#
次の1~3の行列の階数標準形および階数(rank)を求めよ
1.#
行ベクトルを
とする
import numpy as np
A = np.array([
[1, 2],
[3, 4],
[5, 6],
])
# 1行目を-2倍して2行目に加える
A[1, :] += A[0, :] * (-2)
A
array([[1, 2],
[1, 0],
[5, 6]])
# 1行目を-3倍して3行目に加える
A[2, :] += A[0, :] * (-3)
A
array([[1, 2],
[1, 0],
[2, 0]])
# 3行目を(1/2)倍する
A[2, :] = (1 / 2) * A[2, :]
A
array([[1, 2],
[1, 0],
[1, 0]])
# 2行目を-1倍して3行目に加える
A[2, :] += A[1, :] * (-1)
A
array([[1, 2],
[1, 0],
[0, 0]])
# 2行目を-1倍して1行目に加える
A[0, :] += A[1, :] * (-1)
A
array([[0, 2],
[1, 0],
[0, 0]])
# 1行目を(1/2)倍する
A[0, :] = (1 / 2) * A[0, :]
A
array([[0, 1],
[1, 0],
[0, 0]])
# 1行目と2行目を入れ替える
a1 = A[0, :].copy()
a2 = A[1, :].copy()
A[0, :] = a2
A[1, :] = a1
A
array([[1, 0],
[0, 1],
[0, 0]])
2.#
import numpy as np
A = np.array([
[0, 1, 0],
[1, 0, 1],
[0, 1, 0],
])
# 1行目を-1倍して3行目に加える
A[2, :] += (-1) * A[0, :]
A
array([[0, 1, 0],
[1, 0, 1],
[0, 0, 0]])
# 0列目を-1倍して3列目に加える
A[:, 2] += (-1) * A[:, 0]
A
array([[0, 1, 0],
[1, 0, 0],
[0, 0, 0]])
# 1行目と2行目を入れ替える
a1 = A[0, :].copy()
a2 = A[1, :].copy()
A[0, :] = a2
A[1, :] = a1
A
array([[1, 0, 0],
[0, 1, 0],
[0, 0, 0]])
3.#
わからなかった
from sympy import Symbol, Matrix
a = Symbol("a")
A = Matrix([
[a, 1, 1],
[1, a, 1],
[1, 1, a],
])
A
# 1行目と2行目を入れ替える
a1 = A[0, :].copy()
a2 = A[1, :].copy()
A[0, :] = a2
A[1, :] = a1
A
A[1, :] += -a * A[0, :]
A
A[2, :] += -1 * A[0, :]
A
未知の変数があって最終的なランクが変わりうる → 場合分けする
もし
列基本変形(列で引き算)して
→ rank=1
もし
A[:, 2] += 1 * A[:, 1]
A
A[:, 1] += -1 * A[:, 2]
A
A[1, :] += A[2, :]
A
a1 = A[1, :].copy()
a2 = A[2, :].copy()
A[1, :] = a2
A[2, :] = a1
A
A[1, :] += A[2, :]
A
A[:, 2] += 1 * A[:, 1]
A
A[:, 1] += -a * A[:, 0]
A[:, 2] += -1 * A[:, 0]
A
A[1, :] += -1 * A[2, :]
A
A[1, :] = (1/a) * A[1, :]
A
A[1, 1] = -a + 1
A[1, 2] = (2/a) - 2
A
A[2, :] - A[1, :]
A[:, 1] += 1 * A[:, 2]
A
A[2, :] += -((1-a)/(1-a**2)) * A[1, :]
A
A[2, :] = (1+a)/((-1+a)*(2+a)) * A[2, :]
A
Matrix([
[1, 0, 1+a],
[0 ,1, -1],
[0, 0, 2+a]
])
4.2#
次の問に答えよ。
2次の正方行列に対する階数標準形をすべて書け
2次の正方行列に対する階段行列をすべて書け。なお、任意の数は*を用いて表せ。