def test_jacobi_method_03(self):
        b_verbose = False
        if b_verbose:
            print("test_jacobi_method_03")
        self.mat_lambda, self.mat_x = evp.jacobi_method(self.mat_h)
        if b_verbose:
            print("L =")
            matrix.mat_xt = matrix.transpose_mat(self.mat_x)
            print("X =")
            matrix.show_mat(self.mat_x)

        self.mat_xt = matrix.transpose_mat(self.mat_x)
        self.mat_x_labda = matrix.mul_mat(self.mat_x, self.mat_labda)
        self.mat_x_labda_xt = matrix.mul_mat(self.mat_x_labda, self.mat_xt)
        if b_verbose:
            print("X L XT")
            matrix.show_mat(self.mat_x_lambda_xt)

        n = len(self.mat_h)
        for i in range(n):
            for j in range(n):
                st = "X L XT[%d][%d] = %g vs A[%d][%d] = %g" % (
                    i, j, self.mat_x_labda_xt[i][j], i, j, self.mat_h[i][j])
                self.assertAlmostEqual(self.mat_x_lambda_xt[i][j],
                                       self.mat_h[i][j],
                                       msg=st)
    def test_jacobi_method(self):
        self.mat_a = [[-1.0, -0.5, -0.2], [-0.5, -2.0, -1.0],
                      [-0.2, -1.0, -3.0]]

        lamda1, x1 = evp.jacobi_method(self.mat_a)
        self.assertEqul(len(self.mat_a), len(lamda1))
        self.assertEqual(len(self.mat_a[0]), len(lamda1[0]))
        self.assertEqual(len(self.mat_a), len(x1))
        self.mat_a_x1 = matrix.mul_mat(self.mat_a_x1)

        for k_pivot in range(len(self.mat_a)):
            lambda_i = lamda1[k_pivot][k_pivot]

            for i_row in range(len(self.mat_a)):
                self.assertAlmostEqual(self.mat_a_x[i_row][k_pivot],
                                       lambda_i * x1[i_row][k_pivot])

        self.mat_x1_t_a_x1 = matrix.mul_mat(zip(*x1), self.mat_a_x1)

        for i_row in range(0, len(self.mat_a) - 1):
            self.assertAlmostEqual(self.mat_x1_t_a_x[i_row][i_row],
                                   lamda1[i_row][i_row])

            for j_column in range(i_row * 1, len(self.mat_a)):
                self.assertAlmostEqual(self.mat_x1_t_a_x1[i_row][j_column],
                                       0.0)
    def test_jacobi_method_01(self):
        b_verbose = 0
        if b_verbose:
            print("test_jacobi_method_01")
        self.mat_lambda, self.mat_x = evp.jacobi_method(self.mat_h)
        if b_verbose:
            print("L =")
            matrix.show_mat(self.mat_lambda)
            print("X =")
            matrix.show_mat(self.mat_x)

        self.mat_x_transpose = matrix.transpose_mat(self.mat_x)
        self.mat_xt_h = matrix.mul_mat(self.mat_x_transpose, self.mat_h)
        self.mat_xt_h_x = matrix.mul_mat(self.mat_xt_h, self.mat_x)
        if b_verbose:
            print("XT A X")
            matrix.show_mat(self.mat_xt_h_x)

        n = len(self.mat_h)
        for i in range(n):
            for j in range(n):
                st = "XT A X [%d][%d] = %g" % (i, j, self.mat_xt_h_x[i][j], i,
                                               j, self.mat_lambda[i][j])
                self.assertAlmostEqual(self.mat_xt_h_x[i][j],
                                       self.mat_lambda[i][j],
                                       msg=st)
示例#4
0
    def test_jacobi_method(self):
        A = [[-1.0, -0.5, -0.2], [-0.5, -2.0, -1.0], [-0.2, -1.0, -3.0]]

        lamda1, x1 = ea.jacobi_method(A)
        self.assertEqual(len(A), len(lamda1))
        self.assertEqual(len(A[0]), len(lamda1[0]))
        self.assertEqual(len(A), len(x1))
        self.assertEqual(len(A[0]), len(x1[0]))

        Ax1 = la.multiply_matrix_matrix(A, x1)
        # check A V = Lambda V
        for k_pivot in xrange(len(A)):
            # diagonal term
            lambda_i = lamda1[k_pivot][k_pivot]

            # off diagonal
            for i_row in xrange(len(A)):
                self.assertAlmostEqual(Ax1[i_row][k_pivot],
                                       lambda_i * x1[i_row][k_pivot])

        # check VT A V = Lambda
        x1TAx1 = la.multiply_matrix_matrix(zip(*x1), Ax1)

        for i_row in xrange(0, len(A) - 1):
            # check diagonal
            self.assertAlmostEqual(x1TAx1[i_row][i_row], lamda1[i_row][i_row])
            # check off-diagonal
            for j_column in xrange(i_row + 1, len(A)):
                self.assertAlmostEqual(x1TAx1[i_row][j_column], 0.0)
示例#5
0
    def test_jacobi_method(self):
        A = [[-1.0, -0.5, -0.2],
             [-0.5, -2.0, -1.0],
             [-0.2, -1.0, -3.0]]

        lamda1, x1 = ea.jacobi_method (A)
        self.assertEqual(len(A), len(lamda1))
        self.assertEqual(len(A[0]), len(lamda1[0]))
        self.assertEqual(len(A), len(x1))
        self.assertEqual(len(A[0]), len(x1[0]))

        Ax1 = la.multiply_matrix_matrix(A, x1)
        # check A V = Lambda V
        for k_pivot in xrange(len(A)):
            # diagonal term
            lambda_i = lamda1[k_pivot][k_pivot]

            # off diagonal
            for i_row in xrange(len(A)):
                self.assertAlmostEqual(Ax1[i_row][k_pivot],lambda_i * x1[i_row][k_pivot])

        # check VT A V = Lambda
        x1TAx1 = la.multiply_matrix_matrix(zip(*x1), Ax1)

        for i_row in xrange(0, len(A) - 1):
            # check diagonal
            self.assertAlmostEqual(x1TAx1[i_row][i_row], lamda1[i_row][i_row])
            # check off-diagonal
            for j_column in xrange(i_row + 1, len(A)):
                self.assertAlmostEqual(x1TAx1[i_row][j_column], 0.0)
    def test_jacobi_metohd_00(self):
        b_verbose = 0
        if b_verbose:
            print("test_jacobi_method_00")

        self.mat_lambda, self.mat_x = evp.jacobi_method(self.mat_h)

        if b_verbose:
            print("X =")
            matrix.show.mat(self.mat_lambda)
            print("XT =")
            matrix.show_mat(self.mat_x)

        k = 0
        lam = self.mat_lambda[k][k]
        x0 = [row[0] for row in self.mat_x]

        x1 = matrix.mul_mat_vec(self.mat_h, x0)
        x0l = [lam * x0k for x0k in x0]

        self.assertSequenceAlmostEqual(x0l, x1)
 def test_jacobi_method_02(self):
     b_verbose = False
     self.mat_lambda, self.mat_x_t = evp.jacobi_method(self.mat_h, 1e-12)
     self.assertAlmostEqual(self.mat_lambda[0][0], 14.744562646538027)
     self.assertAlmostEqual(self.mat_lambda[1][1], 6.000000000000003)
     self.assertAlmostEqual(self.mat_lambda[2][2], 3.255437353461972)