Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Métodos Directos
int main()
{
float A[100][100],//Matriz de coeficientes
b[100],//Vector de resultados
s[100],
x[100];
floatpiv,aux;
intn,f,c,d;
//Triangulacion de la matriz
for (d=0;d<n;d++)
{
piv=A[d][d];
for (c=0;c<n;c++)
s[c]=A[d][c]/piv;
aux=b[d]/piv;
for (f=(d+1);f<n;f++)
{
piv=A[f][d];
for (c=d;c<n;c++)
A[f][c]=A[f][c]-piv*s[c];
b[f]=b[f]-piv*aux;
}
}
//Impresion de resultados
for(f=0;f<n;f++)
printf("%.4f ",x[f]);
printf("\n");
getchar( );
return 0;
int main(){
system("color f1");
int i,j,k,s;
float ml[100][100],coef,aux[100],elemento;
printf("\n****Bienvenido al Generador de Matrices Inversas****\n");
printf("***Por favor introduzca la dimension de la matriz***\n");
scanf("%i",&k);
for (i=0;i<k;i++)
{
for (j=0;j<k;j++)
{
printf("Ingrese el valor de [%i][%i]:",i,j);
scanf("%f",&ml[i][j]);
}
}
for (i=0;i<k;i++)
for(j=k;j<2*k;j++)
{
if(i==(j-k))
ml[i][j]=1;
else
ml[i][j]=0;
}
//Iteraciones
for (s=0;s<k;s++)
{
elemento=ml[s][s];
for (j=0;j<2*k;j++)
ml[s][j]=ml[s][j]/elemento;
for(i=0;i<k;i++)
{
if (i==s)
printf("\n");
else
{
coef= ml[i][s];
for (j=0;j<2*k;j++)
aux[j]=ml[s][j]*(coef*-1);
for (j=0;j<2*k;j++)
ml[i][j]=ml[i][j]+aux[j];
}
}
}
//Imprimir la matriz inversa
printf("\n\tLa matriz inversa es:\n");
for (i=0;i<k;i++)
{
for(j=k;j<2*k;j++)
printf(" [%f]\n ",ml[i][j]);
if (j==k)
printf("\n");
}
getchar();
return 0;
}
3. Método de Gauss-Jordan.
#include <stdlib.h>
int main()
b[100];//Vector de resultados
floatpiv,aux;
intn,f,c,d;
printf("METODO DE GAUSS-JORDAN\n\n");
for(f=0;f<n;f++)
for(c=0;c<n;c++)
printf("A[%d][%d]=",f+1,c+1);
scanf("%f",&A[f][c]);
for(c=0;c<n;c++)
printf("b[%d]=",c+1);
scanf("%f",&b[c]);
for (d=0;d<n;d++)
piv=A[d][d];
for (c=0;c<n;c++)
A[d][c]=A[d][c]/piv;
b[d]=b[d]/piv;
for (f=0;f<n;f++)
if (f!=d)
aux=A[f][d];
for (c=0;c<n;c++)
A[f][c]=A[f][c]-(aux*A[d][c]);
b[f]=b[f]-(aux*b[d]);
}
//Impresion de la matriz triangulada
for(f=0;f<n;f++)
for(c=0;c<n;c++)
printf("%.4f ",A[f][c]);
printf(" | %.4f\n",b[f]);
//Impresion de resultados
for(f=0;f<n;f++)
printf("%.4f ",b[f]);
printf("\n");
system("pause");
Métodos Factorizables:
4. Factorización LU
#include <stdio.h>
#include <stdlib.h>
int main()
U[100][100],
L[100][100],
b[100],//Vector de resultados
s[100];
floatpiv,aux;
intn,f,c,d,i;
scanf("%d",&n);
for(f=0;f<n;f++)
for(c=0;c<n;c++)
printf("A[%d][%d]=",f+1,c+1);
scanf("%f",&A[f][c]);
U[f][c]=A[f][c];
for(c=0;c<n;c++)
printf("b[%d]=",c+1);
scanf("%f",&b[c]);
for (f=0;f<n;f++)
for (c=0;c<n;c++)
L[f][c]=0;
for (d=0;d<n;d++)
piv=U[d][d];
L[d][d]=1;
for (c=0;c<n;c++)
s[c]=U[d][c]/piv;
for (i=d+1;i<n;i++)
L[i][d]=U[i][d]/U[d][d];
for (f=(d+1);f<n;f++)
piv=U[f][d];
for (c=d;c<n;c++)
U[f][c]=U[f][c]-piv*s[c];
for(f=0;f<n;f++)
for(c=0;c<n;c++)
printf("%.4f ",U[f][c]);
printf("\n");
for(f=0;f<n;f++)
for(c=0;c<n;c++)
printf("%.4f ",L[f][c]);
printf("\n");
}
//Determinacion de L*s=b mediante el metodo de gauss jordan
for (d=0;d<n;d++)
piv=L[d][d];
for (c=0;c<n;c++)
L[d][c]=L[d][c]/piv;
b[d]=b[d]/piv;
for (f=0;f<n;f++)
if (f!=d)
aux=L[f][d];
for (c=0;c<n;c++)
L[f][c]=L[f][c]-(aux*L[d][c]);
b[f]=b[f]-(aux*b[d]);
for (d=0;d<n;d++)
piv=U[d][d];
for (c=0;c<n;c++)
U[d][c]=U[d][c]/piv;
b[d]=b[d]/piv;
for (f=0;f<n;f++)
if (f!=d)
aux=U[f][d];
for (c=0;c<n;c++)
U[f][c]=U[f][c]-(aux*U[d][c]);
b[f]=b[f]-(aux*b[d]);
}
}
//Impresion de resultados
for(f=0;f<n;f++)
printf("%.4f ",b[f]);
printf("\n");
5. Factorización de Cholesky.
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
int main()
float A[100][100],
L[100][100],
InvL[100][100],
InvLT[100][100],
z[100],
b[100],
x[100],
s,
pivote,
aux;
intn,i,j,k,f,c,d;
scanf("%d",&n);
for(c=0;c<n;c++)
printf("A[%d][%d]=",f+1,c+1);
scanf("%f",&A[f][c]);
for(c=0;c<n;c++)
printf("b[%d]=",c+1);
scanf("%f",&b[c]);
//Determinacion de la Matriz L
L[0][0]=sqrt(A[0][0]);
i=1;
while(i<n)
L[i][0]=A[0][i]/L[0][0];
L[i][i]=0;
i++;
i=1;
while(i<n)
s=0;
k=0;
while(k<(i))
s=s+pow(L[i][k],2);
k++;
}
L[i][i]=sqrt(A[i][i]-s);
if (i==(n-1))
break;
else
j=i+1;
while(j<n)
s=0;
k=0;
while(k<(i))
s=s+L[i][k]*L[j][k];
k++;
L[j][i]=(A[i][j]-s)/L[i][i];
L[i][j]=0;
j++;
i++;
for(f=0;f<n;f++)
for(c=0;c<n;c++)
printf("%.4f ",L[f][c]);
printf("\n");
for(f=0;f<n;f++)
for(c=0;c<n;c++)
if(c==f)
InvL[f][c]=1;
else
InvL[f][c]=0;
for(d=0;d<n;d++)
pivote=A[d][d];
for(c=0;c<n;c++)
A[d][c]=A[d][c]/pivote;
InvL[d][c]=InvL[d][c]/pivote;
for(f=0;f<n;f++)
if (f==d)
f++;
aux=A[f][d];
for(c=0;c<n;c++)
A[f][c]=A[f][c]-(aux*A[d][c]);
InvL[f][c]=InvL[f][c]-(aux*InvL[d][c]);
for (f=0;f<n;f++)
for (c=0;c<n;c++)
z[f]=0;
for (d=0;d<n;d++)
z[f]=z[f]+InvL[f][d]*b[d];
}
//Transpuesta de L
for (f=0;f<n;f++)
for (c=0;c<n;c++)
InvLT[f][c]=InvL[c][f];
//Inversa de la transpuesta de L
for (f=0;f<n;f++)
for (c=0;c<n;c++)
x[f]=0;
for (d=0;d<n;d++)
x[f]=x[f]+InvLT[f][d]*b[d];
for(f=0;f<n;f++)
printf("%.4f ",x[f]);
printf("\n");
return(0);
}
Métodos Iterativos:
6. Método de Jacobi:
#include<stdio.h>
#include <stdlib.h>
#include <math.h>
int main(void)
float A[100][100],
Am[100][100],
b[100],
bm[100],
xo[100],
X[100],
E,
aux;
inti,j,k,n,flag=0,iter;
printf("METODO DE JACOBI\n\n");
scanf("%d",&n);
scanf("%f",&E);
for(i=0;i<n;i++)
for(j=0;j<n;j++)
printf("A[%d][%d]=",i+1,j+1);
scanf("%f",&A[i][j]);
printf("b[%d]=",i+1);
scanf("%f",&b[i]);
for(i=0;i<n;i++)
printf("Xo[%d]=",i+1);
scanf("%f",&xo[i]);
for (i=0;i<n;i++)
if(A[i][i]==0)
fflush(stdin);
getchar();
exit(1);
//Matriz modificada
for (i=0;i<n;i++)
aux=A[i][i];
for (j=0;j<n;j++)
if(i==j)
Am[i][j]=0;
else
Am[i][j]=A[i][j]/(0-aux);
//Vector de Resultados.
for (i=0;i<n;i++)
bm[i]=b[i]/A[i][i];
//Iteraciones
iter= 1;
do
//Multiplicacion
for(i=0;i<n;i++)
for (j=0;j<n;j++)
X[i]=0;
for (k=0;k<n;k++)
X[i]=X[i]+Am[i][k]*xo[k];
//Suma
for (i=0;i<n;i++)
X[i]=X[i]+bm[i];
for (i=0;i<n;i++)
if(fabs(X[i]-xo[i])<E)
flag=1;
printf("\n%d",iter);
for(i=0;i<n;i++)
printf(" X[%d]=%.4f",i+1,X[i]);
//Intercambio
for (i=0;i<n;i++)
xo[i]=X[i];
iter++;
}
while (flag==0);
for(i=0;i<n;i++)
printf("\nX[%d]=%.4f",i+1,X[i]);
return 0;
7.Método de Gauss-Seidel.
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main(void)
float A[100][100],
Am[100][100],
b[100],
bm[100],
xo[100],
X[100],
err[100],
E,
aux;
inti,j,k,n,l,flag=0,iter;
scanf("%d",&n);
scanf("%f",&E);
for(j=0;j<n;j++)
printf("A[%d][%d]=",i+1,j+1);
scanf("%f",&A[i][j]);
for(i=0;i<n;i++)
printf("b[%d]=",i+1);
scanf("%f",&b[i]);
for(i=0;i<n;i++)
printf("Xo[%d]=",i+1);
scanf("%f",&xo[i]);
for (i=0;i<n;i++)
if(A[i][i]==0)
fflush(stdin);
getchar();
exit(1);
//Matriz modificada
for (i=0;i<n;i++)
aux=A[i][i];
for (j=0;j<n;j++)
if(i==j)
Am[i][j]=0;
else
Am[i][j]=A[i][j]/(0-aux);
//Vector de Resultados.
for (i=0;i<n;i++)
bm[i]=b[i]/A[i][i];
//Iteraciones
iter= 1;
do
for (i=0;i<n;i++)
err[i]=xo[i];
//Multiplicacion y suma
for(i=0;i<n;i++)
X[i]=0;
for (k=0;k<n;k++)
X[i]=X[i]+Am[i][k]*xo[k];
X[i]=X[i]+bm[i];
xo[i]=X[i];
for (i=0;i<n;i++)
if(fabs(X[i]-err[i])<E)
flag=1;
printf("\n%d",iter);
for(i=0;i<n;i++)
printf(" X[%d]=%.4f",i+1,X[i]);
//Intercambio
for (i=0;i<n;i++)
xo[i]=X[i];
iter++;
if (iter==10) flag=1;
while (flag==0);
for(i=0;i<n;i++)
printf("\nX[%d]=%.4f",i+1,X[i]);
return 0;