Exemplo n.º 1
0
        public Matrici ridicarelaputere(Matrici a, int p)
        {
            Matrici rez = a;

            while (p > 1)
            {
                a = a.inmultire(rez);
                p--;
            }
            return(a);
        }
Exemplo n.º 2
0
 public Matrici adunare(Matrici a)
 {
     if (a.n == this.n && a.m == this.m)
     {
         Matrici rez = new Matrici(n, m);
         for (int i = 0; i < n; i++)
         {
             for (int j = 0; j < m; j++)
             {
                 rez.mat[i, j] = mat[i, j] + a.mat[i, j];
             }
         }
         return(rez);
     }
     else
     {
         Console.WriteLine("Matricile nu se pot aduna. Nu au aceeasi dimensiune.");
         return(null);
     }
 }
Exemplo n.º 3
0
 public Matrici inmultire(Matrici a)
 {
     if (a.n == m)
     {
         Matrici rez = new Matrici(n, a.m);
         for (int i = 0; i < n; i++)
         {
             for (int j = 0; j < a.m; j++)
             {
                 rez.mat[i, j] = 0;
                 for (int k = 0; k < m; k++)
                 {
                     rez.mat[i, j] += mat[i, k] * a.mat[k, j];
                 }
             }
         }
         return(rez);
     }
     else
     {
         Console.WriteLine("Matricile nu se pot inmulti.");
         return(null);
     }
 }
Exemplo n.º 4
0
        static void Main(string[] args)
        {
            Console.WriteLine("Prima matrice este:");
            Matrici A = new Matrici(@"..\..\Matrice A.txt", true);

            foreach (string s in A.afisare())
            {
                Console.WriteLine(s);
            }
            Console.WriteLine();

            Console.WriteLine("A doua matrice este:");
            Matrici B = new Matrici(@"..\..\Matrice B.txt", true);

            foreach (string s in B.afisare())
            {
                Console.WriteLine(s);
            }
            Console.WriteLine();

            Console.WriteLine("Adunarea matricilor este:");
            Matrici C = A.adunare(B);

            foreach (string s in C.afisare())
            {
                Console.WriteLine(s);
            }
            Console.WriteLine();

            Console.WriteLine("Scaderea matricilor este:");
            Matrici D = A.scadere(B);

            foreach (string s in D.afisare())
            {
                Console.WriteLine(s);
            }
            Console.WriteLine();

            Console.WriteLine("Inmultirea matricilor este:");
            Matrici E = A.inmultire(B);

            foreach (string s in E.afisare())
            {
                Console.WriteLine(s);
            }
            Console.WriteLine();

            int p = 3;

            Console.WriteLine($"Ridicarea la puterea {p} a primei matrici este:");
            Matrici F = A.ridicarelaputere(A, p);

            foreach (string s in F.afisare())
            {
                Console.WriteLine(s);
            }
            Console.WriteLine();

            Console.WriteLine($"Ridicarea la puterea {p} a celei de-a doua matrice este:");
            Matrici G = B.ridicarelaputere(B, p);

            foreach (string s in G.afisare())
            {
                Console.WriteLine(s);
            }
            Console.WriteLine();

            Console.WriteLine($"Inversa primei matrici este:");
            Matrici H = A.inversa(A);

            foreach (string s in H.afisare())
            {
                Console.WriteLine(s);
            }
            Console.WriteLine();

            Console.WriteLine($"Inversa a celei de-a doua matrice este:");
            Matrici I = B.inversa(B);

            foreach (string s in I.afisare())
            {
                Console.WriteLine(s);
            }
            Console.WriteLine();
        }
Exemplo n.º 5
0
 public Matrici inversa(Matrici mat)
 {
     if (n == m)
     {
         double d = mat.determinant(this.mat, n);
         if (d != 0)
         {
             Matrici rez  = new Matrici(n, n);
             Matrici temp = new Matrici(n, n);
             //matricea transpusa
             for (int i = 0; i < n; i++)
             {
                 for (int j = 0; j < n; j++)
                 {
                     temp.mat[i, j] = mat.mat[j, i];
                 }
             }
             double aux;
             int    semn;
             //matricea adjuncta
             for (int i = 0; i < n; i++)
             {
                 for (int j = 0; j < n; j++)
                 {
                     //interschimb linia i cu ultima linie (n-1)
                     for (int k = 0; k < n; k++)
                     {
                         aux                = temp.mat[i, k];
                         temp.mat[i, k]     = temp.mat[n - 1, k];
                         temp.mat[n - 1, k] = aux;
                     }
                     //si coloana j cu ultima coloana (n-1)
                     for (int k = 0; k < n; k++)
                     {
                         aux                = temp.mat[k, j];
                         temp.mat[k, j]     = temp.mat[k, n - 1];
                         temp.mat[k, n - 1] = aux;
                     }
                     //stabilim semnul pentru permutarea liniilor si a
                     //coloanelor in matrice
                     semn = 1;
                     if (((n - 1 - i) % 2 == 0) && (i != n - 1))
                     {
                         semn *= -1;
                     }
                     if (((n - 1 - j) % 2 == 0) && (j != n - 1))
                     {
                         semn *= -1;
                     }
                     if ((i + j) % 2 == 1)
                     {
                         semn *= -1;
                     }
                     rez.mat[i, j] = semn * determinant(temp.mat, n - 1);
                     //refac matricea
                     for (int k = 0; k < n; k++)
                     {
                         aux                = temp.mat[i, k];
                         temp.mat[i, k]     = temp.mat[n - 1, k];
                         temp.mat[n - 1, k] = aux;
                     }
                     for (int k = 0; k < n; k++)
                     {
                         aux                = temp.mat[k, j];
                         temp.mat[k, j]     = temp.mat[k, n - 1];
                         temp.mat[k, n - 1] = aux;
                     }
                 }
             }
             //matricea inversa
             for (int i = 0; i < n; i++)
             {
                 for (int j = 0; j < n; j++)
                 {
                     rez.mat[i, j] /= d;
                 }
             }
             return(rez);
         }
         else
         {
             Console.WriteLine("Matricea nu este inversabila. Are determinantul nul.");
             return(null);
         }
     }
     else
     {
         Console.WriteLine("Matricea nu se poate inversa. Nu este patratica.");
         return(null);
     }
 }