Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
1.
Definici
on
..
..
..
..
.
.
.
.
A=
(1)
ai1 ai2 aij ain
.
..
..
..
..
.
.
.
am1 am2 amj amn
a1j
a2j
El vector renglon [ai1 , ai2 , . . . ain ] se llama renglon i y el vector columna . se llama columna j. La
..
amj
componente o elemento ij de A, denotado por aij , es el elemento que aparece en el renglon i y la columna
j de A.[1]
2.
2.1.
Operaciones Matriciales
Suma y resta de matrices
Sean A = (aij ) y B = (bij ) dos matrices mxn. Entonces la suma de A y B es la matriz mxn, A + B
dada por
a11 + b11
a12 + b12 a1n + b1n
a21 + b21
a22 + b22 a2n + b2n
A + B = (aij + bij ) =
..
..
..
.
.
.
am1 + bm1
1
am2 + bm2
amn + bmn
2 Operaciones Matriciales
a11 b11
a12 b12 a1n b1n
a21 b21
a22 b22 a2n b2n
A B = (aij bij ) =
..
..
..
.
.
.
am1 bm1
am2 bm2
amn bmn
Codificaci
on en C++: Suma
#include <iostream.h>
#include <conio.h>
int f,c,n,m;
main()
{
int a[10][10],b[10][10],d[10][10];
cout<<"\n\tM. en C. en Automatizacion y control";
cout<<"\n\tSimulacion y Programacion\n\n\t";
cout<<"Suma de matrices A nxm + B nxm\n\t";
cout<<"\nNumero de filas n de la matriz A y B : ";
cin>>n;
cout<<"\nNumero de columnas m de la matriz A y B : ";
cin>>m;
//introduce matriz a
cout<<"\n\n\tCapture la Matriz A";
for(f=0;f<n;f=f+1)
{
cout<<"\n";
for(c=0;c<m;c=c+1)
{
cout<<"\n\tIngrese elemento A["<<f<<"]["<<c<<"]: ";
cin>>a[f][c];
}
}
//getch(); //Enter para proseguir
//clrscr();
//introduce matriz b
cout<<"\n\n\tCapture la Matriz B";
for(f=0;f<n;f=f+1)
{
cout<<"\n";
for(c=0;c<m;c=c+1)
{
cout<<"\n\tIngrese elemento B["<<f<<"]["<<c<<"]: ";
cin>>b[f][c];
}
}
getch();
//Realiza la suma
for(f=0;f<n;f=f+1)
{
for(c=0;c<m;c=c+1)
{
2 Operaciones Matriciales
d[f][c]=a[f][c]+b[f][c];
}
}
cout<<"\n\n\tResultado: Mat A + Mat B:\n\n";
//imprime matriz d
for(f=0;f<n;f=f+1)
{
cout<<"\n";
for(c=0;c<m;c=c+1)
{
cout<<"\t\t"<<d[f][c];
}
}
getch();
}
2.1.2.
Codificaci
on en C++: Resta
#include <iostream.h>
#include <conio.h>
int f,c,n,m;
main()
{
int a[10][10],b[10][10],d[10][10];
cout<<"\n\tM. en C. en Automatizacion y control";
cout<<"\n\tSimulacion y Programacion\n\n\t";
2 Operaciones Matriciales
2 Operaciones Matriciales
2.2.
Multiplicaci
on por un escalar
Codificaci
on en C++
#include <iostream.h>
#include <conio.h>
#include <stdlib.h>
main()
{
int a[3][3],d[3][3];
int f,c,n,x;
cout<<"\n\tM. en C. Automatizacion y control\n\n\n\t";
cout<<"Multiplicacion de una matriz nxn por un escalar\n\t";
cout<<"\n\nDimension nxn de la matriz A: ";
cin>>n;
for(f=0;f<n;f=f+1)
{
for(c=0;c<n;c=c+1)
{
cout<<"\n\tIngrese elemento a["<<f<<"]<<["<<c<<"]: ";
cin>>a[f][c];
}
}
cout<<"\n\nIngrese el escalar alfa: ";
cin>>x;
getch();
//realiza la multiplicacion
for(f=0;f<n;f=f+1)
{
for(c=0;c<n;c=c+1)
2 Operaciones Matriciales
{
d[f][c]=a[f][c]*x;
}
}
cout<<"\n\n\tRESULTADO:";
//imprime matriz d
for(f=0;f<n;f=f+1)
{
cout<<"\n\n\n";
for(c=0;c<n;c=c+1)
{
cout<<"\t\t\t"<<d[f][c];
}
}
getch();
}
2.3.
Sea A = (a)ij una matriz mxn, y sea B = (b)ij una matriz nxp. Entonces el producto de A y B es
una matriz mxp, C = (cij ), donde
cij = (renglon i de A) (columna j de B)
Es decir, el elemento ij de AB es el producto del renglon i de A y la columna j de B.
Si el n
umero de columnas de A es igual al n
umero de renglones de B, entonces se dice que A y B son
compatibles bajo la multiplicaci
on.
2.3.1.
Codificaci
on en C++
#include <iostream.h>
#include <conio.h>
main()
{
int a[3][3],b[3][3],d[3][3];
int f,c,k,n;
2 Operaciones Matriciales
2 Operaciones Matriciales
2.4.
Sea A una matriz nxn. Entonces el determinante de A, denotado por det A o |A|, esta dado por
det A = |A| = a11 A11 + a12 A12 + a13 A13 + + a1n A1n =
a1k A1k
k=1
Codificaci
on en C++
#include<iostream.h>
#include<stdlib.h>
#include<time.h>
#include<conio.h>
int determinante(int a[][100],int orden);//prototipo de funcion
main()
{
cout<<"\n\tM. en C. en Automatizacion y control";
cout<<"\n\tSimulacion y Programacion\n\n\t";
int n;
int mat[100][100];
srand(time(NULL));
cout<<"\nIngrese el orden de la matriz A: ";cin>>n;
for(int j=0;j<n;j++)
{
2 Operaciones Matriciales
for(int i=0;i<n;i++)
{
cout<<"\n\tIngrese el elemento ["<<j<<"]["<<i<<"]: ";
cin>>mat[i][j];
}
}
getch();
cout<<"\nLa matriz ingresada es:"<<endl;
for(int j=0;j<n;j++)
{for(int i=0;i<n;i++)
cout<<mat[i][j]<<" ";
cout<<endl;
}
cout<<"\n\tEl determinante es: "<<determinante(mat,n)<<endl;
system("pause");
}
int determinante(int a[][100],int orden)
{
int det=0;
int aux1[100][100];
int aux2[100][100];
if(orden==1)
return a[0][0];
for(int i=0;i<orden;i++)
{
if(i%2==0)
{for(int y=0;y<orden;y++)
for(int x=0;x<orden;x++)
if(x<i)
aux1[x][y]=a[x][y+1];
else
aux1[x][y]=a[x+1][y+1];
det=det+a[i][0]*determinante(aux1,orden-1);
}
else
{for(int y=0;y<orden;y++)
for(int x=0;x<orden;x++)
if(x<i)
aux2[x][y]=a[x][y+1];
else
aux2[x][y]=a[x+1][y+1];
det=det-a[i][0]*determinante(aux2,orden-1);
}
}
return det;
}
2 Operaciones Matriciales
10
2.5.
Matriz de cofactores
Sea A una matriz de nxn. El cofactor ij de A, denotado por Aij esta dado por
Aij = (1)i+j | Mij |
Esto es, el cofactor ij de A se obtiene tomando el determinante del menor ij y multiplicandolo por
(1)i+j . Observe que
{
1,
si i + j es par
(1)i+j =
1, si i + j es impar
2.6.
Antes de utilizar determinantes para calcular las inversas, es necesario definir la adjunta de una matriz
A = (aij ). Sea B = (Aij ) la matriz de cofactores de A, entonces
B= .
(2)
..
..
..
.
.
An1
An2
Ann
La adjunta
Sea A una matriz de nxn y sea B, dada por (2), la matriz de sus cofactores. Entonces, la adjunta de A,
escrito adj A, es la transpuesta de la matriz B de nxn; es decir,
adj A = B T = .
..
.. .
..
.
.
A1n A2n Ann
2.7.
2 Operaciones Matriciales
11
Si A tiene inversa, entonces se dice que A es invertible. Una matriz cuadrada que no es invertible se le
denomina singular y un matriz que es invertible se le llama no singular.
Observaci
on I. A partir de esta definicion se deduce que (A1 )1 = A si A es invertible.
Observaci
on II. Esta definicion no establece que toda matriz cuadrada tiene inversa.
Teorema
Sea A una matriz de nxn. Entonces A es invertible si y solo si det A = 0. Si det A = 0, entonces
A1 =
1
adj A
det A
A continuaci
on se presenta el codigo programado en c++ para obtener la inversa de una matriz nxn.
Para ello se ha codificado el determinante, la matriz de cofactores, la matriz adjunta y finalmente la
inversa de la matriz.
2.7.1.
Codificaci
on en C++
#include<iostream.h>
#include<stdio.h>
#include<math.h>
#include<conio.h>
float determinante(float[25][25],float);
void cofactor(float[25][25],float);
void transpuesta(float[25][25],float[25][25],float);
int main()
{
float a[25][25],k,d;
int i,j;
cout<<"\n\tM. en C. en Automatizacion y
control";
cout<<"\n\tSimulacion y Programacion\n\n\t";
printf("\n Inversa de una Matriz nxn\n\n");
printf("Ingrese el orden de la Matriz : ");
scanf("%f",&k);
for (i=0;i<k;i++)
{
for (j=0;j<k;j++)
{
cout<<"\n\tIngrese el elemento ["<<i<<"]["<<j<<"]: ";
cin>>a[i][j];
}
}
d=determinante(a,k);
printf("\n\nDeterminante de la matriz = %f",d);
if (d==0)
printf("\nLa matriz es singular (No posee inversa)e\n");
else
cofactor(a,k);
getch();
}
Funci
on para el c
alculo del determinante.
2 Operaciones Matriciales
if (k==1)
{
return (a[0][0]);
}
else
{
det=0;
for (c=0;c<k;c++)
{
m=0;
n=0;
for (i=0;i<k;i++)
{
for (j=0;j<k;j++)
{
b[i][j]=0;
if (i != 0 && j != c)
{
b[m][n]=a[i][j];
if (n<(k-2))
n++;
else
{
n=0;
m++;
}
}
}
}
det=det + s * (a[0][c] * determinante(b,k-1));
s=-1 * s;
}
}
return (det);
}
Funci
on para el c
alculo del cofactor de la matriz.
void cofactor(float num[25][25],float f)
{
float b[25][25],fac[25][25];
int p,q,m,n,i,j;
for (q=0;q<f;q++)
{
for (p=0;p<f;p++)
{
m=0;
n=0;
for (i=0;i<f;i++)
{
for (j=0;j<f;j++)
{
if (i != q && j != p)
{
b[m][n]=num[i][j];
12
2 Operaciones Matriciales
if (n<(f-2))
n++;
else
{
n=0;
m++;
}
}
}
}
fac[q][p]=pow(-1,q + p) * determinante(b,f-1);
}
}
transpuesta(num,fac,f);
}
//Transpuesta
Funci
on para el c
alculo de la transpuesta de la matriz de cofactores (Matriz Adjunta).
void transpuesta(float num[25][25],float fac[25][25],float r)
{
int i,j;
float b[25][25],inversa[25][25],d;
for (i=0;i<r;i++)
{
for (j=0;j<r;j++)
{
b[i][j]=fac[j][i];
}
}
d=determinante(num,r);
for (i=0;i<r;i++)
{
for (j=0;j<r;j++)
{
inversa[i][j]=b[i][j] / d;
}
}
Muestra la matriz inversa resultante.
13
2 Operaciones Matriciales
14
La inversa resultante con el codigo programado en c++ es identica al resultado entregado en matlab,
con lo cual se comprueba el correcto funcionamiento del programa codificado.
Referencias