Documentos de Académico
Documentos de Profesional
Documentos de Cultura
NACIONAL
E.S.I.M.E. Azcapotzalco
Métodos numéricos
Profesor: David Domínguez Zamilpa
INDICE
Tema Página
Asignación de trabajos____________________________3
Método de Euler________________________________4
Código escrito___________________________9
Capturas de código_______________________11
Pantalla de Resultados____________________12
Método de Runge-Kutta 2° Orden__________________13
Código escrito___________________________22
Capturas de código_______________________25
Pantalla de Resultados____________________27
2
Equipo “C” Apuntes Extraordinario 2SV1
ASIGNACIÓN DE EXTRAORDINARIO
3
Equipo “C” Apuntes Extraordinario 2SV1
METODO DE EULER
Observe la siguiente figura:
y fr(x)=yv
= 𝑦𝑣 − 𝑦𝑖+1
𝑎𝑣
Yi
yi+1=yi+θh
Extrapolación
numérica que
Pendiente=0
obtiene un
nuevo valor
x
yi+1 en base al
Xi Xi+1
h valor del
trazado
Tamaño de paso anterior yi
con el
trazado dela
pendiente al
inicio del
Figura de la extrapolación puntual, intervalo,
paso a paso, para calcular nuevos como una
valores – yi+1 – de aproximación a la aproximación
función verdadera de la
pendiente
gv = fv (x). promedio en
todo el
intervalo.
4
Equipo “C” Apuntes Extraordinario 2SV1
5
Equipo “C” Apuntes Extraordinario 2SV1
6
Equipo “C” Apuntes Extraordinario 2SV1
7
Equipo “C” Apuntes Extraordinario 2SV1
(5) Conclusiones
Observando la grafica comparativa de la función verdadera y el acercamiento
de la integración numérica con el método de Euler, pudimos observar que las
aproximaciones numéricas puntuales extrapoladas tienen asociadas errores
notables bastante grandes
8
Equipo “C” Apuntes Extraordinario 2SV1
Código Escrito
#include <stdio.h>
#include <conio.h>
void enc()
{
clrscr();
gotoxy(35,1);
printf("I.P.N.");
gotoxy(33,2);
printf("E.S.I.M.E AZCAPOTZALCO");
gotoxy(14,3);
printf("Equipo 'C' Martinez Oviedo Omar");
}
void enunciado()
{
gotoxy(1,5);
printf("Problema: Utilizar el método de Euler para ");
printf("integrar numericamente la ecuacion siguiente ");
printf("f(x,y)= 2x^3 + 12x^2- 20x + 8.5");
printf("de x=0 hasta x=4 con un tamano de paso de 0.5.");
printf("La condicion inicial en x=0 es y=1. Tomar en ");
printf("cuenta que la solucion exacta esta dada por la ");
printf("ecuacion y=-0.5x^ + 4x^3 - 10x^2+ 8.5x + 1 \n");
gotoxy(35,10);
printf("SOLUCION");
}
void euler()
{
float fXi;
9
Equipo “C” Apuntes Extraordinario 2SV1
10
Equipo “C” Apuntes Extraordinario 2SV1
Capturas de Código
Pantalla
De
Resultados
11
Equipo “C” Apuntes Extraordinario 2SV1
12
Equipo “C” Apuntes Extraordinario 2SV1
1
𝑎1 𝑝1 = ------------ 7
2
1
𝑎2 𝑞11 = ----------- 7
2
Como tenemos tres ecuaciones con cuatro incógnitas, debemos de dar un valor a
una de estas para determinar las otras tres. Por esto hay un número infinito de
métodos de R-K de 2° orden
A continuación, presentamos tres de las versiones más usadas por proporcionarnos
errores contextuales menores:
𝟏
A) Método de Heun (con el corrector 𝒂𝟐 = )
𝟐
𝑘1 𝑘2
𝑦1+1 = 𝑦𝐻𝑒𝑢𝑛 = 𝑦𝐻 = 𝑦𝑖 + ( + )ℎ
2 2
Por lo tanto:
𝑘1 = 𝑓(𝑥𝑖 , 𝑦𝑖 ) & 𝑘2 = 𝑓(𝑥2 + ℎ, 𝑦𝑖 + 𝑘1 ℎ)
Escriba aquí la ecuación.
𝑘1 2𝑘2
𝑦1+1 = 𝑦𝑅𝐿𝐴𝑆𝑇𝑂𝑁 = 𝑦𝑅 = 𝑦𝑖 + ( + )ℎ
3 3
14
Equipo “C” Apuntes Extraordinario 2SV1
𝑘1 = 𝑓(𝑥𝑖 , 𝑦𝑖 )
3ℎ 3
𝑘2 = 𝑓 (𝑥𝑖 + , 𝑦𝑖 + 𝑘, ℎ)
4 4
Use los métodos de R-K / 2° orden, en las versiones de Heun, punto medio y de
Ralston – Rabinowitz, para que dada la ecuación diferencial ordinaria:
𝑓(𝑥, 𝑦) = −2𝑥 3 + 12𝑥 2 − 20𝑥 + 8.5
RESUELVA:
(1) DETERMINE LA 𝑓𝑟(𝑥), a partir de 𝑓(𝑥, 𝑦), considerando la condición inicial: en
𝑥 = 0 ,𝑦 = 1
(2) Integre numéricamente la EDO. Iniciada en 𝛼 en el 𝑥 ∈ [0,4]con tamaño de
paso ℎ = 0.5, calculando también los errores verdaderos %. Indique esta
integración numérica en una tabla
(3) De acuerdo a (1) y (2) construya la gráfica comparativa de estas integraciones
numéricas con respecto a la función verdadera
(4) De acuerdo a (1) y (2) y (3) exponga sus conclusiones incluso comparando
también con los resultados o conceptos de Euler.
Solución
𝑓𝑟(𝑥) = 𝑦𝑟 =?
Por lo tanto:
𝑦𝑟 = −0.5𝑥 4 + 4𝑥 3 − 10𝑥 2 + 8.5𝑥 + 1
15
Equipo “C” Apuntes Extraordinario 2SV1
x Yr
0.0 1.00000 (2) Integre numéricamente la EDO. Iniciada en 𝛼 en el 𝑥 ∈ [0,4]
0.5 3.21875 con tamaño de paso ℎ = 0.5, calculando también los errores
1.0 3.00000 verdaderos %. Después de hechos los cálculos, regístrelos en la
tabla respectiva con el el 𝑥 ∈ [0,4] con tamaño de paso ℎ = 0.5.
1.5 2.21875
2.0 2.00000
2.5 2.71875 (2a) Integración numérica con Heun
3.0 4.00000
3.5 4.71875
Para: 𝑥𝑖+1 = 0.5 → 𝑓(𝑥𝑖 = 0, 𝑦𝑖 = 1)
4.0 3.00000
𝑘1 𝑘2
𝑦1+1 = 𝑦𝐻𝑒𝑢𝑛 = 𝑦𝐻 = 𝑦𝑖 + ( + )ℎ
2 2
Por lo tanto:
Por lo tanto:
8.5 1.25
𝑦𝑖+1 = 𝑦ℎ = 1 + ( + ) 0.5 = 1 + (4.875)0.5 = 3.4375
2 2
3.21875 − 3.4375
𝐸𝑟𝑣% = | | % = 6.8%
3.21875
Integración numérica con Heun
Para 𝑥𝑖+1 = 1.5 → 𝑓(𝑥𝑖 = 0.5,3.4375)
𝑘1 𝑘2
𝑦ℎ = 𝑦𝑖 + ( + )ℎ
2 2
Por lo tanto:
𝑘1 = 𝑓(0.5,3.4375) = 1.25
16
Equipo “C” Apuntes Extraordinario 2SV1
17
Equipo “C” Apuntes Extraordinario 2SV1
3.21875 − 3.277344
𝐸𝑟𝑣% = 100 | | % = 1.8%
3.21875
Para: 𝑥𝑖+1 = 1.0 → 𝑓(𝑥𝑖 = 0.5, 𝑦𝑖 = 3.277344)
𝑘1 2𝑘2
𝑦𝑖+1 = 𝑦𝑅𝐴𝐿𝑆𝑇 = 3.277744 + ( + )ℎ
3 3
18
Equipo “C” Apuntes Extraordinario 2SV1
Por lo tanto:
𝑘1 = 𝑓(0.5, 𝑦𝑖 = 3.27734) = 1.25
3 3 3
𝑘2 = 𝑓 (0.5 + (0.5), 𝑦𝑖 + 𝑘1 ℎ) = 𝑓 (0.875, 𝑦𝑖 + 𝑘1 ℎ) =
4 4 4
= −2(0.875)3 + 12(0.875)2 − 20(0.875) + 8.5 = −1.152344
Por lo tanto:
1.25 −1.152344(2)
𝑦𝑅𝐴𝐿𝑆𝑇 = 3.277344 + ( + ) 0.5 =
3 3
= 3.277344 + (0.416667 − 0.76822𝑞)0.5 =
= 3.277344 + (−0.351562)0.5 = 3.101563
3 − 3.101563
𝐸𝑟𝑣% = 100 | | % = 3.3%
3
19
Equipo “C” Apuntes Extraordinario 2SV1
20
Equipo “C” Apuntes Extraordinario 2SV1
(4) Conclusiones
Se mencionó, debatió y concluyo en clase sobre las aproximaciones de las
integraciones numéricas a los puntos respectivos de la 𝑓𝑣 (𝑥); promueva
también, de esta manera, el análisis de los errores.
21
Equipo “C” Apuntes Extraordinario 2SV1
Código Escrito
#include <conio.h>
#include <stdio.h>
float k1(), k2();
float L, R, V, Ti, H;
float Tf, K1, K2;
float i, j, Iant, Inva;
float k1(float Iant)
{
float x;
x= H* (-(R/L)*(Iant)+(V/L));
return (x);
}
float k2(float K1)
{
float x;
x=H * (-(R/L)*(Iant+K1)+(V/L));
return(x);
}
int main()
{
int cont, cont1, cont2;
cont=cont1=cont2=0;
i=j=Iant=Inva=0.0;
L=R=V=Ti=H=0.0;
clrscr();
gotoxy(25,1);
printf("METODO DE RUNGE-KUTTA\n");
gotoxy(5,2);
printf("Autores: Eq. 'C' Martinez Oviedo Omar");
22
Equipo “C” Apuntes Extraordinario 2SV1
gotoxy(1,5);
printf("Teclee el valor de la autoinductancia: \n");
gotoxy(52,5); scanf("%f", &L);
gotoxy(1,6);
printf("Teclee el valor de la resistencia: ");
gotoxy(52,6); scanf("%f", &R);
gotoxy(1,7);
printf("Teclee el valor del voltaje: ");
gotoxy(52,7); scanf("%f", &V);
gotoxy(1,8);
printf("Teclee el valor del tiempo inicial: ");
gotoxy(52,8); scanf("%f", &Ti);
gotoxy(1,9);
printf("Teclee el valor del tiempo final: ");
gotoxy(52,9); scanf("%f", &Tf);
gotoxy(1,10);
printf("Teclee el valor del paso o incrementos del tiempo:");
gotoxy(52,10); scanf("%f", &H);
printf("Paso Tiempo T Corriente \n");
printf("-------------------------\n");
for (i=Ti; i<=Tf; i=i+H)
{
cont=cont+1;
cont1=cont1+1;
K1=k1(Iant);
K2=k2(K1);
Inva=Iant + (K1 + K2)/2;
j=i+.1;
printf("%d %f %f",cont,j,Inva);
23
Equipo “C” Apuntes Extraordinario 2SV1
if(cont1==10){
cont2=cont2+1;
printf(" \n\n%d segundos \n",cont2);
cont1=0;
}
else
{printf("\n");
}
Iant=Inva;
}
getch();
return 0;
}
24
Equipo “C” Apuntes Extraordinario 2SV1
Capturas de Código
25
Equipo “C” Apuntes Extraordinario 2SV1
26
Equipo “C” Apuntes Extraordinario 2SV1
Pantalla de Resultados
27
Equipo “C” Apuntes Extraordinario 2SV1
Solución numérica
y0=2.0;
28
Equipo “C” Apuntes Extraordinario 2SV1
yx=(4*exp(0.8*x))-(0.5*y0);
k1=h*yx;
k2=h*(4*exp(0.8*(x+h/2))-(0.5*(y0+k1/2)));
k3=h*(4*exp(0.8*(x+h))-(0.5*(y0-k1+(2*k2))));
y0=y0+(1.0/6)*(k1+4*k2+k3);
cout <<endl;
(5.10)
donde
29
Equipo “C” Apuntes Extraordinario 2SV1
(5.11)
yx=(4*exp(0.8*x))-(0.5*y0);
k1=h*yx;
k2=h*(4*exp(0.8*(x+h/2))-(0.5*(y0+k1/2)));
k3=h*(4*exp(0.8*(x+h))-(0.5*(y0+k2/2)));
k4=h*(4*exp(0.8*(x+h))-(0.5*(y0+k3)));
y0=y0+((1.0/6)*(k1+(2*k2)+(2*k3)+k4));
cout <<endl;
30
Equipo “C” Apuntes Extraordinario 2SV1
significa que el error por paso es del orden de , mientras que el error total
acumulado tiene el orden . Por lo tanto, la convergencia del método es del orden
yx=(4*exp(0.8*x))-(0.5*y0);
k1=yx;
k2=(4*exp(0.8*(x+(h/4.0))))-(0.5*(y0+((k1*h)/4.0)));
31
Equipo “C” Apuntes Extraordinario 2SV1
k3=(4*exp(0.8*(x+(h/4.0))))-(0.5*(y0+((k1*h)/8.0)+((k2*h)/8.0)));
k4=(4*exp(0.8*(x+(h/2.0))))-(0.5*(y0-((k2*h)/2.0)+(k3*h)));
k5=(4*exp(0.8*(x+(h*(3.0/4.0)))))-
(0.5*(y0+(k1*(h*(3.0/16.0)))+(k4*h*(9.0/16.0))));
k6=(4*exp(0.8*(x+h)))-(0.5*(y0-
(k1*h*(3.0/7.0))+(k2*h*(2.0/7.0))+(k3*h*(12.0/7.0))-
(k4*h*(12.0/7.0))+(k5*h*(8.0/7.0))));
y0=y0+((1.0/90.0)*h*((7*k1)+(32*k3)+(12*k4)+(32*k5)+(7*k6)));
cout <<endl;
32