Está en la página 1de 8

UNIVERSIDAD NACIONAL MAYOR DE SAN MARCOS

UNIVERSIDAD DEL PERÚ, DECANA DE AMÉRICA


Facultad De Química e Ingeniería Química

LABORATORIO DE METODOS NUMERICOS


INFORME DE LABORATORIO

INTEGRANTES:
Landeo Romero Jorge 20070094
Acosta Tuesta Russel Enrique 20070014
Huapaya Carrasco Luis Angel 18070101

GRUPO: 2
SECCIÓN :1
DOCENTE: Sandivar Rosas Juana
LIMA-PERÚ, 2022
25.1 Resuelva el siguiente problema de valor inicial en el intervalo de t=0 a 2, donde
y (0) =1. Muestre todos sus resultados en la misma grafica

𝑑𝑦
= 𝑦𝑡 3 − 1.1𝑦
𝑑𝑡
a) Analíticamente
b) Método de Euler con h=0.5 y 0.25
c) Método de punto medio con h=0.5
d) Método RK de cuarto orden con h=0.5
SOLUCION ANALITICA:
SOLUCION EN SCILAB:
25.26 En la figura P25.26 aparecen tres saltadores de bungee unidos. Si los cables de
bungee esta idealizados como resortes lineales (es decir, gobernados por la ley de
Hooke) se pueden desarrollar las siguientes ecuaciones diferenciales basadas en los
equilibrios de fuerza.

𝑑2 𝑥1
𝑚1 = 𝑚1 𝑔 + 𝑘2 (𝑥2 − 𝑥1 ) − 𝑘1 𝑥1
𝑑𝑡 2
𝑑2 𝑥2
𝑚2 = 𝑚2 𝑔 + 𝑘3 (𝑥3 − 𝑥2 ) − 𝑘2 (𝑥1 − 𝑥2 )
𝑑𝑡 2
𝑑 2 𝑥3
𝑚3 = 𝑚3 𝑔 + 𝑘3 (𝑥2 − 𝑥3 )
𝑑𝑡 2

Donde mi= la masa del saltador i (kg), kj= la constante de resorte para el cable j
(N/M), xi= el desplazamiento del saltador i medido hacia abajo desde su posición de
equilibrio (m) y g=aceleración gravitacional. Resuelva estas ecuaciones para las
posiciones y velocidades de los 3 saltadores dado que las condiciones iniciales de
todas las posiciones y velocidades son cero en t=0.Use los siguientes parámetros en
sus cálculos: m1=60 kg, m2=70, m3=80 kg, k1=k3=50 y k2=100 (N/m)
SOLUCION ANALITICA:
Para este problema se optará por el uso del método Runge Kutta
Reemplazado los parámetros que nos da el problema y dando la forma dy/dx:
𝑑2 𝑥1 100 50
= (9.81) + (𝑥2 − 𝑥1 ) − 𝑥
𝑑𝑡 2 60 60 1
𝑑 2 𝑥2 50 100
= (9.81) + (𝑥3 − 𝑥2 ) − (𝑥 − 𝑥2 )
𝑑𝑡 2 70 70 1
𝑑2 𝑥3 50
2
= (9.81) + (𝑥2 − 𝑥3 )
𝑑𝑡 80
Y donde las condiciones son:
𝑥(0) = 𝑥0
𝑥(0) = 𝑥0
Recordemos que:
𝑑𝑣 𝑑 2 𝑥
𝑎(𝑡) = =
𝑑𝑡 𝑑𝑡 2
Sustituyendo en las ecuaciones con respecto a la velocidad:
𝑑𝑣1 50
= (9.81) + 1.666(𝑥2 − 𝑥1 ) − 𝑥1
𝑑𝑡 60
𝑑𝑣2 100
= (9.81) + 0.714(𝑥3 − 𝑥2 ) − (𝑥 − 𝑥2 )
𝑑𝑡 70 1
𝑑𝑣3
= (9.81) + 0.625(𝑥2 − 𝑥3 )
𝑑𝑡
Dado que no menciona un intervalo a trabajar, se usará en un rango de 0 a 15 con
un tamaño de paso h=1
Como se mencionó se usará Runge kutta:
𝟏 𝟐
𝒚𝒊+𝟏 = 𝒚𝒊 + ( 𝒌𝟏 , 𝒌𝟐 , ) 𝒉
𝟑 𝟑
𝒌𝟏 = 𝒇(𝒙𝒊 , 𝒚𝒊 )
𝟑 𝟑
𝒌𝟐 = 𝒇 (𝒙𝒊 + 𝒉, 𝒚𝒊 + 𝒌𝒊 𝒉) → 𝑴. 𝑹𝒂𝒍𝒔𝒐𝒏
𝟒 𝟒
Aplicándolo al problema:

𝒋 𝒋 𝟏 𝟐
𝒗𝒊+𝟏 = 𝒗𝒊 + ( 𝒌𝟏 , 𝒌𝟐 , ) ∗ 𝟏
𝟑 𝟑
𝒌𝟏 = 𝒇(𝒙𝟏𝒊 , 𝒙𝟐𝒊 )
𝟑 𝟑
𝒌𝟐 = 𝒇 (𝒙𝟏𝒊 + 𝒉, 𝒙𝟐𝒊 + 𝒌𝒊 𝒉)
𝟒 𝟒
De esta manera se consigue los valores de v.
Para el caso de la posición (x), la ecuación dada será la siguiente:
𝑑𝑥𝑖
𝑣𝑖 = = 𝑓(𝑥𝑖 )
𝑑𝑡
Mediante RK (n=1)
𝒙𝒊+𝟏 = 𝒙𝒊 + 𝒗𝒊 ∗ 𝒉 ∗ 𝟏

SOLUCION EN SCILAB:
function
disp('Metodo de Rugen-Kutta para hallar la aceleracion')
deff('y=dd1f(x1,x2,x3)','y=(558.6+100*x2-150*x1)/60');
deff('y=dd2f(x1,x2,x3)','y=(687.7+50*x3-100*x2-50*x1)/70');
deff('y=dd3f(x1,x2,x3)','y=(784.8+50*x2-50*x1)/80');
a=0
b=input('El tiempo que dura el bungee es: ');
h=input('El tamaño del paso(h): ')
//Aplicando las condiciones iniciales
xo1=input('El valor de la posicion en t=0 es: ')
xo2=input('El valor de la posicion en t=0 es: ')
xo3=input('El valor de la posicion en t=0 es: ')
printf('x v1 v2 v3\n')
printf('%.2f %.4f %.4f %.4f\n',a,xo1,xo2,xo3)
for p=h:h:b
//k1
k11=dd1f(xo1,xo2,xo3);
k12=dd2f(xo1,xo2,xo3);
k13=dd3f(xo1,xo2,xo3);
//k2
k21=dd1f(xo1+((1/2)*h),xo2+((1/2)*h*k11),xo3+((1/2)*h*k12));
k22=dd2f(xo1+((1/2)*h),xo2+((1/2)*h*k11),xo3+((1/2)*h*k12));
k23=dd3f(xo1+((1/2)*h),xo2+((1/2)*h*k11),xo3+((1/2)*h*k12));
//k3
k31=dd1f(xo1+((1/2)*h),xo2+((1/2)*h*k21),xo3+((1/2)*h*k22));
k32=dd1f(xo1+((1/2)*h),xo2+((1/2)*h*k21),xo3+((1/2)*h*k22));
k33=dd1f(xo1+((1/2)*h),xo2+((1/2)*h*k21),xo3+((1/2)*h*k22));
//k4
k41=dd1f(xo1+((1/2)*h),xo2+((1/2)*h*k31),xo3+((1/2)*h*k32));
k42=dd1f(xo1+((1/2)*h),xo2+((1/2)*h*k31),xo3+((1/2)*h*k32));
k43=dd1f(xo1+((1/2)*h),xo2+((1/2)*h*k31),xo3+((1/2)*h*k32));
//Resultado
v1=xo1+((1/6)*(k11+2*k21+2*k31+k41)*h);
v2=xo2+((1/6)*(k12+2*k22+2*k32+k42)*h);
v3=xo3+((1/6)*(k13+2*k23+2*k33+k43)*h);
xo1=v1
xo2=v2
xo3=v3
printf(' %.2f %.4f %.4f %.4f\n',p,v1,v2,v3)
end
endfunction

La velocidad de enfriamiento de un cuerpo se puede expresar como dT/dt = - K (T–


Ta), T=temperatura del cuerpo (°C); Ta= temperatura del medio que rodea al cuerpo
(°C); K= constante de proporcionalidad (min-1). Si se calienta una bola metálica
hasta 90°C y se sumerge en el agua que se mantiene a una temperatura constante Ta
=20 °C. Calcular el tiempo que le toma a la bola enfriarse hasta 30°C, si K= 0.1 min-
1
. Considere un incremento de 4 min. Emplee interpolación lineal para calcular el
tiempo.
SOLUCION ANALITICA:
dT
= −K(T– Ta)
dt
𝑫𝒆𝒔𝒑𝒆𝒋𝒂𝒎𝒐𝒔 𝒍𝒂𝒔 𝒗𝒂𝒓𝒊𝒂𝒃𝒍𝒆𝒔:
𝑑𝑇
= −𝐾𝑑𝑡
𝑇 − 𝑇𝑎
𝑰𝒏𝒕𝒆𝒈𝒓𝒂𝒎𝒐𝒔:
𝑑𝑇
∫ = ∫ −𝐾𝑑𝑡
𝑇 − 𝑇𝑎
ln(𝑇 − 𝑇𝑎) = −𝐾𝑡 + 𝐶
𝑨𝒑𝒍𝒊𝒄𝒂𝒎𝒐𝒔 𝒆𝒙𝒑𝒐𝒏𝒆𝒏𝒄𝒊𝒂𝒍:

𝑒 ln(𝑇−𝑇𝑎) = 𝑒 −𝐾𝑡+𝐶
𝑇 = 𝐶 𝑒 −𝐾𝑡 + 𝑇𝑎
𝐸𝑣𝑎𝑙𝑢𝑎𝑚𝑜𝑠 𝑒𝑛 𝑇 = 0:
(90 − 20) = 𝐶 𝑒 −(0.1)𝑡
𝑐 = 70 𝑒𝑛𝑡𝑜𝑛𝑐𝑒𝑠 𝑇 = 70 𝑒 −𝐾𝑡 + 𝑇𝑎
𝑬𝒗𝒂𝒍𝒖𝒂𝒎𝒐𝒔 𝑻 = 𝟑𝟎:
(30 − 20) = 70 𝑒 −0.1∗𝑡
1
= 𝑒 −0.1∗𝑡
7
1
ln ( ) = ln(𝑒 −0.1∗𝑡 )
7
𝑡 = 19.4591
Desarrollamos en:

𝑇(16) = 70 𝑒−0.1∗16 + 20
𝑇(16) = 34.13275

𝑇(20) = 70 𝑒−0.1∗20 + 20
𝑇(20) = 29.47346

Desarrollamos con interpolación lineal:


f(x1 ) − f(xo )
fi = f(xo ) + (x − xo)
x1 − xo
29.47346 − 34.13275
30 = 34.13275 + (x − 16)
20 − 16
−4.13275 = −1.1648225(𝑥 − 20)
𝑥 = 23.5480

Error:
23.5480 − 19.4591
𝐸𝑟𝑟𝑜𝑟 = ∗ 100% = 21.0128%
19.4591
SOLUCION EN SCILAB:
//DESARROLLO DEL PROBLE DE ENFRIAMIENTO DE UN CUERPO
function pro_01()
resp='s'
while resp=='s' | resp=='S'
printf ('\t\tMENU DE OPCIONES\n');
printf ('\t\ 1.-Interpolación lineal\n');
printf ('\t\ 2.-FIN DEL MENÚ\n');
//t=x y T=y
deff('g=df(x,y)','g=-0.1*(y-20)')
deff('y=f(x,y)','y=70*exp(-0.1*y)+20')
//Selecione su opción
opc=input('Ingrese la opción elegida : ');
//Se utiliza el comando de selección múltiple switch
switch opc
case 1 then
disp('==EL VALOR EVALUADO CON EDO ES 19.4591==');
EDO=19.4591;
T=input('Ingrese la tempertura: ');
x=[16 20]
y=[34.13275 29.4735]
t=((T-y(1)*x(2)-x(1))/(y(2)-y(1)))+x(1);
printf('Por el método de interpolación se obtuvo un tiempo de%.4f\n',t);
er=100*abs((EDO-t)/EDO);
printf("\t\nEl error es de %4.4f\n",er);
case 2 then
printf('Fin del menú');
otherwise
disp('Error');
end
end
resp=input('Si desea repetir otra opción del menu, presione S o s', 's');
endfunction

También podría gustarte