Universidad Mayor de San Andrés Facultad de Ingeniería Programación Y Métodos Numéricos
Universidad Mayor de San Andrés Facultad de Ingeniería Programación Y Métodos Numéricos
Universidad Mayor de San Andrés Facultad de Ingeniería Programación Y Métodos Numéricos
FACULTAD DE INGENIERÍA
PROGRAMACIÓN Y MÉTODOS NUMÉRICOS
1.- Se ha sumergido el uso del metano, en un cilindro como un combustible de emergencia para el sistema
de calefacción de una planta que normalmente usa gas natural (compuesto por gran parte por metano) .
Se ha de mantener en reserva una cantidad suficiente de cilindros de gas para suministrar 25,200 kcal/h
durante 24 horas si el metano produce 97,200 kcal/kmol al quemarse y se entrega en un cilindro de 56.62
litros a 204 atm y 21°C . ¿Cuantos cilindros deben ser mantenidos en reserva? Obtener predicciones
basadas en la ecuación de Van der Waals.
Datos:
a
Ecuación de Van Der Waals: P + (V − b) = RT
V2
a = 2.25 atm*lt^2/mol^2
b = 0.0428 lt/mol
R = 0.082 atm*lt/°k*mol
Resolver para el volumen molar, usando el método de tanteo, o sea para la función f(𝑉̅) = 0
Sugerencia: Tome el primer valor, como el volumen ideal calculado con la ecuación de gas ideal (P𝑉̅ =
nRT). Los siguientes valores de 𝑉̅ se calcularán sumando o restando un paso Δ𝑉̅ . Estos cálculos deberán
repetirse hasta que se cumplo la condición f(𝑉̅) <= TOL. Entonces, a partir del resultado calculado de 𝑉̅ ,
se determina el número de cilindros a mantenerse en reserva.
PSEUDOCÓDIGO
Leer Qnec,tiempo,PC
moles tot=Qnec*tiempo*1000/PC
leer Vcil,p,T,R,a,b,Dv
Videal=R*T/p
f_v=f(Videal)
Mientras abs(f_v)>10 ^-10
Videal=Videal-dV
f_v=f(Videal)
fin Mientras
nmoles_cil=Vcil/Videal
cilindros=mole_tot/nmoles_cil
PROGRAMA EN MATLAB
%P5-E1 INICIO
%DATOS
Qnec=25200;%kcal/horas
tiempo=24;%horas
PC=97200;%kcal/kmol Qnec,tiempo,PC
%Calculo de los moles totales de metano
moles_tot=Qnec*tiempo*1000/PC;%mol
moles tot=Qnec*tiempo*1000/PC
%Cilindros
Vcil=56.62;%Litros
P=204;%atm
T=294;%K
R=0.082;%atm*L/K*mol Vcil,p,T,R,a,b,Dv
a=2.25;%atm*L^2/mol^2
b=0.0428;%L/mol
dV=0.0000001;
Videal=R*T/p
%La iteración f_v=f(Videal)
f=@(V) P*V^3-(P*b+R*T)*V^2+a*V-a*b;
%PV=RT
Videal=R*T/P;
f_v=f(Videal); abs(f_v)>10 ^-10
while abs(f_v)>10^-10
Videal=Videal-dV
f_v=f(Videal); SI
end
nmoles_cil=Vcil/Videal; Videal=Videal-Dv
cilindros=moles_tot/nmoles_cil f_v=f(Videal)
NO
nmoles_cil=Vcil/Videal
cilindros=mole_tot/nmoles_cil
cilindros
FIN
2.- Usando funciones, realizar un programa que ejecute las siguientes tareas:
Dadas 2 matrices. Calcular el producto de matrices. El programa debe tener las siguientes partes:
PSEUDOCÓDIGO
Leer A B
funcion[na,ma,nb,mb]=dimensiones_matrices
[nA mA]=tamaño(A)
[nB mB]=tamaño(B)
función[F]=validación_matrices
Mientras
si mA==nB
F=1
No
F=0
FinMientras
funcion [C] = producto_matricial(A,B,F)
[nA,mA,nB,mB]=dimensiones_matrices(A,B);
Para i=1:nA
Para k=1:mB
C(i,k)=0;
Para p=1:mA
C(i,k)=C(i,k)+A(i,p)*B(p,k);
fin
fin
fin
funcion [C] = mostrar_C(C)
Imprimir(C)
fin
PROGRAMA EN MATLAB
INCIO
function [nA,mA,nB,mB] =
dimensiones_matrices(A,B)
%A(n,m)
[nA mA]=size(A); A,B
[nB mB]=size(B);
end
function [F] = validacion_matrices(mA,nB) funcion[na,ma,nb,mb]=dimensiones_matrices
if mA==nB
F=1;
[nA mA]=tamaño(A)
else
F=0; [nB mB]=tamaño(B)
end
function [C] = producto_matricial(A,B,F)
[nA,mA,nB,mB]=dimensiones_matrices(A,B); función[F]=validación_matrices
for i=1:nA
for k=1:mB
C(i,k)=0; NO F=0
mA==nB
for p=1:mA
C(i,k)=C(i,k)+A(i,p)*B(p,k);
SI
end
end F=1
end
end funcion [C] = producto_matricial(A,B,F)
function [C] = mostrar_C(C) [nA,mA,nB,mB]=dimensiones_matrices(A,B)
disp(C)
end
%P5-E2 i=1,i=i+1,i=1:nA
clc
clear all k=1,k=k+1,k=1:mA
A=input('Introduzca la primera matriz: \n');
B=input('Introduzca la segunda matriz: \n');
%Funcion 1: Leer dimesiones C(i,k)=0
[nA,mA,nB,mB] = dimensiones_matrices(A,B);
%Funcion 2: Validar producto
p=1,p=p+1,i=1:mA
[F] = validacion_matrices(mA,nB);
if F==1
%Funcion 3: Producto matricial C(i,k)=C(i,k)+A(i,p)*B(p,k
[C] = producto_matricial(A,B,F);
%Funcion 4: Mostrar C
[C] = mostrar_C(C); p
else
disp('No se puede realizar el producto
matricial') k
FIN
3.- Realizar un programa: 1) Capaz de leer por teclado cualquier función y = f(x), 2) Graficar con detalle
en la figura1, 3) Extraer de esta figura, la figura2 que es una ampliación o reducción de una zona del
plano cartesiano definida por el programador, 4) Mostrar una marcación dinámica de la figura1 (que la
función y = f(x) se grafique en movimiento).
PSEUDOCÓDIGO
INICIO
Leer f(x)
Graficar f(x)
h=plot(f(x),’-‘)
grid on f(x)
set(h,'LineWidth',2,'LineStyle','-','Color','b')
%Extraer de esta figura, la figura2 Graficar f(x)
k=plot(f(x),'-');
Leer x0 x1 y0 y1 h=plot(f(x), - )
ejes([x0 x1 y0 y1])
%Mostrar una marcación dinámica de la figura1 (que grid on
la función y = f(x) se grafique en movimiento)
set(h,'LineWidth',2,'LineStyle','-','Color','b')
x=-pi:0.01:pi;
y=f(x);
figure %Extraer de esta figura, la figura2
hold on k=plot(f(x),'-')
axis([-10 10 -20 20])
Para i=1:numel(x)
plot(x(i),y(i),'.','Color','b') Leer x0 x1 y0 y1
drawnow ejes([x0 x1 y0 y1])
fin
PROGRAMA EN MATLAB
%P5-E3 %Mostrar que la función y = f(x)
clc se grafique en movimiento
clear all x=-pi:0.01:pi;
%Introducir la funcion por teclado y=f(x)
f(x)=input('Introzca la función: \n','s');
%Graficar la funcion
h= plot(f(x),'-'); axis([-10 10 -20 20])
title('FUNCION f(x)')
grid on
set(h,'LineWidth',2,'LineStyle','-
','Color','b'); i=1,i=i+1,i=1:numel(x)
%Extraer de esta figura, la figura2
k=plot(f(x),'-');
x0=input('Introduzca límite inferior: \n'); plot(x(i),y(i),'.','Color','b')
x1=input('Introduzca límite superior: \n'); drawnow
y0=input('Introduzca límite inferior: \n');
y1=input('Introduzca límite superior: \n');
axis([x0 x1 y0 y1]);
%Mostrar una marcación dinámica de la i
figura1 (que la función y = f(x) se
grafique en movimiento)
x=-pi:0.01:pi; FIN
y=f(x);
figure
hold on
axis([-10 10 -20 20])
for i=1:numel(x) %numel Number of elements
in an array or subscripted array expression
plot(x(i),y(i),'.','Color','b')
drawnow
end
4.- Realizar un dibujo animado compuesto de 10 figuras (Frames) que al mostrarse cada medio segundo
(o menos) simulen una escena en movimiento. Las 10 figuras puede crear con Paint o Corel Draws o
cualquier otro graficador.
PROGRAMA EN MATLAB
%Animación de un dibujo
clc
clear all
curve=animatedline('LineWidth',1,'Color','w');
u=0,0001;
p=0;
fx=5;
fy=1;
a1=1;
a2=1;
axis([-2.1 2.1 -2.1 2.1])
for i=1:1:3600
p=p+1;
X(1,i)=exp(-u*(i-1))*(a1*sind(fx*(i-
1)+90)+a2*sind(fy*(i-1)+90));
Y(1,i)=exp(-u*(i-1))*(a1*sind(fx*(i-
1))+a2*sind(fy*(i-1)));
addpoints(curve,X(1,:),Y(1,:));
set(gca,'Color','b');
drawnow
F(p)=getframe(gcf);
delete(curve)
curve=animatedline('LineWidth',1,'Color','w');
end
6.- El calor específico a presión constante (cp) para una sustancia química, se calcula según la siguiente
ecuación, donde A, B, C son constantes características de cada compuesto:
PROPIEDADES.xlsx es una base de datos por lo menos de 10 registros que tiene 5 campos: 1) Nro, 2)
Nombre Compuesto, 3) A, 4) B, 5) C.
PSEUDOCÓDIGO
INICIO
Leer Cp_Tabla
Leer Comp,Tmax, Tmin
[n m]= size(Cp_Tabla)
Para i=1:n Cp_Tabla
si strcmp(Comp,Cp_tabla.Nombre(i))
N=i; Comp,Tmax, Tmin
fin
fin Para [n m]= size(Cp_Tabla)
A=Cp_tabla.A(N)
B=Cp_tabla.B(N)
C=Cp_tabla.C(N) i=1,i=i+1,i=1:n
Cp_max=A+B*Tmax+C*Tmax^2;
Cp_min=A+B*Tmin+C*Tmin^2;
Cp=(Cp_max+Cp_min)/2
Imprimir Cp strcmp(Comp,Cp_tabla.Nombre(i))
%Grafica
Trang=Tmin:0.01:Tmax; SI
Cp_fun=@(T) A+B.*T+C.*T.^2; N=i
Cp_eval=Cp_fun (Trang); NO
plot(Trang,Cp_eval)
i
PROGRAMA EN MATLAB
%P5-56
clc
clear all A=Cp_tabla.A(N)
Cp_tabla=readtable('PROPIEDADES.xlsx','sheet','cp'); B=Cp_tabla.B(N)
Comp=input('Introzca el compuesto: \n','s'); C=Cp_tabla.C(N)
Tmax=input('Introduzca la temperatura superior del Cp_max=A+B*Tmax+C*Tmax^2;
Cp_min=A+B*Tmin+C*Tmin^2;
rango en K: \n'); Cp=(Cp_max+Cp_min)/2
Tmin=input('Introduzca la temperatura inferior del
rango en K: \n');
[n m]= size(Cp_tabla);
Cp
for i=1:n
if strcmp(Comp,Cp_tabla.Nombre(i))
N=i;
end Trang=Tmin:0.01:Tmax;
end Cp_fun=@(T) A+B.*T+C.*T.^2;
A=Cp_tabla.A(N); Cp_eval=Cp_fun (Trang);
B=Cp_tabla.B(N); plot(Trang,Cp_eval)
C=Cp_tabla.C(N);
Cp_max=A+B*Tmax+C*Tmax^2;
Cp_min=A+B*Tmin+C*Tmin^2; Gráfica
Cp=(Cp_max+Cp_min)/2;
fprintf('El Cp en el rango requerido es: %4.3f
[J/mol*K] \n',Cp)
%Grafica
Trang=Tmin:0.01:Tmax; FIN
Cp_fun=@(T) A+B.*T+C.*T.^2;
Cp_eval=Cp_fun (Trang);
plot(Trang,Cp_eval)