1
행렬 A의 QR분해를 실행하세요?
print(A)
[[ -3 -19 3]
[ 9 -7 11]
[ -3 9 11]
[ 0 4 32]]
Q,R=la.qr(A)
print(np.around(Q, 3))
[[-0.302 -0.898 -0.265]
[ 0.905 -0.18 -0.193]
[-0.302 0.359 -0.313]
[ 0. 0.18 -0.891]]
print(np.around(R, 3))
[[ 9.95 -3.317 5.729]
[ 0. 22.271 5.029]
[ 0. 0. -34.884]]
print(np.dot(Q, R))
[[ -3. -19. 3.]
[ 9. -7. 11.]
[ -3. 9. 11.]
[ 0. 4. 32.]]
2
다음 각 이차식에 대응하는 대칭행렬을 나타내십시요.
a. ℝ2의 이차식, $3x_1^2-4x_1x_2+5x_2^2$
$\left[\begin{matrix}3&-2\\-2&5\end{matrix}\right]$
b.ℝ2의 이차식, $3x_1^2+2x_1x_2$
$\left[\begin{matrix}3&1\\1&0\end{matrix}\right]$
c.ℝ3의 이차식, $3x_1^2+2x_1x_2$
$\left[\begin{matrix}3&1&0\\1&0&0\\0&0&0\end{matrix}\right]$
3
$7x_1^2+8x_1x_2+4x_1x_3+10x_2^2+5x_2x_3+8x_3^2$에 대응하는 대칭행렬을 나타내십시요. 이 식은 양의 정부호 입니까?
print(A)
[[ 7. 4. 2. ]
[ 4. 10. 2.5]
[ 2. 2.5 8. ]]
la.eig(A)
(array([14.37376873, 4.20939986, 6.41683141]),
array([[ 0.51711708, 0.83649609, -0.1812849 ],
[ 0.72914595, -0.54145794, -0.41853253],
[ 0.44825897, -0.08424717, 0.88992489]]))
위 식에 대응하는 대칭행렬의 고유값은 모두 양수입니다. 그러므로 위 식은 양의 정부호 입니다.
4
다음은 xTAx가 yTDy의 변환입니다. D를 발견하고 성립함을 보이세요.
$5 x_{1}^{2} + 4 x_{1} x_{2} + 6 x_{2}^{2} - 4 x_{2} x_{3} + 7 x_{3}^{2}=3.0 y_{1}^{2} + 6.0 y_{2}^{2} + 9.0 y_{3}^{2}$
x=Matrix(3,1, [x1,x2,x3])
x
$\left[\begin{matrix}x_{1}\\x_{2}\\x_{3}\end{matrix}\right]$
A=Matrix([[5,2,0],[2,6,-2],[0,-2,7]])
A
$\left[\begin{matrix}5 & 2 & 0\\2 & 6 & -2\\0 & -2 & 7\end{matrix}\right]$
simplify(x.T*A*x)
$\left[\begin{matrix}5 x_{1}^{2} + 4 x_{1} x_{2} + 6 x_{2}^{2} - 4 x_{2} x_{3} + 7 x_{3}^{2}\end{matrix}\right]$
d, p=la.eig(np.array(A, dtype=np.float64))
d
array([3., 6., 9.])
D=np.diag(d)
print(D)
[[3. 0. 0.]
[0. 6. 0.]
[0. 0. 9.]]
y1,y2,y3=symbols("y1 y2 y3")
y=Matrix(3,1,[y1,y2,y3])
y.T*Matrix(D)*y
$\left[\begin{matrix}3.0 y_{1}^{2} + 6.0 y_{2}^{2} + 9.0 y_{3}^{2}\end{matrix}\right]$
5
Q(x)에 대해 (a)xTx=1의 제한 조건에서 최대값을 계산하고 이 값들이 각각 Q(x)의 이차식 행렬 A의 최대 고유값과 같다는 것을 보이세요. (b)xTx=1와 xTu1=0의 제한 조건에서 최대값(u1은 최대 고유값에 대응하는 고유단위벡터)을 계산하세요.
$Q(x)=3 x_{1}^{2} + 2 x_{1} x_{2} + 2 x_{2}^{2} + 4 x_{2} x_{3} + 2 x_{3}^{2}$
x=Matrix(3,1, [x1,x2,x3])
x
$\left[\begin{matrix}x_{1}\\x_{2}\\x_{3}\end{matrix}\right]$
A=Matrix([[3,1,0],[1,2,2],[0,2,2]])
A
$\left[\begin{matrix}3 & 1 & 0\\1 & 2 & 2\\0 & 2 & 2\end{matrix}\right]$
xTAx=x.T*A*x
expand(xTAx[0])
$3 x_{1}^{2} + 2 x_{1} x_{2} + 2 x_{2}^{2} + 4 x_{2} x_{3} + 2 x_{3}^{2}$
d, p=la.eig(np.array(A, dtype=np.float64))
d
array([-0.16424794, 2.77286556, 4.39138238])
print(p)
[[ 0.2260912 0.84604119 0.48280128]
[-0.7154086 -0.19216509 0.6717612 ]
[ 0.6611152 -0.49727948 0.56181831]]
u1=p[:,2]
la.norm(u1)
1.0
np.dot(np.dot(u1.T,np.array(A, dtype=np.float64)),u1)
4.391382380630901
u2=p[:,1]
u2
array([ 0.84604119, -0.19216509, -0.49727948])
np.dot(np.dot(u2.T,np.array(A, dtype=np.float64)),u2)
2.77286555782931
6
다음 행렬 A 의 특이값?
$A=\left[\begin{matrix}2&3\\0&2\end{matrix}\right]$
print(A)
[[2 3] [0 2]]
AA=np.dot(A.T, A)
print(AA)
[[ 4 6] [ 6 13]]
d, P=la.eig(AA)
print(d)
[ 1. 16.]
a=np.sqrt(d)
a
array([1., 4.])
특이값은 1, 4
7
다음 행렬 A의 특이값 분해에서 좌특이행렬, 특이값, Σ행렬, 우특이행렬을 계산하세요?
$A=\left[\begin{matrix}3 & -3\\0 & 0\\1 & 1\end{matrix}\right]$
AA=np.dot(A.T,A)
print(AA)
[[10, -8],
[-8, 10]]
d, V=la.eig(AA)
d
array([18., 2.])
특이값, 특이행렬, 우려특이행렬
s
array([4.24264069, 1.41421356])
print(V)
[[ 0.70710678 0.70710678]
[-0.70710678 0.70710678]]
sMat=np.vstack([np.diag(s), np.array([0,0])])
print(sMat)
[[4.24264069 0. ]
[0. 1.41421356]
[0. 0. ]]
좌특이행렬
print(AV)
[[ 4.24264069e+00 -8.88178420e-16]
[ 0.00000000e+00 0.00000000e+00]
[ 2.22044605e-16 1.41421356e+00]]
U1=AV/s
print(np.around(U1, 3))
[[ 1. -0.] [ 0. 0.] [ 0. 1.]]
U1은 3×3차원이 되어야 합니다. 그러나 위의 V로 부터의 산출한 U는 3×2차원이므로 각 열벡터와의 선형 결합 즉, U1Tx=0가 선형독립이고 정규직교기저인 벡터를 첨가하여 U를 생성합니다.
$\left[\begin{matrix}1&0&0\\0&0&0\\0&0&1\end{matrix}\right]\left[\begin{matrix}x_{1}\\x_{2}\\x_{3}\end{matrix}\right]=\left[\begin{matrix}0\\0\\0\end{matrix}\right]$
위 식의 해집합의 기저를 발견하기 위해 sympy의 nullspace()함수를 사용합니다.
u2=np.array(u2, dtype=np.float64).reshape(3,1)
print(u2)
[[0.]
[1.]
[0.]]
결과를 U1에 첨가하면 3×3차원의 U가 생성됩니다.
print(np.around(U, 3))
[[ 1. -0. 0.] [ 0. 0. 1.] [ 0. 1. 0.]]
확인
[[ 3. 3.]
[ 0. 0.]
[-1. 1.]]
numpy.linalg.syd()함수를 사용하여 각 요소들을 계산
print(np.around(U, 3))
[[-1. -0. 0.]
[ 0. 0. -1.]
[ 0. -1. 0.]]
print(s)
[4.24264069 1.41421356]
print(V)
[[-0.70710678 0.70710678]
[-0.70710678 -0.70710678]]
댓글 없음:
댓글 쓰기