# D. Scott
# Linear Algebra: TCI
# Code Challenge 6.3
# Creation of symmetric diagonal matrices
import random
import numpy as np
A = np.empty((6,6),dtype=int)
# generate diagonal 6 x 6 matrix
for i in range(0,6):
for j in range(0,6):
r_num = 0
while (r_num <= 0):
r_num = random.randint(-4,12)
if (i == j):
A[i][j] = r_num
else:
A[i][j] = 0
print("Diagonal matrix A (non-negative elements):\n",A,"\n")
C1 = (A + A.transpose())/2
C2 = A.transpose()@A
print("C1 (A + A.T)/2: \n",C1,"\n")
print("C2 (A.T@A):\n",C2,"\n")
print("C1 = sqrt(C2)\n")
print("A.T@A simply squares the diagonal elements of A because the transpose is the same as A.\n")
print("A.T + A doubles the diagonal elements of A and then divides them in half, so A is unchanged.\n")
print("Hence, C2 is simply the elements of C1 squared, or alternately C1 is the square root of C2.")
Diagonal matrix A (non-negative elements): [[ 5 0 0 0 0 0] [ 0 3 0 0 0 0] [ 0 0 8 0 0 0] [ 0 0 0 1 0 0] [ 0 0 0 0 5 0] [ 0 0 0 0 0 12]] C1 (A + A.T)/2: [[ 5. 0. 0. 0. 0. 0.] [ 0. 3. 0. 0. 0. 0.] [ 0. 0. 8. 0. 0. 0.] [ 0. 0. 0. 1. 0. 0.] [ 0. 0. 0. 0. 5. 0.] [ 0. 0. 0. 0. 0. 12.]] C2 (A.T@A): [[ 25 0 0 0 0 0] [ 0 9 0 0 0 0] [ 0 0 64 0 0 0] [ 0 0 0 1 0 0] [ 0 0 0 0 25 0] [ 0 0 0 0 0 144]] C1 = sqrt(C2) A.T@A simply squares the diagonal elements of A because the transpose is the same as A. A.T + A doubles the diagonal elements of A and then divides them in half, so A is unchanged. Hence, C2 is simply the elements of C1 squared, or alternately C1 is the square root of C2.