Vous êtes sur la page 1sur 16

METODOS NUMERICOS

Solucin de Ecuaciones no Lineales


Mtodos acotados
1. Mtodo de la biseccin
function [ xr ] = biseccion( y )
%la funcion recibe una funcion y que depende de x
%este programa retorna el valor de la raiz de una funcion
%con un error aproximado del 0.000001%
%recibe la funcion simbolica dependiente de x
%se hace un analisis, graficando lafuncion, para poder
% elegir bien el intervalo
clc, clear
syms x
t=linspace(-50,50,10000);
q=subs(y,t);
plot(t,q)
grid on
%se pide el ingreso de los limites
xl=input('Ingrese el limite inferior: ');
xu=input('Ingrese el limite superior: ');
xr=0;
error=100;
if ((subs(y,xu)*subs(y,xl))>0)%sentencia de control para
descartar el intervalo
disp(' ')
disp('Intervalo no valido para hallar la raiz')
error=0.00001;
xr=NaN;
end
%se inicia el metodo de biseccion, con un ciclo en este
caso while y
%error=0.000001%
while (abs(error)>0.000001 %Aqui podemos modificar el error
aux=xr;
xr=(xl+xu)/2;
fxl=subs(y,xl); %se evalua la funcion en XL
fxr=subs(y,xr); %se evalua la funcion en Xr
h=fxl*fxr;
%se multiplican los reultados para
f(Xr)*f(XL)
if (h<0)
%sentencias condicionales para definir los
nuevos limites.

xu=xr;
elseif(h>0)
xl=xr;
else
error=0.000001; %en caso de que h=0 se terminan
las iteraciones
end
error=((xr-aux)/xr)*100; %se calcula el error relativo
aproximado
end
end
Ejemplo

2. Metodo de Regula-falsi
function raiz=falsa(def,x0,x1,tol)
%Metodo de la cuerda o Regla-falsa
%def es la funcion 'ingresada'
%x0,x1 son los limites

%tol es la Tolerancia
f=inline(def);
if f(x0)*f(x1)<0
x=x0;
while abs(f(x))>tol
x=x1-f(x1)*((x1-x0)/(f(x1)-f(x0)));
if f(x0)*f(x)<0
x1=x;
else
x0=x;
end
end
raiz=x;
else
raiz='no hay cambio de signo';
end
Ejemplo

Metodos abiertos
3. Metodo de Newton- Raphson
Mtodo de Newton-Raphson
function [X1] = Newton_Raphson()
syms x
%declaramos a X una variable simblica
Y=input('Ingrese la funcin: '); %se solicita la entrada
de la funcin
%graficamos la funcin en un intervalo para poder tomar una
buena
%estimacin de la raz
sup = input('Ingrese el limite superior para graficar: ');
in = input('Ingrese el limite inferior para la
visualizacin: ');
t = linspace(in,sup,500);
%generamos un vector con los
valores
plot(t,subs(Y,t))
%generamos la grfica
grid on
Xn=input('Ingrese el valor aprximado de la raz: ');
%se solicita la estimacin inicial

Ydx = diff(Y,x);
%derivamos la funcion Y con respecto a X
y lo asignamos a la variable Ydx
%inicializar varibles
error = 1;
tolerancia = 0.000001;
while error>=tolerancia
%condicin de terminacin
cuando el error sea menor a la tolerancia
X1 = Xn - (subs(Y,Xn)/subs(Ydx,Xn)); %formula de
Newton-Raphson
error = abs((X1-Xn)/X1);
%calculo del
error
Xn=X1; %asignacin del nuevo valor de Xn para la
siguiente iteracin
end
end

4. Mtodo de la
secante
%Implementacin del mtodo de la secante en Matlab
%
function [Xa] = Secante ()
syms x
y = input('Ingrese la funcin: ');
% espacio opcional en el uqe hacemos una previsualizacin
sup = input('Ingrese el lmite superior para ver la
grfica: ');
infe = input('Ingrese el limite inferior para la
visualizacin: ');
t = linspace(infe,sup,700);

plot(t,subs(y,t))
grid on
clc
%continuamos con el mtodo y pedimos dos valores iniciales,
para Xo y X1
Xo=input('Ingrese un valor para Xo: ');
X1=input('Ingrese un valor para X1: ');
%definimos las variables necesarias
error = 100; %valor arbitrario
tolerancia=0.00001; %valor arbitrario que puede ser
modificado o pedido al usuario
while error>tolerancia %condicin para continuar el ciclo
el error debe ser minimo
Xa=X1-(( subs(y,X1)*(Xo-X1) )/( subs(y,Xo)subs(y,X1) )); %Xa representa la varible Xn+1
error = abs((Xa-X1)/Xa);
%el error siempre va en
valor absoluto
%reasignamos los valores de las variables para
continuar iterando
Xo = X1;
X1 = Xa;
end
end

Sistemas lineales

1. Mtodo de Cramer

%METODO DE CRAMER
function x=cramer(A,m)
%A es la matriz de coeficientes
%m es el vector de constantes
dA=det(A);
if dA==0
x='El sistema no tiene
solucion';
return;
end;
n=length(m);
for i=1:n
B=A;
B(:,i)=m;
x(i)=det(B)/dA;
end
x=x';

2. Sustitucin Regresiva
function[x]=backsub(A,B)
%A matriz triangular superior nxn
%B matriz de orden n*1
%x la solucion del sistema lineal Ax=B
n=length(B);
x=zeros(n,1);
x(n)= B(n)/A(n,n);
for k=n-1:-1:1
x(k)=(B(k)A(k,k+1:n)*x(k+1:n))/A(k,k);
end
end

3. Mtodo de Gauss

function [X] = uptrbk(A,B)


%UNTITLED4 Summary of this function goes here
%
Detailed explanation goes here
[N N]=size(A);
X=zeros(N,1);
C=zeros(1,N+1);
Aug=[A B];
for q=1:N-1
[Y,j]=max(abs(Aug(q:N,q)));
C=Aug(q,:);
Aug(j+q-1,:)=C;
if Aug(q,q)==0
'A es singular. No hay solucion o no es unica'
break
end
for k=q+1:N
m=Aug(k,q)/Aug(q,q);
Aug(k,q:N+1)=Aug(k,q:N+1);
end
end
X=backsub(Aug(1:N,1:N),Aug(1:N,N+1));
end

4. Factorizacin triangular

function [ X ] = lufact( A,B )


%DATOS
% -A es una matriz de orden N x N
% -b es una matriz de orden N x 1
%RESULTADO
% - x ES LA MATRIZ DE ORDEN N x 1
%
SOLUCION DE A
[N,N]=size(A);
X=zeros(N,1);
Y=zeros(N,1);
C=zeros(1,N);
R=1:N;
for q=1:N-1
% determinacin de la fila pivote para la columna q-sima
[max1,j]=max(abs(A(q:N,q)));
%Intercambio en las filas q-sima y j-sima
C=A(q,:);
A(q,:)=A(j+q-1,:);
A(j+q-1,:)=C;
d=R(q);
R(q)=R(j+q-1);
R(j+q-1)=d;
if A(q,q)==0
'A es singular no hay solucion o es unica'

break
end
%calculo del multiplicador ,
%que se guarda en la parte subdiagonal de A
for k=q+1:N
mult=A(k,q)/A(q,q);
A(k,q)=mult;
A(k,q+1:N)=A(k,q+1:N)-mult*A(q,q+1:N);
end
end
%resolucion para hallar Y
Y(1)=B(R(1));
for k=2:N
Y(k)=B(R(k))-A(k,1:k-1)*Y(1:k-1);
end
%resolucion para hallar x
X(N)=Y(N)/A(N,N);
for k=N-1:-1:1
X(k)=(Y(k)-A(k,k+1:N)*X(k+1:N))/A(k,k);
end

end

Metodos Iterativos para sistemas Lineales


5. Metodo de Jacobi

function [ X ] = jacobi( A,B,P,delta,max1 )


%DATOS
% - A es una matriz invertible de orden N x N
% - B es una matriz de orden N x 1
% - P es una matriz de orden N x 1 en el punto inicial
% - delta es la tolerancia para P
% - max1 es el numero maximo de iteraciones
% RESULTADOS
% - X es una matriz de orden N x 1
% - la aproximacion a la solucion de Ax = B
% - generada por el metodo de iteraciones de jacobi
N = length(B);
for k=1:max1
for j=1:N
X(j)=(B(j)-A(j,[1:j-1,j+1:N])*P([1:j1,j+1:N]))/A(j,j);
end

err=abs(norm(X'-P));
relerr=err/(norm(X)+eps);
P=X';
if (err<delta)|(relerr<delta)
break
end
end
X=X'
end

6. Metada de Gauss-Seidel

function [ X ] = gseid( A,B,P,delta,max1 )


%DATOS
% - A es una matriz invertible de orden N x N
% - B es una matriz de orden N x 1
% - P es una matriz de orden N x 1 en el punto inicial
% - delta es la tolerancia para P
% - max1 es el numero maximo de iteraciones
% RESULTADOS
% - X es una matriz de orden N x 1
% - la aproximacion a la solucion de Ax = B
% - generada por el metodo de iteraciones de gauss-seidel
N = length(B);
for k=1:max1
for j=1:N

if j==1
X(1)=(B(1)-A(1,2:N)*P(2:N))/A(1,1);
elseif j==N
X(N)=(B(N)-A(N,1:N-1)*(X(1:N-1))')/A(N,N);
else
X(j)=(B(j)-A(j,1:j-1)*X(1:j-1)A(j,j+1:N)*P(j+1:N))/A(j,j);
end
end
err=abs(norm(X'-P));
relerr=err/(norm(X)+eps);
P=X';
if(err<delta)|(relerr<delta)
break
end
end
X=X';

Sistemas no Lineales

7. Mtodo de Newton-Raphson para sistemas no Lineales

Interpolacin y aproximacin polinomial

1. Polinomio interpolador de Lagrange

function [ C,L ] = lagran( X,Y )


%DATOS
% - X es un vector que contiene la lista de las abscisas
% - Y es un vector que contiene la lista de las ordenadas
% RESULTADOS
% - C es la matriz que contiene los coeficientes del
polinomio
% interpolador de lagrange
% - L es la matriz que contiene los coeficientes de los
%
polinomios coeficentes de lagrange
w=length(X)
n=w-1;
L=zeros(w,w);
for k=1:n+1
V=1;
for j=1:n+1
if k~=j
V=conv(V,poly(X(j)))/(X(k)-X(j));
end
end
L(k,:)=V;
% Calculo de los
coeficientes del polinomio
% interpolador de lagrange
end
C=Y*L;

2. Polinomio interpolador
de Newton
function [ C,D ] = newpoly( X,Y )
%Datos
% - X es un vector con la lista de las abscisas

% - Y es un vector con la lista de las ordenadas


% Resultados
% - C es un vector que contiene los coeficientes
%
polinomio interpolador de Newton ,escrito de forma habitual , en
%
potencias decrecientes de X
% - D es la tabla de diferencias divididas
n=length(X);
D=zeros(n,n);
D(:,1)=Y';
% Usamos la formula 20 para hallar
% la tabla de diferencias divididas
for j=2:n
for k=j:n
D(k,j)=(D(k,j-1)-D(k-1,j-1))/(X(k)-X(k-j+1));
end
end
% Calculo del vector que contiene los coeficientes
% del polinomio interpolador de newton,escrito
% de forma habitual,en potencia decreciente de x
C=D(n,n);
for k=(n-1):-1:1
C=conv(C,poly(X(k)));
m=length(C);
C(m)=C(m)+D(k,k);
end
C
D
end

Ajuste de Curvas

1. Recta de regresin

function [ A,B ] = lsline( X,Y )


% Rescta de Regresion
% Datos
%
- X es el vector de abscisas 1 x n
%
- y es el vector de ordenadas 1 x n
% Resultados
%
- A es el coefciente de x en Ax + B
%
- B es el coeficiente independiente en Ax+b
xmean=mean(X);
ymean=mean(Y);
sumx2=(X-xmean)*(X-xmean)';
sumxy=(Y-ymean)*(X-xmean)';
A=sumxy/sumx2;
B=ymean-A*xmean;
A
B
end

2. Polinomio ptimo de mnimos cuadrados

function [ C ] = lspoly( X,Y,M )


%Polinomio optimo en minimos cuadraods

% Datos
%
- X es el vector de orden 1 x n de las abscisas
%
- y es el vector de orden 1 x n de las ordenadas
%
- M es el grado del polinomio optimo
% Resultados
%
- C es el vector de coeficientes del polinomio
%
en potencias decrecientes de x
n=length(X);
B=zeros(1:M+1);
F=zeros(n,M+1);
% Se rellenan las columnas de F con las potencias de X
for k=1:M+1
F(:,k)= X'.^(k-1);
end
% Resolucion de las ecuaciones normales
A=F'*F;
B=F'*Y';
C=A\B;
C=flipud(C);

end

Por ejemplo
F(x)=1.44/(X^2-0.24x)
P2(x) = 22.93-16.96x+2.553x^2

P3(x) =33.04-46.51x+19.51x^2-2.296x^3

P4(x) =39.02-80.93x+58.39x^217.5x^3+1.680X^4

Xk
0,25
1
1,5
2
2,4
5

Yk
23,1
1,68
1
0,84
0,826
1,2576

P5(x)=46.02-118.1x+119.4x^2-57.51x^3+13.03x^4-1.085x^5