Beruflich Dokumente
Kultur Dokumente
CALCULO NMERICO
En la n sima iteracin. La biseccin converge linealmente, por lo cual es un poco lento. Sin embargo, se garantiza la convergencia si f(a) y f(b) tienen distinto signo.
Unas cuantas iteraciones del mtodo de biseccin aplicadas en un intervalo [a1;b1]. El punto rojo es la raz de la funcin.
METODOS NUMERICOS
-1-
UNJBG ESIC
CALCULO NMERICO
DIAGRAMA DE FLUJO:
INICIO
LEER f(X),a,b,E V F
f(a)*f(b)<0
x=(a+b)/2 v
f(x)=0 f(a)*f(x)<0
a=b b=x
a=x
ESCRIBIR
X
FIN
METODOS NUMERICOS
-2-
UNJBG ESIC
CALCULO NMERICO
METODOS NUMERICOS
-3-
UNJBG ESIC
CALCULO NMERICO
CODIFICACION: function pushbutton1_Callback(hObject, eventdata, handles) % $$$$$____CODIFICACION DEL METODO DE BISECCION ____$$$$$$ 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 b=x; else a=x; end end end else set(handles.edit5,'string','No existe Raiz') end set(handles.edit5,'string',x) function pushbutton2_Callback(hObject, eventdata, handles) figure(1) f=inline(get(handles.edit1,'string')); ezplot(f);grid on function pushbutton3_Callback(hObject, eventdata, handles) close(biseccion)
METODOS NUMERICOS
-4-
UNJBG ESIC
CALCULO NMERICO
MTODO DEL PUNTO FIJO. Este mtodo aunque no es el mas sencillo, ni el mas rpido, es til ya que es la base de los dems mtodos. Bsicamente se da un valor y este se evala en una funcin previamente calculada (llamada tambin funcin equivalente). Despus en base al resultado obtenido se busca el error mediante /xi x1 + 1/<=E Si esto se cumple se encontr la raz si no, se evala el nuevo valor en la funcin equivalente as hasta llegar al error. Este mtodo funciona de la siguiente manera: Algoritmo 1.- Dada una funcin f(x) se localiza su equivalente. 2.- Despus se asigna un valor inicial que es x0. 3.- Se asigna un valor de error (estn pequeo como lo quiera el usuario). 4.- Se sustituye x0 en la funcin equivalente. Ese valor es x1 y se compara con el error deseado. Si el error que se calculo es igual o menor al que dio el usuario se encontr la raz. El mtodo del punto fijo se basa en que una raz de la ecuacin f ( x ) = 0 ser un punto fijo de la ecuacin g ( x ) = x siempre que g ( x ) = x f ( x ) o g ( x ) = x + f ( x ) . Podemos construir una sucesin que tienda al punto fijo de la ecuacin g ( x ) = x , o lo que es lo mismo a la solucin de la ecuacin f ( x ) = 0 . Para ello consideramos la sucesin:
x0 dado x n = f ( x n 1 ) se n 1
Caractersticas El mtodo presenta dos inconvenientes: La sucesin debe estar bien construida, es decir, cada trmino debe pertenecer al dominio de la funcin f (x ) para poder calcular el trmino siguiente. La sucesin no siempre es convergente aunque est bien construida
METODOS NUMERICOS
-5-
UNJBG ESIC
CALCULO NMERICO
f (x ) podemos tomar
distintas funciones g (x ) y el mtodo puede ser convergente con una y no serlo con otras. DIAGRAMA DE FLUJO:
INICIO
LEER f(x),g(x),X0,E
X1=g(X0)
lX1-X0l>E
V
X0=X1 X1=g(X)
ESCRIBIR X1 FIN
METODOS NUMERICOS
-6-
UNJBG ESIC
CALCULO NMERICO
CODIFICACION:
DOC. LIC. JAVIER LOZANO
METODOS NUMERICOS
-7-
UNJBG ESIC
CALCULO NMERICO
function pushbutton1_Callback(hObject, eventdata, handles) f=inline(get(handles.edit1,'string')); 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);
-8-
UNJBG ESIC
CALCULO NMERICO
Este mtodo parte de una aproximacin inicial x0 y obtiene una aproximacin mejor, x1, dada por la frmula: (1) La expresin anterior puede derivarse a partir de un desarrollo en serie de Taylor. Efectivamente, sea r un cero de f y sea x una aproximacin a r tal que r=x+h. Si f'' existe y es continua, por el teorema de Taylor tenemos: 0 = f(r) = f(x+h) = f(x) + hf'(x) + O(h2) (2)
en donde h=r-x. Si x est prximo a r (es decir hes pequea), es razonable ignorar el trmino O(h2): 0 = f(x) + hf'(x) por lo que obtenemos la siguiente expresin para h: (4) A partir de la ecuacin (4) y teniendo en cuenta que r=x+h es fcil derivar la ecuacin (1). (3)
Figure: Interpretacin geomtrica del mtodo de Newton. [scale=0.9]eps/new-1 El mtodo de Newton tiene una interpretacin geomtrica sencilla, como se puede apreciar del anlisis. De hecho, el mtodo de Newton consiste en una linealizacin de la funcin, es decir, f se reemplaza por una recta tal que contiene al punto (x0,f(x0)) y cuya pendiente coincide con la derivada de la funcin en el punto, f'(x0). La nueva aproximacin a la raz, x1, se obtiene de la interseccin de la funcin linear con el eje X de ordenadas. Veamos cmo podemos obtener la ecuacin (1) a partir de lo dicho en el prrafo anterior. La ecuacin de la recta que pasa por el punto (x0,f(x0)) y de pendiente f'(x0) es: y - f(x0) = f'(x0)(x-x0) (5)
METODOS NUMERICOS
-9-
UNJBG ESIC
CALCULO NMERICO
Figure: Dos situaciones en las que el mtodo de Newton no funciona adecuadamente: (a) el mtodo no alcanza la convergencia y (b) el mtodo converge hacia un punto que no es un cero de la ecuacin. [scale=0.9]eps/new-2
El mtodo de Newton es muy rpido y eficiente ya que la convergencia es de tipo cuadrtico (el nmero de cifras significativas se duplica en cada iteracin). Sin embargo, la convergencia depende en gran medida de la forma que adopta la funcin en las proximidades del punto de iteracin. En la figura (arriba) se muestran dos situaciones en las que este mtodo no es capaz de alcanzar la convergencia (figura (a)) o bien converge hacia un punto que no es un cero de la ecuacin (figura (b)).
DIAGRAMA DE FLUJO:
METODOS NUMERICOS
- 10 -
UNJBG ESIC
CALCULO NMERICO
INICIO
lx1-x0l >E
V
ESCRIBIR X1
FIN
- 11 -
UNJBG ESIC
CALCULO NMERICO
METODOS NUMERICOS
- 12 -
UNJBG ESIC
CALCULO NMERICO
df=inline(get(handles.edit2,'string')); X0=str2double(get(handles.edit3,'string')); E=str2double(get(handles.edit4,'string')); X1=X0-f(X0)/(df(X0)); while abs(X1-X0)>E X0=X1; X1=X0-f(X0)/(df(X0)); end set(handles.edit5,'string',X1); function pushbutton2_Callback(hObject, eventdata, handles) % $$$$====GRAFICA DE LA FUNCION====$$$$ figure(1) f=inline(get(handles.edit1,'string')); ezplot(f);grid on function pushbutton3_Callback(hObject, eventdata, handles) close(newtonrapshon1)
MTODO DE LA SECANTE El principal inconveniente del mtodo de Newton estriba en que requiere conocer el valor de la primera derivada de la funcin en el punto. Sin embargo, la forma funcional
DOC. LIC. JAVIER LOZANO
METODOS NUMERICOS
- 13 -
UNJBG ESIC
CALCULO NMERICO
de f(x) dificulta en ocasiones el clculo de la derivada. En estos casos es ms til emplear el mtodo de la secante. El mtodo de la secante parte de dos puntos (y no slo uno como el mtodo de Newton) y estima la tangente (es decir, la pendiente de la recta) por una aproximacin de acuerdo con la expresin: (34)
Sustituyendo esta expresin en la ecuacin (1) del mtodo de Newton, obtenemos la expresin del mtodo de la secante que nos proporciona el siguiente punto de iteracin: (35)
En la siguiente iteracin, emplearemos los puntos x1 y x2para estimar un nuevo punto ms prximo a la raz de acuerdo con la ecuacin (35). En la figura (arriba) se representa geomtricamente este mtodo. En general, el mtodo de la secante presenta las mismas ventajas y limitaciones que el mtodo de Newton-Raphson explicado anteriormente
DIAGRAMA DE FLUJO:
METODOS NUMERICOS
- 14 -
UNJBG ESIC
CALCULO NMERICO
INICIO
LEER X0,X1,f(X),E
lX1-X0l > E
X2 = X1 - (X1-X0)*f(X1)/(f(X1)-f(X0))
X0 = X1 X1 = X2
ESCRIBIR X1
FIN
- 15 -
UNJBG ESIC
CALCULO NMERICO
CODIFICACION:
METODOS NUMERICOS
- 16 -
UNJBG ESIC
CALCULO NMERICO
function pushbutton1_Callback(hObject, eventdata, handles) f=inline(get(handles.edit1,'string')); X0=str2double(get(handles.edit2,'string')); X1=str2double(get(handles.edit3,'string')); E=str2double(get(handles.edit4,'string')); while abs(X1-X0)>E X2=X1-((X1-X0)*f(X1))/(f(X1)-f(X0)) X0=X1 X1=X2 end set(handles.edit5,'string',X2);
METODO DE GAUSS - JORDAN Este mtodo utiliza las mismas tcnicas de eliminacin Gaussiana (incluyendo el pivoteo), pero con el objetivo de finalizar con una matriz de la siguiente forma:
DOC. LIC. JAVIER LOZANO
METODOS NUMERICOS
- 17 -
UNJBG ESIC
CALCULO NMERICO
Donde
Para lograr esto, se usa la tcnica del pivoteo con la nica diferencia que el pivote se usa para hacer ceros hacia abajo y hacia arriba. Ejemplo 1:
Solucin.
METODOS NUMERICOS
- 18 -
UNJBG ESIC
CALCULO NMERICO
Para hacer ceros arriba del pivote 1.25, multiplicamos el rengln 2 por 1.25 y se lo sumamos al rengln 1; para hacer ceros debajo del mismo pivote, multiplicamos al mismo rengln 2 por
0.5 1.25
Ahora procedemos a hacer ceros arriba del pivote 0.09 . rengln 3 rengln 3 por por
1.9 0.09 0.85 0.09
DIAGRAMA DE FLUJO:
METODOS NUMERICOS
- 19 -
UNJBG ESIC
CALCULO NMERICO
INICIO
LEER
n , aij
i=0,n,1
divisor = aii
j = i , n + 1, 1
k=1,n,1
i~=k pivote=a(k,i)
j = i, n, 1
ESCRIBIR
ai,n+1
FIN
METODOS NUMERICOS
- 20 -
UNJBG ESIC
CALCULO NMERICO
GUIDE:
CODIFICACION: function varargout = pushbutton1_Callback(h, eventdata, handles, varargin) a=str2num(get(handles.edit3,'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'
DOC. LIC. JAVIER LOZANO
METODOS NUMERICOS
- 21 -
UNJBG ESIC
CALCULO NMERICO
cadena=''; for t=1:m cad=sprintf('x%d=%6.2f',t,x(t)); cadena=[cadena;cad]; end set(handles.edit4,'string',cadena) % -------------------------------------------------------------------function varargout = pushbutton2_Callback(h, eventdata, handles, varargin) set(handles.edit3,'string',''); set(handles.edit4,'string',''); % -------------------------------------------------------------------function varargout = pushbutton3_Callback(h, eventdata, handles, varargin) close(gausjordan)
METODO DE GAUSS-SEIDEL El mtodo de Gauss-Seidel, es un mtodo iterativo y por lo mismo, resulta ser un mtodo bastante eficiente. Comenzamos con nuestro sistema de ecuaciones:
x1
, de la ecuacin 2 despejemos
x2
, , de la
METODOS NUMERICOS
- 22 -
UNJBG ESIC
CALCULO NMERICO
Este ltimo conjunto de ecuaciones son las que forman nuestras frmulas iterativas. Para comenzar el proceso iterativo, le damos el valor de cero a las variables ; esto nos dar un primer valor para
x1
x 2 ,, x n
x1
x3 , , x n
x1
x2
siguen teniendo el valor de cero; y as sucesivamente hasta llegar a la ltima ecuacin. Todo este paso, nos arrojar una lista de primeros valores para nuestras incgnitas, la cual conforma nuestro primer paso en el proceso iterativo. Digamos que tenemos:
Volvemos a repetir el proceso, pero ahora sustituyendo estos ltimos datos en vez de ceros como al inicio, obtendremos una segunda lista de valores para cada una de las incgnitas. Digamos que ahora tenemos:
METODOS NUMERICOS
- 23 -
UNJBG ESIC
CALCULO NMERICO
En este momento, podemos calcular los errores aproximados relativos, respecto a cada una de las incgnitas. As, tenemos la lista de errores como sigue:
donde
METODOS NUMERICOS
- 24 -
UNJBG ESIC
CALCULO NMERICO
INICIO
DIAGRAMA DE FLUJO:
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
DOC. LIC. JAVIER LOZANO
METODOS NUMERICOS
- 25 -
UNJBG ESIC
CALCULO NMERICO
METODOS NUMERICOS
- 26 -
UNJBG ESIC
CALCULO NMERICO
CODIFICACION: function varargout = pushbutton1_Callback(h, eventdata, handles, varargin) m=str2double(get(handles.edit1,'string')); v=str2num(get(handles.edit2,'string')); a=str2num(get(handles.edit3,'string')); b=str2num(get(handles.edit4,'string')); [n,n]=size(a); cad1=''; for k=1:m 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 cad2=sprintf('\n'); cad1=[cad1,cad2]; end set(handles.edit5,'string',cad1) % -------------------------------------------------------------------function varargout = pushbutton2_Callback(h, eventdata, handles, varargin) set(handles.edit1,'string',''); set(handles.edit2,'string',''); set(handles.edit3,'string',''); set(handles.edit4,'string',''); set(handles.edit5,'string','');
METODOS NUMERICOS
- 27 -
UNJBG ESIC
CALCULO NMERICO
ln ( xn ) = 1 y li ( xn ) = 0 para toda i n .
Pn ( xn ) = yn se cumple si
Esto nos sugiere como plantear los polinomios de Lagrange. Para ser ms claros,
l0 ( x) . De acuerdo al anlisis anterior vemos l ( x) : que deben cumplirse las siguientes condiciones para 0
analicemos detenidamente el polinomio
( x x1 )( x x2 ) ( x xn ) ( x0 x1 )( x0 x2 ) ( x0 xn )
l j ( x) =
( x x )
i
( x
i j
i j
xi )
- 28 -
UNJBG ESIC
CALCULO NMERICO
MTODO DE LAGRANGE
INICIO
Leer n, x Xi S=0
K = 0, n, 1
Lk=Num/Den
S = S + Lk * f(Xk)
Escribir S Fin
METODOS NUMERICOS
- 29 -
UNJBG ESIC
CALCULO NMERICO
METODOS NUMERICOS
- 30 -
UNJBG ESIC
CALCULO NMERICO
CODIFICACION: function varargout = pushbutton1_Callback(h, eventdata, handles, varargin) x=str2num(get(handles.edit2,'string')); n=length(x); f=inline(get(handles.edit1,'string')); P=str2double(get(handles.edit3,'string')); S=0; for k=1:n Num=1; Dem=1; for i=1:n if k~=i Num=Num*(P-x(i)); Dem=Dem*(x(k)-x(i)); end L=Num/Dem; end S=S+L*f(x(k)); end set(handles.edit4,'string',S) % -------------------------------------------------------------------function varargout = pushbutton2_Callback(h, eventdata, handles, varargin) x=str2num(get(handles.edit2,'string')); f=inline(get(handles.edit1,'string')); ezplot(f),grid on
METODOS NUMERICOS
- 31 -
UNJBG ESIC
CALCULO NMERICO
METODO DE LOS MINIMOS CUADRADOS Supongamos que hemos medido un conjunto de pares de datos (xi, yi) en una experiencia, por ejemplo, la posicin de un mvil en ciertos instantes de tiempo. Queremos obtener una funcin y=f(x) que se ajuste lo mejor posible a los valores experimentales. Se pueden ensayar muchas funciones, rectas, polinomios, funciones potenciales o logartmicas. Una vez establecido la funcin a ajustar se determinan sus parmetros, en el caso de un polinomio, sern los coeficientes del polinomio de modo que los datos experimentales se desven lo menos posible de la frmula emprica. La funcin ms sencilla es la funcin lineal y=ax+b que hemos tratado en la pgina anterior. El procedimiento de ajustar los datos experimentales a una lnea recta se denomina regresin lineal POLINOMIO APROXIMADOR Queremos aproximar un polinomio de grado n, a un conjunto de m pares de datos (xi, yi) de modo que n m. Sea el polinomio P(x)=a0+a1x+a2x2+...anxn Se calcula la cantidad
Para obtener los valores de los coeficientes del polinomio aproximador se tienen que determinar los valores de los coeficientes a0, a1, a2, ...an de forma que la cantidad S tome un valor mnimo. Hagamos las derivadas parciales de S respecto de a0, a1, a2, ...an iguales a cero
(1) Obtenemos un sistema de n+1 ecuaciones con n+1 incgnitas, a0, a1, a2, ...an
METODOS NUMERICOS
- 32 -
UNJBG ESIC
CALCULO NMERICO
Ejemplo: Supongamos que tenemos 4 pares de datos y que queremos ajustarlos al polinomio de segundo grado y=a0+a1x+a2x2 x y x0 y0 x1 y1 x2 y2 x3 y3
agrupando trminos
Volvamos al sistema de n+1 ecuaciones con n+1 incgnitas. Introduzcamos las expresiones
(3) Si todos los puntos son distintos, el sistema de ecuaciones tiene una solucin nica.
METODOS NUMERICOS
- 33 -
UNJBG ESIC
CALCULO NMERICO
i=1 , m , 1 A11 = A11 + xi2 A12 = A12 +xi A21 = A12 B1 = B1+xiyi B2 = B2+yi
a= a=
ESCRIBIR a,b
FIN
DOC. LIC. JAVIER LOZANO
METODOS NUMERICOS
- 34 -
UNJBG ESIC
CALCULO NMERICO
CODIFICACION: function varargout = pushbutton1_Callback(h, eventdata, handles, varargin) n=str2double(get (handles.edit1,'string')); x=str2num(get(handles.edit2,'string')); y=str2num(get(handles.edit3,'string')); A11=0; A12=0; A22=n B1=0; B2=0; for i=1:n;1 for j=0,1,1
DOC. LIC. JAVIER LOZANO
METODOS NUMERICOS
- 35 -
UNJBG ESIC
CALCULO NMERICO
A11=A11+(x(i)*x(i)) A12=A12+(x(i)) A21=A12 A22=n B1=B1+(x(i))*(y(i)) B2=B2+(y(i)) end end a=(B1*A22-B2*A12)/(A11*A22-A12*A21) b=(A11*B2-A21*B1)/(A11*A22-A12*A21) set(handles.edit4,'string',a); set(handles.edit5,'string',b); % -------------------------------------------------------------------function varargout = pushbutton2_Callback(h, eventdata, handles, varargin) close(MinimosCuadrados); % -------------------------------------------------------------------function varargout = pushbutton3_Callback(h, eventdata, handles, varargin) n=str2double(get (handles.edit1,'string')); x=str2num(get(handles.edit2,'string')); y=str2num(get(handles.edit3,'string')); [nu,m2]=size(x) [nv,m2]=size(y) A11=0; A12=0; A22=n B1=0; B2=0; for i=1:n; for j=0,1,1 A11=A11+(x(i)*x(i)) A12=A12+(x(i)) A21=A12 A22=n B1=B1+(x(i))*(y(i)) B2=B2+(y(i)) end end a=(B1*A22-B2*A12)/(A11*A22-A12*A21) b=(A11*B2-A21*B1)/(A11*A22-A12*A21) set(handles.edit4,'string',a); set(handles.edit5,'string',b); Y=a*x+b plot(Y),grid % -------------------------------------------------------------------function varargout = pushbutton4_Callback(h, eventdata, handles, varargin) set(handles.edit1,'string',''); set(handles.edit2,'string',''); set(handles.edit3,'string',''); set(handles.edit4,'string',''); set(handles.edit5,'string','');
METODOS NUMERICOS
- 36 -
UNJBG ESIC
CALCULO NMERICO
donde datos:
Que es la conocida Regla del Trapecio. Este nombre se debe a la interpretacin geomtrica que le podemos dar a la frmula. El polinomio de interpolacin para una tabla que contiene dos datos, es una lnea recta. La integral, corresponde al rea bajo la lnea recta en el intervalo , que es precisamente el rea del trapecio que se forma.
METODOS NUMERICOS
- 37 -
UNJBG ESIC
CALCULO NMERICO
Solucin. Igual que en el ejemplo anterior, sustitumos los datos de manera directa en la frmula del trapecio. En este caso, tenemos los datos:
METODOS NUMERICOS
- 38 -
UNJBG ESIC
CALCULO NMERICO
La regla del trapecio se puede ampliar si subdividimos el intervalo subintervalos, todos de la misma longitud .
en
Sea la particin que se forma al hacer dicha subdivisin. Usando propiedades de la integral tenemos que:
Ahora bien, ya que todos los subintervalos tienen la misma longitud h, tenemos que:
Esta es la regla del trapecio para n subintervalos. Obviamente, esperamos que entre ms subintervalos usemos, mejor sea la aproximacin a la integral.
METODOS NUMERICOS
- 39 -
UNJBG ESIC
CALCULO NMERICO
INICIO
Leer 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
METODOS NUMERICOS
- 40 -
UNJBG ESIC
CALCULO NMERICO
CODIFICACION: 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 AREA=s*(h/2); set(handles.edit5,'string',AREA); % -------------------------------------------------------------------function varargout = pushbutton2_Callback(h, eventdata, handles, varargin) % $$$$====GRAFICA DE LA FUNCION====$$$$ f=inline(get(handles.edit1,'string')); ezplot(f);grid on % -------------------------------------------------------------------function varargout = pushbutton3_Callback(h, eventdata, handles, varargin) close(trapecio)
METODOS NUMERICOS
- 41 -
UNJBG ESIC
CALCULO NMERICO
donde es el polinomio de interpolacin para los datos en la tabla anterior. Usaremos el polinomio de Lagrange. As, tenemos que:
Si denotamos
, entonces:
Simplificando trminos:
Vemos que cada uno de los trminos anteriores, es esencialmente de la misma forma, es decir, una constante por As, calculamos la siguiente integral por partes:
Sea:
por lo tanto,
DOC. LIC. JAVIER LOZANO
METODOS NUMERICOS
- 42 -
UNJBG ESIC
CALCULO NMERICO
Usamos esta frmula para calcular la integral de cada uno de los tres trminos de
Debido al factor
se le conoce como la regla de Simpson de un tercio. para obtener nuestra frmula final:
METODOS NUMERICOS
- 43 -
UNJBG ESIC
CALCULO NMERICO
DIAGRAMA DE FLUJO:
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
DOC. LIC. JAVIER LOZANO
METODOS NUMERICOS
- 44 -
UNJBG ESIC
CALCULO NMERICO
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
METODOS NUMERICOS
- 45 -
UNJBG ESIC
CALCULO NMERICO
CODIFICACION: 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 j=2:n s=s+f(x(i-2))+4*f(x(i-1))+f(x(i)); end I=s*h/3 ; set(handles.edit5,'string',I) else end % -------------------------------------------------------------------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')); ezplot(f,a,b), grid on %----------------------------------------------------------------------function varargout = pushbutton3_Callback(h, eventdata, handles, varargin)cc c close(sinpson13)
METODOS NUMERICOS
- 46 -
UNJBG ESIC
CALCULO NMERICO
donde
Y donde , y , son los puntos que dividen en tres partes iguales al intervalo . Igual que en el caso anterior, se usa el polinomio de interpolacin de Lagrange, y usando el mtodo de integracin por partes se llega a la siguiente frmula:
donde
. Debido al factor
Al igual que en los dos casos anteriores, la regla de Simpson de 3/8, se puede extender si subdividimos el intervalo en intervalos de la misma longitud .
METODOS NUMERICOS
- 47 -
UNJBG ESIC
CALCULO NMERICO
Sea
la particin determinada de esta forma. Cada subintervalo y los puntos determinados as:
Aplicando la regla de
Esta ltima, es la regla de Simpson de 3/8 para n subintervalos todos de la misma longitud.
METODOS NUMERICOS
- 48 -
UNJBG ESIC
CALCULO NMERICO
DIAGRAMA DE FLUJO:
INICIO
S=0
LEER F(x),a,b,n
h=b-a n
n=3
i=3,n,3
S=S+3/8*h*[ F(xi-3)+3F(xi-2)+3F(xi-1)+F(xi)]
ESCRIBIR S
FIN
METODOS NUMERICOS
- 49 -
UNJBG ESIC
CALCULO NMERICO
CODIFICACION: 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')); ezplot(f,a,b), grid on % -------------------------------------------------------------------function varargout = pushbutton3_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')); if rem(n,3)==0 h=(b-a)/n for i=1:1:n+1 x(i)=a+(i-1)*h end s=0 for j=1:3:n-1 s=s+f(x(j))+3*f(x(j+1))+3*f(x(j+2))+f(x(j+3)) end A=3*s*h/8 set(handles.edit5,'string',A) else set(handles.edit5,'string','n debe ser multiplo de 3') end
METODOS NUMERICOS
- 50 -
UNJBG ESIC
CALCULO NMERICO
MTODO DE EULER La idea del mtodo de Euler es muy sencilla y est basada en el significado geomtrico de la derivada de una funcin en un punto dado. Supongamos que tuviramos la curva solucin de la ecuacin diferencial y trazamos la recta tangente a la curva en el punto dado por la condicin inicial.
Debido a que la recta tangente aproxima a la curva en valores cercanos al punto de tangencia, podemos tomar el valor de la recta tangente en el punto como una aproximacin al valor deseado .
As, calculemos la ecuacin de la recta tangente a la curva solucin de la ecuacin diferencial dada en el punto . De los cursos de Geometra Analtica, sabemos que la ecuacin de la recta es:
donde m es la pendiente. En este caso, sabemos que la pendiente de la recta tangente se calcula con la derivada:
METODOS NUMERICOS
- 51 -
UNJBG ESIC
CALCULO NMERICO
es un punto cercano a
Esta aproximacin puede ser suficientemente buena, si el valor de h es realmente pequeo, digamos de una dcima menos. Pero si el valor de h es ms grande, entonces podemos cometer mucho error al aplicar dicha frmula. Una forma de reducir el error y obtener de hecho un mtodo iterativo, es dividir la distancia en n partes iguales (procurando que estas partes sean de longitud suficientemente pequea) y obtener entonces la aproximacin en n pasos, aplicando la frmula anterior n veces de un paso a otro, con la nueva h igual a En una grfica, tenemos lo siguiente: .
lo toma
Esta es la conocida frmula de Euler que se usa para aproximar el valor de aplicndola sucesivamente desde hasta en pasos de longitud h.
METODOS NUMERICOS
- 52 -
UNJBG ESIC
CALCULO NMERICO
DIAGRAMA DE FLUJO:
INICIO
LEER F(x),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
METODOS NUMERICOS
- 53 -
UNJBG ESIC
CALCULO NMERICO
METODOS NUMERICOS
- 54 -
UNJBG ESIC
CALCULO NMERICO
CODIFICACION: function varargout = pushbutton1_Callback(h, eventdata, handles, varargin) funcion=get(handles.edit1,'string'); f=inline(funcion,'x','y'); x0=str2double(get(handles.edit2,'string')); x1=str2double(get(handles.edit3,'string')); n=str2double(get(handles.edit4,'string')); y0=str2double(get(handles.edit5,'string')); h=(x1-x0)/n; X(1,1)=x0 Y(1,1)=y0 for i=1:n y1=y0+h*f(x0,y0); y0=y1; x1=x0+h; x0=x1; X(i+1,1)=x0; Y(i+1,1)=y0; end set(handles.edit6,'string',y1); set(handles.edit7,'string',X); set(handles.edit8,'string',Y); % -------------------------------------------------------------------function varargout = pushbutton2_Callback(h, eventdata, handles, varargin) X=str2num(get(handles.edit7,'string')); Y=str2num(get(handles.edit8,'string')); plot(X,Y,'.',X,Y,'r-'),grid on, axis equal % -------------------------------------------------------------------function varargout = pushbutton3_Callback(h, eventdata, handles, varargin) close(euler)
METODOS NUMERICOS
- 55 -
UNJBG ESIC
CALCULO NMERICO
METODO DE RUNGE-KUTTA DE 4TO ORDEN Los metodos desarrollados por Runge (1885), Kutta (1901), Heun (1900) y otros para la solucion de problemas con valor en la frontera. Este consiste en obtener un resultado que se obtendria al utilizar un numero finito de terminos de una serie de Taylor de la forma:
Este metodo es superior al metodo de punto medio (Runge-Kutta de segundo orden) ya que contiene los primeros cinco terminos de la serie de Taylor, lo cual significa gran exactitud sin el calculo de las derivadas, pero se tiene que evaluar la funcion f(x) cuatro veces para cada subintervalo. Reacomodando para los valores de f(x) y haciendo f(x)' = y + hf(x), se tiene:
METODOS NUMERICOS
- 56 -
UNJBG ESIC
CALCULO NMERICO
DIAGRAMA DE FLUJO:
INICIO
h=b-X0 n
i=1,n,1
Y1=Y0-h/6*(K1+2*K2+2*K3+K4)
X1=X0+h
X0=X1 Y0=Y1
ESCRIBIR Y0
FIN
METODOS NUMERICOS
- 57 -
UNJBG ESIC
CALCULO NMERICO
CODIFICACION: 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')); ezplot(f,a,b), grid on % -------------------------------------------------------------------function varargout = pushbutton3_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')); y0=str2double(get(handles.edit4,'string')); n=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; end set(handles.edit6,'string',y1);
METODOS NUMERICOS
- 58 -