Sei sulla pagina 1di 55

Universidad nacional jorge basadre grohmann

Facultad de ingeniería
Escuela de ingeniería civil cálculo numérico
MÉTODOS NUMÉRICOS

METODO DE LA BISECCION

En general, si f(x) es real y continúa en el intervalo que va desde x1 hasta xu y f(x1) y


f(xu) tienen signos opuestos, es decir, f(x1)f(xu)<0
Entonces hay al menos una raíz real entre x1 y xu.
Los métodos de búsqueda incremental aprovechan esta característica localizando un
intervalo en el que la función cambie de signo. Entonces, la localización del cambio de
signo (y, en consecuencia, de la raíz) se logra con más exactitud al dividir el intervalo
en varios subintervalos. Se investiga cada uno de estos subintervalos para encontrar el
cambio de signo. El proceso se repite y la aproximación a la raíz mejora cada vez más
en la medida que los subintervalos se dividen en intervalos cada vez más pequeños.

Paso 1:
Elija valores iniciales inferior, x1, y superior, xu, que encierren la raíz, de forma tal que
la función cambie de signo en el intervalo. Esto se verifica comprobando que
f(x1)f(xu)<0.
Paso 2:
Una función aproximada de la raíz x1 se determina mediante:
x1 + xu
xr =
2
Paso 3:
Realice las siguientes evaluaciones para determinar en qué subintervalo esta la raíz:
a) si f(x1)f(xr)<0, entonces la raíz se encuentra dentro del subintervalo inferior o
izquierdo. Por lo tanto, haga xu=xr y vuelva al paso 2.
b) Si f(x1)f(xu)>0, entonces la raíz se encuentra dentro del subintervalo superior o
derecho. Por lo tanto, haga x1=xr y vuelva al paso 2.
c) Si f(x1)f(xu)=0, la raíz es igual a xr; termina el calculo.
El método de la Bisección, conocido también como de corte binario, de partición de
intervalos o de Bolzano, es un tipo de búsqueda incremental en el que el intervalo se
divide siempre a la mitad. Si la función cambia de signo sobre un intervalo, se evalúa el
valor de la función en el punto medio. La posición de la raíz se determina situándola en
punto medio del subintervalo, dentro del cual ocurre un cambio de signo.

Docente lic. Javier lozano


-1-
Universidad nacional jorge basadre grohmann
Facultad de ingeniería
Escuela de ingeniería civil cálculo numérico

DIAGRAMA DE FLUJO

INICIO

LEER
f(x) , a , b , E

V F
f(a)*f(b)<0

│b - a│ < F
E

V
x1 = (a + b) /
2
ESCRIBIR
V F “No exixte
f(a)*f(x1)<
0

a = x1
b = x1

f(x1)= F
0

V
a=b

ESCRIBIR
“La raíces:” x1

FIN

Docente lic. Javier lozano


-2-
Universidad nacional jorge basadre grohmann
Facultad de ingeniería
Escuela de ingeniería civil cálculo numérico

Codificación para calcular el área:

function varargout = pushbutton1_Callback(h, eventdata, handles, varargin)


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
x1=(a+b)/2
if f(a)*f(x1)<0
b=x1
else
a=x1
if f(x1)==0
a=b
end
end
end
set(handles.edit6,'string',x1)
else
set(handles.edit6,'string','no existe raiz')
end

Codificación para graficar:


function varargout = pushbutton2_Callback(h, eventdata, handles, varargin)
f=inline(get(handles.edit1,'string'))
ezplot(f),grid on

Codificación para cerrar:


close(metodobiseccion)

EJEMPLO DEL INTERFACE:

Docente lic. Javier lozano


-3-
Universidad nacional jorge basadre grohmann
Facultad de ingeniería
Escuela de ingeniería civil cálculo numérico

METODO PUNTO FIJO:

Si la ecuación f(x)=0 se rearregla en la forma x=g(x), entonces se puede escribir un


método iterativo como:

x k +1 = g ( x k )...........k =0,1,2,3,..............., n

A g(x) se le denomina función de iteración


A este método se le denomina método de sustitución sucesiva o iteración de punto fijo y
tiene la siguiente rutina:

1. de la función f(x)=0 determinar la función de iteración g(x), es decir, x=g(x).


2. empezar con un valor inicial x 0 .
3. hallar los x k ; k=1,2,3,4,…….,n ; mediante la función de iteración g(x), es
decir,

x1 = g ( x 0 )
x 2 = g ( x1 )
x3 = g ( x3 )
…………
x n = g ( x n −1 )

4. el punto x r tal que g( x r ) = x r es un punto fijo de g. los puntos fijos son


también raíces de la función f(x).
5. x k +1 −x k representa el máximo error posible.

Observación:

o La función de iteración g(x) se puede hallar mediante las operaciones


algebraicas o simplemente agregando un x a cada miembro de la
ecuación f(x)=0.
o La ventaja de este método esta en la facilidad con que se puede obtener
g(x). la desventaja es que los puntos x1 , x 2 , x3 ,.........., x n no siempre
pueden converger con la función de iteración elegida.
o Para garantizar la convergencia de la iteración se debe verificar la
siguiente condición:

g ' ( x) <1 , en necesidad de la raíz

Teorema:

Si g es derivable en (a;b) y g(x) ∈ (a;b) , ∀x ∈[a, b ] , entonces g tiene un punto


fijo en [a,b]. si además g’(x) existe un (a,b) y g ' ( x) ≤k <1∀x∈ ( a , b) , entonces
g tiene un único punto fijo en [a,b]
.

Docente lic. Javier lozano


-4-
Universidad nacional jorge basadre grohmann
Facultad de ingeniería
Escuela de ingeniería civil cálculo numérico

DIAGRAMA DE FLUJO

INICIO

LEER
g , x0 , E , N

k=1

x1 = g(x0)

│x1 – x0│ ≥ F
E

V
x0 = x1

g(x0) = g(x1)

k≠k+1

ESCRIBIR
x1 , k

FIN

Docente lic. Javier lozano


-5-
Universidad nacional jorge basadre grohmann
Facultad de ingeniería
Escuela de ingeniería civil cálculo numérico

Codigo para Calculo de raices aproximadas

function varargout = pushbutton1_Callback(h, eventdata, handles, varargin)


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

Codigo para graficar la función G(x):

g=inline(get(handles.edit2,'string'));
ezplot(g),grid on

Codigo para cerrar el interface:

close(metodopuntofijo)

EJEMPLO DEL INTERFACE:

Docente lic. Javier lozano


-6-
Universidad nacional jorge basadre grohmann
Facultad de ingeniería
Escuela de ingeniería civil cálculo numérico

METODO NEWTON-RAPHSON

Tal vez, de las formulas para localizar raíces, la formula de Newton-Raphson sea la más
ampliamente utilizada. Si el valor inicial para la raíz es xi, entonces se puede trazar una
tangente desde el punto [xi,f(xi)] de la curva. Por lo común, el punto donde esta tangente
cruza al eje x representa una aproximación mejorada de la raíz.
El método de Newton Raphson se deduce a partir de esta interpretación geométrica (un
método alternativo basado en la serie de Taylor. Se tiene que la primera derivada en x es
equivalente a la pendiente:
f ( xi ) − 0
f ' ( xi ) =
xi − xi +1

Que se reordena para obtener:


f ( xi )
xi +1 = xi −
f ' ( xi )

La cual se conoce como la formula de Newton Raphson.


El método de la secante:
Un problema potencial en la implementación del método de Newton Raphson es la
evaluación de la derivada. Aunque esto no es un inconveniente para los polinomios ni
para muchas otras funciones, existen algunas funciones cuyas derivadas en ocasiones
resulta muy difícil de calcular. En dichos casos, la derivada se puede aproximar
mediante una diferencia finita dividida hacia atrás.
f ( xi −1 ) − f ( xi )
f ' ( xi ) ≅
xi −1 − xi

f ( xi )
xi +1 = xi − (1)
f ' ( xi )

Esta aproximación se sustituye en la ecuación (1) para obtener la siguiente ecuación


iterativa:
f ( xi )( xi −1 − xi )
xi +1 = xi − (*)
f ( xi −1 ) − f ( xi )

La ecuación (*) es la formula para el método de la secante. Obsérvese que el método


requiere de dos valores iniciales de x. sin embargo, debido a que no se necesita que f(x)
cambie de signo entre los valores dados, este método no se clasifica como un método
cerrado.

Docente lic. Javier lozano


-7-
Universidad nacional jorge basadre grohmann
Facultad de ingeniería
Escuela de ingeniería civil cálculo numérico
DIAGRAMA DE FLUJO

INICIO

LEER
f , fd , x0 , E ,

k=1

x1 = x0 -

│x1 – x0│ > E F


k≤N

V
x0 = x1

x1 = x0 -

k = k +1

ESCRIBIR
x1 , k

FIN

Docente lic. Javier lozano


-8-
Universidad nacional jorge basadre grohmann
Facultad de ingeniería
Escuela de ingeniería civil cálculo numérico

Codigo para Calculo de raices aproximadas

f=inline(get(handles.edit1,'string'));
fd=inline(get(handles.edit2,'string'));
Xo=str2double(get(handles.edit3,'string'));
E=str2double(get(handles.edit4,'string'));
X1=Xo-f(Xo)/fd(Xo);
while abs(X1-Xo)>E
Xo=X1;
X1=Xo-f(Xo)/fd(Xo);
end
set(handles.edit5,'string',X1)

Codigo para graficar la función f(x):

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

Codigo para cerrar el interface:

close(metodonewtonraphson)

EJEMPLO DEL INTERFACE

Docente lic. Javier lozano


-9-
Universidad nacional jorge basadre grohmann
Facultad de ingeniería
Escuela de ingeniería civil cálculo numérico

METODO DE LA SECANTE

La función f(x) es continua en [a,b].


Dados los dos valores iniciales x 0 , x1
Se traza la recta secante que pasa por f ( x 0 ), f ( x1 ) , que corta al eje x en x 2 . Este
punto es una aproximación a la raíz exacta.
Para obtener x 2 , se utiliza la semejanza de triángulos:

f ( x 0 ) − f ( x1 ) f ( x1 )
=
x 0 − x1 x1 − x 2

( x1 − x0 ) * f ( x1 )
x 2 = x1 −
f ( x1 ) − f ( x0 )

( xi − xi −1 ) * f ( xi )
En general: xi +1 = xi −
f ( xi ) − f ( xi −1 )

Ahora los valores iniciales son x1 ... y..x 2 .


Este proceso se repetirá hasta que un x i +1 satisfaga que x i +1 −x i < E , donde E es
una tolerancia prefijada.

Docente lic. Javier lozano


- 10 -
Universidad nacional jorge basadre grohmann
Facultad de ingeniería
Escuela de ingeniería civil cálculo numérico

DIAGRAMA DE FLUJO

INICIO

LEER:
X0,X1,E

X2 = X1 – ((X1-X0)*f(X0)) / (f(X1)- f(X0))

|x2-x1|>E

X0=X1

X1=X2

X2 = X1 – ((X1-X0)*f(X0)) / (f(X1)- f(X0))

ESCRIBIR:
X2

FIN

Docente lic. Javier lozano


- 11 -
Universidad nacional jorge basadre grohmann
Facultad de ingeniería
Escuela de ingeniería civil cálculo numérico
Codigo para Calculo de raices aproximadas

function varargout = pushbutton1_Callback(h, eventdata, handles, varargin)


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

Codigo para graficar la función f(x):

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

Codigo para cerrar el interface:

close(metodosecante)

EJEMPLO DEL INTERFACE:

Docente lic. Javier lozano


- 12 -
Universidad nacional jorge basadre grohmann
Facultad de ingeniería
Escuela de ingeniería civil cálculo numérico
METODO DE MULLER

Recuerde que el método de la secante obtiene una aproximación de la raiz dirigiendo


una línea recta hasta el eje x con dios valores de la función. Este método de muller es
similar; pero se construye una parábola con tres puntos.
El método consiste en obtener los coeficientes de la parábola que pasa por los tres
puntos. Dichos coeficientes se sustituyen en la formula cuadrática para obtener el valor
donde la parábola intersecta al eje x; es decir, la raíz estimada. La aproximación se
facilita al escribir la ecuación de la parábola en una forma conveniente,
f 2 ( x) = a( x − x 2 ) 2 + b( x − x 2 ) + c (1)
Queremos que esta parábola pase por tres puntos [x0,f(x0)], [x1,f(x1)] y [x2,f(x2)]. Los
coeficientes de la ecuación (1) se evalúan sustituyendo cada uno de esos tres puntos
para dar
f ( x 0 ) = a ( x 0 − x 2 ) 2 + b( x 0 − x 2 ) + c (2)

f ( x1 ) = a ( x1 − x 2 ) 2 + b( x1 − x 2 ) + c (3)

f ( x 2 ) = a( x 2 − x 2 ) 2 + b( x 2 − x 2 ) + c (4)
Observe que se ha limitado el subíndice “2” de la función por brevedad. Debido a que
se tienen tres ecuaciones, es posible encontrar los tres coeficientes desconocidos a, b y
c. Debido a que los términos de la ecuación (4) son cero, se encuentra inmediatamente
que c=f(x2). Así, el coeficiente c es igual al valor de la función evaluada en el tercer
valor inicial, x2. Este resultado se sustituye en las ecuaciones (2) y (3) para tener dos
ecuaciones con dos incógnitas:
f ( x 0 ) − f ( x 2 ) = a ( x 0 − x 2 ) 2 + b( x 0 − x 2 ) (5)

f ( x1 ) − f ( x 2 ) = a( x1 − x 2 ) 2 + b( x1 − x 2 ) (6)
Una manipulación algebraica permite encontrar los coeficientes restantes a y b. la
manera de hacer esto consiste en definir las diferencias:
h0 = x1 − x0

h1 = x 2 − x1

f ( x1 ) − f ( x0 )
δ0 =
x1 − x0

f ( x 2 ) − f ( x1 )
δ1 = (7)
x 2 − x1

Estas sustituyen en las ecuaciones (5) y (6) para dar

Docente lic. Javier lozano


- 13 -
Universidad nacional jorge basadre grohmann
Facultad de ingeniería
Escuela de ingeniería civil cálculo numérico
( h0 + h1 )b − ( h0 − h1 ) a = h0δ0 + h1δ1

h1b − h12 a = h1δ1


De donde se despejan a y b. el resultado se resume como
δ1 − δ 0
a=
h1 − h0

b = ah1 + δ1

= f ( x2 )
cINICIO

Para encontrar la raíz se aplica la formula cuadrática a la ecuación (1). Sin embargo,
LEER
debido al error de redondeo potencial,
x0 , x1 , en
x2 , lugar
f(x) , E de usar la formula convencional, se
usará la formula alternativa, es decir:
dx1 = 1
− 2c
x3 − x 2 = (&)
x1 =b02 − 4ac

O despejando la incógnita x3
│dx │ > E *− 2c F
x3 = x 2 1+
x1 b ± b 2 − 4ac
V
Obsérvese que al usar la formula cuadrática, es posible localizar tanto las raíces reales
h0 = x1 – x0
como las complejas. Esta es la mayor ventaja del método.
h1 = x2 – x1
Además, la ecuación (&) proporciona una forma directa para determinar el error de
d0 = (f(x1) – f(x0) / h0
aproximación. Debido a que el lado izquierdo representa la diferencia entre la raíz
d1 = (f(x2) – f(x1) / h1
estimada actual (x3) y la raíz estimada anterior (x2), el error se calcula como
a = (d1 – d0) / (h1 + h0)
x − x2
b= =1 +3d1
E ah 100%
x3
c = f(x1)

rad =

V │b+rad│>│b- F
rad│

dm = b + rad dm = b - rad

O
dxr = -2c / dm

xr = x2 + dxr

x0 = x1
DIAGRAMA DE FLUJO x1 = x2
x2 = xr

Docente lic. Javier lozano ESCRIBIR


- x14
r
-

FIN
Universidad nacional jorge basadre grohmann
Facultad de ingeniería
Escuela de ingeniería civil cálculo numérico

Codigo para Calculo de raices aproximadas

Docente lic. Javier lozano


- 15 -
Universidad nacional jorge basadre grohmann
Facultad de ingeniería
Escuela de ingeniería civil cálculo numérico
X0=str2double(get(handles.edit1,'string'));
X1=str2double(get(handles.edit2,'string'));
X2=str2double(get(handles.edit3,'string'));
f=inline(get(handles.edit4,'string'));
E=str2double(get(handles.edit5,'string'));
dxr=1;
xr=0;
while abs(dxr)>E*xr
h0=X1-X0;
h1=X2-X1;
d0=(f(X1)-f(X0))/h0;
d1=(f(X2)-f(X1))/h1;
a=(d1-d0)/(h1+h0);
b=a*h1+d1;
c=f(X2);
rad=(b^2-(4*a*c))^(-0.5);
if abs(b+rad)>abs(b-rad)
den=b+rad;
else
den=b-rad;
end
dxr=-2*c/den;
xr=X2+dxr;
X0=X1;
X1=X2;
X2=xr;
end
set(handles.edit6,'string',xr);

Codigo para graficar la función G(x):

f=inline(get(handles.edit4,'string'));
ezplot(f),grid on

Codigo para cerrar el interface:

close(metodomuller)

EJEMPLO DEL INTERFACE:

Docente lic. Javier lozano


- 16 -
Universidad nacional jorge basadre grohmann
Facultad de ingeniería
Escuela de ingeniería civil cálculo numérico

METODO DEL POLINOMIO DE LAGRANGE – INTERPOLACION


POLINOMIAL

El polinomio de interpolación de Lagrange es simplemente una reformulación del


polinomio de Newton que evita el cálculo de las diferencias divididas, y se representa
de manera concisa como:
n
f n ( x) = ∑Li ( x) f ( xi )
i =0

n x − xj
Li ( x) = ∏
x − xj
j= 0 i
j≠ i

Donde ∏ designa el “producto de “.por ejemplo, la versión lineal (n=1) es


x − x1 x − x0
f1 ( x) = f ( x0 ) + f ( x1 )
x0 − x1 x1 − x 0

y la versión de segundo grado es:

( x − x1 )( x − x 2 ) ( x − x 0 )( x − x 2 ) ( x − x 0 )( x − x1 )
f 2 ( x) = f ( x0 ) + f ( x1 ) + f ( x2 )
( x 0 − x1 )( x 0 − x 2 ) ( x1 − x 0 )( x1 − x 2 ) ( x 2 − x 0 )( x 2 − x1 )

DIAGRAMA DE FLUJO

Docente lic. Javier lozano


- 17 -
Universidad nacional jorge basadre grohmann
Facultad de ingeniería
Escuela de ingeniería civil cálculo numérico

INICIO

n, xi ,v, f(x)

S=0

k=1, n,1

Num = 1

Den = 1

i=1, n,1

i≠
k

Num = Num*(v- xi)

Den = Den*(xk-xi)

L=Num/Dem

S=S+L*f(xk)

ESCRIBIR
S

FIN

Codigo para Calculo de raices aproximadas

Docente lic. Javier lozano


- 18 -
Universidad nacional jorge basadre grohmann
Facultad de ingeniería
Escuela de ingeniería civil cálculo numérico
function varargout = pushbutton1_Callback(h, eventdata, handles, varargin)
Y=str2num(get(handles.edit1,'string'))
n=str2double(get(handles.edit2,'string'))
X=str2num(get(handles.edit3,'string'))
v=str2double(get(handles.edit4,'string'))
s=0
for k=1:n
num=1
den=1
for i=1:n
if i~=k
num=num*(v-X(i))
den=den*(X(k)-X(i))
end
l=num/den
end
s=s+l*(Y(k))
end
set(handles.edit5,'string',s)

Codigo para cerrar el interface:

close(metodolagrange)

EJEMPLO DEL INTERFACE:

METODO DE MINIMOS CUADRADOS – REGRESION LINEAL

Docente lic. Javier lozano


- 19 -
Universidad nacional jorge basadre grohmann
Facultad de ingeniería
Escuela de ingeniería civil cálculo numérico
La grafica permite suponer que la relación real es lineal y que ninguna recta se ajusta a
los datos exactamente. Sin embargo un mejor enfoque para un problema de este tipo
seria encontrar “la mejor” recta que se pudiera usar como función aproximante aun
cuando pudiera no coincidir precisamente en los datos en cada punto.

El enfoque de minimos cuadrados es la de determinar la mejor recta aproximante con


una desviación minima.

La funcion lineal es g(x)=ax+b donde a y b son constantes por determinar

Donde a y b se hallan con la solución de la siguiente matriz:

Docente lic. Javier lozano


- 20 -
Universidad nacional jorge basadre grohmann
Facultad de ingeniería
Escuela de ingeniería civil cálculo numérico

 
nn n
x∑ ∑ x ∑ xy
2
i i ii
  a  
i = 1 i= 1 i = 1
*n   = n
   b  
nx∑ i  ∑ yi 
 i= 1   i= 1 

Docente lic. Javier lozano


- 21 -
Universidad nacional jorge basadre grohmann
Facultad de ingeniería
Escuela de ingeniería civil cálculo numérico

n n n n

∑ xy ∑ x
i= 1
ii
i= 1
i ∑ x ∑ xy
i= 1
2
i
i= 1
ii

n n n

∑ yi n
i= 1
INICIO
∑x ∑y
i= 1
i
i= 1
i

a= n n
LEER
m , xi , yi b= n n

∑ i ∑ xi
x 2

i= 1 i= 1
A11 = 0

A12 = 0
∑ i ∑ xi
x 2

i= 1 i= 1
n A22 = m n

∑x n
i= 1
i
B1 = 0

B2 = 0
∑x n
i= 1
i

i=1 , m , 1
DIAGRAMA DE FLUJO
A11 = A11 + xi2

A12 = A12+xi

A21 = A12

B1 = B1+xiyi

B2 = B2+yi

a=

a=

ESCRIBIR
Docente lic. Javier lozano a,b
- 22 -

FIN
Universidad nacional jorge basadre grohmann
Facultad de ingeniería
Escuela de ingeniería civil cálculo numérico

Codigo para Calculo de raices aproximadas

global A B x y
m=str2num(get(handles.edit1,'string'));
x=str2num(get(handles.edit2,'string'));
y=str2num(get(handles.edit3,'string'));
a11=0;
a12=0;
a22=m;
b1=0;
b2=0;
for i=1:m
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-a12*a21);
B=(b2*a11-b1*a21)/(a11*a22-a12*a21);
davo=sprintf('y=%6.4fx+ %6.4f',A,B);
set(handles.edit4,'string',davo);

Docente lic. Javier lozano


- 23 -
Universidad nacional jorge basadre grohmann
Facultad de ingeniería
Escuela de ingeniería civil cálculo numérico
Codigo para graficar la función G(x):

global A B x y
xx=min(x)-1:0.1:max(x)+1
yy=A*xx+B;
plot(x,y,'og',xx,yy),grid on;

Codigo para cerrar el interface:

Close(metodoregresionlineal)

EJEMPLO DEL INTERFACE:

METODO DE GAUSS-JORDAN

El metodo Gauss-jordan es una variación de la eliminación de Gauss. La principal


diferencia consiste en que cuando una incognita se elimina en el metodo de Gauss-
Jordan, esta es eliminada de todas las otras ecuaciones, no sólo de las subsecuentes.
Ademas, todos los renglones se normalizan al dividirlos entre su elemento pivote. De
esta forma, el paso de eliminación genera una matriz identidad en vez de una triangular.
En consecuencia, no es necesario usar la sustitución hacia atrás para obtener la solución
Dado el sistema de ecuaciones lineales:
a11 x1 + a12 x 2 + a13 x3 +....................... + a1n x n = b1
a 21 x1 + a 22 x 2 +a 23 x3 +....................... +a 2 n x n = b2
a 31 x1 + a32 x 2 + a33 x3 +....................... + a3 n x n = b3
............................................
a n1 x1 + a n 2 x 2 + a n 3 x3 +....................... +a nn x n = bn

Que en forma matricial se puede escribir como:

Docente lic. Javier lozano


- 24 -
Universidad nacional jorge basadre grohmann
Facultad de ingeniería
Escuela de ingeniería civil cálculo numérico

 a1 a12 a13. . . . . . . . a1n   x1   b1 


    
a 21 a2 a23. . . . . . . . a2n   x2  b2
a a a . . . . . . . . a x  = b 
 31 32 3
   
3n 3 3

 . . . . . . . . . . . . . . .   . .  . .
a a a . . . . . . . . a x  b 
 n1 n2 n3 n   n  n
O también Ax+B, donde A es la matriz de coeficientes, x es el vector de la incógnita y
B es el vector de los termino independientes.
Procedimiento
1. Crear la matriz formada por la matriz de coeficientes y el vector de terminos
independientes.
2. mediante tranformadas elementales la matriz de coeficientes debe convertirse en
la matriz identidad, y los valores que esten en la posición del vector de terminos
independientes será el vector solucion.
3. entonces las raices del sistema son:

Docente lic. Javier lozano


- 25 -
Universidad nacional jorge basadre grohmann
Facultad de ingeniería
Escuela de ingeniería civil cálculo numérico
x1 = r1 x 2 = r2 .................x n = rn

n3 n n3 n
Este proceso requiere de + n 2 − multiplicaciones y − sumas.
2 2 2 2

DIAGRAMA DE FLUJO
INICIO

LEER
n , aij

i=1,n,1

divisor aii

j = i , n+1 , 1

aij = aij / divisor

k=1,n,1

V F
i≠j

pivote = aki

j = i , n+1 ,
1

akj = akj – pivote * aij

ESCRIBIR
Docente lic. Javier lozano ai , n
- 26 -

FIN
Universidad nacional jorge basadre grohmann
Facultad de ingeniería
Escuela de ingeniería civil cálculo numérico

Codigo para Calculo de raices aproximadas

function varargout = pushbutton1_Callback(h, eventdata, handles, varargin)


n=str2double(get(handles.edit1,'string'))
a=str2num(get(handles.edit2,'string'))
for i=1:n
divisor=a(i,i)
for j=i:n+1
a(i,j)=a(i,j)/divisor
end
for k=1:n
if i~=k
pivote=a(k,i)
for j=i:n+1
a(k,j)=a(k,j)-pivote*a(i,j)
end
end
end
end
for i=1:n
for j=1:n+1
end
c(i)=a(i,n+1)
end
set(handles.edit3,'string',c)

Codigo para cerrar el interface:

close(metodogaussjordan)

EJEMPLO DEL INTERFACE:

Docente lic. Javier lozano


- 27 -
Universidad nacional jorge basadre grohmann
Facultad de ingeniería
Escuela de ingeniería civil cálculo numérico

METODO DE GAUSS-SEIDEL

Los métodos iterativos constituyen una alternativa a los métodos de eliminación


descritos ahora, para aproximar la solución. Tales métodos son similares a las técnicas
que se desarrollaron para obtener las raíces de una sola ecuación. Aunque métodos
consistían en suponer un valor y luego usar un método sistemático para obtener una
aproximación mejorada de la raíz. El método de gauss seidel es el método iterativo más
comúnmente usado. Supongo que se da un sistema de n ecuaciones:
[ Á ]{ X } = {B}
Suponga que se limita a un conjunto de ecuaciones de 3x3. Si los elementos de la
diagonal no son todos cero, la primera ecuación se puede resolver para x1, la segunda
para x2, y la tercera para x3, para obtener
b1 − a12 x 2 − a13 x3
x1 = (&)
a11

b2 − a 21 x1 − a 23 x3
x2 = (&&)
a 22

b3 − a31 x1 − a32 x 2
x3 = (&&&)
a33

Ahora si empezamos el proceso de solución al escoger valores iniciales para las x. Una
forma simple para obtener los valores iniciales es suponer que todos son cero. Estos

Docente lic. Javier lozano


- 28 -
Universidad nacional jorge basadre grohmann
Facultad de ingeniería
Escuela de ingeniería civil cálculo numérico
ceros se sustituyen en la ecuación (&) la cual se utiliza para calcular un nuevo valor x 1=
b1/a11. Después, se sustituye este nuevo valor de x1 junto con el valor previo cero de x 3
en la ecuación (&&) y se calcula el nuevo valor de x2. Este proceso se repite con la
ecuación (&&&) para calcular un nuevo valor de x3. Después se regresa a la primera
ecuación y se repite todo el procedimiento hasta que la solución converja
suficientemente cerca de los valores verdaderos. La convergencia SE VERIFICA
USANDO EL CRITERIO.
j −1
xij − xINICIO
E ai = i
100% < E s
x ij
LEER
n , max ite , aij , bi , Vi

k = 1 , max ite ,
1
DIAGRAMA DE FLUJO
i=1,n,1

xi = vi

i=1,n,1

S=0

j=1,n,1

V F
i≠j

S = S + a ij * xj

Vi = (bi – S) / 1000

xi = Vi

ESCRIBIR
Docente lic. Javier lozano Vi , i = 1, 2, 3…
- 29 -

FIN
Universidad nacional jorge basadre grohmann
Facultad de ingeniería
Escuela de ingeniería civil cálculo numérico

Codigo para Calculo de raices aproximadas

function varargout = pushbutton1_Callback(h, eventdata, handles, varargin)


ITER=str2double(get(handles.edit3,'string'));
n=str2double(get(handles.edit1,'string'));
v=str2num(get(handles.edit2,'string'));
a=str2num(get(handles.edit4,'string'));
b=str2num(get(handles.edit5,'string'));
cad1='';
for k=1:ITER
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 k=1:n
cad2=sprintf('x%d=%10.8f',k,x(k));
cad1=[cad1,cad2];
end
cad2=sprintf('\n');
cad1=[cad1,cad2];
end
set(handles.edit6,'string',cad1)

Codigo para cerrar el interface:

Docente lic. Javier lozano


- 30 -
Universidad nacional jorge basadre grohmann
Facultad de ingeniería
Escuela de ingeniería civil cálculo numérico
close(metodogaussseidel)

EJEMPLO DEL INTERFACE:

INTEGRACION NUMERICA

REGLA DEL TRAPECIO

la regla del trapecio es la primera de las formulas cerradas de integración de Newton –


cotes. Corresponde al caso donde el polinomio de la ecuación es de primer grado:
b b
I = ∫ f ( x) dx ≅ ∫ f n ( x) dx
a a

b b
I = ∫ f ( x)dx ≅ ∫ f 1 ( x)dx
a a

f (b) − f (a )
f1 ( x) = f (a) + ( x − a ) (*)
b −a
El área bajo esta línea recta res una aproximación de la integral de f(x) entre los límites
a y b.
b
 f (b) − f (a )
I = ∫  f (a) + ( x − a ) dx
a 
b −a 

El resultado de la integración es:


f ( a ) + f (b)
I = (b − a )
2
Que se denomina regla del trapecio.

Obtención de la regla del trapecio:


Antes de la integración, la ecuación (*) se puede expresar como:
Docente lic. Javier lozano
- 31 -
Universidad nacional jorge basadre grohmann
Facultad de ingeniería
Escuela de ingeniería civil cálculo numérico
f (b) − f (a ) af (b) − af ( a)
f1 ( x) = x + f (a) −
b −a b −a
Agrupando los últimos dos términos:

f (b ) − f ( a ) bf (a ) − af ( a ) − af (b) + af (a )
f1 ( x) = x+
b −a b −a
O
f (b) − f ( a ) bf ( a ) − af (b)
f1 ( x) = x+
b −a b −a
la cual se puede integrarse entre x = a y x = b para obtener:
f (b) − f (a ) x 2 bf (a ) − af (b) b
I = + x |a
b −a 2 b −a
Este resultado se evalúa para dar:
f (b) − f (a) (b 2 − a 2 ) bf ( a) − af (b)
I= + (b − a)
b −a 2 b −a
Ahora, como b 2 − a 2 = ( b − a )( b + a ),
INICIO
b +a
I = [ f (b) − f ( a )] + bf (a ) − af (b)
2
LEER
Multiplicando y agrupando términos
a , bse tiene:n
, f(x),
f ( a ) + f (b)
I = (b − a ) que es la formula del trapecio.
2
h=(b-a)/n

DIAGRAMA DE FLUJO i=1, n-1,1

xI=a+i*h

S=f(a)+f(b)

i=1, n-1,1

xi=a+i*h

S=S+2*f(xi)

A=S*h/2

ESCRIBIR
Docente lic. Javier lozano A
- 32 -

FIN
Universidad nacional jorge basadre grohmann
Facultad de ingeniería
Escuela de ingeniería civil cálculo numérico

Codigo para Calculo de raices aproximadas

function varargout = pushbutton1_Callback(h, eventdata, handles, varargin)


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=2:n
x(i)=a+(i-1)*h;
s=s+2*f(x(i));
end
I=s*(h/2);
set(handles.edit5,'string',I);

Codigo para graficar:

function varargout = pushbutton2_Callback(h, eventdata, handles, varargin)


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;
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.8 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))]);

Docente lic. Javier lozano


- 33 -
Universidad nacional jorge basadre grohmann
Facultad de ingeniería
Escuela de ingeniería civil cálculo numérico
end
hold on
ezplot(f,[min(x):0.2:max(x)])
plot(x,y,'og')
plot(x,y,'g')

Codigo para cerrar el interface:

close(metododeltrapecio)

EJEMPLO DEL INTERFACE:

REGLA DE SIMPSON

Además de aplicar la regla del trapecio con una segmentación mas fina, otra forma de
obtener una estimación más exacta de una integral consiste en usar polinomios de grado
superior para unir los puntos.

REGLA DE SIMPSON 1/3:


La regla de simpson 1/3 resulta cuando un polinomio de interpolación de segundo grado
se sustituye en la ecuación
b b
I = ∫ f ( x) dx ≅ ∫ f n ( x) dx
a a

Docente lic. Javier lozano


- 34 -
Universidad nacional jorge basadre grohmann
Facultad de ingeniería
Escuela de ingeniería civil cálculo numérico
b b
I = ∫ f ( x ) dx ≅ ∫ f 2 ( x) dx
a a

si se designa a y b como x0 y x2, y f2(x) se representa por un polinomio de Lagrange de


segundo grado, la integral se transforma en
x2
 ( x − x1 )( x − x 2 ) ( x − x0 )( x − x 2 ) ( x − x0 )( x − x1 ) 
I = ∫ f ( x0 ) + f ( x1 ) + f ( x 2 ) dx
x0 
( x0 − x1 )( x 0 − x 2 ) ( x1 − x0 )( x1 − x 2 ) ( x 2 − x0 )( x 2 − x1 ) 
después de la integración y de las manipulaciones algebraicas, se obtiene la siguiente
formulas:
h
I ≅ [ f ( x0 ) +INICIO
4 f ( x1 ) + f ( x 2 )] (3)
3
donde, en este caso, h=(b-a)/2. Esta ecuación se conoce como la regla de Simpson 1/3, y
es la segunda formula de integración LEER
cerradas de Newton – Cotes. La especificación
f(x) ,a,b,n
“1/3” se origina del hecho de que h esta dividida entre 3 en la ecuación (3).

DIAGRAMA DE FLUJO h=(b-a)/n

i=0, n,1

xi=a+i*b

Si n par

i=2,n, 2

S=S+f(x1-2)+ 4f(xi-1)+f(xi)

I=h*S/3

ESCRIBIR
I
Docente lic. Javier lozano
- 35 -

FIN
Universidad nacional jorge basadre grohmann
Facultad de ingeniería
Escuela de ingeniería civil cálculo numérico

Codigo para Calculo de raices aproximadas

function varargout = pushbutton1_Callback(h, eventdata, handles, varargin)


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
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

Codigo para graficar:


function varargout = pushbutton2_Callback(h, eventdata, handles, varargin)

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

Docente lic. Javier lozano


- 36 -
Universidad nacional jorge basadre grohmann
Facultad de ingeniería
Escuela de ingeniería civil cálculo numérico
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)])

Codigo para cerrar el interface:

close(metodosimpsontres)

EJEMPLO DEL INTERFACE:

REGLA DE SIMPSON 3/8

De manera similar a la obtención de la regla del trapecio y simpson 1/3, es posible


ajustar un polinomio de lagrange de tercer grado a cuatro puntos e integrarlo:
b b
I = ∫ f ( x ) dx ≅ ∫ f 3 ( x ) dx
a a

para obtener
3h
I ≅ [ f ( x0 ) + 3 f ( x1 ) + 3 f ( x 2 ) + f ( x3 )]
8
Donde h = (b-a)/3. Esta ecuación se llama regla de Simpson 3/8 debido a que h se
multiplica por 3/8. Esta es la tercera formula de integración cerrada de Newton-Cotes.

Docente lic. Javier lozano


- 37 -
Universidad nacional jorge basadre grohmann
Facultad de ingeniería
Escuela de ingeniería civil cálculo numérico

INICIO

Leer
f(x),a,b,n
DIAGRAMA DE FLUJO

h=(b-a)/n

i=0, n, 1

xi=a+i*h

Si n
multipl
o de 3

S=0

i=3,n,3

S=S+f(xi-3)+f(xi-2)+3f(xi-1)+f(xi)

I=3h*S/8

ESCCRIBIR
Docente lic. Javier lozano I
- 38 -

FIN
Universidad nacional jorge basadre grohmann
Facultad de ingeniería
Escuela de ingeniería civil cálculo numérico

Codigo para Calculo de raices aproximadas


function varargout = pushbutton1_Callback(h, eventdata, handles, varargin)
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
for i=1:n+1
x(i)=a+(i-1)*h
end
if rem(n,3)==0
s=0
for i=3:n+1:3
s=s+f(x(i-2))+3*f(x(i-1))+3*f(x(i))+f(x(i-1))
end
I=((3*h)/8)*s
set(handles.edit5,'string',I)
end

Codigo para graficar:

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])

Docente lic. Javier lozano


- 39 -
Universidad nacional jorge basadre grohmann
Facultad de ingeniería
Escuela de ingeniería civil cálculo numérico
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)])

Codigo para cerrar el interface:

close(metodosimpson8)

EJEMPLO DEL INTERFACE:

INTEGRALES MULTIPLES

Las técnicas de integración para la regla de trapecio y la regla de simpson se pueden


modificar de manera directa para utilizarse en la aproximación de integrales multiples.

∫∫ f ( x, y )dA
R
;donde R es una región

Docente lic. Javier lozano


- 40 -
Universidad nacional jorge basadre grohmann
Facultad de ingeniería
Escuela de ingeniería civil cálculo numérico

R={(x,y)/ a ≤ x ≤ b , c ≤ y ≤ d }es rectangular


R={(x,y)/ a ≤ x ≤ b , g1 ( x) ≤ y ≤ g 2 ( x) }no es rectangular.
b g2 ( x)
Para describir la técnica involucrada en la integral ∫∫ a g1 ( x )
f ( x, y )dydx se utiliza la

regla de simpson 1/3.

b −a g 2 ( x ) − g1 ( x)
h1 = h 2 ( x) =
2 2

 h2 ( x 0 )
b
∫∫
g2 ( x)
f ( x, y ) dydx ≅
h1
 [ f ( x0 , g1 ( x0 )) + 4 f ( x0, g1 ( x0 ) + h2 ( x)) + f ( x0 , g 2 ( x0 ))] +
a g1 ( x ) 3  3
h (x )
+ 4 2 1 [ f ( x1 , g1 ( x1 ) + 4 f ( x1 , g ( x1 ) + h2 ( x1 )) + f ( x1 , g 2 ( x1 ))] +
3
h (x ) 
+ 2 2 [ f ( x 2 , g1 ( x 2 )) + 4 f ( x 2 , g 1 ( x 2 ) + h2 ( x 2 )) + f ( x 2 , g 2 ( x 2 ))]
3 

Docente lic. Javier lozano


- 41 -
Universidad nacional jorge basadre grohmann
Facultad de ingeniería
Escuela de ingeniería civil cálculo numérico

INICIO

Leer
DIAGRAMA DE FLUJO f(x,y), a, b, m, n, g1(x), g2(x)

h1=(b-a)/n

i=0, n, 1

xi=a+i*h1
h1=(g2(xi)-g1(xi))/m

j=o, m, 1

yi=g1(xi)+j*h2

S1=0

j=2, m, 2

S1=S1+f(xi, yj-2)+4f(xi,yj-1)+f(xi,yi)

Mi=S1*h2/3

S2=0

i=2, n, 2

S2=S2+Mi-2 +4Mi-1+Mi

Area=h1*S2/3

ESCRIBI
R
Docente lic. Javier lozano
Area
- 42 -

FIN
Universidad nacional jorge basadre grohmann
Facultad de ingeniería
Escuela de ingeniería civil cálculo numérico

Codigo para Calculo de raices aproximadas

Codigo para graficar:

Codigo para cerrar el interface:

EJEMPLO DEL INTERFACE:

Docente lic. Javier lozano


- 43 -
Universidad nacional jorge basadre grohmann
Facultad de ingeniería
Escuela de ingeniería civil cálculo numérico

ECUACIONES DIFERENCIALES ORDINARIAS

METODO DE EULER

La primera derivada ofrece una estimación directa de la pendiente en xi (figura 1)

Figura 1

Donde f ( xi , y i ) es la ecuación diferencial evaluada en y i y xi . la estimación se


sustituye en la ecuación
y i +1 = yi +φh ………………1)

Y se obtiene:
y i +1 = yi + f ( xi , y i ) * h

Está formula se conoce como método de Euler (o de Euler-Cauchy o punto de


pendiente). Se predice un nuevo valor de y usando la pendiente (igual a la primera
derivada en el valor original de x) para poder extrapolar linealmente sobre el tamaño de
paso h(figura 1).

Análisis para el error del método de Euler


La solución numerica de la EDO implica dos tipos de error :

Docente lic. Javier lozano


- 44 -
Universidad nacional jorge basadre grohmann
Facultad de ingeniería
Escuela de ingeniería civil cálculo numérico
1. errores de truncamiento, o de discretización, originados por la naturaleza de las
técnicas empleadas para aproximar los valores de y.
2. errores de redondeo, causados por el numero limitado de cifras significativas
que una computadora puede retener.

DIAGRAMA DE FLUJO

INICIO

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

x0 = a

h = (b – 1) / n

i=1,n,1

y1 = y0 + h * f(x0,y0)

y0 = y1

x1 = x0 + h

x0 = x1

ESCRIBIR
y0

FIN

Docente lic. Javier lozano


- 45 -
Universidad nacional jorge basadre grohmann
Facultad de ingeniería
Escuela de ingeniería civil cálculo numérico

Codigo para Calculo de raices aproximadas

function varargout = pushbutton1_Callback(h, eventdata, handles, varargin)


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'));
h=(b-a)/n;
x0=a;
for i=1:n
y1=y0+h*f(x0,y0);
y0=y1;
x1=x0+h;
x0=x1;
end
set(handles.edit6,'string',y1);

Codigo para graficar:

function varargout = pushbutton2_Callback(h, eventdata, handles, varargin)


f1=get(handles.edit1,'string');
f=inline(f1,'x','y');
ezmesh(f);grid on

Codigo para cerrar el interface:

close(metodoeuler)

EJEMPLO DEL INTERFACE:

Docente lic. Javier lozano


- 46 -
Universidad nacional jorge basadre grohmann
Facultad de ingeniería
Escuela de ingeniería civil cálculo numérico

METODO DE RUNGE-KUTTA

Dada la ecuación diferencial ordinaria y ' = f ( x, y ) con la condición inicial


y ( x0 ) = y0 supongamos que se conocen los valores aproximados de
y1 , y 2 , y 3 ,..........., y n es decir para

x1 , y ( x1 ) =y1
x 2 , y ( x 2 ) =y 2
x 3 , y ( x 3 ) =y 3
......................
x n , y ( x n ) =y n

Se quiere calcular:

Docente lic. Javier lozano


- 47 -
Universidad nacional jorge basadre grohmann
Facultad de ingeniería
Escuela de ingeniería civil cálculo numérico
y n +1 = y ( x n +1 )
si y ' = f ( x, y ) → por el teorema fundamental del calculo se tiene
xn +1
∫xn
y ' dx = y ( x n +1 ) − y ( x n )..............................1)
por la regla de simposon1 / 3, para los puntos igualmente espaciadas.
x2 h
∫x0
f ( x ) dx =
3
[ f ( x 0 ) + 4 f ( x1 ) + f ( x 2 )]

donde :
x − x1
h= 2
2
para la ecuación (1) tomamos el int ervalo [ x n , x n +1 ]
la ecuación(1) se puede escribir como :
h h
y ( x n +1 ) − y ( x n ) = [ y ' ( x n ) + 4 y ' ( x n + ) + y ' ( x n +1) ]
6 2
h ' h
y n +1 = y n + [ y ( x n ) + 4 y ' ( x n + ) + y ' ( x n +1 )]
6 2
h h h
Al el termino 4 y ' ( x n + ) se divide en los términos 2 y ' ( x n + ) + 2 y ' ( x n + ) para
2 2 2

h h
aproximar la pendiente de y ' ( x n + )INICIO
en el punto medio x n + de 2 maneras
2 2
distintas.
h h LEER h
y n +1 = y n + [ y ' ( x n ) + 2 y ' ( x n + + 2 y ' ( x n + ) + y ' ( x n +1 )]..............................2)
6 F(x,y),
2 a, b, n, y20
en la ecuación 2 se sustituyen las pendientes :
* K 1 = y ' ( x n ), donde y ' ( x n ) = f ( x n , y n ) ⇒K 1 = f ( x n , y n )

h=
h h h h
* K 2 = y ( x n + ), donde
'
y ( xn ) = f ( x n + ) ⇒ K 2 = f ( x n + , y n + * K1 )
'

2 2 2 2
x0 = a
h h h h
* K 3 = y ' ( x n + ), donde y ' ( xn ) = f ( xn + ) ⇒ K 2 = f ( xn + , y n + * K 2 )
2 2 2 2
i=1,n,1
* K 4 = y ( x n +1 ), donde
'
y ( x n ) = f ( x n +1 ) ⇒ K 4 = f ( x n +1 , y n + h * K 3 )
'

h
∴ y n +1k ==yf(x
n + ,y ()K 1 + 2 K 2 + 2 K 3 + K 4 )
1 0 60
k2 = f(x0+, y0+ ()(k1))
DIAGRAMA DE FLUJO k3 = f(x0+, y0+ ()(k2)
k4 = f(x0+h), y0 + hk3)
y1 = y0 + (k1+2k2+2k3+k4)

x1 = x0 + h
x0 = x1
y0 = y1
O
ESCRIBIR
Docente lic. Javier lozano y1
- 48 -

FIN
Universidad nacional jorge basadre grohmann
Facultad de ingeniería
Escuela de ingeniería civil cálculo numérico

Codigo para Calculo de raices aproximadas


function varargout = pushbutton1_Callback(h, eventdata, handles, varargin)
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'));
h=(b-a)/n;
x0=a;
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/6)*(k1+2*k2+2*k3+k4);
x1=x0+h;
x0=x1;
y0=y1;

Docente lic. Javier lozano


- 49 -
Universidad nacional jorge basadre grohmann
Facultad de ingeniería
Escuela de ingeniería civil cálculo numérico
end
set(handles.edit6,'string',y1);

Codigo para graficar:

f1=get(handles.edit1,'string');
f=inline(f1,'x','y');
ezmesh(f);grid on

Código para cerrar el interface:

close(metodorungekutta4)

EJEMPLO DEL INTERFACE:

SISTEMA DE ECUACIONES DIFERENCIALES

Muchos problemas prácticos en la ingeniería y en la ciencia requieren la solución de un


sistema de ecuaciones diferenciales ordinarias simultaneas mas que de una sola
ecuación.
Un sistema de ecuaciones diferenciales ordinarias se puede representar generalmente
como:
y '1 = f 1 ( x, y1 , y 2 , y 3 ,............................, y n )

Docente lic. Javier lozano


- 50 -
Universidad nacional jorge basadre grohmann
Facultad de ingeniería
Escuela de ingeniería civil cálculo numérico
y '
2 = f 2 ( x, y1 , y 2 , y 3 ,............................, y n )
y ' 3 = f 3 ( x, y1 , y 2 , y 3 ,............................, y n )
………………………………………………
y n = f n ( x, y1 , y 2 , y 3 ,............................, y n
'

La solución de este sistema requiere que las n condiciones iniciales se conozcan en un


valor inicial x
Por ejemplo:
y '1 = f 1 ( x, y1 , y 2 )
y ' 2 = f 2 ( x, y1 , y 2 )

Sujeto a las condiciones iniciales:


y1 ( x ) = φ1 y 2 ( x ) = φ2

Se puede utilizar el método de Runge-Kutta de 4to orden para hallar la ,solución es


decir;
* K 1 = f 1 ( x, y1 , y 2 )
* R1 = f 2 ( x, y1 , y 2 )
h h h
* K 2 = f1 ( x + , y1 + * K 1 , y 2 + * R1 )
2 2 2
h h h
* R2 = f 2 ( x + , y1 + * K 1 , y 2 + * R1 )
2 2 2
h h h
* K 3 = f1 ( x + , y1 + * K 2 , y 2 + * R2 )
2 2 2
h h h
* R3 = f 2 ( x + , y1 + * K 2 , y 2 + * R2 )
2 2 2
* K 4 = f 1 ( x + h, y1 + h * K 3 , y 2 + h * R3 )
* R4 = f 2 ( x + h, y1 + h * K 3 , y 2 + h * R3 )
Por tanto:
h
y1 ( x + h) = y1 ( x) + [ K 1 + 2 K 2 + 2 K 3 + K 4 ]
6
h
y 2 ( x + h) = y 2 ( x) + [ R1 + 2 R2 + 2 R3 + R4 ]
6

DIAGRAMA DE FLUJO

Docente lic. Javier lozano


- 51 -
Universidad nacional jorge basadre grohmann
Facultad de ingeniería
Escuela de ingeniería civil cálculo numérico

Codigo para Calculo de raices aproximadas

f1=get(handles.edit1,'string');
f2=get(handles.edit2,'string');
f=inline(f1,'x','y1','y2');
g=inline(f2,'x','y1','y2');
a=str2double(get(handles.edit3,'string'));
b=str2double(get(handles.edit4,'string'));
y1=str2double(get(handles.edit5,'string'));
y2=str2double(get(handles.edit6,'string'));

Docente lic. Javier lozano


- 52 -
Universidad nacional jorge basadre grohmann
Facultad de ingeniería
Escuela de ingeniería civil cálculo numérico
n=str2double(get(handles.edit7,'string'));
h=(b-a)/n;
x0=a;
for i=1:n
k1=f(x0,y1,y2);
R1=g(x0,y1,y2);
k2=f(x0+h/2,y1+(h/2)*k1,y2+(h/2)*R1);
R2=g(x0+h/2,y1+(h/2)*k1,y2+(h/2)*R1);
k3=f(x0+h/2,y1+(h/2)*k2,y2+(h/2)*R2);
R3=g(x0+h/2,y1+(h/2)*k2,y2+(h/2)*R2);
k4=f(x0+h,y1+h*k3,y2+h*k3);
R4=g(x0+h,y1+h*k3,y2+h*k3);
y1=y1+(h/6)*(k1+2*k2+2*k3+k4);
y2=y2+(h/6)*(R1+2*R2+2*R3+R4);
x1=x0+h;
x0=x1;
y1=y1;
y2=y2;
end
set(handles.text10,'string',y1,y2);

Codigo para graficar:

Codigo para cerrar el interface:

EJEMPLO DEL INTERFACE:

ECUACIONES DIFERENCIALES DE ORDEN SUPERIOR

Dado un problema de valor inicial general:


y n = f ( x, y , y ' , y '' ,............................, y ( n −1)

y ( x 0 ) =φ0 , y ( x 0 ) =φ1 ,...................., y ( n −1) ( x 0 ) =φn −1


'

y( x f ) =?

La estrategia es convertir la ecuación diferencial ordinaria

Docente lic. Javier lozano


- 53 -
Universidad nacional jorge basadre grohmann
Facultad de ingeniería
Escuela de ingeniería civil cálculo numérico
y n = f ( x, y , y ' , y '' ,............................, y ( n −1) en un sistema de ecuaciones
mediante el cambio de variable es decir:
u1 = y
u2 = y '
u 3 = y ''
.............
u n = y ( n −1)

Entonces:
u1' = y ' = u 2
u 2' = y '' = u 3
.............................
u n' = y n = f ( x, u1 , u 2 , u 3 ,..........., u n )

Es decir se tiene el siguiente sistema de ecuaciones.


u1' = u 2
u 2' = u 3
.............................
u n' = f ( x, u1 , u 2 , u 3 ,..........., u n )

Con las condiciones iniciales

u1 ( x 0 ) =φ0 , u 2 ( x 0 ) =φ1 ,...................., y n ( x 0 ) =φn −1

Para hallar la solución de este sistema se puede utilizar el método de Runge-Kutta de


cuarto orden.

Docente lic. Javier lozano


- 54 -
Universidad nacional jorge basadre grohmann
Facultad de ingeniería
Escuela de ingeniería civil cálculo numérico

Docente lic. Javier lozano


- 55 -

Potrebbero piacerti anche