public static void Main() { // First part of A int n = 5; // Size of quadratic matrix M. var rnd = new Random(1); Console.WriteLine("Part A1"); matrix M = new matrix(n, n); for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { M[i, j] = 4 * rnd.NextDouble() - 1.5; M[j, i] = M[i, j]; } } matrix M2 = M.copy(); M.print("We choose an arbitrary matrix M = "); vector D = new vector(n); matrix V = new matrix(n, n); int sweeps = Jacobi_diagonalization.cyclic_sweep(M, V, D); matrix temp2 = V.T * M2 * V; Console.WriteLine($"Total number of sweeps done is = {sweeps}"); temp2.print("V.T*M*V = "); D.print("Eigenvalues = "); }
public static void Main() { //Second part of A StreamWriter eigenenergies = new StreamWriter("eigenenergiesA2.data", append: false); StreamWriter outData = new StreamWriter("outA2.data", append: false); int m = 99; double s = 1.0 / (m + 1); matrix H = new matrix(m, m); for (int i = 0; i < m - 1; i++) { matrix.set(H, i, i, -2); matrix.set(H, i, i + 1, 1); matrix.set(H, i + 1, i, 1); } matrix.set(H, m - 1, m - 1, -2); matrix.scale(H, -1 / s / s); vector D2 = new vector(m); matrix V2 = new matrix(m, m); int sweeps2 = Jacobi_diagonalization.cyclic_sweep(H, V2, D2); for (int k = 0; k < m / 3; k++) { double exact = PI * PI * (k + 1) * (k + 1); double calculated = D2[k]; eigenenergies.WriteLine($"{k} {calculated} {exact}"); } for (int k = 0; k < 4; k++) { outData.WriteLine($"{0} {0}"); for (int i = 0; i < m; i++) { double factor = Sign(V2[0, k]); outData.WriteLine($"{(i+1.0)/(m+1.0)} {V2[i,k]*factor/Sqrt(s)}"); } outData.WriteLine($"{1} {0}"); outData.WriteLine(""); } outData.Close(); eigenenergies.Close(); }