Hướng dẫn adjoint matrix python

using System;

using System.Collections.Generic;

class GFG

{

static readonly int N = 4;

static void getCofactor[int [,]A, int [,]temp, int p, int q, int n]

{

    int i = 0, j = 0;

    for [int row = 0; row < n; row++]

    {

        for [int col = 0; col < n; col++]

        {

            if [row != p && col != q]

            {

                temp[i, j++] = A[row, col];

                if [j == n - 1]

                {

                    j = 0;

                    i++;

                }

            }

        }

    }

}

static int determinant[int [,]A, int n]

{

    int D = 0;

    if [n == 1]

        return A[0, 0];

    int [,]temp = new int[N, N];

    int sign = 1;

    for [int f = 0; f < n; f++]

    {

        getCofactor[A, temp, 0, f, n];

        D += sign * A[0, f] * determinant[temp, n - 1];

        sign = -sign;

    }

    return D;

}

static void adjoint[int [,]A, int [,]adj]

{

    if [N == 1]

    {

        adj[0, 0] = 1;

        return;

    }

    int sign = 1;

    int [,]temp = new int[N, N];

    for [int i = 0; i < N; i++]

    {

        for [int j = 0; j < N; j++]

        {

            getCofactor[A, temp, i, j, N];

            sign = [[i + j] % 2 == 0]? 1: -1;

            adj[j, i] = [sign] * [determinant[temp, N - 1]];

        }

    }

}

static bool inverse[int [,]A, float [,]inverse]

{

    int det = determinant[A, N];

    if [det == 0]

    {

        Console.Write["Singular matrix, can't find its inverse"];

        return false;

    }

    int [,]adj = new int[N, N];

    adjoint[A, adj];

    for [int i = 0; i < N; i++]

        for [int j = 0; j < N; j++]

            inverse[i, j] = adj[i, j]/[float]det;

    return true;

}

static void display[int [,]A]

{

    for [int i = 0; i < N; i++]

    {

        for [int j = 0; j < N; j++]

            Console.Write[A[i, j]+ " "];

        Console.WriteLine[];

    }

}

static void display[float [,]A]

{

    for [int i = 0; i < N; i++]

    {

        for [int j = 0; j < N; j++]

            Console.Write["{0:F6} ", A[i, j]];

        Console.WriteLine[];

    }

}

public static void Main[String[] args]

{

    int [,]A = { {5, -2, 2, 7},

                    {1, 0, 0, 3},

                    {-3, 1, 5, 0},

                    {3, -1, -9, 4}};

    int [,]adj = new int[N, N];

    float [,]inv = new float[N, N];

    Console.Write["Input matrix is :\n"];

    display[A];

    Console.Write["\nThe Adjoint is :\n"];

    adjoint[A, adj];

    display[adj];

    Console.Write["\nThe Inverse is :\n"];

    if [inverse[A, inv]]

        display[inv];

}

}

Chủ Đề