Está en la página 1de 61

UNIVERSIDAD NACIONAL JORGE BASADRE GROHMANN

Facultad de Ingeniera

Escuela Acadmico Profesional de Ingeniera de Minas

INFORME
DE
MENU DE METODOS NUMERICOS

Presentado por:

Jonathan Tomas Josue Chipana Ajnota 2009-33218

Asignatura: Mtodos Numricos Aplicados a la Minera

Profesor: Ing. Javier Lozano Marreros

Ao: Tercero

Semestre: I

TACNA PER
2012
INTRODUCCION

Esta asignatura brinda al estudiante una solida formacin tcnica-cientfica para

desarrollar algoritmos computacionales de modelos matemticos que se pueden

resolver analticamente.

Adems, utilizara un equipo de cmputo y un lenguaje de programacin (Matlab)

como herramientas para crear sus propios programas respecto a estos modelos.

Como objetivos se tiene:

Analizar, disear y desarrollar algoritmos computacionales de modelos

matematicos e implementarlos en un lenguaje de programacin.

Obtener soluciones aproximadas de modelos matematicos, haciendo uso de

los mtodos numricos y programacin.

Adquirir una formacin Tecnico-Cientifica, con el uso de la computadora y un

lenguaje de programacin como herramientas para hallar la solucin numrica,

con un minimo error.


CAPITULO I

SOLUCION NUMERICA DE ECUACIONES ALGEBRAICAS

METODO DE LA BISECCION

y= f(x)

Raz

x3 x 4
a a a

b
x2 x1
b b

Dada la ecuacin f(x)=0.

Si la funcin f(x) es real y continua en [a,b] y f(a)f(b)<0, entonces existe una raz entre a y b
PROCEDIMIENTO

PASO 1:
Escoger los valores iniciales a y b ([a;b])tal que f(a) f(b)<0

PASO 2:

Hallar la primera raz aproximada mediante

PASO 3:
Realizar las siguientes evaluaciones para determinar en que sub-intervalo cae la raz.

o 3.1. Si f(a)f(x)=0 entonces la raz es x, y se determina los clculos.


o 3.2. Si f(a)f(x)<0, entonces la raz se encuentra en [a;x] y el b x (x se asigna a
b)

o 3.3. Si f(a)f(x)>0, entonces la raz se encuentra en [x;b]

PASO 4:

Calcular nuevamente , si se verifica las evaluaciones 3.2. o 3.3.

PASO 5:
El proceso se repetir mientras b - a<E, donde E es una tolerancia prefijada, por ejemplo:

o E = 1% (0.01)
o E = 0.1%
o E = 0.01%
DIAGRAMA DE FLUJO
PROGRAMACION

f=inline(get(handles.edit1,'string'));
a=str2double(get(handles.edit2,'string'));
b=str2double(get(handles.edit3,'string'));
E=str2double(get(handles.edit4,'string'));

if f(a)*f(b)<0 ;

while abs (b-a)>E

x=(a+b)/2

if f(a)*f(x)==0
a=b;
else
if f(a)*f(x)<0;
a=x;
else
b=x;
end
end
end
set(handles.edit6,'string',x);
else
set(handles.edit6,'string','no existe raiz');
end

PARTE GRAFICA

% --- Executes on button press in pushbutton2.


function pushbutton2_Callback(hObject, eventdata, handles)

f=inline(get(handles.edit1,'string'));
intervalos=str2num(get(handles.edit5,'string'));
ezplot(f,intervalos)
grid on

zoom on

METODO DEL PUNTO FIJO


PUNTO FIJO
El numero real p es un punto fijo de g(x), si:
g(p) = p
Por ejemplo:
Los puntos fijos de g(x)=x2-2 son x=-1 y x=2 pues g(-1)=-1 y g(2)=2.
Geomtricamente los puntos fijos son la interseccin de la funcin g(x) con la recta y=x.
Como g(x)= x x2-2=x x2-x-2=0
(x+1)(x-2)=0
x=-1 y x=2

y=x

y = g(x)

METODO DEL PUNTO FIJO


Si la ecuacin f(x)=0 se arregla de la forma:
x - g(x)= 0
x = g(x)
Entonces, el mtodo iterativo se puede escribir como:
Xk+1 = g(xk),k=0,1,2
A g(x) se le denomina funcin de iteracin.
PROCEDIMIENTO:
PASO 1:
De la ecuacin f(x)=0, determinar la funcin de iteracin g(x)

PASO 2:
Empezar el desarrollo con un valor inicial x 0 y determinar los xk+1, mediante xk+1 = g(xk)

PASO 3:
El proceso se repetir hasta que x k+1 - xk<E donde E es una tolerancia prefijada, por
INICIO
ejemplo E=1%
El punto xktal que g(xk)= xkes un punto fijo de g(x); este punto fijo es una raz de f(x)=0

VENTAJAS Y DESVENTAJAS
LEER
Las ventajas es que se puede obtener fcilmente la funcin de iteracin g(x).
f(x),g(x),x0,E
La desventaja es que los x1,x2x3, no siempre converjan a un punto con la funcin g(x)
elegida. En este caso para probar la convergencia de g(x) se debe verificar que:
x1g(x0)de la raz
g(x)<1 es una vecindad

x1-x0>E

X0X1

X1g(x)

DIAGRAMA DE FLUJO

ESCRIBIR
x1

FIN
PROGRAMACION

g=inline(get(handles.edit2,'string'));
x0=str2double(get(handles.edit3,'string'));
E=str2double(get(handles.edit4,'string'));
x1=g(x0)
while abs (x1-x0)>E
x0=x1;
x1=g(x0)
end
set(handles.edit5,'string',x1);

PARTE GRAFICA
f(x)=0 y=f(x)
function pushbutton2_Callback(hObject, eventdata, handles)
g=inline(get(handles.edit2,'string'));
intervalos=str2num(get(handles.edit6,'string'));
ezplot(handles.axes1,g) (xo;f(xo))
grid on

(x1;f(x1))

x2

METODO DEL NEWTON-RAPHSON


x1 xo

xi+1
Raz

Para determinar la ecuacin de la recta L:

Pero mL = f(x0)

Entonces:

(x0-x1)f(x0)=f(xo)

(Formula de Newton-Raphson, f(xo)o


GENERALIZANDO SE TIENE:

f(xi)o

Para calcular el punto xi+1 se utilizara la formula de Newton-Raphson previa condicin


inicial.
INICIO
El proceso se repetir hasta que xi+1-xi<E, donde E es una tolerancia prefijada.

LEER
F(X),F(X),X0,E

F
|X1-X0|>E

X0X1

DIAGRAMA DE FLUJO

ESCRIBIR
X1
X1

FIN
PROGRAMACION

f=inline(get(handles.edit1,'string'));
g=inline(get(handles.edit2,'string'));
x=str2double(get(handles.edit3,'string'));
E=str2double(get(handles.edit4,'string'));
x1=x-f(x)/g(x);
while abs (x1-x)>E
x=x1;
x1=x-f(x)/g(x);
end
set(handles.edit6,'string',x1);

PARTE GRAFICA
f=inline(get(handles.edit1,'string'));
ezplot(f),grid on
METODO DE LA SECANTE

y = f(x)

C
f(x) = 0 (xo,f(xo))
r : raz

(x1,f(x1)) B

A
x3

r x2 x1 x0S

mAB= mBC

Generalizando se tiene:

(Formula para el mtodo de la

secante)

Para xixi-1, i=1,2,3...


Para empezar el proceso se necesitan los valores iniciales x0
y x1 y el proceso se repetir hasta que un xi+1 satisfaga que
xi+1-xi<E, donde E es una tolerancia prefijada.
DIAGRAMA DE FLUJO

INICIO

LEER
F(X),X0,X1,E

|X2-X1|>E

V
X0X1
X1X2

ESCRIBIR
X2

FIN
PROGRAMACION

f=inline(get(handles.edit1,'string'));
x0=str2double(get(handles.edit2,'string'));
x1=str2double(get(handles.edit3,'string'));
E=str2double(get(handles.edit4,'string'));
x2=x1-(((x1-x0)*f(x1))/(f(x1)-f(x0)))
while abs(x2-x1)>E
x0=x1;
x1=x2;
x2=x1-(((x1-x0)*f(x1))/(f(x1)-f(x0)));
end
set(handles.edit5,'string',x2);

PARTE GRAFICA

f=inline(get(handles.edit1,'string'));
intervalos=str2num(get(handles.edit5,'string'));
ezplot(handles.axes1,f)
grid on
METODO DE MULLER

f(x) = 0
r : raz

(x0;f(x0))

(x1;f(x1))
y = f (x)
Inicial
(x2;f(x2))

r X3 X2 X1 X0

Parbola

Raz aproximada
f(x) = ax2+bx+c
y =?
y = x2 y = (x-4)2

x2y=(x-x2)2

y = a(x-x2)2+b(x-x2)+c

y = ax2 + bx + c (Ecuacin
general de la parbola)

x2
El mtodo consiste en obtener los coeficientes de la parbola que pasa por los tres puntos,
dichos coeficientes se sustituyen en la formula cuadrtica para obtener el valor donde la
parbola intersecta al eje x, es decir x3.
La aproximacin se facilita al escribir la ecuacin de la parbola de la siguiente forma:

f(x) = a(x-x2)2+b(x-x2)+c

Como la parbola pasa por los puntos (xo,f(xo);(x1,f(x1)) y (x2,f(x2)) entonces se tiene:
o f(x0) = a(x0-x2)2+b(x0-x2)+c
o f(x1) = a(x1-x2)2+b(x1-x2)+c
o f(x2) = a(x2-x2)2+b(x2-x2)+c
o f(x2) = c

Al simplificar tenemos que:


o f(x0) - f(x2) = a(x0-x2)2+b(x0-x2)+c (1)
o f(x1) - f(x2) = a(x1-x2)2+b(x1-x2)+c (2)

Objetivo: Hallar a y b
Utilizando las siguientes nuevas variables:
ho = x1 - x0
h1 = x2 - x1

0 =

1 =

Al sustituir en las ecuaciones (1) y (2), se tiene:


o h11 + h00 = -a(ho+h1)2 + b(h0+h1) (3)
o h11 = -a(h1)2 + b(h1)(4)

Y al desarrollar (3) y (4) se tiene:

o
o ah1 + 1
o f(x2)

Para hallar la raz de a(x-x2)2+ b(x-x2) + c = 0 se utilizara la formula alterna:

o Se escoge el signo que coincida con el de b.


o Esta eleccin proporciona como resultado un denominador mas grande y por tanto la
raz seria la mas cercana a la raz exacta.
PROGRAMACION

f=inline(get(handles.edit1,'string'));
x0=str2double(get(handles.edit2,'string'));
x1=str2double(get(handles.edit3,'string'));
x2=str2double(get(handles.edit4,'string'));
E=str2double(get(handles.edit5,'string'));

h0=x1-x0;
h1=x2-x1;
d0=(f(x1)-f(x0))/(x1-x0);
d1=(f(x2)-f(x1))/(x2-x1);
a=(d1-d0)/(h1+h0);
b=a*h1+d1;
c=f(x2);

if b>0
x3=x2-2*c/(b+sqrt(b^2-4*a*c))
else
x3=x2-2*c/(b-sqrt(b^2-4*a*c))
end

while abs((x3-x2)/x3)>E
x0=x1
x1=x2
x2=x3
h0=x1-x0;
h1=x2-x1;
d0=(f(x1)-f(x0))/(x1-x0);
d1=(f(x2)-f(x1))/(x2-x1);
a=(d1-d0)/(h1+h0);
b=a*h1+d1;
c=f(x2);
if b>0
x3=x2-2*c/(b+sqrt(b^2-4*a*c))
else
x3=x2-2*c/(b-sqrt(b^2-4*a*c))
end
end
set(handles.edit6,'string',x3)

PARTE GRAFICA

f=inline(get(handles.edit1,'string'));
intervalo=str2num(get(handles.edit7,'string'));
ezplot(f,intervalo);
grid on
CAPITULO II

AJUSTES DE CURVAS

Dado un conjunto de puntos, el estudiante analizara que es lo mas conveniente utilizar, si ajustar

mediante un polinomio interpolante o una regresin.

El ajuste de curvas es un proceso mediante el cual, dado un conjunto de N pares de puntos {xi,

yi} (siendo x la variable independente e y la dependiente), se determina una funcin matemtica

f(x) de tal manera que la suma de los cuadrados de la diferencia entre la imagen real y la

correspondiente obtenida mediante la funcin ajustada en cada punto sea mnima.

REGRESION LINEAL

Cuando se tienen parejas de valores (x, y), tabulados como los dados en tabla, y se
quiere estimar el valor de la funcin f(x) solamente para un valor de la variable
independiente x, el problema se resuelve con la interpolacin o extrapolacin, segn
que el valor por estimar se encuentre entre o fuera de los datos discretos conocidos,
respectivamente. Sin embargo, en muchos de los casos se desea tener una ecuacin
que represente todos esos datos y que con slo proponer ( en ella ) valores de x se
obtengan los valores de la funcin de manera inmediata. dada por:

Si hacemos esta prctica para cada punto y, tomando en cuenta que, el cuadrado de
esta diferencia ser an ms pequea, entonces el error total simbolizado por E, para
todos los puntos puede escribirse,

que debe ser minimizado.


PROGRAMACION

x=str2num(get(handles.edit1,'string'));
y=str2num(get(handles.edit2,'string'));
n=length(x);
A11=0;A12=0;A22=n;B1=0;B2=0;

for i=1:n

A11=A11+x(i)^2;
A12=A12+x(i);
A21=A12;
B1=B1+x(i)*y(i);
B2=B2+y(i);

End

a=(B1*A22-B2*A12)/(A11*A22-A21*A12);
b=(B2*A11-B1*A21)/(A11*A22-A21*A12);
cadena=sprintf('y=%8.6f+%8.6fx',b,a);
set(handles.edit3,'string',cadena);

PARTE GRAFICA
x=str2num(get(handles.edit1,'string'));
y=str2num(get(handles.edit2,'string'));
n=length(x);
A11=0;A12=0;A22=n;B1=0;B2=0;

for i=1:n
A11=A11+x(i)^2;
A12=A12+x(i);
A21=A12;
B1=B1+x(i)*y(i);
B2=B2+y(i);

End

a=(B1*A22-B2*A12)/(A11*A22-A21*A12);
b=(B2*A11-B1*A21)/(A11*A22-A21*A12);
xx=(min(x)-1):0.2:(max(x)+1);
yy=a.*xx+b;
plot(x,y,'*',xx,yy)
grid on

REGRESION POLINOMIAL
Considerando que g(x) corresponde a un polinomio de grado l, la ecuacin se
transforma en,

que tambin puede escribirse,

llegando al arreglo matricial siguiente:


INICIO

LEER
m,x,y

A11=0
A12=0
A22=m
B1=0
B2=0

i=1;m;1

A11=A11+((x(i))^2)
A12=A12+x(i)
A21=A12
B1=B1+(x(i)*y(i))
B2=B2+y(i)

a=((B1*A22)-(B2*A12))/((A11*A22)-(A12*A21));
b=((B2*A11)-(B1*A21))/((A11*A22)-(A12*A21));

escribir
a,b
PROGRAMACION
x=str2num(get(handles.edit1,'string'));
y=str2num(get(handles.edit2,'string'));
m=length(x);
n=str2num(get(handles.edit3,'string'));

for j=1:n+1
for k=1:n+1
s1=0;
for i=1:m
s1=s1+(x(i)^(j+k-2));
end
A(j,k)=s1;
end
end
for j=1:n+1
s2=0;
for i=1:m
s2=s2+(y(i)*(x(i)^(j-1)));
end
B(j)=s2;
end
B=B';
a=inv(A)*B;
a=a';
set(handles.edit4,'string',num2str(a));
PARTE GRAFICA

x=str2num(get(handles.edit1,'string'));
y=str2num(get(handles.edit2,'string'));
m=length(x);
n=str2num(get(handles.edit3,'string'));

for j=1:n+1
for k=1:n+1
s1=0;
for i=1:m
s1=s1+(x(i)^(j+k-2));
end
A(j,k)=s1;
end
end

for j=1:n+1
s2=0;
for i=1:m
s2=s2+(y(i)*(x(i)^(j-1)));
end
B(j)=s2;
end
B=B';
a=inv(A)*B;
a=a';

a=fliplr(a);
b=min(x):0.1:max(x);
p=polyval(a,b);
plot(x,y,'or',b,p),grid on
xlabel('Coordenadas X');
ylabel('Coordenadas Y');
title('REGRESION POLINOMIAL');
INTERPOLACIN DE LAGRANGE

En algunas ocasiones los datos obtenidos no contienen un cambio constante en la


variable independiente, ya que muchas de las veces no es posible recabar la
informacin de esa manera. Si adems, los valores puntuales no se agrupan en una
recta, con mayor razn la interpolacin lineal no es la ms apropiada. En este caso se
debe usar una interpolacin polinomial, a la cual corresponde la frmula de Lagrange.
Considere una serie de puntos de coordenadas [xi ,f(xi)] donde las xi no estn, en
general, igualmente espaciados e i puede tomar todos los valores enteros de 0 a n ( lo
que indica que hay n+1 de esos puntos ).
Supngase que se tienen n+1 puntos, tales como:
x0 x1 ... xn
f0 f1 ...fn
donde x0, x1, ... son las abscisas de los puntos, dados en orden creciente; los espacios
entre ellos son arbitrarios, como ya se dijo. El polinomio de orden n que pasa a travs
de los n+1 puntos se puede escribir en una serie de potencias como:
g(x) = a0 +a1x + a2x2 + a3x3 + ... + anxn
Donde los ai son coeficientes. El ajuste de la serie de potencias a los n+1 puntos dados,
da un sistema de ecuaciones lineales, como el que sigue:

La frmula de interpolacin de Lagrange, as obtenida se escribe como:


PROGRAMACION
x=str2num(get(handles.edit1,'string'));
n=length(x);
f1=get(handles.edit2,'string');
f=inline(f1);
xx=str2double(get(handles.edit3,'string'));
s=0;

for k=1:n
Num=1;
Den=1;
for i=1:n
if k ~=i;
Num=Num*(xx-x(i));
Den=Den*(x(k)-x(i));
end
La=Num/Den;
end
s=s+La*f(x(k));
end
set(handles.edit4,'string',s);
CAPITULO III

SISTEMAS DE ECUACIONES LINEALES Y NO LINEALES

LINEALES

METODO DE GAUSS - JORDAN:

5.1 -TEORIA:

Como hemos visto, el mtodo de Gauss transforma la matriz de coeficientes en una matriz
triangular superior. El mtodo de Gauss-Jordan contina el proceso de transformacin hasta

obtener una matriz diagonal unitaria ( aij=0 para cualquier ).

Veamos el mtodo de Gauss-Jordan siguiendo con el ejemplo empleado en el apartado anterior.


Aplicando el mtodo de Gauss habamos llegado a la siguiente ecuacin:

Ahora seguiremos un procedimiento similar al empleado en el mtodo de Gauss. Tomaremos

como pivote el elemento a44=-3; multiplicamos la cuarta ecuacin por y la restamos a la


primera:

Realizamos la misma operacin con la segunda y tercera fila, obteniendo:


Ahora tomamos como pivote el elemento a33=2, multiplicamos la tercera ecuacin por y
la restamos a la primera:

Repetimos la operacin con la


segunda fila:

Finalmente, tomamos como pivote a22=-4, multiplicamos la segunda ecuacin por y la


sumamos a la primera:

El sistema de ecuaciones anterior es, como hemos visto, fcil de resolver. Obtenemos las
soluciones:

DIAGRAMA DE FLUJO
INICIO

LEER
n , aij

i=0,n,1

divisor = aii

j = i , n + 1, 1

aij = aij /divisor

k=1,n,1

i~=k

pivote=a(k,i)

j = i, n, 1

akj = akj - pivote* aij

ESCRIBIR
ai,n+1

FIN
PROGRAMACION

A=str2num(get(handles.edit1,'string'));

[m,n]=size(A);
for i=1:m
divisor=A(i,i);
for j=i:n
A(i,j)=A(i,j)/divisor;
end
for k=1:m
if i~=k
pivote = A(k,i);
for j=i:n
A(k,j)=A(k,j)- pivote*A(i,j);
end
end
end
end
for i=1:m
x(i)=A(i,n);
end
x=x';
t=1:m;
t=t';
cadena='';
for t=1:m
cad=sprintf('x%d=%6.2f',t,x(t));
cadena=[cadena;cad];
end

METODO DE GAUUS SEIDEL:


La iteracin de Gauss-Seidel se define al tomar Q como la parte triangular inferior de A
incluyendo los elementos de la diagonal:

Si, como en el caso anterior, definimos la matriz R=A-Q

y la ecuacin se puede escribir en la forma:


Qx(k) = -Rx(k-1) + b

Un elemento cualquiera, i, del vector Qx(k) vendr dado por la ecuacin:

Si tenemos en cuenta la peculiar forma de las matrices Q y R, resulta que todos los sumandos
para los que j > i en la parte izquierda son nulos, mientras que en la parte derecha son nulos

todos los sumandos para los que . Podemos escribir entonces:

de donde despejando xi(k), obtenemos:


Obsrvese que en el mtodo de Gauss-Seidel los valores actualizados de xi sustituyen de
inmediato a los valores anteriores, mientras que en el mtodo de Jacobi todas las componentes
nuevas del vector se calculan antes de llevar a cabo la sustitucin. Por contra, en el mtodo de
Gauss-Seidel los clculos deben llevarse a cabo por orden, ya que el nuevo valor xi depende de
los valores actualizados de x1, x2, ..., xi-1.

DIAGRAMA DE FLUJO
INICIO

LEER
N, m , aij, bi, vi

K = 1, m, 1

i = 1, n, 1

Xi = Vi

i = 1, n, 1

s=0

j=1, n, 1

j ~= 1

s = s + aij*xj

vi = (bi-s)/aii

Xi = vi

i = 1, n, 1

ESCRIBIR
vi

FIN
PROGRAMACION

maxite=str2double(get(handles.edit1,'string'));
v=str2num(get(handles.edit3,'string'));
a=str2num(get(handles.edit2,'string'));
b=str2num(get(handles.edit4,'string'));
[n,n]=size(a);
cad1='';
for k=1:maxite
for i=1:n
x(i)=v(i);
end
for i=1:n
s=0;
for j=1:n
if j~=i
s=s+a(i,j)*x(j);
end
end
v(i)=(b(i)-s)/a(i,i);
x(i)=v(i);
end
for t=1:n
cad2=sprintf('x%d=%10.8f',t,x(t));
cad1=[cad1,cad2];
end
end
set(handles.edit5,'string',cad1);
NO LINEAL

INTERPOLACION

Nos centraremos ahora en el problema de obtener, a partir de una tabla de parejas ( x,f(x))
definida en un cierto intervalo [a,b], el valor de la funcin para cualquier xperteneciente a dicho
intervalo.

Supongamos que disponemos de las siguientes parejas de datos:

x x0 x1 x2 xn
y y0 y1 y2 yn
El objetivo es encontrar una funcin continua lo ms sencilla posible tal que

f(xi) = yi (11)

Se dice entonces que la funcin f(x) definida por la ecuacin (11) es una funcin de
interpolacin de los datos representados en la tabla.

Existen muchas formas de definir las funciones de interpolacin, lo que da origen a un gran
nmero de mtodos (polinomios de interpolacin de Newton, interpolacin de Lagrange,
interpolacin de Hermite, etc). Sin embargo, nos centraremos exclusivamente en dos funciones
de interpolacin:

1. Los polinomios de interpolacin de Lagrange.

2. Las funciones de interpolacin splines. Estas funciones son especialmente importantes


debido a su idoneidad en los clculos realizados con ordenador.
DIAGRAMA DE FLUJO:

INICIO

X, ai , bi, n

i = 1, n - 1, 1

a(i)<= X <=a(i+1)

y=b(i)+(((x-a(i))*(b(i+1)-b(i)))/(a(i+1)-a(i)))

i=n

FIN
PROGRAMACION

global a x y
x=str2num(get(handles.edit1,'string'));
y=str2num(get(handles.edit2,'string'));
m=length(x);%tamao del vector x%
n=str2num(get(handles.edit3,'string'));

for j=1:n+1

for k=1:n+1
s1=0;
for i=1:m
s1=s1+(x(i)^(j+k-2));
end
A(j,k)=s1;

End

End

for j=1:n+1
s2=0;
for i=1:n
s2=0;
for i=1:m
s2=s2+(y(i)*(x(i)^(j-1)));
end
B(j)=s2;
end
end

B=B';
a=inv(A)*B;
a=a';
set(handles.edit4,'string',num2str(a));

global a x y

a=fliplr(a);%cambia de orden
b=min(x):0.1:max(x);%intervalo para el grafico
p=polyval(a,b);
plot(x,y,'or',b,p),grid on
xlabel('Coordenadas X');
ylabel('Coordenadas Y');
title('REGRECION POLINOMIAL');
zoom on

CAPITULO IV
DIFERENCIACION E INTEGRACION NUMERICA

REGLA DEL TRAPECIO:

TEORIA:

Si empleamos polinomios de grado n=1 y tomamos como nudos x0=a y x1=b, tenemos el caso
ms sencillo posible, en donde los polinomios de interpolacin son:

por lo que:

La frmula de cuadratura correspondiente es:

Esta expresin se conoce como regla del trapecio y proporciona un resultado exacto para
todas las funciones de grado menor o igual a 1.

DIAGRAMA DE FLUJO:

REGLA DEL TRAPECIO


INICIO

Leer
f(x), a, b, n

h=(b-a)
n

s = f(a) f(b)

i = 1, n-1, 1

Xi = a + i*h

s = s + 2*f(xi)

AREA = S*h/2

Escrbir
AREA

FIN
PROGRAMACION

f=inline(get(handles.edit1,'string'));
a=str2double(get(handles.edit2,'string'));
b=str2double(get(handles.edit3,'string'));
n=str2double(get(handles.edit4,'string'));
h=(b-a)/n;
x(1)=a;
s=0;
for i=1:n
x(i+1)=x(1)+i*h;
s=s+f(x(i))+f(x(i+1));
end
A=s*(h/2);
set(handles.edit5,'string',A);

PARTE GRAFICA

f=inline(get(handles.edit1,'string'));
a=str2double(get(handles.edit2,'string'));
b=str2double(get(handles.edit3,'string'));
n=str2double(get(handles.edit4,'string'));
h=(b-a)/n;
s=f(a)+f(b);
for i=1:n+1
x(i)=a+((i-1)*h);
y(i)=f(x(i));
end
x=[x,b,a,a];
y=[y,0,0,f(a)];
fill(x,y,[0.8 0.4 0.9]);
for i=1:n+1
x(i)=a+((i-1)*h);
y(i)=f(x(i));
line([x(i),x(i)],[0,f(x(i))]);
end
hold on
ezplot(f,[min(x):0.2:max(x)])
hold off
REGLA DE SIMPSON DE1/3:

TEORIA:

Empleando un razonamiento similar al anterior y tomando un polinomio de grado n=2 para


interpolar a f, obtenemos la conocida regla de Simpson:

(14)

que es exacta para todos los polinomios de grado 2 y curiosamente, exacta para todos los

polinomios de grado 3.

En los clculos prcticos se emplea, generalmente, la regla de Simpson compuesta, en la que


el intervalo de integracin [a,b] se divide en un nmero par, n, de subintervalos. Tenemos
entonces:

en donde
h = (b-a)/n

Aplicando la regla de Simpson (14) en cada uno de los subintervalos se obtiene la


expresin final:

(15)
INICIO

LEER
F(x),a,b,n

h=b-a
n

i=0,n,1

xi=a+h

n par

S=0

i=2,n,1

S=S+F(xi-2)+4F(xi-1)+F(xi)

I=S*h/3

ESCRIBIR
I

FIN
PROGRAMACION
f=inline(get(handles.edit1,'string'));
a=str2double(get(handles.edit2,'string'));
b=str2double(get(handles.edit3,'string'));
n=str2double(get(handles.edit4,'string'));
h=(b-a)/n;
s=f(a)+f(b);

for i=1:n+1
x(i)=a+(i-1)*h;

end
if rem(n,2)==0
s=0;
for i=3:2:n+1
s=s+f(x(i-2))+4*f(x(i-1))+f(x(i))
end
I=(h/3)*s
set(handles.edit5,'string',I);
end
f=inline(get(handles.edit1,'string'));
a=str2double(get(handles.edit2,'string'));
b=str2double(get(handles.edit3,'string'));
n=str2double(get(handles.edit4,'string'));
h=(b-a)/n;
s=f(a)+f(b);
for i=1:n+1
x(i)=a+((i-1)*h);
y(i)=f(x(i));
end
x=[x,b,a,a];
y=[y,0,0,f(a)];
fill(x,y,[0.8 0.4 0.9]);
for i=1:n+1
x(i)=a+((i-1)*h);
y(i)=f(x(i));
line([x(i),x(i)],[0,f(x(i))]);
end
hold on
ezplot(f,[min(x):0.2:max(x)])
grid on
REGLA DE SIMPSON DE 3/8:

DIAGRAMA DE FLUJO:

INICIO

S=0

LEER
F(x),a,b,n

SIMPSON 3/8 h=b-a


n

n=3

i=3,n,3
ESCRIBIR
n debe ser
mltiplo de
tres
S=S+3/8*h*[ F(xi-3)+3F(xi-2)+3F(xi-1)+F(xi)]

ESCRIBIR
S

FIN
PROGRAMACION

f=inline(get(handles.edit1,'string'));
a=str2double(get(handles.edit2,'string'));
b=str2double(get(handles.edit3,'string'));
n=str2double(get(handles.edit4,'string'));
h=(b-a)/n
x1=a
for i=1:n
x(i+1)=x1+(i*h)

end
if rem(n,3)==0
s=0
for i=3:3:n+1
s=s+f(x(i-2))+3*f(x(i-1))+3*f(x(i))+f(x(i+1))
end
I=((3/8)*h)*s
set(handles.edit5,'string',I)
end
PARTE GRAFICA

f=inline(get(handles.edit1,'string'));
a=str2double(get(handles.edit2,'string'));
b=str2double(get(handles.edit3,'string'));
n=str2double(get(handles.edit4,'string'));
h=(b-a)/n;
s=f(a)+f(b)
for i=1:n+1
x(i)=a+((i-1)*h)
y(i)=f(x(i));
end
x=[x,b,a,a]
y=[y,0,0,f(a)]
fill(x,y,[0.6 0.8 0.4])
for i=1:n+1
x(i)=a+((i-1)*h)
y(i)=f(x(i));
line([x(i),x(i)],[0,f(x(i))])
end
hold on
ezplot(f,[min(x):0.2:max(x)]);
hold off
CAPITULO V

ECUACIONES Y SISTEMAS DE ECUACIONES DIFERENCIALES

METODO DE EULER:

Las ecuaciones diferenciales aparecen naturalmente al modelar situaciones


fsicas en las ciencias naturales, ingeniera, y otras disciplinas, donde hay
envueltas razones de cambio de una varias funciones desconocidas con
respecto a una varias variables independientes. Estos modelos varan entre
los ms sencillos que envuelven una sola ecuacin diferencial para una funcin
desconocida, hasta otros ms complejos que envuelven sistemas de
ecuaciones diferenciales acopladas para varias funciones desconocidas. Por
ejemplo, la ley de enfriamiento de Newton y las leyes mecnicas que rigen el
movimiento de los cuerpos, al ponerse en terminos matemticos dan lugar a
ecuaciones diferenciales. Usualmente estas ecuaciones estan acompaadas
de una condicin adicional que especifica el estado del sistema en un tiempo o
posicin inicial. Esto se conoce como la condicin inicial y junto con la ecuacin
diferencial forman lo que se conoce como el problema de valor inicial. Por lo
general, la solucn exacta de un problema de valor inicial es imposible dificil
de obtener en forma analtica. Por tal razn los mtodos numricos se utilizan
para aproximar dichas soluciones. Comenzaremos discutiendo los mtodos
para ecuaciones escalares y luego generalizamos los mismos a sistemas de
INICIO

LEER
F(x,y),a,b,n,y0

x0=a

h=b-a
n

i=1,n,1

y1=y0+h0*f(x)

Y0=y1

x1=x0+h

x0=x1

ESCRIBIR
y0

FIN
PROGRAMACION

f1=inline(get(handles.edit1,'string'));
x0=str2double(get(handles.edit2,'string'));
y0=str2double(get(handles.edit3,'string'));
n=str2double(get(handles.edit4,'string'));
b=str2double(get(handles.edit5,'string'));
h=(b-x0)/n;
for i=1:n
y0=y0+h*f1(x0,y0);
x0=x0+h;
end
set(handles.edit6,'string',y0);
ezmesh(f1);
grid on
zoom on
METODO RUNGE KUTTA

El mtodo de Runge-Kutta es un mtodo genrico de resolucin numrica de ecuaciones


diferenciales. Este conjunto de mtodos fue desarrollado alrededor del ao 1900 por los
matemticos C. Runge y M. W. Kutta.

Se trata de un mtodo por etapas que tiene la siguiente expresin genrica:

donde

i = 1,...,e

con aij,bi,ci constantes propias del esquema numrico. Los esquemas Runge-Kutta pueden ser
explcitos o implcitos dependiendo de las constantes aij del esquema. Si esta matriz es triangular
inferior con todos los elementos de la diagonal principal iguales a cero; es decir, aij = 0 para j =
i,...,e, los esquemas son explcitos.

Ejemplo: Esquema Runge-Kutta de dos etapas, una en t = tn y otra en t = tn + tn. F(u, t) en la


primera etapa es:

Fn = k1 = F(un;tn)

y para estimar F(u, t) en t = tn + tn usamos un esquema Euler

Fn + 1 = k2 = F(un + tnk1;tn + tn)

Con estos valores de F introducidos en la ecuacin


nos queda la expresin:
Las constantes propias de este esquema son: b1 = b2 = 1 / 2;a21 = 1;c2 = 1.

Existen variantes del mtodo de Runge-Kutta clsico, tambin llamado Runge-Kutta explcito,
tales como la versin implcita del procedimiento o las parejas de mtodos Runge-Kutta (o
mtodos Runge-Kutta-Fehlberg).

Este ltimo consiste en ir aproximando la solucin de la ecuacin mediante dos algoritmos


Runge-Kutta de ordenes diferentes, para as mantener el error acotado y hacer una buena
eleccin de paso.
INICIO

LEER
F(x), X0,Y0,b, n

h=b-X0
n

i=1,n,1

K1=F( X0, Y0)


K2=F(X0+h/2, Y0+h/2*K1)
K3=F(X0+h/2, Y0+h/2*K2)
K4=F(X0+h, Y0+h*K3)

Y1=Y0-h/6*(K1+2*K2+2*K3+K4)

X1=X0+h

X0=X1
Y0=Y1

ESCRIBIR
Y0

FIN
PROGRAMACION

f1=get(handles.edit1,'string');
f=inline(f1,'x','y');
a=str2double(get(handles.edit2,'string'));
b=str2double(get(handles.edit3,'string'));
n=str2double(get(handles.edit4,'string'));
y0=str2double(get(handles.edit5,'string'));
x0=a;
h=(b-a)/n;
for i=1:n
k1=f(x0,y0);
k2=f(x0+h/2,y0+(h/2)*k1);
k3=f(x0+h/2,y0+(h/2)*k2);
k4=f(x0+h,y0+h*k3);
y1=y0+h*(k1+2*k2+2*k3+k4)/6;
x1=x0+h;
x0=x1;
y0=y1;
Y(i)=y1;
end
set(handles.edit6,'string',y1);
f1=get(handles.edit1,'string');
f=inline(f1,'x','y');
ezmesh(f);
grid on
zoom on

También podría gustarte