using System;
using System.Collections.Generic;
using System.Text;
namespace Matrices
{
public class clsMatriz
{
private double[,] mat;
private int fila, colum;
public clsMatriz()
{
}
public clsMatriz(int f, int c)
{
fila = f;
colum = c;
mat = new double[fila, colum];
}
public void leerMatriz()
{
for (int i = 1; i <= fila; i++)
{
for (int j = 1; j <= colum; j++)
{
Console.WriteLine("Ingrese el valor en la posicion [" + i + ", " + j + "]");
mat[i - 1, j - 1] = Convert.ToInt32(Console.ReadLine());
}
}
}
public override string ToString()
{
return Matriz();
}
public static clsMatriz operator +(clsMatriz mat1, clsMatriz mat2)
{
int fmat1 = mat1.fila;
int cmat1 = mat1.colum;
int fmat2= mat2.fila;
int cmat2 = mat2.colum;
clsMatriz suma = new clsMatriz(fmat1, cmat2);
if ((fmat1 == fmat2) && (cmat1 == cmat2))
{
for (int i = 1; i <= suma.fila; i++)
{
for (int j = 1; j <= suma.colum; j++)
{
suma.mat[i - 1, j - 1] = mat1.mat[i - 1, j - 1] + mat2.mat[i - 1, j - 1];
}
}
}
return suma;
}
public static clsMatriz operator -(clsMatriz mat1, clsMatriz mat2)
{
int fmat1 = mat1.fila;
int cmat1 = mat1.colum;
int fmat2 = mat2.fila;
int cmat2 = mat2.colum;
clsMatriz resta = new clsMatriz(fmat1, cmat1);
if ((fmat1 == fmat2) && (cmat1 == cmat2))
{
for (int i = 1; i <= resta.fila; i++)
{
for (int j = 1; j <= resta.colum; j++)
{
resta.mat[i - 1, j - 1] = mat1.mat[i - 1, j - 1] - mat2.mat[i - 1, j - 1];
}
}
}
return resta;
}
public static clsMatriz operator *(clsMatriz mat1, clsMatriz mat2)
{
int fmat1 = mat1.fila;
int cmat1 = mat1.colum;
int fmat2 = mat2.fila;
int cmat2 = mat2.colum;
int aux;
clsMatriz multiplicacion = new clsMatriz(fmat1, cmat2);
if (cmat1 == fmat2)
{
for (int i = 0; i < multiplicacion.fila; i++)
{
aux = 0;
for (int j = 0; j < multiplicacion.colum; j++)
{
for (int k = 0; k < cmat1; k++)
{
multiplicacion.mat[i, j] = multiplicacion.mat[i, j] + (mat1.mat[i, k] * mat2.mat[k, j]);
}
}
}
}
return multiplicacion;
}
public static clsMatriz operator *(int num, clsMatriz mat1)
{
int fmat1 = mat1.fila;
int cmat1 = mat1.colum;
int aux;
clsMatriz escalar = new clsMatriz(fmat1, cmat1);
for (int i = 0; i < escalar.fila; i++)
{
aux = 0;
for (int j = 0; j < escalar.colum; j++)
{
escalar.mat[i, j] = mat1.mat[i, j] * num;
}
}
return escalar;
}
public double CalculaDeterminante(clsMatriz mat1)
{
int fmat1 = mat1.fila;
int cmat1 = mat1.colum;
double temp = 1, temp1 = 1, temp2 = 1, det = 0;
for (int i = 0; i < mat1.fila; i++)
{
for (int j = 0; j < mat1.colum; j++)
{
if (i == j)
{
temp = mat1.mat[i, j];
temp1 = temp * temp1;
}
else
{
temp = mat1.mat[i, j];
temp2 = temp * temp2;
}
}
}
det = temp1 - temp2;
return det;
}
public clsMatriz MatrizInversa(clsMatriz mat1)
{
int fmat1 = mat1.fila;
int cmat1 = mat1.colum;
clsMatriz inversa = new clsMatriz(fmat1, cmat1);
for (int i = 0; i < mat1.fila; i++)
{
for (int j = 0; j < mat1.colum; j++)
{
try
{
inversa.mat[i, j] = mat1.mat[i, j] / CalculaDeterminante(mat1);
}
catch (DivideByZeroException)
{
Console.WriteLine("No se puede realizar la division por 0");
}
}
}
return inversa;
}
public clsMatriz MatrizTranspuesta(clsMatriz mat1)
{
int fmat1 = mat1.fila;
int cmat1 = mat1.colum;
clsMatriz transpuesta = new clsMatriz(cmat1, fmat1);
for (int i = 0; i < mat1.fila; i++)
{
for (int j = 0; j < mat1.colum; j++)
{
transpuesta.mat[j, i] = mat1.mat[i, j];
}
}
return transpuesta;
}
public clsMatriz MatrizIdentidad(clsMatriz mat1)
{
clsMatriz inv=new clsMatriz();
inv = MatrizInversa(mat1);
int fmatinv = inv.fila;
int cmatinv = inv.colum;
int fmat1 = mat1.fila;
int cmat1 = mat1.colum;
int aux;
clsMatriz identidad = new clsMatriz(fmat1, cmat1);
for (int i = 0; i < identidad.fila; i++)
{
for (int j = 0; j < identidad.colum; j++)
{
for (int k = 0; k < cmatinv; k++)
{
identidad.mat[i, j] = identidad.mat[i, j] + (mat1.mat[i, k] * inv.mat[k, j]);
}
}
}
return identidad;
}
public string Matriz()
{
string cad = "", cad1 = "", cad2 = "";
for (int i = 1; i <= fila; i++)
{
for (int j = 1; j <= colum; j++)
{
cad = "" + mat[i - 1, j - 1] + "\t";
cad1 = cad1 + cad;
}
cad1 = cad1 + "\n";
cad2 = cad2 + cad1;
}
return cad1;
}
}
}
jueves, 23 de octubre de 2008
Suscribirse a:
Enviar comentarios (Atom)
No hay comentarios:
Publicar un comentario