Esempio n. 1
0
 public void restarle(Matriz m)
 {
     for (int i = 0; i < this.matriz.GetLength(0); i++)
     {
         for (int j = 0; j < this.matriz.GetLength(1); j++)
         {
             this.matriz[i, j] -= m.matriz[i, j];
         }
     }
 }
Esempio n. 2
0
        static void Main(string[] args)
        {
            Matriz ma = new Matriz();

            ma.Cargar();
            ma.CalcularSumaSueldos();
            ma.ImprimirTotalPagado();
            ma.EmpleadoMayorSueldo();
            Console.ReadKey();
        }
Esempio n. 3
0
        // Funcion para obtener una matriz identidad.
        // Recibe como parametro el numero de filas y
        // columnas de la matriz identidad deseada.
        public static Matriz Identity(int n)
        {
            Matriz I = new Matriz(n);

            for (int i = 0; i < I.rows; i++)
            {
                I.Append(i, i, 1);
            }

            return(I);
        }
Esempio n. 4
0
//fin del metodo mostrar

        public static Matriz operator +(Matriz m1, Matriz m2)
        {
            Matriz o1 = new Matriz();

            for (int i = 0; i < o1.n; i++)
            {
                for (int j = 0; j < o1.n; j++)
                {
                    o1.v[i, j] = m1.v[i, j] + m2.v[i, j];
                }
            }
            return(o1);
        }
Esempio n. 5
0
        // Funcion que devuelve la transpuesta de una matriz
        public Matriz Transpose()
        {
            Matriz T = new Matriz(columns, rows);

            for (int i = 0; i < T.rows; i++)
            {
                for (int j = 0; j < T.columns; j++)
                {
                    T.Append(i, j, Get(j, i));
                }
            }

            return(T);
        }
Esempio n. 6
0
        // Funcion para obtener una copia del
        // objeto Matriz.
        public Matriz Copy()
        {
            Matriz copy = new Matriz(rows, columns);

            for (int i = 0; i < rows; i++)
            {
                for (int j = 0; j < columns; j++)
                {
                    copy.Append(i, j, matriz[i, j]);
                }
            }

            return(copy);
        }
Esempio n. 7
0
        //Método que obtiene la matriz diagonal de otra matriz dada
        public static Matriz DiagonalNormal(Matriz A)
        {
            Matriz Resultado = new Matriz(4, 4);     //Instaciamos una matriz de 4x4

            for (int i = 0; i < 4; i++)
            {
                for (int j = 0; j < 4; j++)
                {
                    if (j == i)
                    {
                        Resultado.Append(i, j, A.Get(i, j));     //Obtenemos los valores de la diagonal
                    }
                }
            }
            return(Resultado);    //Retornamos la matriz diagonal
        }
Esempio n. 8
0
 // Funcion que recibe como parametro un objeto
 // de la clase Matriz y se suman los valores de
 // ambas matrices.
 public void Add(Matriz B)
 {
     if (rows == B.rows && columns == B.columns)
     {
         for (int i = 0; i < rows; i++)
         {
             for (int j = 0; j < columns; j++)
             {
                 matriz[i, j] += B.Get(i, j);
             }
         }
     }
     else
     {
         Console.WriteLine("\nError: Las matrices no son cuadradas, no se pueden sumar ):");
     }
 }
Esempio n. 9
0
        // Funcion para calcular la matriz triangular superior.
        public static Matriz Triangular(Matriz A)
        {
            // Matriz resultante
            Matriz B = A.Copy();

            for (int i = 0; i < B.rows; i++)
            {
                for (int j = 0; j < B.columns - 1; j++)
                {
                    // Se realizan las operaciones de acuerdo
                    // a la diagonal de la matriz.
                    if (i == j && B.Get(i, j) != 0)
                    {
                        // Se colocan ceros abajo de cada valor de
                        // la diagonal.
                        for (int k = i + 1; k < B.rows; k++)
                        {
                            // Vector que guardará el resultado
                            // de la operacion entre reglones.
                            Vector result;
                            // Obtengo la fila de la matriz
                            Vector row = B.Get(i);
                            // Fila en donde se colocará un cero.
                            Vector nextRow = B.Get(k);

                            // Se realiza la operacion
                            row.Mult(-1 * B.Get(k, j) / B.Get(i, j));
                            result = Vector.Add(row, nextRow);

                            //Console.Write($"\n{-1*B.Get(k, j)}/{B.Get(i, j)} * R[{i}] + R[{k}] = ");
                            //result.Print();

                            // Se insertan los nuevos valores de la fila
                            // de la matriz.
                            B.Insert(result, k);

                            //Console.WriteLine("\n Resultado Matriz = \n");

                            //B.Print();
                        }
                    }
                }
            }
            // Se devuelve la matriz triangular
            return(B);
        }
Esempio n. 10
0
        // Funcion que devuelve la matriz dominante
        public static Matriz Dominante(Matriz A)
        {
            Matriz Resultado = A;                  //Instaciamos una matriz de resultados

            double dd = 0, suma, aux = 0, may = 0; //Declaramos variables
            int    ind = 0;

            for (int k = 0; k < 4; k++)
            {
                may = Math.Abs(Resultado.Get(k, k)); //Se declara el mayor en función de la diagonal

                for (int l = k + 1; l < 4; l++)
                {
                    if (may < Math.Abs(Resultado.Get(l, k))) //Busca el valor mayor de cada fila de la columna dada
                    {
                        may = Math.Abs(Resultado.Get(l, k));
                        ind = l; //Guardamos el indice del mayor
                    }
                }

                suma = 0;
                for (int j = 0; j < 4; j++)
                {
                    if (k == j)
                    {
                        dd = Math.Abs(Resultado.Get(k, j)); //Obtenemos el mayor de cada fila
                    }
                    else
                    {
                        suma = suma + Math.Abs(Resultado.Get(k, j)); //Sumatoria de los valores restantes de la fila
                    }
                }

                if (dd < suma) //Criterio de convergencia
                {
                    for (int i = 0; i < 4; i++)
                    {
                        aux = Resultado.Get(k, i); //Canbiamos los valores entre las filas
                        Resultado.Append(k, i, Resultado.Get(ind, i));
                        Resultado.Append(ind, i, aux);
                    }
                }
            }

            return(Resultado);
        }//Fin método dominante
Esempio n. 11
0
        static void Main(string[] args)
        {
            Matriz A = new Matriz(2, 3);

            for (int i = 0; i < 6; i++)
            {
                A.SetElemento(i / 3, i % 3, (i + 1) / 3.0);
            }
            Console.WriteLine("Impresión de la matriz A");
            A.imprimir("0.000");
            double[,] aux = new double[, ] {
                { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 }
            };
            Matriz B = new Matriz(aux);

            Console.WriteLine("\nImpresión de la matriz B");
            B.imprimir();
            Console.WriteLine("\nAcceso al elemento B[1,2]={0}", B.GetElemento(1, 2));
            Console.Write("\nfila 1 de A: ");
            foreach (double d in A.GetFila(1))
            {
                Console.Write("{0:0.0} ", d);
            }
            Console.Write("\n\nColumna 0 de B: ");
            foreach (double d in B.GetColumna(0))
            {
                Console.Write("{0} ", d);
            }
            Console.Write("\n\nDiagonal principal de B: ");
            foreach (double d in B.GetDiagonalPrincipal())
            {
                Console.Write("{0} ", d);
            }
            Console.Write("\n\nDiagonal secundaria de B: ");
            foreach (double d in B.GetDiagonalSecundaria())
            {
                Console.Write("{0} ", d);
            }
            A.multiplicarPor(B);
            Console.WriteLine("\n\nA multiplicado por B");
            A.imprimir();
            Console.WriteLine("Presione cualquier tecla para finalizar...");
            Console.ReadKey();
        }
Esempio n. 12
0
        public void multiplicarPor(Matriz m)
        {
            double total;
            Matriz matriz_aux = new Matriz(this.matriz.GetLength(0), this.matriz.GetLength(1));

            for (int i = 0; i < this.matriz.GetLength(0); i++)
            {
                for (int j = 0; j < this.matriz.GetLength(1); j++)
                {
                    total = 0;
                    for (int k = 0; k < this.matriz.GetLength(1); k++)
                    {
                        total = total + (this.matriz[i, k] * m.matriz[k, j]);
                    }
                    matriz_aux.matriz[i, j] = total;
                }
            }
            this.matriz = matriz_aux.matriz;
        }
Esempio n. 13
0
        // Método que retorna la diagonal inversa de una matriz
        public static Matriz Diagonal(Matriz A)
        {
            Matriz Resultado = new Matriz(A.rows, A.columns);     //Instaciamos una matriz de n x n

            for (int i = 0; i < 4; i++)
            {
                for (int j = 0; j < 4; j++)
                {
                    if (j != i)                    //Busca que el valor de la fila sea el mismo que la columna
                    {
                        Resultado.Append(i, j, 0); //De ser así, asignamos el valor cero
                    }
                    else
                    {
                        Resultado.Append(i, j, 1 / A.Get(i, j));   //De no ser asi asignamos la inversa de la matriz, cumpliendo que (A^-1) * (A) = I
                    }
                }
            }
            return(Resultado);    //Retorna la matriz del resultado
        }
Esempio n. 14
0
        //Método que devuelve una matriz triangular inferior
        public static Matriz TriangularInferior(Matriz A)
        {
            Matriz Resultado = new Matriz(A.rows, A.columns); //Instaciamos una matriz de n x n

            for (int i = 0; i < 4; i++)
            {
                for (int j = 0; j < 4; j++) //Busca que el valor de la columna sea mayor que el de la fila
                {
                    if (j > i)
                    {
                        Resultado.Append(i, j, 0); //De ser así, asignamos el valor cero
                    }
                    else
                    {
                        Resultado.Append(i, j, A.Get(i, j)); //De no cumplirse, asignamos el valor que contiene en esa posición
                    }
                }
            }
            return(Resultado); //Retornamos el valor de matriz resultado
        }
Esempio n. 15
0
        // Funcion para obtener una matriz identidad.
        // Recibe como parametro el numero de filas y
        // columnas de la matriz identidad deseada.
        public static Matriz Combine(Matriz A, Matriz B)
        {
            Matriz AB = new Matriz(A.rows, A.columns * 2);

            for (int i = 0; i < AB.rows; i++)
            {
                for (int j = 0; j < AB.columns; j++)
                {
                    if (j >= AB.columns / 2)
                    {
                        AB.Append(i, j, B.Get(i, j % A.columns));
                    }
                    else
                    {
                        AB.Append(i, j, A.Get(i, j));
                    }
                }
            }

            return(AB);
        }
Esempio n. 16
0
        public static void Main(string[] args)
        {
            Matriz m1 = new Matriz();

            Console.WriteLine("Datos de la matriz m1");
            m1.cargar();
            Console.WriteLine("Matriz m1");
            m1.mostrar();

            Console.WriteLine("Datos de la matriz m1");
            Matriz m2 = new Matriz();

            m2.cargar();
            Console.WriteLine("Matriz m2");
            m2.mostrar();
            Matriz m3;

            m3 = m1 + m2;
            Console.WriteLine("Resultado de la suma de m1 y m2");
            m3.mostrar();
            Console.ReadKey();
        }
Esempio n. 17
0
        public static Matriz Inverse(Matriz A)
        {
            if (A.rows == A.columns)
            {
                if (Matriz.Determinant(A) != 0)
                {
                    // Agrego a la matriz una matriz identidad
                    Matriz B = Combine(A, Matriz.Identity(A.rows));
                    // Creo la matriz que guardará la matriz inversa
                    Matriz inverse = new Matriz(A.rows, A.columns);

                    // Se realiza la eliminacion por Gauss-Jordan
                    B = Matriz.GaussJordan(B);

                    // Se extrae solo la matriz identidad que
                    // fue agregada a la matriz. Esta tendrá
                    // los valores de la matriz inversa.
                    for (int i = 0; i < B.rows; i++)
                    {
                        for (int j = B.columns / 2; j < B.columns; j++)
                        {
                            inverse.Append(i, j % A.columns, B.Get(i, j));
                        }
                    }
                    return(inverse);
                }
                else
                {
                    Console.WriteLine("Error: el determinante de la matriz es 0 ):");
                    return(null);
                }
            }
            else
            {
                Console.WriteLine("Error: la matriz no es cuadrada ):");
                return(null);
            }
        }
Esempio n. 18
0
        // Funcion que recibe como parametros dos matrices
        // A y B. Devuelve la suma de ambas.
        public static Matriz Add(Matriz A, Matriz B)
        {
            if (A.rows == B.rows && A.columns == B.columns)
            {
                // Matriz que guardará el resultado de la suma
                Matriz C = new Matriz(A.rows, B.columns);

                for (int i = 0; i < A.rows; i++)
                {
                    for (int j = 0; j < A.columns; j++)
                    {
                        C.matriz[i, j] = A.Get(i, j) + B.Get(i, j);
                    }
                }

                return(C);
            }
            else
            {
                Console.WriteLine("\nError: Las matrices no son cuadradas, no se pueden sumar ):");
                return(null);
            }
        }
Esempio n. 19
0
        // Funcion que recibe como parametros dos matrices
        // A y B. Devuelve la multiplicación de ambas. 3 x 3 - 3 x 1
        public static Vector Mult(Matriz A, Vector B)
        {
            if (A.columns == B.len)
            {
                Vector C = new Vector(A.rows);

                for (int i = 0; i < A.rows; i++)
                {
                    double sum = 0;
                    for (int j = 0; j < A.columns; j++)
                    {
                        sum += A.Get(i, j) * B.vector[j];
                    }
                    C.vector[i] = sum;
                }

                return(C);
            }
            else
            {
                Console.WriteLine("\nError: La cantidad de columnas de la matriz debe ser igual a la cnatidad de elementos del vector.");
                return(null);
            }
        }
Esempio n. 20
0
        // Metodo de eliminacion de Gauss-Jordan
        public static Matriz GaussJordan(Matriz A)
        {
            // Matriz resultante
            Matriz B = A.Copy();

            for (int i = 0; i < B.rows; i++)
            {
                for (int j = 0; j < B.columns; j++)
                {
                    // Se realizan las operaciones de acuerdo
                    // a la diagonal de la matriz.
                    if (i == j)
                    {
                        if (B.Get(i, j) != 1)
                        {
                            // Si el elemento en la diagonal es un 0
                            // se intercambia el renglon por otro.
                            if (B.Get(i, j) == 0)
                            {
                                for (int f = i; f < B.rows; f++)
                                {
                                    if (B.Get(f, j) == 1 || B.Get(f, j) != 0)
                                    {
                                        //Console.WriteLine("\nSe intercambian renglones");
                                        //Console.Write($"\nR[{i}] -> R[{f}]");
                                        //Console.WriteLine("\nResultado: \n");
                                        Vector aux = B.Get(i);
                                        B.Insert(B.Get(f), i);
                                        B.Insert(aux, f);
                                        //B.Print();
                                        break;
                                    }
                                }
                            }

                            // Se obtiene la fila de la matriz
                            Vector row = B.Get(i);

                            //Console.Write($"\nR[{i}]/{B.Get(i, j)} = ");

                            // Se divide el valor de la diagonal
                            // entre si mismo para obtener un pivote.
                            row.Div(B.Get(i, j));

                            //row.Print();

                            // Se insertan los nuevos valore de
                            // la fila a la matriz.
                            B.Insert(row, i);
                            //B.Print();
                        }

                        // Se colocan ceros arriba y abajo de cada
                        //valor de la diagonal de la matriz
                        for (int k = 1; k < B.rows; k++)
                        {
                            // Si el valor que está debajo o arriba
                            // del valor de la diagonal es diferente
                            // de cero, se realizan las operaciones
                            // entre renglones para obtener un cero.
                            if (B.Get((i + k) % B.rows, j) != 0)
                            {
                                // Vector que guardará el resultado
                                // de la operacion entre reglones.
                                Vector result;
                                // Obtengo la fila de la matriz
                                Vector row = B.Get(i);
                                // Fila en donde se colocará un cero.
                                Vector nextRow = B.Get((i + k) % B.rows);

                                // Se realiza la operacion
                                row.Mult(-1 * B.Get((i + k) % B.rows, j));
                                result = Vector.Add(row, nextRow);

                                //Console.Write($"\n-{B.Get((i + k) % B.rows, j)} * R[{i}] + R[{(i + k) % B.rows}] = ");
                                //result.Print();

                                // Se insertan los nuevos valores de la fila
                                // de la matriz.
                                B.Insert(result, (i + k) % B.rows);

                                //Console.WriteLine("\n Resultado Matriz = \n");

                                //B.Print();
                            }
                        }
                    }
                }
            }

            return(B);
        }
Esempio n. 21
0
 private void btnCreate_Click(object sender, EventArgs e)
 {
     matriz = new Matriz(Convert.ToInt32(txtSize.Text));
 }
Esempio n. 22
0
 public Form1()
 {
     InitializeComponent();
     matriz = new Matriz(5, 5);
 }