Diferencia entre revisiones de «Explotación minera (Grupo 5C)»
(→Comparación de los métodos de aproximación) |
(→Comparación de los métodos de aproximación) |
||
| Línea 330: | Línea 330: | ||
[[Archivo:P(t)_corte_con_P=25_fin_de_vida_util_RUNGE_KUTTA_vs_HEUN_(no_se_aprecia_la_diferencia).jpg|400px|Comparación de los métodos de Heun y Runge Kutta]]<br /> | [[Archivo:P(t)_corte_con_P=25_fin_de_vida_util_RUNGE_KUTTA_vs_HEUN_(no_se_aprecia_la_diferencia).jpg|400px|Comparación de los métodos de Heun y Runge Kutta]]<br /> | ||
| − | [[Archivo: | + | [[Archivo:Q(t)_hasta_fin_de_vida_util_RUNGE_KUTTA_vs_HEUN_(ZOOM).jpg|400px|Ampliación de la gráfica]]<br /> |
CODIGO MATLAB | CODIGO MATLAB | ||
Revisión del 13:25 6 mar 2015
| Trabajo realizado por estudiantes | |
|---|---|
| Título | Explotación minera |
| Asignatura | Ecuaciones Diferenciales |
| Curso | Curso 2014-15 |
| Autores | • Jaume Martorell Cerdá • Miguel Angel Serrano Leo • Carla Vázquez Gómara • Pablo Alonso Medina • Joaquín Sánchez Molina • Fernando Millán Cobo |
| Este artículo ha sido escrito por estudiantes como parte de su evaluación en la asignatura | |
Contenido
- 1 Introducción
- 2 Relación entre cantidad y producción
- 3 Modelo de Gompertz: Valor de la tasa de crecimiento (r) y resolución de la función de producción
- 4 Modelo de Verhlust: Valor de la tasa de crecimiento (r) y resolución de la función de producción
- 5 Comparación de P(Q) según modelos de Gompertz y Verhlust
- 6 Problema de valor inicial utilizando distintos métodos
- 7 Función de producción P(t): Modelo de Gompertz
- 8 Función de producción P(t): Modelo de Verhlust
- 9 Comparación de P(t) según Gompertz y Verhlust
- 10 Aproximación del modelo con nuevos datos
1 Introducción
- El problema nos pide el análisis de la explotación de un yacimiento de mineral. Dicha explotación sigue un modelo logístico de Gompertz, cuya ecuación tiene la siguiente forma:
:[math] {dQ \over dt}=rQlog ({K \over Q}) [/math]
donde Q(t) es la cantidad de mineral extraído, K la cantidad total extraíble y r la tasa intrínseca de crecimiento.
- En nuestro caso, sabemos que la extracción de mineral tendrá un crecimiento muy rápido de producción durante los primeros 25 años, momento a partir del cual descenderá lentamente debido a diversos factores. Además de esto, conocemos la cantidad total extraíble del yacimiento, por lo que nuestra ecuación inicial quedará de la siguiente forma:
:[math] {dQ \over dt}=rQlog ({10875 \over Q}) [/math]
2 Relación entre cantidad y producción
Mediante las siguientes gráficas, se demuestra que la relación entre Q y P es la siguiente:
- [math] {dQ \over dt}= P [/math]
o lo que es lo mismo:[math] P=Q' [/math]
3 Modelo de Gompertz: Valor de la tasa de crecimiento (r) y resolución de la función de producción
3.1 Tasa de crecimiento r
- Partimos del siguiente dato inicial:
- K= 10875 toneladas
- La ecuación del modelo de Gompertz es:
:[math]{dQ \over dt}=rQlog({K \over Q})[/math]
- Condición:
- P(t=25 años)= 240 t/año [math] \rightarrow [/math] P(25)=240 [math] \rightarrow [/math] Q'(25)=240
- Resolución:
La solución de la ecuación de Gompertz es la siguiente:
: [math] Q(t)=Ke^{-Ae^{-rt}} [/math]
El enunciado dice que la producción es máxima a los 25 años, por lo que si Q' tiene un máximo en un punto, Q"=0 en dicho punto.
Derivamos la ecuación inicial del modelo y la igualamos con la condición que hemos obtenido anteriormente.
: [math] Q"=r^2Qln({K \over Q})ln({K \over Q}-1)=0 [/math]
Despejando esta ecuación llegamos a que Q(25 años)= 4000,69 t.
Conociendo Q(25) podemos despejar "r" de nuestro problema:
: [math] Q'= rQ(25)ln({10375 \over Q(25)})=240 [/math]
Así obtenemos r=0,05999 [math] \simeq [/math] 0,06
Con estos datos, ya podemos despejar A de [math] Q(t)=Ke^{-Ae^{-rt}} [/math], siendo A=4,4705
Por lo tanto, nuestra ecuación del modelo de Gompertz quedará de la siguiente forma:
: [math] Q(t)=10875e^{-4,47e^{-0,6t}} [/math]
3.2 Función de producción P(Q)
Para obtener la función P(Q), obtendremos por un lado P(t) y por otro Q(t), para después representarlos en la forma P(Q).
La gráfica hace referencia a la producción que se tiene en función de la cantidad de mineral extraída. Se puede ver que el máximo se alcanza para una P=240 toneladas/año cuando la cantidad extraída es Q=4000,69 toneladas.
CODIGO MATLAB
%Lo que haremos será calcular valores de Q para distintos valores de t, y
%luego calcular valores de P para esos mismo valores de t. Una vez tengamos
%los valores de P y Q en sendos vectores, los representaremos
K=10875;
A=4.47;
r=0.06;
t=0:1:100;
Q=zeros(1,101);
P=zeros(1,101);
for i=1:101
Q(1,i)=K*exp(-A*exp(-r*t(i)));
end
for j=1:101
P(j)=r*Q(j)*log(K/Q(j));
end
plot(Q,P,'*g')
xlabel('Cantidad de mineral extraída en toneladas')
ylabel('Producción de mineral en toneladas/año')
4 Modelo de Verhlust: Valor de la tasa de crecimiento (r) y resolución de la función de producción
4.1 Tasa de crecimiento r
- Partimos del siguiente dato inicial:
- K= 10875 toneladas
- La ecuación del modelo de Verhlust es:
- [math]{dQ \over dt}=rQ(1-{Q \over K})[/math]
- Condición:
- P(t=25 años)= 240 t/año [math] \rightarrow [/math] P(25)=240 [math] \rightarrow [/math] Q'(25)=240
- Resolución:
Para la resolución, utilizamos el mismo planteamiento que en el apartado anterior del modelo de Gompertz.
: [math] Q"=rQ'(1-{Q \over 5437,5})=0 [/math]
En el caso del modelo de Verhlust obtenemos r=0,0883 y Q(25 años)=5437,5 t. Así, la ecuación del modelo tendrá la siguiente forma:
: [math] Q'=0,0883Q(1-{Q \over 10875}) [/math]
4.2 Función de producción P(Q)
Como sabemos que P=Q', la ecuación de P(t) es la siguiente:
: [math] P(t)=0,0883Q(t)(1-{Q(t) \over 10875})=0 [/math]
La ecuación de Q(t) la hemos obtenido integrando la del modelo obtenida anteriormente, y tiene la forma:
: [math] Q(t)={1196,25e^{0.088276t} \over 1+11e^{0.088276t}} [/math]
Al igual que en el apartado anterior, obtenemos P(Q) dibujando ambas funciones en la misma gráfica:
Ahora Vamos a comparar ambos métodos:
CODIGO MATLAB
%Comparativa LOGISTICO vs GOMPERTZ
t0=0;
tN=100; %Consideramos periodo de representacion de 100 años como suficientemente representativo graficamente
h=0.01;
t=t0:h:tN;
%MODELO LOGISTICO
Q_log=(1196.25.*exp(0.088276.*t))./(1+0.11.*exp(0.088276.*t));
P_log=0.088276.*Q_log.*(1-Q_log./10875);
%MODELO GOMPERTZ
Q_gom=10875.*exp(-4.47.*exp(-0.06.*t));
P_gom=0.05999.*Q_gom.*log(10875./Q_gom);
%Comparativa de cantidades extraidas
figure
hold on
plot(t,Q_log,'g')
plot(t,Q_gom)
plot(t,t.*0+10875,'r')
xlabel('Tiempo en años')
ylabel('Cantidad de material extraido en toneladas')
legend('Cantidad extraida (modelo logistico)','Cantidad extraida (modelo Gompertz)','Cantidad total extraible (limite)','Location','Best')
hold off
%Comparativa de producciones
figure
hold onNos quedaremos con el modelo de Gompertz ya que como podemos observar en las gráficas se ajusta más a nuestro modelo. Ya que la producción inicial se aproxima más al valor nulo al comenzar el modelo.
5 Comparación de P(Q) según modelos de Gompertz y Verhlust
La gráfica muestra la comparación entre el modelo logístico de Verhlust y el modelo de Gompertz. Nos quedaremos con el modelo de Gompertz ya que como podemos observar en las gráficas se ajusta más a nuestro modelo, ya que la producción inicial se aproxima más al valor nulo al comenzar el modelo.
CODIGO MATLAB
%Comparativa LOGISTICO vs GOMPERTZ
t0=0;
tN=100; %Consideramos periodo de representacion de 100 años como suficientemente representativo graficamente
h=0.01;
t=t0:h:tN;
%MODELO LOGISTICO
Q_log=(1196.25.*exp(0.088276.*t))./(1+0.11.*exp(0.088276.*t));
P_log=0.088276.*Q_log.*(1-Q_log./10875);
%MODELO GOMPERTZ
Q_gom=10875.*exp(-4.47.*exp(-0.06.*t));
P_gom=0.05999.*Q_gom.*log(10875./Q_gom);
%Comparativa de cantidades extraidas
figure
hold on
plot(t,Q_log,'g')
plot(t,Q_gom)
plot(t,t.*0+10875,'r')
xlabel('Tiempo en años')
ylabel('Cantidad de material extraido en toneladas')
legend('Cantidad extraida (modelo logistico)','Cantidad extraida (modelo Gompertz)','Cantidad total extraible (limite)','Location','Best')
hold off
%Comparativa de producciones
figure
hold on
6 Problema de valor inicial utilizando distintos métodos
6.1 Método de Euler
CODIGO MATLAB
r=0.06;
k=10875;
t0=0;
tN=100; %Consideramos periodo de representacion de 100 años como suficientemente representativo graficamente
h=(1/12); %Nos piden que h sea de 1 mes. Hay 1/12 meses en un año
t=t0:h:tN; %t tiene 1201 elementos. 1201 elementos - 1 elemento inicial = 1200 elementos.
%1200 elementos entre 100 años que hemos representado = 12 elementos.
%12 elementos por año, es decir, uno por cada mes.
Q0=124.4896; %Suponemos para Euler el mismo valor inicial que el obtenido con la condicion a t=25 años
%del problema sustituida en la ec. Gompertz programada segun la sol. analitica
Q=zeros(1,length(t));
P=zeros(1,length(t));
Q(1,1)=Q0;
P(1,1)=r*Q(1)*log(k/Q(1));
for i=1:length(t)-1
Q(1,i+1)=Q(1,i)+h*r*Q(1,i)*log(k/Q(1,i));
P(1,i+1)=r*Q(1,i+1)*log(k/Q(1,i+1));
end
for n=1:length(t)-1
P(1,n);
if P(1,n)>=25
Plim=P(1,n);
m=n;
end
end
Plim %Plim es el ultimo valor de la produccion que esta por encima de las 25t/año
m %Paso correspondiente al valor de Plim, se puede comprobar que P(m)=Plim=25t/año
%Ahora que ya conocemos el paso de tiempo en el que finaliza la vida util
%de la explotacion (m=787), se puede reescribir la funcion Q(t), que valdra
%0 a partir de dicho paso de tiempo
for j=m:length(t)-1
Q(1,j+1)=0;
end
figure
plot(t,Q(1,:))
xlabel('Tiempo en años')
ylabel('Cantidad de material extraido en toneladas')
legend('Cantidad de material extraido (Gompertz / Euler)','Location','Best')
figure
hold on
plot(t,P(1,:))
plot(t,t.*0+25,'r')
xlabel('Tiempo en años')
ylabel('Produccion en toneladas/año')
legend('Produccion (Gompertz / Euler)','Produccion limite (por debajo la vida util de la explotacion habra terminado)','Location','Best')
hold off
6.2 Método de Runge-Kutta
CODIGO MATLAB
clear all
r=0.06;
k=10875;
t0=0;
tN=100; %Consideramos periodo de representacion de 100 años como suficientemente representativo graficamente
h=(1/12); %Nos piden que h sea de 1 mes. Hay 1/12 meses en un año
t=t0:h:tN; %t tiene 1201 elementos. 1201 elementos - 1 elemento inicial = 1200 elementos.
%1200 elementos entre 100 años que hemos representado = 12 elementos. 12 elementos por año, es decir, uno por cada mes.
Q0=124.4896; %Suponemos para Euler el mismo valor inicial que el obtenido con la condicion a t=25 años
%del problema sustituida en la ec. Gompertz programada segun la sol. analitica
%Runge Kutta
Q_rk=zeros(1,length(t));
P_rk=zeros(1,length(t));
Q_rk(1,1)=Q0;
P_rk(1,1)=r*Q_rk(1)*log(k/Q_rk(1));
%Aproximacion por Runge Kutta
for i=1:length(t)-1
K1=r*Q_rk(1,i)*log(k/Q_rk(1,i));
K2=r*(Q_rk(1,i)+0.5*K1*h)*log(k/(Q_rk(1,i)+0.5*K1*h));
K3=r*(Q_rk(1,i)+0.5*K2*h)*log(k/(Q_rk(1,i)+0.5*K2*h));
K4=r*(Q_rk(1,i)+K3*h)*log(k/(Q_rk(1,i)+K3*h));
Q_rk(1,i+1)=Q_rk(1,i)+h/6*(K1+2*K2+2*K3+K4);
P_rk(1,i+1)=r*Q_rk(1,i+1)*log(k/Q_rk(1,i+1));
end
for n=1:length(t)-1
P_rk(1,n);
if P_rk(1,n)>=25
Plim=P_rk(1,n);
m=n;
end
end
for j=m:length(t)-1
Q_rk(1,j+1)=0;
end
%Representacion Runge Kutta
figure
plot(t,Q_rk(1,:),'c')
xlabel('Tiempo en años')
ylabel('Cantidad de material extraido en toneladas')
legend('Cantidad extraida (Gompertz / Runge Kutta)','Location','Best')
figure
hold on
plot(t,P_rk(1,:),'c')
plot(t,t.*0+25,'r')
xlabel('Tiempo en años')
ylabel('Produccion en toneladas/año')
legend('Produccion (Gompertz / Runge Kutta)','Produccion limite (por debajo la vida util de la explotacion habra terminado)','Location','Best')
hold off
6.3 Método de Heun
CODIGO MATLAB
clear all
r=0.06;
k=10875;
t0=0;
tN=100; %Consideramos periodo de representacion de 100 años como suficientemente representativo graficamente
h=(1/12); %Nos piden que h sea de 1 mes. Hay 1/12 meses en un año
t=t0:h:tN; %t tiene 1201 elementos. 1201 elementos - 1 elemento inicial = 1200 elementos.
%1200 elementos entre 100 años que hemos representado = 12 elementos.
%12 elementos por año, es decir, uno por cada mes.
Q0=124.4896; %Suponemos para Euler el mismo valor inicial que el obtenido con la condicion a t=25 años
%del problema sustituida en la ec. Gompertz programada segun la sol. analitica
%Heun
Q_heun=zeros(1,length(t));
P_heun=zeros(1,length(t));
Q_heun(1,1)=Q0;
P_heun(1,1)=r*Q_heun(1)*log(k/Q_heun(1));
%Aproximacion por Heun
for i=1:length(t)-1
k1=r*Q_heun(1,i)*log(k/Q_heun(1,i));
k2=r*(Q_heun(1,i)+k1*h)*log(k/(Q_heun(1,i)+k1*h));
Q_heun(1,i+1)=Q_heun(1,i)+h/2*(k1+k2);
P_heun(1,i+1)=r*Q_heun(1,i+1)*log(k/Q_heun(1,i+1));
end
for n=1:length(t)-1
P_heun(1,n);
if P_heun(1,n)>=25
Plim=P_heun(1,n);
m=n;
end
end
for j=m:length(t)-1
Q_heun(1,j+1)=0;
end
%Representacion Heun
figure
plot(t,Q_heun(1,:),'k')
xlabel('Tiempo en años')
ylabel('Cantidad de material extraido en toneladas')
legend('Cantidad extraida (Gompertz / Heun)','Location','Best')
figure
hold on
plot(t,P_heun(1,:),'k')
plot(t,t.*0+25,'r')
xlabel('Tiempo en años')
ylabel('Produccion en toneladas/año')
legend('Produccion (Gompertz / Heun)','Produccion limite (por debajo la vida util de la explotacion habra terminado)','Location','Best')
hold off
6.4 Comparación de los métodos de aproximación
%Representacion simultanea de Runge Kutta y Heun
figure
hold on
plot(t,Q_rk(1,:),'c')
plot(t,Q_heun(1,:),'k')
xlabel('Tiempo en años')
ylabel('Cantidad de material extraido en toneladas')
legend('Cantidad extraida (Gompertz / Runge Kutta)','Cantidad extraida (Gompertz / Heun)','Location','Best')
hold off
figure
hold on
plot(t,P_rk(1,:),'c')
plot(t,P_heun(1,:),'k')
plot(t,t.*0+25,'r')
xlabel('Tiempo en años')
ylabel('Produccion en toneladas/año')
legend('Produccion (Gompertz / Runge Kutta)','Produccion (Gompertz / Heun)','Produccion limite (por debajo la vida util de la explotacion habra terminado)','Location','Best')
6.5 Apartado 7 (No sé como llamarlo)
7 Función de producción P(t): Modelo de Gompertz
- Utilizando el método de Heun aproximamos la función de producción P(t).
- A continuación obtenemos el punto de máxima producción, que es P(t)=240,18 para t=24,18 años.
- Para los puntos de mayor crecimiento y descenso hacemos...
CODIGO MATLAB
clear all
t0=0;
tN=100;
q0=124.5;
h=0.01;
N=(tN-t0)/h;
t=t0:h:tN;
q=zeros(1,N+1);
k=10875;
r=0.06;
q(1)=q0;
p=zeros(1,N+1);
p(1)=r*q0*log(k/q0);
for j=1:N
q(j+1)=q(j)+h*r*q(j)*log(k/q(j));
end
for i=1:N
k1=r^2*q(i)*log(k/q(i))*(log(k/q(i))-1);
k2=r^2*(q(i)+k1*h)*log(k/(q(i)+k1*h))*(log(k/(q(i)+k1*h))-1);
p(i+1)=p(i)+h/2*(k1+k2);
end
[t',p'];
plot(t,p)
%Obtenemos el año de máxima producción
max(p)
for g=1:N
if max(p)-p(g)<=0.01
break
end
end
y=g*tN/N;
7.1 Cantidad de mineral que queda por extraer
8 Función de producción P(t): Modelo de Verhlust
- En este caso volvemos a utilizar el método de Heun para aproximar la función.
- El punto de máxima producción que obtenemos es P(t)=240,18 para un tiempo t=50,38 años
- Los puntos de máximo y crecimiento son ???
CODIGO MATLAB:
clear all
t0=0;
tN=100;
q0=124.5;
h=0.01;
N=(tN-t0)/h;
t=t0:h:tN;
q=zeros(1,N+1);
k=10875;
r=0.0883;
q(1)=q0;
p=zeros(1,N+1);
p(1)=r*q0*(1-(q0/k));
for j=1:N
q(j+1)=q(j)+h*r*q(j)*(1-(q(j)/k));
end
for i=1:N
k1=r*p(i)*(1-(2*q(i)/k));
k2=r*(p(i)*(1-(2*(q(i)+k1*h)/k)));
p(i+1)=p(i)+h/2*(k1+k2);
end
[t',p'];
plot(t,p)
%Obtenemos el año de máxima producción
max(p)
for g=1:N
if max(p)-p(g)<=0.01
break
end
end
y=g*tN/N;
8.1 Cantidad de mineral que queda sin extraer
9 Comparación de P(t) según Gompertz y Verhlust
10 Aproximación del modelo con nuevos datos
- El enunciado nos dice que transcurridos 12 años del inicio de la explotación, se hace una revisión del comportamiento del modelo y se ajustan los datos de forma más real.
- Ahora, la cantidad extraída hasta ese año 12 es Q(12)=2695 toneladas, y se estima que quedan por extraer en la mina 9075 toneladas más.
- Con estos nuevos datos, calculamos los parámetros r y K, y aproximamos la función P(t).
10.1 Obtención de los parámetros r y K
- Para obtener K, simplemente sumamos la cantidad de mineral extraída hasta el momento y la cantidad que queda por extraer, y nos queda [math]K=2695+9075=11770 [/math]toneladas.
10.2 Producción
- Volvemos a aproximar el modelo utilizando el método de Heun.
- El punto de máxima producción que obtenemos es P(t)=400,87 toneladas para el tiempo t=16,33 años.
- La cantidad de mineral que queda sin extraer la obtenemos...???
CODIGO MATLAB
clear all
t0=0;
tN=100;
q0=124.5;
h=0.01;
N=(tN-t0)/h;
t=t0:h:tN;
q=zeros(1,N+1);
k=11770;
r=0.0925;
q(1)=q0;
p=zeros(1,N+1);
p(1)=r*q0*log(k/q0);
for j=1:N
q(j+1)=q(j)+h*r*q(j)*log(k/q(j));
end
for i=1:N
k1=r^2*q(i)*log(k/q(i))*(log(k/q(i))-1);
k2=r^2*(q(i)+k1*h)*log(k/(q(i)+k1*h))*(log(k/(q(i)+k1*h))-1);
p(i+1)=p(i)+h/2*(k1+k2);
end
[t',p'];
figure
plot(t,p)
figure
plot(t,q)
%Obtenemos el año de máxima producción
max(p)
for g=1:N
if max(p)-p(g)<=0.01
break
end
end
x=g*tN/N;