30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
COMPARACIÓN DE LOS MÉTODOS ITERATIVOS DE RUNGE KUTTA 2 ORDEN CON RUNGR KUTTA 4 ORDEN EN UNA EDO DE SEGUNDO ORDEN USANDO FORTRAN 90 , MATLAB Y SCILAB
1. Año de la Diversificación Productiva y del Fortalecimiento de la
Educación
UNIVERSIDAD NACIONAL
DEL CALLAO
FACULTAD DE CIENCIAS
NATURALES Y MATEMÁTICA
FÍSICA TEÓRICA COMPUTACIONAL
“COMPARACIÓN DE LOS MÉTODOS ITERATIVOS
DE RUNGE KUTTA 2 ORDEN CON RUNGR KUTTA 4
ORDEN EN UNA EDO DE SEGUNDO ORDEN
USANDO FORTRAN 90 , MATLAB Y SCILAB”
MARCO ANTONIO ALPACA CHAMBA
FÍSICO BÁSICO
2. ENUNCIADO DEL PROBLEMA:
Use los métodos de RK2 y RK4 con h=0.5, para obtener una aproximación de 𝒙 𝟑 para la
solución de la siguiente ecuación diferencial con valores iniciales:
SOLUCIÓN:
Se comprueba fácilmente que la solución del problema de valor inicial es:
Usando fortran tenemos:
PROGRAM RUNGE_KUTTA_CUARTO_ORDEN
REAL T0,TF,X0,Z0,K1,M1,K2,M2,K3,M3,K4,M4,H
OPEN(UNIT=12,FILE='KUTTA4.TXT',STATUS='UNKNOWN',ACTION='WRITE')
PRINT*,''
PRINT*,
'====================================================================='
PRINT*,'METHOD DE RUNGEKUTTADE CUARTO ORDEN CON CONDICIONES
INICIALES PARA '
PRINT*,'ECUACIONES DIFERENCIALES ORDINARIAS DE SEGUNDO ORDEN'
PRINT*,'==================================================================
===='
PRINT*,''
PRINT*,'INGRESAR EL VALOR INICIAL T0:'
READ(5,*)T0
PRINT*, 'INGRESAR EL VALOR FINAL TF:'
READ*, TF
PRINT*, 'INGRESAR EL VALOR INICAL X0:'
READ*, X0
PRINT*, 'INGRESAR EL VALOR INICIAL Z0:'
READ*, Z0
PRINT*, 'INGRESAR LONGITUD DE PASO,H:'
READ*,H
PRINT*,''
PRINT*,('*',I=1,79)
PRINT '(5X,"RESULTADOS COMPUTACIONALES")'
PRINT*,('*',I=1,79)
PRINT*,''
N=(TF-T0)/H
K=1
PRINT 50
50 FORMAT(3X,'DATOS',5X,'TIME',8X,'POSITION',15X,"VELOCIDAD")
70 WRITE(12,60)K,T0,X0,Z0
PRINT'(2X,I2,8X,F3.1,6X,F12.6,10X,F12.6)',K,T0,X0,Z0
IF (T0.LE.(TF-0.0000001))THEN
DO WHILE (K < N+2)
M1=H*Z0
K1=H*F(T0,X0,Z0)
M2=H*(Z0+K1/2)
K2=H*F(T0+H/2,X0+M1/2,Z0+K1/2)
M3=H*(Z0+K2/2)
K3=H*F(T0+H/2,X0+M2/2,Z0+K2/2)
3. M4=H*(Z0+K3)
K4=H*F(T0+H,X0+M3,Z0+K3)
X0=X0+(M1+2*(M2+M3)+M4)/6
Z0=Z0+(K1+2*K2+2*K3+K4)/6
T0=T0+H
K=K+1
GOTO 70
ENDDO
END IF
60 FORMAT (2X,I2,8X,F3.1,6X,F12.6,10X,F12.6)
PRINT*,''
PRINT*,' POR LO TANTO,LUEGO DE LAS ITERACIONES OBTENEMOS:'
PRINT*,''
WRITE (*,121) T0,X0
121 FORMAT (10X,'X(',F7.2,')=',F12.4)
PRINT*,''
STOP
END PROGRAM
FUNCTION F(T,X,Z)
REAL T,X,Z
F=-5*Z-4*X+0*T
RETURN
END FUNCTION
PROGRAM RUNGE_KUTTA_SECOND_ORDEN
REAL T0,TF,X0,Z0,K1,M1,K2,M2,H
OPEN(UNIT=12,FILE='KUTTA2.TXT',STATUS='UNKNOWN',ACTION='WRITE')
4. PRINT*,''
PRINT*,
'====================================================================='
PRINT*,'METHOD DE RUNGEKUTTADE SEGUNDO ORDEN CON CONDICIONES
INICIALES PARA '
PRINT*,'ECUACIONES DIFERENCIALES ORDINARIAS DE SEGUNDO ORDEN'
PRINT*,'==================================================================
===='
PRINT*,''
PRINT*,'INGRESAR EL VALOR INICIAL T0:'
READ(5,*)T0
PRINT*, 'INGRESAR EL VALOR FINAL TF:'
READ*, TF
PRINT*, 'INGRESAR EL VALOR INICAL X0:'
READ*, X0
PRINT*, 'INGRESAR EL VALOR INICIAL DE Z0:'
READ*, Z0
PRINT*, 'INGRESAR LONGITUD DE PASO,H:'
READ*,H
PRINT*,''
PRINT*,('*',I=1,79)
PRINT '(5X,"RESULTADOS COMPUTACIONALES")'
PRINT*,('*',I=1,79)
PRINT*,''
N=(TF-T0)/H
K=1
PRINT 50
50 FORMAT(3X,'DATOS',5X,'TIME',8X,'POSITION',15X,"VELOCIDAD")
70 WRITE(12,60)K,T0,X0,Z0
PRINT'(2X,I2,8X,F3.1,6X,F12.6,10X,F12.6)',K,T0,X0,Z0
IF (T0.LE.(TF-0.0000001))THEN
DO WHILE (K < N+2)
M1=H*Z0
K1=H*F(T0,X0,Z0)
M2=H*(Z0+K1)
K2=H*F(T0+H,X0+M1,Z0+K1)
X0=X0+(M1+M2)/2
Z0=Z0+(K1+K2)/2
T0=T0+H
K=K+1
GOTO 70
ENDDO
ENDIF
60 FORMAT (2X,I2,8X,F3.1,6X,F12.6,10X,F12.6)
PRINT*,''
PRINT*,' POR LO TANTO,LUEGO DE LAS ITERACIONES OBTENEMOS:'
PRINT*,''
WRITE (*,90) T0,X0
90 FORMAT (10X,'X(',F7.2,')=',F12.4)
PRINT*,''
STOP
END PROGRAM
FUNCTION F(T,X,Z)
REAL T,X,Z
F=-5*Z-4*X+0*T
5. RETURN
END FUNCTION
USANDO MATLAB TENEMOS:
clear;
clc;
t0=0.0;
tf=3.0;
x0=1;
z0=1;
h=0.5;
k=1;
sk=1;
n=0;
i=0;
f=@(t,x,z)0*t-4*x-5*z;
g1=@(t)5./3.*exp(-1*t)-2./3.*exp(-4*t);
T=(t0:0.02:3.5);
xe=g1(T);
t(1)=t0;x(1)=x0;z(1)=z0;
disp(' 4th order Runge-Kutta simulation')
disp('_________________________________________')
disp(' datos t x ')
disp('_________________________________________')
fprintf('n')
fprintf('%6.2f %12.6f %12.6fn',k,t0,x0)
6. while(t(n+1)<=tf)
n=n+1;
% Cuarto order Runge-Kutta simulation
k1=h*z(n);
m1=h*f(t(n),x(n),z(n));
k2=h*(z(n)+m1./2);
m2=h*f(t(n)+h./2,x(n)+k1./2,z(n)+m1./2);
k3=h*(z(n)+m2./2);
m3=h*f(t(n)+h./2,x(n)+k2./2,z(n)+m2./2);
k4=h*(z(n)+m3);
m4=h*f(t(n)+h,x(n)+k3,z(n)+m3);
x(n+1)=x(n)+(k1+2*k2+2*k3+k4)./6;
z(n+1)=z(n)+(m1+2*m2+2*m3+m4)./6;
t(n+1)=t(n)+h;
k=k+1;
fprintf('%6.2f %12.6f %12.6fn',k,t(n+1),x(n+1))
end
fprintf('Final answer n');
fprintf('%12.6fn',x(n));
fprintf('n')
st(1)=t0;sx(1)=x0;sz(1)=z0;
disp(' Second order Runge-Kutta simulation')
disp('_________________________________________')
disp(' datos t x ')
disp('_________________________________________')
fprintf('n')
fprintf('%6.2f %12.6f %12.6fn',1,st(1),sx(1))
while(st(i+1)<=tf)
i=i+1;
% Second order Runge-Kutta simulation
sk1=h*sz(i);
sm1=h*f(st(i),sx(i),sz(i));
sk2=h*(sz(i)+sm1);
sm2=h*f(st(i)+h,sx(i)+sk1,sz(i)+sm1);
sx(i+1)=sx(i)+(sk1+sk2)./2;
sz(i+1)=sz(i)+(sm1+sm2)./2;
st(i+1)=st(i)+h;
sk=sk+1;
fprintf('%6.2f %12.6f %12.6fn',sk,st(i+1),sx(i+1))
end
fprintf('Final answer n');
fprintf('%12.6fn',sx(i));
fprintf('n')
figure1=figure('color',[1 1 1]);
plot(T,xe,'b-');
hold on
plot(t,x,'--x');
plot(st,sx,'--o');
grid on
xlabel('Time(t)');
ylabel('Amplitude');
title('x(t)=(5/3)e^-^t-(2/3)e^-^4^t')
legend('Exact','4th O Runge-Kutta','2nd O Runge-Kutta',1)
7.
8. Usando Scilab tenemos:
clear;
clc;
t0=0.0;
tf=3.0;
x0=1.0;
z0=1.0;
h=0.5;
k=1;
sk=1;
n=0;
i=0;
function y=f(t, x, z)
y=0*t-4*x-5*z
endfunction
T=(t0:0.02:3.5);
xe=5/3*exp(-1*T)-2/3*exp(-4*T);
t(1)=t0;x(1)=x0;z(1)=z0;
disp(' 4th order Runge-Kutta simulation')
disp('_________________________________________')
disp(' datos t x ')
disp('_________________________________________')
printf('%6.2f %12.6f %12.6fn',k,t0,x0)
while(t(n+1)<=tf)
n=n+1;
// Cuarto order Runge-Kutta simulation
k1=h*z(n);
m1=h*f(t(n),x(n),z(n));
k2=h*(z(n)+m1/2);
m2=h*f(t(n)+h/2,x(n)+k1/2,z(n)+m1/2);
9. k3=h*(z(n)+m2/2);
m3=h*f(t(n)+h/2,x(n)+k2/2,z(n)+m2/2);
k4=h*(z(n)+m3);
m4=h*f(t(n)+h,x(n)+k3,z(n)+m3);
x(n+1)=x(n)+(k1+2*k2+2*k3+k4)/6;
z(n+1)=z(n)+(m1+2*m2+2*m3+m4)/6;
t(n+1)=t(n)+h;
k=k+1;
printf('%6.2f %12.6f %12.6fn',k,t(n+1),x(n+1))
end
printf('Final answer n');
printf('%12.6fn',x(n));
printf('n')
st(1)=t0;sx(1)=x0;sz(1)=z0;
disp(' Second order Runge-Kutta simulation')
disp('_________________________________________')
disp(' datos t x ')
disp('_________________________________________')
printf('%6.2f %12.6f %12.6fn',1,st(1),sx(1))
while(st(i+1)<=tf)
i=i+1;
// Second order Runge-Kutta simulation
sk1=h*sz(i);
sm1=h*f(st(i),sx(i),sz(i));
sk2=h*(sz(i)+sm1);
sm2=h*f(st(i)+h,sx(i)+sk1,sz(i)+sm1);
sx(i+1)=sx(i)+(sk1+sk2)/2;
sz(i+1)=sz(i)+(sm1+sm2)/2;
st(i+1)=st(i)+h;
sk=sk+1;
printf('%6.2f %12.6f %12.6fn',sk,st(i+1),sx(i+1))
end
printf('Final answer n');
printf('%12.6fn',sx(i));
printf('n');
scf(1);
clf(1);
plot2d(T,xe,rect=[0,-0.8,3.5,1.2],style=5);
plot(t,x,'bx--');
plot(st,sx,'m--o');
xlabel('Time(t)');
ylabel('Amplitude');
title('x(t)=(5/3)e^-t-(2/3)e^-4t','fontsize',3);
legend('Exact','4th O Runge-Kutta','2nd O Runge-Kutta',1);
xgrid