979 225 55
225 55 15
55 15 6
y C=
(
(
(
100
150
100
En el mtodo de Cholesky el primer paso es encontrar la matriz L usando las frmulas
ii
i
j
kj ij ki
ki
l
l l a
l
=
1
1
Y
=
=
1
1
2
k
j
kj kk kk
l a l
La primera ecuacin se usa para elementos fuera de la diagonal y la segunda para elementos en la
diagonal principal.
Entonces.
6
11 11
= = a l = 2.4495
4495 . 2
15
11
21
21
= =
l
a
l = 6.1237
4495 . 2
55
11
31
21
= =
l
a
l = 22.454 Ya sabemos que l
12
= 0
2 2
21 22 22
1237 . 6 55 = = l a l = 4.1833
1833 . 4
) 454 . 22 )( 1237 . 6 ( 55
22
31 21 32
32
=
=
l
l l a
l = 20.916
De igual forma l
13
= l
23
= 0 y
) 916 . 20 454 . 22 ( 979 ) (
2 2 2
32
2
31 33 33
+ = + = l l a l = 6.1106
La matriz L es igual a
(
(
(
=
1106 . 6 916 . 20 454 . 22
0 1833 . 4 1237 . 6
0 0 4495 . 2
L
En el mtodo de Cholesky U = L
T
(
(
(
=
1106 . 6 0 0
916 . 20 1833 . 4 0
454 . 22 1237 . 6 4495 . 2
U
El siguiente paso es encontrar el vector D de la misma manera que en el mtodo de
descomposicin de LU
ii
i
j
j ij i
i
l
d l c
d
=
1
1
4495 . 2
100
11
1
1
= =
l
c
d =40.8246
1833 . 4
) 8246 . 40 )( 1237 . 6 ( 150
22
1 21 2
2
=
=
l
d l c
d =-23.9045
1106 . 6
) 9045 . 23 )( 916 . 20 ( ) 8246 . 40 )( 454 . 22 (( 100 ) (
33
2 32 1 31 3
3
+
=
+
=
l
d l d l c
d =-51.826
Finalmente se calcula el vector de incgnitas comenzando por la ltima x.
ii
n
i j
j ij i
i
u
x u d
x
+ =
=
1
33
3
3
u
d
x = =-8.481
22
3 23 2
2
u
x u d
x
= =
= 36.69897
11
3 13 2 12 1
1
) (
u
x u x u d
x
+
= =
= 2.685
Ejemplo 2 del mtodo de Cholesky
(
)(
) (
(
)(
) (
(
)(
) (
Ejemplo 3 del mtodo de Cholesky
(
)(
) (
)
(
)(
) (
)(
) (
Ejemplo 4 del mtodo de Cholesky
(
)(
) (
)
(
)
(
)
(
)(
) (
(
)(
) (
Ejemplo 5 del mtodo de Cholesky
(
)(
) (
)
(
)
(
)
(
)(
) (
(
)(
) (
Ejemplo 1 del mtodo de LU
Problema: Encontrar los valores de
Solucion
(
) (
)
Iteracion 1.
Se escuentra el valor de .
(
)
(
)
(
) (
)
Despejamos a de
(
)(
) (
El paso siguiente es econtrar a
.
Realizamos .
(
)(
) (
Ejemplo 2 del mtodo de LU
Problema: Encontrar los valores de
(
) (
)
(
)
(
)
(
) (
)
(
)(
) (
(
)(
) (
Ejemplo 3 del mtodo de LU
Problema: Encontrar los valores de
) (
)
(
)
(
) (
)
(
)(
) (
)(
) (
Ejemplo 4 del mtodo de LU
Problema: Encontrar los valores de
(
) (
)
(
)
(
)
(
) (
)
(
)(
) (
(
)(
) (
Ejemplo 5 del mtodo de LU
Problema: Encontrar los valores de
(
) (
)
(
)
(
)
(
) (
)
(
)(
) (
(
)(
) (
Algoritmo de programa.
Mtodo de
Lu. Inicio.
Ingresar el nmero de
ecuaciones n, las
constantes de la matriz A
igualadas a b. A,n,b.
A
Figura 1.4.
K=1, n-1
K=1, n-1
Factor=
=Factor
J=k+1, n
=Factor
i=2, n
Sum=bi
j=1, i-1
Sum=Sum-
*bi
bi=sum
I= 1, n J=i+1, n
I=n-1, 1, -1
Sum=0
Sum=Sum+
Fin.
Figura 1.5.
J = 1
I = J+1
J = J+1
INICIO
Ingresa:
MAT [S]nxn
MUD
J<=
MUD+1 ?
N S
Q = J-MUD Q = 1
I = I+1
J >
MUD+1 ?
N
o
S
i
R = J-MUD R = 1
I >N
?
J>N
?
FIN
N
N
S
S
Prueba de escritorio.
Figura 1.6.
Figura 1.7.
Programa del mtodo.
//Mtodo de LU.
#include<stdlib.h>
#include<math.h>
#include<string.h>
#include <iostream>
#include <conio.h>
using namespace std;
int main()
{
int n,m,i,j,k;
float a[35][36],b[35][36],apoyo;
do
{
system("cls");
cout<<"\nMETODO DE LU"<<endl;
cout<<"\nIngrese el numero de Ecuaciones = ";
cin>>n;
cout<<"\nIngrese coeficientes\n";
/* Datos para iniciar mtodo */
for(i=1;i<=n;i++)
{
cout<<"\nFila"<<i<<endl;
for(j=1;j<=n+1;j++)
{
cout<<"Ingrese a("<<i<<","<<j<<") = ";
cin>>a[i][j];
}
}
/* Fin Del Ciclo De Solicitud De Datos */
/* Proceso Principal */
m=n+1;
do
{
if(a[1][1]==0)
{
k=m-1;
for(i=2;i<=k;i++)
{
if(a[i][1]!=0)
{
for(j=1;j<=m;j++)
{
apoyo=a[i][j];
a[i][j]=a[1][j];
a[1][j]=apoyo;
}
}
}
}
else
{
for(j=2;j<=m;j++)
{
for(i=2;i<=n;i++)
{
b[i-1][j-1]=a[i][j]-a[1][j]*a[i][1]/a[1][1];
}
}
for(j=2;j<=m;j++)
{
b[n][j-1]=a[1][j]/a[1][1];
}
m=m-1;
for(j=1;j<=m;j++)
{
for(i=1;i<=n;i++)
{
a[i][j]=b[i][j];
}
}
}
}
while(m>1);
cout<<"\n\nSOLUCION DEL SISTEMA"<<endl;
for(i=1;i<=n;i++)
{
cout<<"\nX("<<i<<") = "<<a[i][1];
}
getch();
}
while(1);
}
//Mtodo de Cholesky
#include <time.h>
#include <stdio.h>
#include <stdlib.h>
#include <cmath>
#include <math.h>
#include <iostream>
#include <fstream>
#include <string.h>
#include <conio.h>
#include <string>
#include <utility>
#include <iomanip>
#include <windows.h>
#include <windows.h>
#include<stdlib.h>
//#include<iostream.h>
#include<math.h>
//#include<iomanip.h>
#include<string.h>
using namespace std;
double *cholesky(double *A, int n) {
double *L = (double*)calloc(n * n, sizeof(double));
if (L == NULL)
exit(EXIT_FAILURE);
for (int i = 0; i < n; i++)
for (int j = 0; j < (i+1); j++) {
double s = 0;
for (int k = 0; k < j; k++)
s += L[i * n + k] * L[j * n + k];
L[i * n + j] = (i == j) ?
sqrt(A[i * n + i] - s) :
(1.0 / L[j * n + j] * (A[i * n + j] - s));
}
return L;
}
void show_matrix(double *A, int n) {
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++)
printf("%2.5f ", A[i * n + j]);
printf("\n");
}
}
int main() {
int n;
cout<<"Numero de incosnitas"<<endl;
cin>>n;
double m1[n*n];
for(int i=0;i<n*n;i++)
{
cin>>m1[i];
}
system("cls");
cout<<"La matriz es:"<<endl<<endl;
for(int i=0,c=0;i<n*n;i++)
{
cout<<m1[i]<<" ";
c++;
if(c==3)
{cout<<endl;
c=0;}
}
cout<<"[L]="<<endl;
double *c1 = cholesky(m1, n);
show_matrix(c1, n);
printf("\n");
free(c1);
system("pause");
return 0;
}
Conclusiones
Juan Pablo Lpez Franco
No solo se usa un mtodo para resolver todos los problemas o conflictos de una sola rea o todas,
existen ciertos mtodos para cada una, pero un mtodo no podr resolver todos los problemas de
cierta rea, as que se tendrn dos o ms mtodos los cuales parecern semejantes.
Bibliografa
Chapra, Stven; Canale, Raymond. Mtodos numricos para ingenieros. 3ra Edicin. McGraw Hill.