Sunteți pe pagina 1din 12

%Factorizacion de Cholesky

%Para matrices simetricas y definidas positivas


clc
clear all
A=[4 -1 1 ; -1 4.25 2.75; 1 2.75 3.5] , b=[4 6 7.25]'

m1=A(1:1,1:1) %Menores principales


m2=A(1:2,1:2) %Menores principales
m3=A(1:3,1:3) %Menores principales

if A==A' %Silvester
disp('A es Simetrica')
if det(m1)>0 && det(m2)>0 && det(m3)>0
disp('A es definida positiva')
disp('Cholesky es aplicable')
U=chol(A)
L=U'
AA=L*U
%Resolvemos 2 sistemas triangulares
z=inv(L)*b
x=U\z

else
disp('A no es definida positiva')
disp('Cholesky no es posible ')
end
else
disp('A no es Simetrica')
disp('Cholesky no es posible ')
end

%Convergencia de los metodos iterativos


clc
clear all
format long
A=[4 -1 1 ; -1 4.25 2.75; 1 2.75 3.5] , b=[4 6 7.25]' ,
TOL=1e-15
%A=[ -1 4.25 2.75 ; 4 -1 1; 1 2.75 3.5] , b=[6 4 7.25]' ,
TOL=1e-15

D=diag(A)
D=diag(diag(A))
L=D-tril(A)
U=D-triu(A)
Tg=inv(D-L)*(U)
Tj=inv(D)*(U+L)
%Criterio del radio espectral de Tg o Tj
%Hay convergencia si y solo si el radio espectral
% de la matriz iteracion T, es menor que 1
%Radio espectral = Maxima magnitud del valor propio de T
Espectro=eig(Tj) %Conjunto de valores propios de Tj
rhoj=max(abs(eig(Tj))) % Radio espectral , eig = valor propio

if rhoj<1
disp('Jacobi convergente !!!')
else
disp('Jacobi divergente !!!')
end
rhog=max(abs(eig(Tg)))
if rhog<1
disp('Gauss Seidel convergente !!!')
else
disp('Gauss Seidel divergente !!!')
end

%program07.m
%Factorizacion de Doolitle a partir de eliminacion de Gauss
%Eliminaciion de Gauss simple sin pivoteo
clc
clear all
format rat
A= [1 3 4 8 ;
2 7 11 14;
4 5 12 18;
8 15 29 37]
b= [5 13 29 48]'

Ab= [A b]
m21= Ab(2,1)/ Ab(1,1) %Dato a eliminar / elemento de la
diagonal
Ab(2,:) = Ab(2,:) -m21* Ab(1,:) %F2=F2-m21*F1

m31= Ab(3,1)/ Ab(1,1) %Dato a eliminar / elemento de la


diagonal
Ab(3,:) = Ab(3,:) -m31* Ab(1,:) %F3=F3-m31*F1

m41= Ab(4,1)/ Ab(1,1) %Dato a eliminar / elemento de la


diagonal
Ab(4,:) = Ab(4,:) -m41* Ab(1,:) %F4=F4-m41*F1
m32= Ab(3,2)/ Ab(2,2) %Dato a eliminar / elemento de la
diagonal
Ab(3,:) = Ab(3,:) -m32* Ab(2,:) %F3=F3-m32*F2

m42= Ab(4,2)/ Ab(2,2) %Dato a eliminar / elemento de la


diagonal
Ab(4,:) = Ab(4,:) -m42* Ab(2,:) %F4=F4-m42*F2

m43= Ab(4,3)/ Ab(3,3) %Dato a eliminar / elemento de la


diagonal
Ab(4,:) = Ab(4,:) -m43* Ab(3,:) %F4=F4-m43*F3

%Separamos U = Triangular superior


U=Ab(1:4,1:4)
%Formamos L, a partir de los factores mij de la elimincaion
de Gauss
L = [1 0 0 0 ;
m21 1 0 0;
m31 m32 1 0
m41 m42 m43 1]

%Verificacion
AA=L*U %%AA=A ,Factorizacion correcta

%Solucion de Sistema
%L*U*x=b L*z=b U*x=z
%Resolviendo L*z=b
z=L\b %z=inv(L)*b, sustitucion directa
x=U\z %x=inv(U)*z, sustitucion inversa

%Metodo Iterativo de Gauss-Seidel Escalar


clc
clear all
format long
A=[4 -1 1 ; -1 4.25 2.75; 1 2.75 3.5] , b=[4 6 7.25]' ,
TOL=1e-18
%Planteando
% 4*x-y+z=4
% -x 4.25*y+2.75*z=6
% x+2.75*y+3.5*z=7.25
x=0; y=0 ; z=0; acum=[x y z NaN];
for i=1:1000
xn=(4+y-z)/4;
yn=(6+xn-2.75*z)/4.25;
zn=(7.25-xn-2.75*yn)/3.5;
err=norm([xn-x yn-y zn-z],Inf);
acum=[acum; xn yn zn err];
x=xn; y=yn; z=zn;
if err<TOL
break
end

end
disp('x y z')
disp(acum)
NumIte=i
% TOL Jacobi Gauss-Seidel
% 1e-3 29 19
% 1e-6 74 43
% 1e-9 121 67
% 1e-12 168 90
% 1e-15 215 114
% 1e-18 234 122

%Metodo Iterativo de Gauss Seidel


clc
clear all
format long
%A=[4 -1 1 ; -1 4.25 2.75; 1 2.75 3.5] , b=[4 6 7.25]' ,
TOL=1e-15
A=[ -1 4.25 2.75 ; 4 -1 1; 1 2.75 3.5] , b=[6 4 7.25]' ,
TOL=1e-15

D=diag(A)
D=diag(diag(A))
L=D-tril(A)
U=D-triu(A)
Tg=inv(D-L)*(U)
Cg=inv(D-L)*b
x=zeros(size(b));
acum=[x' NaN]
for i=1:10
xn=Tg*x+Cg;
err=norm(xn-x,inf);
acum=[acum; xn' err];
x=xn;
if err<TOL
break
end
end
disp(acum)
Vect_Soluc_Aprox=xn
Num_Iterac=i

%Metodo Iterativo de Jacobi Escalar


clc
clear all
format long
A=[4 -1 1 ; -1 4.25 2.75; 1 2.75 3.5] , b=[4 6 7.25]' ,
TOL=1e-15
%Planteando
% 4*x-y+z=4
% -x 4.25*y+2.75*z=6
% x+2.75*y+3.5*z=7.25
x=0; y=0 ; z=0; acum=[x y z NaN];
for i=1:1000
xn=(4+y-z)/4;
yn=(6+x-2.75*z)/4.25;
zn=(7.25-x-2.75*y)/3.5;
err=norm([xn-x yn-y zn-z],Inf);
acum=[acum; xn yn zn err];
x=xn; y=yn; z=zn;
if err<TOL
break
end

end
disp('x y z')
disp(acum)
NumIte=i
%TOL Jacobi Gauss-Seidel
%1e-3 29
%1e-6 74
%1e-9 121
%1e-12 168
%1e-15 215
%1e-18 234
%Metodo Iterativo de Jacobi Matricial
clc
clear all
format long
A=[4 -1 1 ; -1 4.25 2.75; 1 2.75 3.5] , b=[4 6 7.25]' ,
TOL=1e-15

D=diag(A)
D=diag(diag(A))
L=D-tril(A)
U=D-triu(A)
Tj=inv(D)*(L+U)
Cj=inv(D)*b
x=zeros(size(b));
acum=[x' NaN]
for i=1:1000
xn=Tj*x+Cj;
err=norm(xn-x,inf);
acum=[acum; xn' err];
x=xn;
if err<TOL
break
end
end
disp(acum)
Vect_Soluc_Aprox=xn
Num_Iterac=i

%Convergencia de los metodos iterativos


%Si A tiene diagonal estrictamente dominante
% entonces tanto Jacobi como Gauss-Seidel seran
% convergentes, desde cualquier vector inicial
clc
clear all
format long

A=[4 -1 1 ; -1 4.25 2.75; 1 2.75 3.5]

%A=[ -1 4.25 2.75 ; 4 -1 1; 1 2.75 3.5]

%4>2 (V)
%4.25>3.75 (V)
%3.5>3.75 (F)
%Por tanto A no tiene diagonal estricatemente dominante
%Por lo tanto no se puede afirmar nada de la convergencia

%Ejercicion:Escribir codigo MATLAB para verificar ese


criterio
%para una matriz A cualquiera

m11=A(1,1)
m22=A(2,2)
m33=A(3,3)

%Localizacion de raices de unaecuacion no lineal


%de una variable
%Calculo de raices de una ecuacion no lineal de una variable
mediante
%Biseccion
clc
clear all
syms x
format long
f=x^3-x-10
a=2
b=3 %El inicial debe contenetr por lo menos una raiz
acum=[];TOL=1e-100;
for i=1:200
c=(a+b)/2
er=(b-a)/2 %Cota de error real<er (cota de error)
acum=[acum; a c b er ];
if subs (f,a)*subs (f,c)<0
b=c;
else
a=c;
end
if er<TOL
break
end
end
disp(acum)
NumIte=i
RaizAprox=c
%Localizacion de raices de unaecuacion no lineal
%de una variable
clc
clear all
syms x
f=x^3-x-10
xx=-10:10
yy=double(subs(f,xx))
disp([xx' yy']) %Por cambio de signo en [2,3]
plot(xx,yy)
acum=[];
for i=1:length(xx)-1
if yy(i)*yy(i+1)<0
acum=[acum;xx(i) xx(i+1)]
end
end
disp('Intervalos que contienen raices ')
disp(acum)

%Calculo de valores propios y vectores propios


%Mediante el metodo de la potencia iterativo
%Calcula el valor propio de mayor magnitud y vector propio
correspondiente
clc
clear all
A=[2 -1 0 ; -1 2 -1; 0 -1 2], TOL=1e-14

x=[0,0,1]' %Arbitrario no nulo, vector inicial


acumX=x';acumL=[]; acumErr=[];
for i=1:1000
y=A*x
[m,p]=max(abs(y)) %m:maximo, p:posicion
L=y(p) %Valor propio aproximado
x=y/L %Normalizando
acumX=[acumX;x'];
acumL=[acumL;L];
er=norm(A*x-L*x);
acumErr=[acumErr]
if er<TOL
break
end
end
disp(acumX)
disp(acumL)
disp(acumErr)
Vector_propio_dominante=x
X=x
L=L
NumIte=i
%Solucion de eig
[P,D]=eig(A)
Ld=D(3,3)
Xd=P(:,3)
Xd=Xd/Xd(2)

%Metodo de Newton-Raphson con derivada numerica


clc
clear all
syms x
TOL = 1e-14
f=x^3-x-10
h=0.000000005
xi=2.5 %Valor cernacno a la raiz
acum=[xi NaN]
for i=1:10

dfn=(subs(f,xi+h)-subs(f,xi))/h;
xn=xi-double(subs(f,xi)/dfn);
err=abs(xn-xi);
acum=[acum; xn err];
xi=xn;
if err<TOL
break %Sale del for
end
end
disp(' x err')
disp(acum)

%SEL Iterativos + Valores propios


%Ecuacion no lineal de una variable

%Localizacion de raices de unaecuacion no lineal


%de una variable
%Calculo de raices de una ecuacion no lineal de una variable
mediante
%Criterio de convergencia para metodo de Iteracion de punto
%FIjo/Aproximaciones sucesivas
clc
clear all
syms x
%f=x^3-x-10=0
xi=2.5 %Valor cernacno a la raiz
g=(x+10)/x^2
dg=diff(g,x)
m=abs(double(subs(dg,xi)))
if m<1
disp('Punto fijo convergente !!!!!')
else

disp('Punto fijo divergente !!!!!')


end
%Pasar de f(x)0= a x=g(x)
%x=(x+10)^(1/3) =g1(x) Converge /g'(xo)/=
0.061887851114837
%x=x^3-10 =g2(x) Diverge /g'(xo)/=
18.75000000000000
%x=10/(x^2-1) =g3(x) Diverge /g'(xo)/=
1.814058956916100
%x=(x+10)/x^2 =g4(x) Diverge /g'(xo)/=
1.440000000000000
%x=((x+10)/x)^0.5 =g5(x) COnverge /g'(xo)/=
0.357770876399966

%Metodo de Newton-Raphson
clc
clear all
syms x
TOL = 1e-14
f=x^3-x-10
xi=2.5 %Valor cernacno a la raiz
df=diff(f,x)
acum=[xi NaN]
for i=1:10
xn=xi-double(subs(f,xi)/subs(df,xi))
err=abs(xn-xi);
acum=[acum; xn err];
xi=xn;
if err<TOL
break %Sale del for
end
end
disp(' x err')
disp(acum)

%Localizacion de raices de unaecuacion no lineal


%de una variable
%Calculo de raices de una ecuacion no lineal de una variable
mediante
%Iteracion de punto fijo , aproximaciones sucesivas
clc
clear all
syms x
format long
TOL=1e-15
%f=x^3-x-10=0
xi=2.5 %Valor cernacno a la raiz
acum=[xi NaN]
%Pasar de f(x)0= a x=g(x)
%x=(x+10)^(1/3) =g1(x)
%x=x^3-10 =g2(x)
%x=10/(x^2-1) =g3(x)
%x=(x+10)/x^2 =g4(x)
%x=((x+10)/x)^0.5 =g5(x)
for i=1:1000
%xn=(xi+10)^(1/3); Converge
%xn=xi^3-10; Diverge
%xn=10/(xi^2-1); Diverge
%xn=(xi+10)/xi^2; Diverge
%xn=((xi+10)/xi)^0.5 ; Converge
er=abs(xn-xi);
acum=[acum;xn er];
xi=xn;
if er<TOL
break
end
end
disp(acum)
RaizAprox =xi
NumIte=i

if er<TOL
disp('Hay convergencia')
else
disp('Hay divergencia')
end

%Calculo de valores propios y vectores propios


clc
clear all
A=[2 -1 0 ; -1 2 -1; 0 -1 2]
%Valores propios
p=poly(A) %p(L)= det(A-L*I)= 1.0000* L^3-6.0000*L^2
+10.0000*L-4.0000
Espectro1=roots(p) %Raices de p(L), son los valores propios
de A
% 3.4142 2.000 0.5858
Espectro2 =eig(A) %Valores propios de A

%Vectores propios
[P,D]=eig(A) %P es una matriz cuadrada contiene vectores
propíos en cada columna
%D contiene a todos los valores propios
L1=D(1,1)
X1=P(:,1) %Columna 1 contiene un vector propio
N=norm(X1,2)
%Separe los otros 2 valores y vectores propios
%A*X=L*x
e1=A*X1
e2=L1*X1 %e1=e2
%CAMBIO DE NORMA A INFINITA
NX1=X1/norm(X1,inf)
e3=A*NX1
e4=L1*NX1 %e3=e4

%Para determinar los vectores:


%Resolver el sistema homogeneo compratible e indeterminado
(A-Li*I)*Xi=

S-ar putea să vă placă și