Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Trabajos Prácticos y
Problemas Resueltos Ejemplo 01: Que son los Métodos Numéricos?
Ejemplo 02: Errores Numéricos
Ejemplos de Matlab
Ejemplo 03: Manejo de procedimientos de lectura y escritura de archivos
Software Ejemplo 04: Overflow y Underflow
Ejemplo 05: Sistema de Ecuaciones Lineales: Extractor líquido - líquido
Bibliografía recomendada
Ejemplo 06: Matrices mal acondicionadas
Programa Analítico Ejemplo 06-b: Norma de Matrices y número de condición
Links de Interés Ejemplo 07: Descomposición plu
Ejemplo 08: Regresión Lineal
Ejemplo 09: Factorización QR de matrices
Ejemplo 10: Factorización QR con pivoteo de columna
Links Ejemplo 11: Descomposición en Valores Singulares
U.T.N. Ejemplo 12: Estadística Elemental y Probabilidad
Otras materias Ejemplo 13: Propagación del Error
Ejemplo 14: Propagación del Error en la Regresión Lineal
Ejemplo 15: Análisis y Error de Regresión
Ejemplo 16: Métodos de Newton y de la Secante
Ejemplo 17: Sistemas de Ecuaciones No Lineales
Ejemplo 18: Optimización Unidimensional
Ejemplo 19: Optimización Restringida
Ejemplo 20: Cuadratura
Ejemplo 21: Estimación del Error de Cuadratura
Ejemplo 22: Cuadratura Adaptativa
Ejemplo 23: Mapping y Cuadratura Adaptativa
Ejemplo 24: Mapping e Integración Monte Carlo
Ejemplo 25: Ecuaciones Diferenciales Ordinarias
Ejemplo 26: Métodos de Integración de EDO's
Ejemplo 27: Algoritmos con Control Adaptativo de Paso
Ejemplo 28: Problemas de Valores de Contorno: Shooting Method
Created with novaPDF Printer (www.novaPDF.com). Please register to remove this message.
1 de 59 9/19/2013 7:13 AM
..:: Matemática Avanzada para Ingenieros Químicos ::.. Carrera Ingenierí... http://www.frro.utn.edu.ar/catedras/index.php?mostrar_contenido=248&m...
pause
%Finalmente, graficaremos la función:
plot(x,r)
pause
%En el gráfico vemos que el capital deseado de $1M se alcanza con una tasa
%de ahorro de aproximadamente 12.5%. Un programa más sofisticado podría
%explorar el efecto de diferentes tasas de interés, de aumento y de inflación.
echo off
ir arriba
Created with novaPDF Printer (www.novaPDF.com). Please register to remove this message.
2 de 59 9/19/2013 7:13 AM
..:: Matemática Avanzada para Ingenieros Químicos ::.. Carrera Ingenierí... http://www.frro.utn.edu.ar/catedras/index.php?mostrar_contenido=248&m...
for i=60:90
h(i)=10^(-i/10);
deriv=(exp(x+h(i))-exp(x))/h(i);
error(i)=sum(abs(deriv-exp(x)))/101;
end;
echo on
loglog(h,error);
pause
%Como puede verse, el error mínimo ocurre para un valor de h
%de alrededor de 1.5*10^-8. Esto significa que, a partir de la fórmula
%para el error de diferencias hacia adelante, la precisión de la
%máquina es de alrededor de 0.5*10^-16, o sea doble precisión.
echo off
ir arriba
Created with novaPDF Printer (www.novaPDF.com). Please register to remove this message.
3 de 59 9/19/2013 7:13 AM
..:: Matemática Avanzada para Ingenieros Químicos ::.. Carrera Ingenierí... http://www.frro.utn.edu.ar/catedras/index.php?mostrar_contenido=248&m...
pause
%Como puede verse, esta operatoria hace fácil obtener
%archivos de entrada y de salida de MATLAB. Este ejemplo puede imprimirse.
%La forma más simple de hacer esto es utilizar el comando 'diary' (de MATLAB):
diary 'out.txt'
disp('Esta es la matriz A')
disp('A')
diary off
%Ahora abrimos el archivo 'out.txt' utilizando el editor de texto.
%Nos dará la salida deseada.
%La hojarasca adicional que aparece en el archivo
%se debe a que utilizamos el comando 'echo'.
%La extensión 'txt' del archivo nos indica que es un archivo de texto,
%sin embargo, también funcionará con otras extensiones.
pause
%Se puede hacer lo mismo con figuras utilizando el comando 'print'
%Primero, determinemos la figura:
x=[0:.1:6*pi];
plot(x,sin(x))
echo off
ir arriba
Created with novaPDF Printer (www.novaPDF.com). Please register to remove this message.
4 de 59 9/19/2013 7:13 AM
..:: Matemática Avanzada para Ingenieros Químicos ::.. Carrera Ingenierí... http://www.frro.utn.edu.ar/catedras/index.php?mostrar_contenido=248&m...
for j=(kt+1):n
xt=xt*(1-p);
if xt < 1/b
xt=xt*b;
m=m-1;
end
end
%Finalmente multiplicamos por la cantidad b^m para corregir por todos nuestros ajustes
x(i)=xt*b^m;
end;
function x= prob2(p,k,n)
%Esta función calcula la probabilidad de obtener exactamente k resultados positivos
%de n pruebas, teniendo en cuenta que la probabilidad individual de cada evento es p.
%En esta función n y p son escalares, pero podrían ser vectores.
%El programa se escribió sin escalamiento, por lo tanto no evita el overflow y underflow
%para valores muy grandes de n.
npts=length(k);
Created with novaPDF Printer (www.novaPDF.com). Please register to remove this message.
5 de 59 9/19/2013 7:13 AM
..:: Matemática Avanzada para Ingenieros Químicos ::.. Carrera Ingenierí... http://www.frro.utn.edu.ar/catedras/index.php?mostrar_contenido=248&m...
for i=1:npts
xt=1;
kt=k(i);
m=0;
%Esta parte del programa calcula el numerador del coeficiente binomial (lambda 2):
for j=(n-kt+1):n
xt=xt*j;
end
for j=(kt+1):n
xt=xt*(1-p);
end
x(i)=xt;
end;
ir arriba
Created with novaPDF Printer (www.novaPDF.com). Please register to remove this message.
6 de 59 9/19/2013 7:13 AM
..:: Matemática Avanzada para Ingenieros Químicos ::.. Carrera Ingenierí... http://www.frro.utn.edu.ar/catedras/index.php?mostrar_contenido=248&m...
a=a+diag(ones(1,n-1),-1)
pause
%Y esta línea crea la diagonal superior:
a=a+chi*diag(ones(1,n-1),1)
pause
%Establecemos el lado derecho del sistema de ecuaciones:
b=zeros(n,1);
b(1)=-1
%donde hemos asumido que la concentración de entrada
%del soluto en el agua es la unidad, y la concentración de
%entrada del soluto en el solvente es cero.
pause
%Ahora, resolvemos la distribución de concentraciones
%usando el comando \ , y graficamos el resultado.
x=a\b;
plot(x)
ir arriba
Created with novaPDF Printer (www.novaPDF.com). Please register to remove this message.
7 de 59 9/19/2013 7:13 AM
..:: Matemática Avanzada para Ingenieros Químicos ::.. Carrera Ingenierí... http://www.frro.utn.edu.ar/catedras/index.php?mostrar_contenido=248&m...
x=h\b
format short
pause
%Observe el error que se comete en la solución! Éste se produce aún trabajando
%en doble precisión. Podemos ver esto más claramente si adicionamos un poco
%de error al vector b:
bp=b+rand(n,1)*10^(-n)
%La operación anterior adiciona al vector b un error aleatorio del orden de 10^-n.
%Observemos ahora la solución:
pause
xp=h\bp
%que es disparatadamente diferente de la solución original!
%Finalmente, podemos comparar las normas (en este ejemplo utilizamos la norma 1 o Manhattan):
pause
deltax=norm(xp-x,1)/norm(x,1)
deltab=norm(bp-b,1)/norm(b,1)
%Finalmente calculamos la razón:
ratio=deltax/deltab
pause
%Esta relación es muy grande! Podemos compararla con el número de condición de la matriz
%de Hilbert:
cond(h,1)
%que es del mismo orden de magnitud que la razón calculada previamente.
%Moraleja de esta historia: ¡Cuidado con las matrices mal acondicionadas!
echo off
ir arriba
Created with novaPDF Printer (www.novaPDF.com). Please register to remove this message.
8 de 59 9/19/2013 7:13 AM
..:: Matemática Avanzada para Ingenieros Químicos ::.. Carrera Ingenierí... http://www.frro.utn.edu.ar/catedras/index.php?mostrar_contenido=248&m...
echo off
for i=1:npt
x=[cos(theta(i)),sin(theta(i))]';
%Aquí usamos la transpuesta porque necesitamos un
%vector columna para x.
b=a*x;
ir arriba
Created with novaPDF Printer (www.novaPDF.com). Please register to remove this message.
9 de 59 9/19/2013 7:13 AM
..:: Matemática Avanzada para Ingenieros Químicos ::.. Carrera Ingenierí... http://www.frro.utn.edu.ar/catedras/index.php?mostrar_contenido=248&m...
10 deCreated
59 with novaPDF Printer (www.novaPDF.com). Please register to remove this message. 9/19/2013 7:13 AM
..:: Matemática Avanzada para Ingenieros Químicos ::.. Carrera Ingenierí... http://www.frro.utn.edu.ar/catedras/index.php?mostrar_contenido=248&m...
pause
%Podemos utilizar estas matrices para resolver el sistema original de ecuaciones para vectores
%arbitrarios 'b', resolviendo la siguiente serie de problemas:
% p* z= b
% l*y=z
% u* x= y
%Esto es mucho más rápido que efectuar la eliminación Gaussiana. Mostremos esto:
pause
flops(0)
z=p'*b;
y=l\z;
x=u\y;
%Por lo tanto x resulta:
x
%y el número total de sustituciones hacia atrás y hacia adelante es:
subflops=flops
pause
%Podemos comparar este número de operaciones resolviendo 'x' directamente para cada vector 'b'
%en el lado derecho del sistema:
flops(0)
x=a\b
elimflops=flops
%Por consiguiente la solución 'x' del sistema de ecuaciones es la misma que antes,
%pero el número de operaciones es más alto. La discrepancia sería mucho mayor si el orden n de
%la matriz fuese mucho mayor.
echo off
ir arriba
11 deCreated
59 with novaPDF Printer (www.novaPDF.com). Please register to remove this message. 9/19/2013 7:13 AM
..:: Matemática Avanzada para Ingenieros Químicos ::.. Carrera Ingenierí... http://www.frro.utn.edu.ar/catedras/index.php?mostrar_contenido=248&m...
% ln(c-ceq)=ln(c0-ceq) - (hA/V)t
%donde ln(c0-ceq) y -(hA/V) son los nuevos parámetros del modelo.
%Podemos resolver directamente:
pause
%Definiendo x1=-(hA/V) y x2=ln(c0-ceq), obtenemos:
n=length(t);
ceq=1.0;
y=log(c-ceq);
x1=(y*t'-sum(y)*sum(t)/n)/(t*t'-sum(t)^2/n)
x2=(sum(y)-x1*sum(t))/n
pause
%Podemos graficar este resultado:
plot(t,ceq+exp(x2+x1*t), 'r')
%que pasa entre los puntos experimentales.
hold off
pause
%Hay más de una manera de resolver el sistema de ecuaciones lineales.
%El problema de regresión lineal que hemos resuelto puede transformarse en
%un sistema de ecuaciones lineales.
%Definimos las funciones de modelización como una matriz A:
A=[t', ones(n,1)]
%y definimos el lado derecho (los puntos medidos ajustados por el modelo) por el vector
%columna:
b=y'
%El vector solución x que representa a los parámetros del modelo, obtenido por regresión
%lineal, puede determinarse a partir de la resolución del siguiente sistema de ecuaciones
%lineales:
%(A'*A)*x = A'*b.
%Estas ecuaciones se conocen con el nombre de ecuaciones normales de la regresión lineal.
pause
%Si resolvemos este problema utilizando los operadores del MATLAB obtenemos:
x=(A'*A)\(A'*b)
%que es la misma solución obtenida a través del enfoque directo.
%La ventaja de este enfoque es que fácilmente puede extenderse a cualquier número
%de parámetros del modelo.
%En la próxima clase demostraremos una forma superior de resolver este tipo de problemas
%de regresión.
echo off
ir arriba
12 deCreated
59 with novaPDF Printer (www.novaPDF.com). Please register to remove this message. 9/19/2013 7:13 AM
..:: Matemática Avanzada para Ingenieros Químicos ::.. Carrera Ingenierí... http://www.frro.utn.edu.ar/catedras/index.php?mostrar_contenido=248&m...
ir arriba
13 deCreated
59 with novaPDF Printer (www.novaPDF.com). Please register to remove this message. 9/19/2013 7:13 AM
..:: Matemática Avanzada para Ingenieros Químicos ::.. Carrera Ingenierí... http://www.frro.utn.edu.ar/catedras/index.php?mostrar_contenido=248&m...
clear
echo on
%Este archivo de instrucciones demuestra el uso de la factorización 'qr' con
%pivoteo de columna.
%En primer lugar consideremos la matriz A:
a=[1 2 3;4 5 6;7 8 9;10 11 12]
pause
%Si efectuamos una factorización 'qr' sobre est matriz, obtenemos:
[q r]=qr(a)
pause
%Observe que la matriz 'a' no es de rango total debido a que el último término de
%la diagonal de la matriz 'r' es cero. No es exactamente cero debido a los errores de redondeo.
%Veamos su valor:
format short e
s=r(3,3)
format short
%que es lo que esperaríamos para simple precisión. Veamos ahora la matriz discutida en clase.
pause
%Tenemos:
n=7
a=eye(n)
%Construímos la matriz 'a'triangular superior de la siguiente manera:
echo off
for i=1:(n-1)
for j=i+1:n
a(i,j)=-1;
end
end
%que produce:
a
pause
echo on
%Podemos efectuar una factorización 'qr' a la matriz 'a':
[q r]=qr(a)
%Observemos que la factorización 'qr' no produce ningún cambio
%debido a que la matriz 'a' ya se encuentra en la forma triangular superior.
pause
%Podemos aprender mucho acerca de la matriz (cuán próxima se encuentra a la
%singularidad) si efectuamos factorización 'qr' con pivoteo de columna:
[q, r, pt]=qr(a);
%Esta vez obtenemos:
r
pause
%Observemos que el último elemento diagonal de 'r' es un par de órdenes de magnitud
%más pequeño que los otros elementos diagonales. Esto es debido a que la matriz 'a'
%está próxima a la singularidad.
%Esta descomposición es una descomposición 'qrp', sin embargo MATLAB devuelve 'pt'
%(transpuesta de 'p') en lugar de 'p'. Podemos mostrar esto:
q*r*pt'
%que es la matriz original 'a', al menos para la precisión de la máquina.
14 deCreated
59 with novaPDF Printer (www.novaPDF.com). Please register to remove this message. 9/19/2013 7:13 AM
..:: Matemática Avanzada para Ingenieros Químicos ::.. Carrera Ingenierí... http://www.frro.utn.edu.ar/catedras/index.php?mostrar_contenido=248&m...
echo off
ir arriba
15 deCreated
59 with novaPDF Printer (www.novaPDF.com). Please register to remove this message. 9/19/2013 7:13 AM
..:: Matemática Avanzada para Ingenieros Químicos ::.. Carrera Ingenierí... http://www.frro.utn.edu.ar/catedras/index.php?mostrar_contenido=248&m...
16 deCreated
59 with novaPDF Printer (www.novaPDF.com). Please register to remove this message. 9/19/2013 7:13 AM
..:: Matemática Avanzada para Ingenieros Químicos ::.. Carrera Ingenierí... http://www.frro.utn.edu.ar/catedras/index.php?mostrar_contenido=248&m...
%y la varianza:
variance = sum((z-mean).^2)/(n-1)
%Observe que la varianza es mucho menos segura que la media.
%Esto se debe a que hemos tratado de estimar un momento de orden más elevado que, en general
%toma muchos más datos!.
echo off
ir arriba
17 deCreated
59 with novaPDF Printer (www.novaPDF.com). Please register to remove this message. 9/19/2013 7:13 AM
..:: Matemática Avanzada para Ingenieros Químicos ::.. Carrera Ingenierí... http://www.frro.utn.edu.ar/catedras/index.php?mostrar_contenido=248&m...
hold off
%que ajusta los datos bastante bien.
pause
%¿Que sucede con la multiplicación?. Esto es un poco diferente.
%Define "z" = "x" * "y" y grafiquemos su probabilidad acumulada:
z = x .* y;
plot((sort(z)-6),cumprob,'gr')
hold on
plot((sort(x)-2),cumprob,'y')
%donde nuevamente hemos sustraido los valores medios de "z" y "x" .
pause
%La primer cosa que Ud. debería notar es que "z" no está normalmente distribuida!
%Esto se debe a que una variable está normalmente distribuida sólo si
%el error fraccional es pequeño, esto es, sigma(x)/x <<1, y lo mismo debería ocurir para "y".
%En este caso estas condiciones no se cumplen y distorsionan la distribución de "z".
%Podemos calcular la media y el desvío estándar de "z":
mean=sum(z)/n
%y la varianza:
stdev = (sum((z-mean).^2)/(n-1))^.5
pause
%Podemos comparar la distribución de "z" con una distribución normal:
plot(sort(z-6),(0.5 + erf((sort(z)-mean)/stdev/sqrt(2))/2),'b')
hold off
%Observe que esta vez la distribución normal no es un buen ajuste.
%Esto se debe a que hemos violado la restricción que el error en "x" e "y" sea relativamente pequeño
%con respecto a las magnitudes de "x" e "y".
pause
%Supongamos ahora que "x" e "y" estuviesen centrados alrededor de 20 y 30 respectivamente,
%y con desvío estándar de alrededor de la unidad. Ahora obtenemos:
x=x+18;
y=y+27;
z=x .* y;
plot((sort(x)-20),cumprob,'y')
hold on
plot((sort(z)-600),cumprob,'gr')
pause
%Ahora "z" es una variable normalmente distribuida. Podemos calcular la media:
mean=sum(z)/n
%y la varianza:
stdev = (sum((z-mean).^2)/(n-1))^.5
pause
%Podemos comparar gráficamente esto con la distribución de probabilidad observada:
plot(sort(z-600),(0.5 + erf((sort(z)-mean)/stdev/sqrt(2))/2),'b')
hold off
pause
%Este desvío estándar podría haber sido calculado a partir de la fórmula:
sigmax=1;
sigmay=1;
stdev = ((sigmax/20)^2+(sigmay/30)^2)^.5*600
%que suministra aproximadamente el mismo valor.
echo off
ir arriba
18 deCreated
59 with novaPDF Printer (www.novaPDF.com). Please register to remove this message. 9/19/2013 7:13 AM
..:: Matemática Avanzada para Ingenieros Químicos ::.. Carrera Ingenierí... http://www.frro.utn.edu.ar/catedras/index.php?mostrar_contenido=248&m...
19 deCreated
59 with novaPDF Printer (www.novaPDF.com). Please register to remove this message. 9/19/2013 7:13 AM
..:: Matemática Avanzada para Ingenieros Químicos ::.. Carrera Ingenierí... http://www.frro.utn.edu.ar/catedras/index.php?mostrar_contenido=248&m...
20 deCreated
59 with novaPDF Printer (www.novaPDF.com). Please register to remove this message. 9/19/2013 7:13 AM
..:: Matemática Avanzada para Ingenieros Químicos ::.. Carrera Ingenierí... http://www.frro.utn.edu.ar/catedras/index.php?mostrar_contenido=248&m...
21 deCreated
59 with novaPDF Printer (www.novaPDF.com). Please register to remove this message. 9/19/2013 7:13 AM
..:: Matemática Avanzada para Ingenieros Químicos ::.. Carrera Ingenierí... http://www.frro.utn.edu.ar/catedras/index.php?mostrar_contenido=248&m...
loglog(tidal,[enhance1but,enhancetbut],'o')
xlabel( 'desplazamiento tidal')
ylabel('mejora en el transporte')
%
%Como puede verse a partir de este gráfico, se tiene una dependencia tipo "ley de potencia"
%con el deplazamiento tidal.
%Además, la mejora para el 1-butanol es mayor que para el t-butanol, formando la base para
%la separación.
%
pause
%
%A partir de la teoría, esperamos que la mejora dependa del cuadrado del desplazamiento tidal.
%Se desea determinar si esta dependencia es satisfecha por los datos dentro de un determinado
%error, para evaluar la relación o razón de las mejoras, con sus correspondientes límites de
%error.
%Hagamos esto utilizando regresión lineal.
%
pause
%
%Esperamos una dependencia tipo "ley de potencia" con el deplazamiento tidal, por consiguiente,
%debemos en primer lugar convertir el modelo no lineal a una forma lineal:
%
% enhancement = c1 * tidal ^ c2
%
%Se transforma en:
%
% log(enhancement) = log(c1) + c2 * log(tidal)
%
%Por lo tanto, los parámetros del modelo son el logaritmo de la amplitud y el exponente.
%
pause
%
%Podemos utilizar esta forma lineal para establecer la matriz A (es la misma para el 1 y el
%t-butanol):
n=length(tidal);
a=[ones(n,1),log(tidal)]
%
pause
%
%y los dos lados derechos:
b1=log(enhance1but);
bt=log(enhancetbut);
%
%Podemos poner a éstos (los lados derechos) juntos:
bcomb=[b1,bt]
%
pause
%
%Para un mejor ajuste de los parámetros, resolvemos utilizando las ecuaciones normales.
%Podemos resolver el problema a través de la relación x = inv(A'*A)*A' * b como se hizo en clase.
%Por consiguiente:
k=inv(a'*a)*a';
%Visualizamos la transpuesta de esta matriz:
k'
%
pause
%
%Podemos resolver simultáneamente para los dos vectores:
22 deCreated
59 with novaPDF Printer (www.novaPDF.com). Please register to remove this message. 9/19/2013 7:13 AM
..:: Matemática Avanzada para Ingenieros Químicos ::.. Carrera Ingenierí... http://www.frro.utn.edu.ar/catedras/index.php?mostrar_contenido=248&m...
x=k*bcomb;
x1=x(:,1)
xt=x(:,2)
%
pause
%
%Como puede verse, el exponente para ambos conjuntos de datos es similar y próximo al
%valor esperado 2.0.
%Comparemos esto con los datos:
%
hold on
plot(tidal,exp(a*x))
hold off
%
%que ajusta los datos bastante bien.
%
pause
%
%Ahora podemos calcular el error en las mediciones y el error en la pendiente.
%Primero obtenemos el error en las mediciones. Éste es exactamente el cuadrado de la norma-2
%del residuo dividido por n-2 debido a que tenemos dos parámetros de ajuste:
r=a*x-bcomb
%
pause
%
%Observe que éste suministra el residuo para ambos conjuntos de datos al mismo tiempo!.
%La varianza es:
var=sum(r.*r)/(n-2);
std1=var(1)^.5
stdt=var(2)^.5
%
%Por consiguiente, el error en las mediciones en el 1 y el t-butanol son muy similares.
%Observe que el error dado aquí en realidad es el error en el logaritmo de la mejora,
%dado que es lo que estamos ajustando del modelo.
%
pause
%
%Veamos ahora el error que esto causa en el exponente calculado.
%Obtenemos el exponente utilizando la segunda fila de la matriz k (o segunda columna de k'),
%por consiguiente:
varexp=k(2,:)*k(2,:)'*var;
stdexp1=varexp(1)^.5
stdexpt=varexp(2)^.5
%
%Por lo tanto, ambos caen dentro de un desvío estándar del valor esperado 2.0.
%
pause
%
%Finalmente, queremos ver la relación o razón de las velocidades de transporte dado que ésta es
%la que determina la selectividad. Debido a que los exponentes son ligeramente diferentes para
%las dos mejoras, es razonable comparar las mejoras en la mitad del rango sobre el que se
%efectuaron las mediciones. Por consiguiente, comparamos la mejora para un desplazamiento
%tidal de 0.15.
%Calculamos ahora la mejora y el error en la mejora para cada una de las especies investigadas
%correspondientes a ese desplazamiento tidal. Luego,
%
%pause
%
23 deCreated
59 with novaPDF Printer (www.novaPDF.com). Please register to remove this message. 9/19/2013 7:13 AM
..:: Matemática Avanzada para Ingenieros Químicos ::.. Carrera Ingenierí... http://www.frro.utn.edu.ar/catedras/index.php?mostrar_contenido=248&m...
enhance=exp([1,log(.15)]*x);
enhance1=enhance(1)
enhancet=enhance(2)
ratio=enhance1/enhancet
%
%por lo tanto, existe algo de selectividad suministrada por el esquema de oscilación.
%
pause
%
%Ahora para el error en cada una de las mejoras correspondientes a un desplazamiento tidal de
%0.15.
%Podemos obtenerlo utilizando la fórmula vectorial descripta en clase:
avec=[1;log(0.15)];
prod=(k'*avec)'*(k'*avec);
predvar=prod*var
%
pause
%
%Esta es la varianza en los valores pronosticados - el logaritmo de las mejoras pronosticadas
%para el 1-butanol y el t-butanol. Si queremos el error en la mejora verdadera, tenemos que
%usar la fórmula para el error de propagación para una función de variable aleatoria.
%En este caso la mejora es exactamente la exponencial del punto pronosticado por la curva de
%ajuste, de manera que el cálculo del error es extremadamente simple.
%El error en el logaritmo de una variable aleatoria es aproximadamente igual (para pequeñas
%variaciones) al error relativo de la variable misma! Por consiguiente:
%
pause
%
relpredstd1=predvar(1)^.5
relpredstdt=predvar(2)^.5
%
%donde estas cantidades representan el desvío estándar fraccional en la mejora
%(el desvío estándar por la mejora).
%La desviación en cada una de las mejoras pronosticadas es más que pequeña, sólo un poco más del
5%
%de la mejora pronosticada.
%
%pause
%
%Si queremos averiguar el error en la relación o razón, podríamos utilizar la fórmula estándar
%para el error en una relación suponiendo que la variabilidad en las dos mejoras es independiente.
%Esto daría para el error:
%
pause
%
ratio
relratiostd=sum(predvar)^.5
%que es bastante grande considerando que el desvío con respecto a la unidad de la razón o
%relación en la mejora (la cual suministra la selectividad del proceso) es sólo de 0.38.
%Sin embargo, este error, es incorrecto!
%Esto se debe a que existe un considerable grado de covarianza en la dispersión de las mejoras
%observadas para el 1 y el t-butanol.
%Podemos ver esto en la gráfica original de los datos, observando que, mientras que la mejora
%en torno de cada una de las líneas ajustadas presenta bastante dispersión, la separación entre
%los datos del 1 y el t-butanol es notablemente consistente, lo cual indica una relación o razón
%constante.
%¿Cómo podemos manejarnos con esta covarianza?
%
24 deCreated
59 with novaPDF Printer (www.novaPDF.com). Please register to remove this message. 9/19/2013 7:13 AM
..:: Matemática Avanzada para Ingenieros Químicos ::.. Carrera Ingenierí... http://www.frro.utn.edu.ar/catedras/index.php?mostrar_contenido=248&m...
pause
%
%La forma más simple de hacer esto es volver a los datos originales y ajustar la relación
%o razón directamente con una "ley de potencia", en lugar de hacerlo en forma individual con
%las mejoras. En ese caso, el exponente esperado de la "ley de potencia" debería ser cero
%(la dependencia con el desplazamiento tidal se cancela) y la función de modelización, evaluada
%para un desplazamiento tidal de 0.15 debería suministrar el valor y el error correctos.
%Hagamos esto:
%
pause
%
%En primer lugar, determinemos un nuevo lado derecho para el problema de regresión:
bratio=b1-bt
%Observe que la diferencia de logaritmos es equivalente a la división en la mejora original.
%
%pause
%
%La matriz de regresión permanece inalterada, de manera que la solución al problema de
%regresión es precisamente:
xratio=k*bratio
%
%pause
%
%Let's plot this up:
loglog(tidal,exp(bratio),'o')
xlabel('desplazamiento')
ylabel('selectividad')
hold on
loglog(tidal,exp(a*xratio))
%
hold off
%
%Por lo tanto, vemos a partir de la gráfica que la selectividad es una función ligeramente
%decreciente del desplazamiento tidal, lo cual está en discrepancia con la teoría.
%Veamos si esta discrepancia es estadísticamente significativa.
%
pause
%
%Para hacer esto calculemos la variabilidad en la razón o relación (en realidad, el logaritmo
%de la relación):
ratiovar=(bratio-a*xratio)'*(bratio-a*xratio)/(n-2);
%Obtenemos por consiguiente el error en los dos coeficientes:
xratiovar=sum(k'.^2)'*ratiovar;
xratio(2)
expstd=xratiovar(2)^.5
%
pause
%
%Por consiguiente, el decrecimiento en la selectividad con el desplazamiento tidal es
%significativo con un nivel de confianza del 97.5%. Esto se debe a que la probabilidad que
%el exponente verdadero se encuentre más allá de dos desvíos estándar -por encima- del valor
%observado es de alrededor del 2.5%. Observe que también hay una probabilidad del 2.5%
%que el exponente se encuentre 2 sigma por debajo del valor medio, de manera que el intervalo
%de confianza 2 sigma es del 95%.
%
pause
%
%Obtengamos ahora la selectividad para un valor intermedio del desplazamiento tidal:
25 deCreated
59 with novaPDF Printer (www.novaPDF.com). Please register to remove this message. 9/19/2013 7:13 AM
..:: Matemática Avanzada para Ingenieros Químicos ::.. Carrera Ingenierí... http://www.frro.utn.edu.ar/catedras/index.php?mostrar_contenido=248&m...
exactratio=exp(avec'*xratio)
prod=(k'*avec)'*(k'*avec);
exactvar=prod*ratiovar;
exactratiorelstd=exactvar^.5
%Por consiguiente, el error verdadero en la selectividad es cinco (5) veces más pequeño que el
%que obtuvimos ignorando la covarianza!!
%
pause
%
%La conclusión de todo esto es que debemos ser muy cuidadosos al analizar nuestros datos.
%Si hubiésemos analizado las pendientes originales en las gráficas de la mejora versus el
%desplazamiento tidal, con el error asociado, habríamos concluido que ambas mejoras se
%encontraban dentro de la incerteza estadística de la pendiente de valor 2.0 estimada
%teóricamente. Esta última parte debería conducirnos a la conclusión que la selectividad no está
%afectada por el desplazamiento tidal.
%Un análisis estadístico más preciso muestra exactamente lo opuesto, esto es, existe un pequeño
%pero significativo decrecimiento en la selectividad!
%
pause
%
%En conclusión, la estadística es un tema más que resbaladizo, por lo tanto debemos entender
%-exactamente- que es lo que estamos tratando de calcular para hacerlo bien. En particular,
%debemos entender todo acerca de las variables calculadas con respecto a las otras y si existe
%alguna covarianza.
%Finalmente, recordemos que todo esto trata con errores aleatorios - si el número de datos es
%muy grande, el error total en el experimento estará dominado por los errores sistemáticos
%acerca de los cuales estos estudios estadísticos no pueden suministrar información.
pause
echo off
ir arriba
26 deCreated
59 with novaPDF Printer (www.novaPDF.com). Please register to remove this message. 9/19/2013 7:13 AM
..:: Matemática Avanzada para Ingenieros Químicos ::.. Carrera Ingenierí... http://www.frro.utn.edu.ar/catedras/index.php?mostrar_contenido=248&m...
%Denominamos alpha el extremo inferior del intervalo corriente, beta el extremo superior
%y mid(i) al punto medio de ese intervalo. Sabemos que la respuesta es exactamente 2^(1/3),
%por lo tanto podemos determinar el error en cada etapa de cálculo. Comencemos:
if f(a)*f(b)>0,
disp('La raíz no está en el intervalo!')
else
alpha(1)=a;
beta(1)=b;
mid(1)=(a+b)/2;
plot(mid(1),f(mid(1)),'o')
for i=1:24,
if f(alpha)*f(mid(i))<0,
beta=mid(i);
else,
alpha=mid(i);
end;
mid(i+1)=(alpha+beta)/2;
plot(mid(i),f(mid(i)),'o')
pause(1)
echo off
end
end
hold off
echo on
pause
%Ahora veamos como es el error en función de número de iteraciones:
answer=2^(1/3);
plot(abs(mid-answer))
ylabel('Error absoluto')
xlabel('Número de iteraciones')
hold off
pause
%Si utilizamos un gráfico semilogarítmico, obtenemos:
plot(log10(abs(mid-answer)))
ylabel('Logaritmo del error absoluto')
xlabel('Número de iteraciones')
hold off
%Obsérvese que la progresión al mínimo no es estacionaria, pero el comportamiento en este
%gráfico semilogarítmico es aproximadamente lineal.
%La pendiente de la recta promedio es log10(C), aproximadamente igual a -0.301 correspondiente
%a C=1/2.
pause
%Podemos estimar la velocidad de convergencia r a partir de la gráfica log-log
%del error(i+1) vs error(i).
%La velocidad de convergencia r es la pendiente de la recta promedio de esta gráfica.
[m,nbisection]=size(mid)
plot(log(abs(mid(1:nbisection-1)-answer)),log(abs(mid(2:nbisection)-answer)))
ylabel('log e(i+1)')
xlabel('log e(i)')
hold off
%La pendiente de la recta promedio es aproximadamente 1, lo cual nos indica que el método
%de bisección converge linealmente.
pause
%Veamos ahora el método de Newton. Aquí necesitamos f(x) y fprime(x). Comencemos el proceso de
%integración en x(1)=1. Además estableceremos una tolerancia para determinar cuando hemos
%alcanzado una solución. Por lo tanto:
27 deCreated
59 with novaPDF Printer (www.novaPDF.com). Please register to remove this message. 9/19/2013 7:13 AM
..:: Matemática Avanzada para Ingenieros Químicos ::.. Carrera Ingenierí... http://www.frro.utn.edu.ar/catedras/index.php?mostrar_contenido=248&m...
tol=1e-7;
xlast=a;
%Este criterio sólo se utiliza para finalizar las iteraciones si la distancia entre
%puntos sucesivos se hace demasiado pequeña. En el arranque la fijamos más grande
%que la tolerancia para cualquier valor diferente de x(1).
x(1)=(b+a)/2;
i=1;
plot(y,f(y))
hold on
plot(x(i),f(x(i)),'o')
pause(1)
while min(abs(f(x(i))),abs(x(i)-xlast))>tol,
x(i+1)=x(i)-f(x(i))/fprime(x(i));
xlast=x(i);
i=i+1;
plot(x(i),f(x(i)),'o')
pause(1)
echo off
end
echo on
hold off
pause
%Observe que prácticamente no tomó muchas iteraciones alcanzar la tolerancia establecida!
%El número total de iteraciones fue:
i
%que es muy inferior al método de bisección.
pause
%Analicemos el error como función del número de iteraciones.
echo off
[m,nnewton]=size(x);
plot([1:nbisection],log10(abs(mid-answer)),...
[1:nnewton],log10(abs(x-answer)))
ylabel('Logaritmo del error absoluto')
xlabel('Número de iteraciones')
echo on
%Obsérvese que el error en el método de Newton disminuye mucho más rápido!
%Esto es consecuencia de la convergencia cuadrática del método.
pause
%Podemos estimar la velocidad de convergencia r a partir de la gráfica log-log
%del error(i+1) vs error(i).
%La velocidad r es justamente la pendiente de esta curva. Por consiguiente:
echo off
plot(log(abs(x(1:nnewton-1)-answer)),log(abs(x(2:nnewton)-answer)),...
log(abs(mid(1:nbisection-1)-answer)),log(abs(mid(2:nbisection)-answer)))
ylabel('log e(i+1)')
xlabel('log e(i)')
echo on
%La pendiente del error en el método de bisección es aproximadamente la mitad de la
%pendiente del error en el método de Newton y además es mucho más ruidoso!
pause
%Por último veamos el método de la secante.
%En esta técnica necesitamos dos puntos de arranque diferentes.
%Estos puntos se utilizan para estimar (a través de una aproximación en diferencias finitas)
%la derivada local. Ésta a su vez, se utiliza en un algoritmo tipo Newton para estimar un nuevo
%punto en la iteración.
%Sólo conservamos los dos últimos puntos. Por lo tanto:
28 deCreated
59 with novaPDF Printer (www.novaPDF.com). Please register to remove this message. 9/19/2013 7:13 AM
..:: Matemática Avanzada para Ingenieros Químicos ::.. Carrera Ingenierí... http://www.frro.utn.edu.ar/catedras/index.php?mostrar_contenido=248&m...
tol=1e-7;
xs(1)=(b+a)/2;
xs(2)=a+(b-a)/4;
i=2;
plot(y,f(y))
hold on
plot(xs(1:2),f(xs(1:2)),'o')
pause(1)
while min(abs(f(xs(i))),abs(xs(i)-xs(i-1)))>tol,
xs(i+1)=xs(i)-f(xs(i))*...
(xs(i)-xs(i-1))/(f(xs(i))-f(xs(i-1)));
i=i+1;
plot(xs(i),f(xs(i)),'o')
pause(1)
echo off
end
echo on
hold off
pause
%Este método demanda un poco más de iteraciones que el método de Newton,
i
%pero aún conserva una velocidad de convergencia superlineal.
pause
%Veamos el error:
echo off
[m,nsec]=size(xs);
plot([1:nbisection],log10(abs(mid-answer)),...
[1:nnewton],log10(abs(x-answer)),...
[2:nsec],log10(abs(xs(2:nsec)-answer)))
ylabel('Logaritmo del error absoluto')
xlabel('Número de iteraciones')
echo on
%donde la convergencia del método de la secante yace entre los dos métodos anteriores.
pause
%Para concluir, examinemos la velocidad de convergencia del método de la secante graficando el
%log(error(i+1)) vs. log(error(i)):
echo off
plot(log(abs(x(1:nnewton-1)-answer)),...
log(abs(x(2:nnewton)-answer)),...
log(abs(mid(1:nbisection-1)-answer)),...
log(abs(mid(2:nbisection)-answer)),...
log(abs(xs(2:nsec-1)-answer)),...
log(abs(xs(3:nsec)-answer)))
ylabel('log e(i+1)')
xlabel('log e(i)')
echo on
%donde la pendiente del método de la secante yace entre la de las otras dos.
%Esta pendiente viene dada por r = 0.5*(1+5^.5) = 1.618. La inversa de r se conoce como la
%razón o relación dorada dado que satisface la condición 1/r = 1-(1/r)^2. Este número se
%utiliza en la técnica de la búsqueda dorada para hallar el mínimo de funciones unimodales.
%Haremos esto más adelante.
echo off
29 deCreated
59 with novaPDF Printer (www.novaPDF.com). Please register to remove this message. 9/19/2013 7:13 AM
..:: Matemática Avanzada para Ingenieros Químicos ::.. Carrera Ingenierí... http://www.frro.utn.edu.ar/catedras/index.php?mostrar_contenido=248&m...
y=x.^3-2.;
function y= fprime(x)
%This is the derivative of the function
%f(x) defined in another routine. It is
%required to perform Newton's method.
y=3*x.^2;
ir arriba
30 deCreated
59 with novaPDF Printer (www.novaPDF.com). Please register to remove this message. 9/19/2013 7:13 AM
..:: Matemática Avanzada para Ingenieros Químicos ::.. Carrera Ingenierí... http://www.frro.utn.edu.ar/catedras/index.php?mostrar_contenido=248&m...
%
%donde x(1) es el caudal volumétrico en la canilla del lavabo y x(2) el caudal en la ducha.
%dh es el cambio es el cambio de presión del agua debido a que mi ducha está 15 pies por encima
%del lavabo de mi hijo.
%
pause
%
%Estamos en condiciones de resolver nuestro problema. En primer lugar, pongamos algunos números:
ptot=50; %psig
r12=20; %psig/(gal/min)^2
r23=5; %psig/(gal/min)^2
r24=20; %psig/(gal/min)^2
dh=8; %psig
%Necesitamos hacer ahora una estimación de los caudales x(1) y x(2). Sean entonces:
x(1)=1;
x(2)=1;
v=[0,2,0,2]
axis(v)
plot(x(1),x(2),'o')
hold on
pause
%
%Comenzamos el proceso iterativo:
f(1)=ptot-r12*(x(1)+x(2))^2-r23*x(1)^2;
f(2)=ptot-r12*(x(1)+x(2))^2-r24*x(2)^2-dh;
%Valores iniciales de la función f:
f
while sum(abs(f))>.0001,
%Definimos la matriz Jacobiana:
j(1,1)=-2*r12*(x(1)+x(2))-2*r23*x(1);
j(1,2)=-2*r12*(x(1)+x(2));
j(2,1)=-2*r12*(x(1)+x(2));
j(2,2)=-2*r12*(x(1)+x(2))-2*r24*x(2);
%Calculamos el cambio en nuestro vector de incógnitas x:
dx=j\f';
%Actualizamos x:
x=x-dx';
%Recalculamos f:
f(1)=ptot-r12*(x(1)+x(2))^2-r23*x(1)^2;
f(2)=ptot-r12*(x(1)+x(2))^2-r24*x(2)^2-dh;
plot(x(1),x(2),'o')
pause(1)
echo off
end
echo on
hold off
pause
%Los valores correctos de x son:
x
pause
%Comparemos estos valores con lo que sucede si mi hijo cierra la canilla del lavabo.
%Para simular esta condición establezcamos r23=1e7 (esta situación no está lejos de la realidad
%dado que la canilla del lavabo gotea un poco).
%Comencemos inicializando con los valores del problema anterior:
plot(x(1),x(2),'o')
pause
r23=1e7;
f(1)=ptot-r12*(x(1)+x(2))^2-r23*x(1)^2;
31 deCreated
59 with novaPDF Printer (www.novaPDF.com). Please register to remove this message. 9/19/2013 7:13 AM
..:: Matemática Avanzada para Ingenieros Químicos ::.. Carrera Ingenierí... http://www.frro.utn.edu.ar/catedras/index.php?mostrar_contenido=248&m...
f(2)=ptot-r12*(x(1)+x(2))^2-r24*x(2)^2-dh;
axis(v)
plot(x(1),x(2),'o')
hold on
while sum(abs(f))>.0001,
%Definimos la matriz Jacobiana:
j(1,1)=-2*r12*(x(1)+x(2))-2*r23*x(1);
j(1,2)=-2*r12*(x(1)+x(2));
j(2,1)=-2*r12*(x(1)+x(2));
j(2,2)=-2*r12*(x(1)+x(2))-2*r24*x(2);
%Calculamos el cambio en el vector x:
dx=j\f';
%Actualizamos x
x=x-dx';
%Recalculamos f
f(1)=ptot-r12*(x(1)+x(2))^2-r23*x(1)^2;
f(2)=ptot-r12*(x(1)+x(2))^2-r24*x(2)^2-dh;
echo off
plot(x(1),x(2),'o')
pause(1)
end
echo on
hold off
pause
%Ahora los caudales son:
x
%Como puede verse, la canilla del lavabo de mi hijo realmente afecta al caudal de mi ducha!
ir arriba
32 deCreated
59 with novaPDF Printer (www.novaPDF.com). Please register to remove this message. 9/19/2013 7:13 AM
..:: Matemática Avanzada para Ingenieros Químicos ::.. Carrera Ingenierí... http://www.frro.utn.edu.ar/catedras/index.php?mostrar_contenido=248&m...
33 deCreated
59 with novaPDF Printer (www.novaPDF.com). Please register to remove this message. 9/19/2013 7:13 AM
..:: Matemática Avanzada para Ingenieros Químicos ::.. Carrera Ingenierí... http://www.frro.utn.edu.ar/catedras/index.php?mostrar_contenido=248&m...
pause
%La solución exacta para el máximo es:
%
texact=log(k2/k1)/(k2-k1)
%
%Por lo tanto podemos calcular la velocidad de progresión a la solución correcta:
ernm=abs(t-texact);
nnm=length(ernm);
loglog(ernm(1:nnm-1),ernm(2:nnm))
xlabel('e(i)')
ylabel('e(i+1)')
pause
%Consecuentemente podemos ver que para esta función el método de Newton converge
%cuadráticamente. Obsérvese que esto funciona mientras podamos determinar la primera y segunda
%derivada con suficiente seguridad.
%También se requiere comenzar donde la segunda derivada es del signo apropiado, en este caso
%negativo. Si hubiésemos comenzado en t=2 habríamos capturado el mínimo para
%t --> infinito.
%
pause
%
%Veamos ahora el método de interpolación parabólica sucesiva. En cada etapa ajustamos una
%parábola a tres puntos y la utilizamos para estimar donde está el máximo o el mínimo.
%Comenzamos:
echo off
clear t
t(1)=1;
t(2)=0;
t(3)=.5;
f=cb(t);
i=3;
plot(tt,cb(tt))
xlabel('Tiempo')
ylabel('Concentración de B')
hold on
plot(t,f,'o')
pause
while abs(t(i)-t(i-1))>1e-7,
tm=t(i-2:i)';
fm=f(i-2:i)';
a=[ones(3,1),tm,tm.^2];
x=a\fm;
i=i+1;
t(i)=-x(2)/2/x(3);
f(i)=cb(t(i));
plot(t(i),f(i),'o')
pause(1)
end
hold off
echo on
%
pause
%
%Podemos calcular la velocidad de progresión a la solución exacta:
echo off
erspi=abs(t-texact);
nspi=length(erspi);
loglog(ernm(1:nnm-1),ernm(2:nnm),'b')
34 deCreated
59 with novaPDF Printer (www.novaPDF.com). Please register to remove this message. 9/19/2013 7:13 AM
..:: Matemática Avanzada para Ingenieros Químicos ::.. Carrera Ingenierí... http://www.frro.utn.edu.ar/catedras/index.php?mostrar_contenido=248&m...
hold on
loglog(erspi(1:nspi-1),erspi(2:nspi),'r')
xlabel('e(i)')
ylabel('e(i+1)')
hold off
echo on
%
pause
%
%En este caso la velocidad de progresión es ligeramente super lineal, con una pendiente
%de 1.324. Esta progresión también es un poco más aleatoria.
%
pause
%
%Finalizamos con el método de Fibonacci o de la búsqueda dorada. Este método utiliza la
%relación o razón dorada que es solución de:
%
% r^2 = 1 - r
%
%o r = 0.6180. Esta búsqueda sólo funciona sobre funciones unimodales, esto es, aquellas
%funciones para las cuales la primera derivada es estrictamente positiva para t < t* y negativa
%para t > t*, o la inversa si estamos buscando un mínimo. Obsérvese que la segunda derivada
%puede cambiar de signo localmente y el método ser aún válido.
%El método de Newton debería fallar en esta circunstancia.
%
pause
%
%Trabajemos este método. Comenzamos con algún intervalo conocido sobre el cual la función
%es unimodal, digamos [0,1]. Evaluamos la función en el interior en dos puntos adicionales
%localizados en r y 1-r a partir de los bordes.
%Conservamos el nuevo intervalo [0,r] o [1-r,1] dependiendo cual contiene el máximo (o el
%mínimo). Entonces procedemos a la próxima etapa. La clave es que el método sólo requiere una
%nueva evaluación de la función en cada etapa.
%
pause
%
%Hagamos esto:
echo off
r=(sqrt(5)-1)/2;
clear t
plot(tt,cb(tt))
xlabel('Tiempo')
ylabel('Concentración de B')
hold on
a=0;
b=1;
t(1)=a+(b-a)*(1-r);
tl=t(1);
t(2)=a+(b-a)*r;
tr=t(2);
f=cb(t);
plot(t,f,'o')
fl=f(1);
fr=f(2);
i=2;
pause
while abs(t(i)-t(i-1))>1e-5,
i=i+1;
35 deCreated
59 with novaPDF Printer (www.novaPDF.com). Please register to remove this message. 9/19/2013 7:13 AM
..:: Matemática Avanzada para Ingenieros Químicos ::.. Carrera Ingenierí... http://www.frro.utn.edu.ar/catedras/index.php?mostrar_contenido=248&m...
if fr>fl,
a=tl;
tl=tr;
fl=fr;
t(i)=a+(b-a)*r;
tr=t(i);
fr=cb(tr);
plot(tr,fr,'o')
else,
b=tr;
tr=tl;
fr=fl;
t(i)=a+(b-a)*(1-r);
tl=t(i);
fl=cb(tl);
plot(tl,fl,'o')
end
pause(1)
end
hold off
echo on
%
pause
%
%Esta técnica converge aún más lentamente que el método de interpolación parabólica sucesiva.
%La velocidad de convergencia es lineal y el intervalo se reduce en un factor 0.618 en cada
%etapa. Podemos graficar esto:
%
pause
%
echo off
ergs=abs(t-texact);
ngs=length(ergs);
loglog(ernm(1:nnm-1),ernm(2:nnm),'b')
hold on
loglog(erspi(1:nspi-1),erspi(2:nspi),'r')
loglog(ergs(1:ngs-1),ergs(2:ngs),'g')
xlabel('e(i)')
ylabel('e(i+1)')
hold off
echo on
pause
%Si comparamos estas tres técnicas para esta función vemos que el método de Newton es el que
%converge más rápido pero sólo si arrancamos de un valor próximo al valor verdadero. El método
%de la búsqueda dorada es más lento pero más robusto -podríamos haber elegido cualquier
%intervalo conteniendo al máximo (mínimo) y eventualmente haber llegado al valor correcto-. No
%se puede decir lo mismo de las dos técnicas superlineales.
echo off
36 deCreated
59 with novaPDF Printer (www.novaPDF.com). Please register to remove this message. 9/19/2013 7:13 AM
..:: Matemática Avanzada para Ingenieros Químicos ::.. Carrera Ingenierí... http://www.frro.utn.edu.ar/catedras/index.php?mostrar_contenido=248&m...
37 deCreated
59 with novaPDF Printer (www.novaPDF.com). Please register to remove this message. 9/19/2013 7:13 AM
..:: Matemática Avanzada para Ingenieros Químicos ::.. Carrera Ingenierí... http://www.frro.utn.edu.ar/catedras/index.php?mostrar_contenido=248&m...
38 deCreated
59 with novaPDF Printer (www.novaPDF.com). Please register to remove this message. 9/19/2013 7:13 AM
..:: Matemática Avanzada para Ingenieros Químicos ::.. Carrera Ingenierí... http://www.frro.utn.edu.ar/catedras/index.php?mostrar_contenido=248&m...
39 deCreated
59 with novaPDF Printer (www.novaPDF.com). Please register to remove this message. 9/19/2013 7:13 AM
..:: Matemática Avanzada para Ingenieros Químicos ::.. Carrera Ingenierí... http://www.frro.utn.edu.ar/catedras/index.php?mostrar_contenido=248&m...
integral(i)=dx * w * f';
trh(i)=dx;
end;
echo on
%Calculamos el error:
trerror=integral-(exp(b)-exp(a));
loglog(h,abs(error),trh,abs(trerror))
xlabel('h')
ylabel('Error absoluto')
%
pause
%
%Finalmente, para la regla de Simpson tenemos:
echo off
for i=1:m,
%Establecemos el tamaño del panel:
n=2^(i-1);
dx=(b-a)/n;
x=[a:dx:b];
%la función de peso:
w=2*ones(1,n)/3.;
w(2:2:n)=w(2:2:n)+2./3.;
w(n+1)=1/3.;
w(1)=1/3.;
%y el resultado:
f=exp(x);
integral(i)=dx * w * f';
sih(i)=dx;
end;
echo on
%Calculamos el error:
sierror=integral-(exp(b)-exp(a));
xlabel('h')
ylabel('Error absoluto')
%Finalmente comparamos los errores.
loglog(h,abs(error),trh,abs(trerror),sih,abs(sierror))
xlabel('h')
ylabel('Error absoluto')
%
pause
%
%Como puede verse, la pendiente del primer algoritmo es uno, suministrando un error
%de O(h), la pendiente de la regla del trapezoide es de O(h^2), y la pendiente de la regla de
%Simpson es de O(h^4).
echo off
ir arriba
40 deCreated
59 with novaPDF Printer (www.novaPDF.com). Please register to remove this message. 9/19/2013 7:13 AM
..:: Matemática Avanzada para Ingenieros Químicos ::.. Carrera Ingenierí... http://www.frro.utn.edu.ar/catedras/index.php?mostrar_contenido=248&m...
ngq(1)=1;
igq(1)=2*exp(0);
ergq(1)=igq(1)-(exp(1)-exp(-1))
%
pause
%
%Ahora para la regla de dos puntos:
ngq(2)=2;
igq(2)=exp(-1/3^.5)+exp(1/3^.5);
ergq(2)=igq(2)-(exp(1)-exp(-1))
%
pause
%
%Ahora para regla de tres puntos:
ngq(3)=3;
igq(3)=8/9.*exp(0)+5/9.*(exp(-0.6^.5)+exp(0.6^.5));
ergq(3)=igq(3)-(exp(1)-exp(-1))
%
pause
%
%Finalmente la regla de cuatro puntos:
ngq(4)=4;
igq(4)=0.3478548*(exp(-0.8611363)+exp(0.8611363))...
+0.6521452*(exp(-0.3399810)+exp(0.3399810));
ergq(4)=igq(4)-(exp(1)-exp(-1))
%
pause
%
semilogy(ngq,abs(ergq))
%
pause
%
%OK, ahora para puntos colocados de manera no óptima, esto es,
%los nodos están igualmente espaciados.
%En este caso comenzamos con n=2 puntos (la regla del trapezoide):
n(1)=2;
i(1)=exp(-1)+exp(1);
er(1)=i(1)-(exp(1)-exp(-1))
%
pause
%
%Ahora para n=3 (esta es la regla de Simpson)
n(2)=3;
i(2)=4/3*exp(0)+1/3*(exp(-1)+exp(1));
er(2)=i(2)-(exp(1)-exp(-1))
%
pause
%
%y para n=4:
n(3)=4;
i(3)=1/4*(exp(1)+exp(-1))+3/4*(exp(-1/3)+exp(1/3));
er(3)=i(3)-(exp(1)-exp(-1))
%
pause
%
%Finalmente, para n=5:
n(4)=5;
i(4)=7/45*(exp(-1)+exp(1))+32/45*(exp(-.5)+exp(.5))...
41 deCreated
59 with novaPDF Printer (www.novaPDF.com). Please register to remove this message. 9/19/2013 7:13 AM
..:: Matemática Avanzada para Ingenieros Químicos ::.. Carrera Ingenierí... http://www.frro.utn.edu.ar/catedras/index.php?mostrar_contenido=248&m...
+12/45*exp(0);
er(4)=i(4)-(exp(1)-exp(-1))
%
pause
%
semilogy(ngq,abs(ergq),n,abs(er))
%Como podemos ver, los nodos óptimamente espaciados de la cuadratura Gaussiana permiten
%un cálculo de la integral mucho más exacto que aquel en el que los nodos no están
%óptimamente espaciados.
echo off
ir arriba
42 deCreated
59 with novaPDF Printer (www.novaPDF.com). Please register to remove this message. 9/19/2013 7:13 AM
..:: Matemática Avanzada para Ingenieros Químicos ::.. Carrera Ingenierí... http://www.frro.utn.edu.ar/catedras/index.php?mostrar_contenido=248&m...
for i=1:n+1,
t(i,1)=t(i,1)*h*2^(n+1-i);
end
echo on
%
pause
%
%Este algoritmo se construyó para la regla trapezoidal de manera de efectuar el mínimo
%número de llamados de la función. Recordemos que para 2^k paneles (con k=0,1,2 ...n),
%se requieren (2^k)+1 evaluaciones de la función; estas evaluaciones se vuelven a utilizar
%con (2^2k) paneles (en total (2^2k)+1 puntos). Por consiguiente, en cada etapa sólo se
%necesita evaluar la función en 2^k nuevos puntos.
%Si estudiamos la estructura de la expresión de arriba, vemos que ésta se verifica.
%No se requieren evaluaciones adicionales de la función para la extrapolación sucesiva de
%Richardson.
%
pause
%
%Ahora que hemos construido las estimaciones de la regla trapezoidal, grafiquemos los errores
%de arriba:
semilogy(abs(t(:,1)-(exp(1)-exp(-1))))
%Como podemos ver, el error es recortado en un factor de cuatro cada vez que el intervalo es
%llevado a la mitad.
%
pause
%
%Apliquemos ahora el método de extrapolación sucesiva de Richardson.
%Cada regla sucesiva será de orden h^2 más alta que aquella utilizada para calcularla. Por lo
%tanto podemos utilizar la fórmula de Simpson de 2n puntos a partir de la fórmula:
%S2n = (4*T2n - Tn)/(4-1) y la siguiente fórmula de orden superior:
%P2n = (16*S2n - Sn)/(16-1) y así sucesivamente:
echo off
for j=2:n+1
for i=n+1:-1:j
t(i,j)=(4^(j-1)*t(i,j-1)-t(i-1,j-1))/(4^(j-1)-1);
end
end
echo on
%y esto es todo!. La matriz t es de la forma triangular inferior, y contiene la regla del
%trapezoide, la de Simpson y estimaciones de cuadratura de orden superior.
%Veamos esta matriz:
%
pause
%
t
%
pause
%
%Como puede apreciarse, las estimaciones rápidamente convergen al valor correcto.
%Resulta de interés graficar los errores de la última fila. Esta fila contiene las
%estimaciones de cuadratura de orden h^2k (k=1, 2, ..., (n+1)), siendo la primer columna el
%resultado de la regla del trapezoide, la segunda el resultado de la regla de Simpson y así
%sucesivamente. Por lo tanto:
%
pause
%
semilogy(abs(t(n+1,:)-(exp(1)-exp(-1))))
hold on
43 deCreated
59 with novaPDF Printer (www.novaPDF.com). Please register to remove this message. 9/19/2013 7:13 AM
..:: Matemática Avanzada para Ingenieros Químicos ::.. Carrera Ingenierí... http://www.frro.utn.edu.ar/catedras/index.php?mostrar_contenido=248&m...
semilogy(abs(t(:,1)-(exp(1)-exp(-1))))
hold off
%Por consiguiente, después de la quinta iteración tenemos una regla que es del orden h^12,
%y el error es del orden del error de redondeo, al menos para esta función uniforme.
%No podemos ir mucho más allá, dado que estamos limitados por la exactitud en la doble
%precisión de la computadora.
%En conclusión, la regla de extrapolación sucesiva de Richardson representa un enfoque simple
%y útil para efectuar estimaciones de cuadratura si no se tiene a mano una tabla de nodos y
%pesos de cuadratura Gaussiana. La diferencia entre los dos últimos elementos de la última fila
%suministra una estimación del error de cuadratura. Un par G7K15 Gauss-Kronod podría alcanzar
%un más que elevado nivel de exactitud así como una estimación del error con un poco menos de
%la mitad de evaluaciones de la función utilizada aquí.
echo off
ir arriba
44 deCreated
59 with novaPDF Printer (www.novaPDF.com). Please register to remove this message. 9/19/2013 7:13 AM
..:: Matemática Avanzada para Ingenieros Químicos ::.. Carrera Ingenierí... http://www.frro.utn.edu.ar/catedras/index.php?mostrar_contenido=248&m...
%
pause
%
%Veamos ahora el error de la cuadratura Gaussiana sobre este nuevo integrando:
er2=gauss('f2',a,b)-1-answer
%Obsérvese que tuvimos que sustraer el resultado analítico de la integral del log(x).
n=[1:4];
semilogy(n,abs(er1),n,abs(er2))
%
pause
%
%Como puede apreciarse ésta es una gran mejora. No obstante, podemos mejorar aún más la
%integral debido a que, mientras que la función (cos(x)-1)log(x) se comporta bien en las
%proximidades del origen, sus derivadas de orden superior son todavía singulares! En
%particular, su derivada segunda es singular. Esto se debe a que el error en la cuadratura de
%cuatro puntos se comba hacia arriba en lugar de ir hacia abajo.
%Si continuamos con reglas de cuadratura de orden superior (incrementando uniformemente el
%número de puntos) obtendríamos poco beneficio.
%Obtendríamos un resultado exacto si utilizásemos sobre esta función un algoritmo adaptativo
%incrementando el número de puntos en la región de la singularidad, pero hay otra forma de
%hacer esto!
%
pause
%
%La integral del integrando original puede simplicarse mediante integración por partes.
%Al hacer esto encontramos que la integral de cos(x)log(x) sobre [0,1] es la misma que
%-sin(x)/x. Este integrando se comporta bien en todas partes. Tratemos de integrarlo.
%Lo salvamos bajo el nombre 'f3.m':
pause
%Veamos nuevamente el integrando:
plot(y,f3(y))
pause
%y el error de integración:
er3=gauss('f3',a,b)-answer
semilogy(n,abs(er1),n,abs(er2),n,abs(er3))
%
pause
%
%Ahora tenemos mayor exactitud! El error en la regla de cuadratura de cuatro puntos es del
%orden de 5e-11 para el último integrando, comparado con 3e-2 obtenido para el integrando
%original y 2e-5 si hubiésemos removido la singularidad en forma analítica.
%La moraleja de la historia es que si tenemos alguna duda en la integración de una función,
%o sustraemos la forma asintótica que es singular o transformamos el integrando en una forma
%que presente un mejor comportamiento (desde el punto de vista analítico).
%
pause
%
%Como último ejemplo, veamos que hace con la función el algoritmo adaptativo.
%No podemos aplicarlo a la primera función debido a que 'quad' utiliza la regla de Simpson,
%que requiere la evaluación de la función en los puntos extremos. Por lo tanto integraremos
%la segunda función. La llamaremos 'f2plot' debido a que le hemos agregado un poco de gráficos.
%Nuevamente, tenemos que evitar el colapso de la integral en x=0. Por consiguiente:
%
pause
%
plot(y,f2(y))
hold on
error=quad('f2plot',a,b)-1-answer
45 deCreated
59 with novaPDF Printer (www.novaPDF.com). Please register to remove this message. 9/19/2013 7:13 AM
..:: Matemática Avanzada para Ingenieros Químicos ::.. Carrera Ingenierí... http://www.frro.utn.edu.ar/catedras/index.php?mostrar_contenido=248&m...
hold off
%
pause
%
%Como podemos ver, la singularidad de la derivada segunda x=0 ha forzado un gran número de
%evaluaciones! La exactitud del resultado final no es mucho mejor que la regla de cuadratura
%Gaussiana de 4 puntos.
echo off
46 deCreated
59 with novaPDF Printer (www.novaPDF.com). Please register to remove this message. 9/19/2013 7:13 AM
..:: Matemática Avanzada para Ingenieros Químicos ::.. Carrera Ingenierí... http://www.frro.utn.edu.ar/catedras/index.php?mostrar_contenido=248&m...
x=mid+xstar*(b-a)/2;
w=wstar*(b-a)/2;
igq(4)=sum(w.*feval(f,x));
ir arriba
47 deCreated
59 with novaPDF Printer (www.novaPDF.com). Please register to remove this message. 9/19/2013 7:13 AM
..:: Matemática Avanzada para Ingenieros Químicos ::.. Carrera Ingenierí... http://www.frro.utn.edu.ar/catedras/index.php?mostrar_contenido=248&m...
pause
%
%Ahora calculamos la integral y el error.
%Obsérvese que la integral es exactamente el valor del promedio veces el área de integración
%(incluyendo la región cero fuera del dominio embebido o incorporado).
integ=sum/n*4;
error=4*(sumsq/n-(sum/n)^2)^.5/n^.5;
[integ,error]
%
pause
%
%El error relativo depende de la magnitud de la función, del grado de variación y del número
%de puntos utilizados en la evaluación.
%Para 500 puntos, el error para este integrando es de alrededor del 3% .
%La respuesta correcta es:
correct_int=3.2077
%que está dentro del error del valor medio (téngase presente que, usualmente, el valor obtenido
%será diferente cada vez que corramos el programa!)
echo off
ir arriba
48 deCreated
59 with novaPDF Printer (www.novaPDF.com). Please register to remove this message. 9/19/2013 7:13 AM
..:: Matemática Avanzada para Ingenieros Químicos ::.. Carrera Ingenierí... http://www.frro.utn.edu.ar/catedras/index.php?mostrar_contenido=248&m...
while t(k)<3,
yem(k+1)=yem(k)+(b-yem(k)*a)*dt;
t(k+1)=t(k)+dt;
plot(t(k+1),yem(k+1),'o')
pause(1)
k=k+1;
echo off
end;
echo on
%Como podemos ver, el procedimiento de integración permite seguir muy bien la evolución
%temporal de la función. Esto se debe a que la función misma es estable y el tamaño de
%paso suficientemente pequeño de manera que el producto hJ satisface la condición de
%estabilidad del método |1+hJ| < 1. Podemos graficar el error:
pause
hold off
plot(t,yem-(b/a)*(1-exp(-a*t)))
%A partir de este gráfico vemos que el error arranca en cero, se incrementa en magnitud y
%decrece nuevamente. El último decrecimiento se debe a que la ecuación es estable,
%-la familia de soluciones es convergente-, de aquí que los errores anteriores sean
%eliminados.
%Comparemos este comportamiento con lo que sucedería si utilizásemos un tamaño de
%paso más grande.
%Elijamos ahora dt = .3, que aún no es lo suficientemente grande como para que el
%procedimiento sea inestable.
pause
axis(v)
dt=.3;
clear t;
clear yem;
plot(x,y)
hold on
yem(1)=0;
t(1)=0;
plot(t(1),yem(1),'o')
pause(1)
k=1;
while t(k)<3,
yem(k+1)=yem(k)+(b-yem(k)*a)*dt;
t(k+1)=t(k)+dt;
plot(t(k+1),yem(k+1),'o')
pause(1)
k=k+1;
echo off
end;
echo on
%Esta vez el error oscila antes que éste disminuya nuevamente. El método es casi inestable,
%el producto hJ del orden de -1.5, aún es mayor que el valor crítico de -2.
%Si incrementamos el paso un poco más, ocurrirán cosas peores:
pause
hold off
dt=.4;
clear t;
clear yem;
axis(v)
plot(x,y)
hold on
yem(1)=0;
t(1)=0;
49 deCreated
59 with novaPDF Printer (www.novaPDF.com). Please register to remove this message. 9/19/2013 7:13 AM
..:: Matemática Avanzada para Ingenieros Químicos ::.. Carrera Ingenierí... http://www.frro.utn.edu.ar/catedras/index.php?mostrar_contenido=248&m...
plot(t(1),yem(1),'o')
pause(1)
k=1;
while t(k)<3,
yem(k+1)=yem(k)+(b-yem(k)*a)*dt;
t(k+1)=t(k)+dt;
plot(t(k+1),yem(k+1),'o')
pause(1)
k=k+1;
echo off
end;
echo on
hold off
pause
%Veamos ahora como podemos mejorar las cosas utilizando una técnica implícita.
%La técnica más simple es el Método de Euler Hacia Atrás (Backward Euler), por el
%cual aproximamos la función con una recta, esta vez tangente en el punto [t(k+1),y(k+1)]
%y la usamos desde el punto [t(k),y(k)] para predecir y(k+1). Este procedimiento conduce
%al algoritmo BE (Backward Euler): ybe(k+1)=ybe(k)+f(ybe(k+1),t(k+1))*dt.
%Normalmente para funciones f(t,y)no-lineales tenemos que utilizar un resolvedor de
%ecuaciones no lineales para resolver la relación implícita en el BE algoritmo.
%Sin embargo, para un sistema lineal, éste no es el caso. Podemos resolver ybe(k+1)
%explícitamente. Por lo tanto obtenemos:
dt=.1;
clear t;
axis(v)
plot(x,y)
hold on
ybe(1)=0;
t(1)=0;
plot(t(1),ybe(1),'o')
pause(1)
k=1;
while t(k)<3,
ybe(k+1)=(ybe(k)+b*dt)/(1+a*dt);
t(k+1)=t(k)+dt;
plot(t(k+1),ybe(k+1),'o')
pause(1)
k=k+1;
echo off
end;
echo on
hold off
pause
%El error en este caso es aproximadamente el mismo que en el Método de Euler.
%Esto se debe a que elejimos dt suficientemente pequeño (0.1) de manera que hJ
%no era suficientemente grande como para provocar inestabilidad. Utilicemos ahora
%dt = .4, el valor que causaba que el EM (Euler Method) colapsara:
dt=.4;
clear t;
clear ybe;
axis(v)
plot(x,y)
hold on
ybe(1)=0;
t(1)=0;
plot(t(1),ybe(1),'o')
pause(1)
50 deCreated
59 with novaPDF Printer (www.novaPDF.com). Please register to remove this message. 9/19/2013 7:13 AM
..:: Matemática Avanzada para Ingenieros Químicos ::.. Carrera Ingenierí... http://www.frro.utn.edu.ar/catedras/index.php?mostrar_contenido=248&m...
k=1;
while t(k)<3,
ybe(k+1)=(ybe(k)+b*dt)/(1+a*dt);
t(k+1)=t(k)+dt;
plot(t(k+1),ybe(k+1),'o')
pause(1)
k=k+1;
echo off
end;
echo on
hold off
pause
%En este caso el error es más grande que en el ejemplo para dt=0.1 (como era de esperar)
%pero las oscilaciones debidas al algoritmo EM se han eliminado completamente.
%Esto refleja el hecho que el método implícito BE es absolutamente estable para toda
%ecuación diferencial estable, no importa cuán grande sea el tamaño del paso.
%Esta es la razón por la cual la mayoría de las subrutinas comerciales de integración
%tienen al menos algún carácter implícito a pesar de la dificultad de resolver la ecuación
%no lineal determinada por el problema implícito.
%Observemos que, usualmente, esta ecuación no lineal es muy fácil de resolver debido a que
%tenemos una excelente estimación inicial para el valor de y(k+1) a partir de las fórmulas
%explícitas. Por consiguiente, esquemas rápidos tales como el método de Newton tienen una
%elevada tasa de convergencia y usualmente no nos ponen en dificultad.
hold off
echo off
ir arriba
51 deCreated
59 with novaPDF Printer (www.novaPDF.com). Please register to remove this message. 9/19/2013 7:13 AM
..:: Matemática Avanzada para Ingenieros Químicos ::.. Carrera Ingenierí... http://www.frro.utn.edu.ar/catedras/index.php?mostrar_contenido=248&m...
dt = 0.1;
%Para comenzar, veamos como es esta función para este conjunto específico de parámetros.
%La respuesta exacta viene expresada a través de la función: yexact.m
%Por consiguiente:
time=[0:.2:20];
v=[0,20,-2,2];
axis(v);
plot(time,yexact(time))
xlabel('t')
ylabel('y(t)')
hold on
%Para el Método de Euler clásico:
y(1)=1;
y(2)=0;
t=0;
i=1;
plot(t,y(1),'o')
echo off
while t<20,
y=y+dt*fa(y,t);
t=t+dt;
plot(t,y(1),'o')
erem(i)=y(1)-yexact(t);
i=i+1;
end
echo on
hold off
pause
%Como podemos ver, el Método de Euler arranca siguiendo la función bastante bien,
%pero la inestabilidad aparece a tiempos largos y el error aumenta.
%El error se conserva en la variable erem:
plot(erem)
xlabel('t')
ylabel('error')
%Como podemos ver, el error que cometemos es muy grande!
pause
%También podemos ver el método Backward Euler. En este caso, el método es implícito,
%por consiguiente tenemos que encontrar la raíz de una ecuación (algebraica o no
%algebraica) en cada paso. Luego:
axis(v);
plot(time,yexact(time))
xlabel('t')
ylabel('y(t)')
hold on
y(1)=1;
y(2)=0;
t=0;
i=1;
[m,n] = size(y);
tol=.0001;
eps=.00001;
plot(t,y(1),'o')
echo off
while t<20,
dy=1;
ybe=y+dt*fa(y,t); %Comenzamos estimando con el método de Euler explícito.
while sum(abs(dy))>tol,
%Esta es la función que debería ser cero:
52 deCreated
59 with novaPDF Printer (www.novaPDF.com). Please register to remove this message. 9/19/2013 7:13 AM
..:: Matemática Avanzada para Ingenieros Químicos ::.. Carrera Ingenierí... http://www.frro.utn.edu.ar/catedras/index.php?mostrar_contenido=248&m...
g=ybe-y-dt*fa(ybe,t+dt);
for k=1:n
e=zeros(1,n);
e(k)=eps;
j(1:n,k)=(fa(ybe+e,t+dt)-fa(ybe-e,t+dt))'/2/eps;
end
%Esta es la derivada de la función de arriba:
gp=eye(n)-dt*j;
%Ahora resolvemos para el valor corregido BE:
dy=gp\g';
ybe=ybe-dy';
end
t=t+dt;
y=ybe;
plot(t,y(1),'o')
xlabel('t')
ylabel('y(t)')
erbe(i)=y(1)-yexact(t);
i=i+1;
end
echo on
hold off
pause
%Este método traza la función como el método explícito de Euler.
%La magnitud del error permanece acotada, pero todavía crece con el tiempo.
%Podemos graficar los dos errores juntos:
plot(erem)
xlabel('t')
ylabel('error')
hold on
plot(erbe,'r')
hold off
%Como podemos ver, el método Backward Euler no es una gran mejora.
%Esto se debe a que la ecuación diferencial misma no es stiff, sino que sólo es
%neutralmente estable sin amortiguamiento.
%Cualquier valor finito de dt conducirá a inestabilidad numérica.
pause
%Veamos ahora el Método de Gauss-Euler (o regla del trapecio).
%Este método también es implícito, por lo tanto, nuevamente, utilizaremos el método
%de Newton para resolver cada nuevo y. Tenemos:
axis(v);
plot(time,yexact(time))
xlabel('t')
ylabel('y(t)')
hold on
y(1)=1;
y(2)=0;
t=0;
i=1;
[m,n] = size(y);
tol=.0001;
eps=.00001;
plot(t,y(1),'o')
echo off
while t<20,
dy=1;
ytr=y+dt*fa(y,t);
while sum(abs(dy))>tol,
53 deCreated
59 with novaPDF Printer (www.novaPDF.com). Please register to remove this message. 9/19/2013 7:13 AM
..:: Matemática Avanzada para Ingenieros Químicos ::.. Carrera Ingenierí... http://www.frro.utn.edu.ar/catedras/index.php?mostrar_contenido=248&m...
g=ytr-y-dt*(fa(ytr,t+dt)+fa(y,t))/2;
for k=1:n
e=zeros(1,n);
e(k)=eps;
j(1:n,k)=(fa(ytr+e,t+dt)-fa(ytr-e,t+dt))'/2/eps;
end
gp=eye(n)-dt*j/2;
dy=gp\g';
ytr=ytr-dy';
end
t=t+dt;
y=ytr;
plot(t,y(1),'o')
ertr(i)=y(1)-yexact(t);
i=i+1;
end
echo on
hold off
pause
%La regla del trapecio realiza un mejor trabajo de seguimiento de la solución,
%como uno esperaría. El error aún crece con el tiempo, sin embargo, debido a la
%naturaleza implícita de la regla es bastante lento.
%Comparemos esta regla con una de las reglas explícitas más simples, el método de
%Runge-Kutta de 2do. orden:
pause
axis(v);
plot(time,yexact(time))
xlabel('t')
ylabel('y(t)')
hold on
y(1)=1;
y(2)=0;
t=0;
i=1;
plot(t,y(1),'o')
echo off
while t<20,
k1=dt*fa(y,t);
k2=dt*fa(y+k1,t+dt);
y=y+(k1+k2)/2;
t=t+dt;
plot(t,y(1),'o')
er2s(i)=y(1)-yexact(t);
i=i+1;
end
echo on
hold off
pause
%Aquí también el método traza la función solución bastante bien con un error ligeramente
%más grande.
%Podemos ver esto un poco mejor si graficamos los dos errores simultáneamente.
%En primer lugar el del RK de 2do. orden:
plot(er2s)
xlabel('t')
ylabel('error')
pause
%Luego el de Gauss-Euler:
hold on
54 deCreated
59 with novaPDF Printer (www.novaPDF.com). Please register to remove this message. 9/19/2013 7:13 AM
..:: Matemática Avanzada para Ingenieros Químicos ::.. Carrera Ingenierí... http://www.frro.utn.edu.ar/catedras/index.php?mostrar_contenido=248&m...
plot(ertr,'r')
hold off
pause
%A partir de este gráfico resulta claro que el error del Método de Euler-Gauss
%es aproximadamente la mitad del que suministra la técnica de Runge-Kutta de 2do. orden.
%La discrepancia sería más grande (y mucho) para un problema stiff en el que el método
%explícito debería fallar, pero el método implícito sería estable.
pause
%Volvamos ahora a nuestra regla final, el método de Runge-Kutta de 4to. orden.
%Tenemos el conjunto simple de ecuaciones:
axis(v);
plot(time,yexact(time))
xlabel('t')
ylabel('y(t)')
hold on
y(1)=1;
y(2)=0;
t=0;
i=1;
plot(t,y(1),'o')
echo off
while t<20,
k1=dt*fa(y,t);
k2=dt*fa(y+k1/2,t+dt/2);
k3=dt*fa(y+k2/2,t+dt/2);
k4=dt*fa(y+k3,t+dt);
y=y+(k1+2*k2+2*k3+k4)/6;
t=t+dt;
plot(t,y(1),'o')
er4s(i)=y(1)-yexact(t);
i=i+1;
end
echo on
hold off
pause
%Este método también traza la función muy bien, pero ahora el error es muy pequeño,
%suministrando:
plot(er4s)
xlabel('tiempo')
ylabel('error')
%que es varios órdenes de magnitud más pequeño que el error en el método
%de R-K de segundo orden!
pause
hold off
echo off
ir arriba
55 deCreated
59 with novaPDF Printer (www.novaPDF.com). Please register to remove this message. 9/19/2013 7:13 AM
..:: Matemática Avanzada para Ingenieros Químicos ::.. Carrera Ingenierí... http://www.frro.utn.edu.ar/catedras/index.php?mostrar_contenido=248&m...
56 deCreated
59 with novaPDF Printer (www.novaPDF.com). Please register to remove this message. 9/19/2013 7:13 AM
..:: Matemática Avanzada para Ingenieros Químicos ::.. Carrera Ingenierí... http://www.frro.utn.edu.ar/catedras/index.php?mostrar_contenido=248&m...
ir arriba
57 deCreated
59 with novaPDF Printer (www.novaPDF.com). Please register to remove this message. 9/19/2013 7:13 AM
..:: Matemática Avanzada para Ingenieros Químicos ::.. Carrera Ingenierí... http://www.frro.utn.edu.ar/catedras/index.php?mostrar_contenido=248&m...
k1=dt*cannonball(t,y);
k2=dt*cannonball(t+dt,y+k1);
k3=dt*cannonball(t+dt/2,y+(k1+k2)/4);
y=y+(k1+4*k3+k2)/6;
t=t+dt;
plot(y(1),y(2),'o')
end;
theta=input('ingrese ángulo de elevación del cañón = ');
end;
hold off
echo on
%Este programa ilustra el ajuste manual del shooting method.
%Frecuentemente el ajuste manual es bastante efectivo si hay
%solo un parámetro para jugar.
%Ciertamente esto nos permite tener una buena idea de la función
%y obtener una estimación del valor correcto del parámetro de disparo.
%Una manera más elegante de hacer esto es utilizar una técnica
%de determinación de raíces.
%Para este propósito utilizamos la rutina fzero de MATLAB para
%determinar el ángulo de disparo que suministra la altura correcta
%a la distancia correcta.
pause
%Para hacer esto debemos poner la rutina de integración en una función
%que devuelve la diferencia entre la altura de la bala de cañón y la del blanco
%a la distancia del blanco.
%Llamaremos a esta función deltah(theta).
%La rutina de MATLAB fzero ajustará theta hasta que el valor devuelto
%por esta función sea cero.
pause
plot(dist,height,'x')
hold on
opttheta=fzero('deltah',0.1)
%y esto es todo!
%La vida se nos complica un poco si tenemos dos parámetros de ajuste,
%pero podemos resolver esto mediante un procedimiento de minimización 2D
%donde la función a minimizarse es la suma de los cuadrados de las desviaciones.
%Si Ud. hace esto asegúrese de escalar todo cuidadosamente.
hold off
echo off
58 deCreated
59 with novaPDF Printer (www.novaPDF.com). Please register to remove this message. 9/19/2013 7:13 AM
..:: Matemática Avanzada para Ingenieros Químicos ::.. Carrera Ingenierí... http://www.frro.utn.edu.ar/catedras/index.php?mostrar_contenido=248&m...
plot(y(1),y(2),'o')
%
%Para el procedimiento de integración usamos el método de Runge-Kutta de tercer orden:
t=0;
while dist>y(1),
ylast=y;
k1=dt*cannonball(t,y);
k2=dt*cannonball(t+dt,y+k1);
k3=dt*cannonball(t+dt/2,y+(k1+k2)/4);
y=y+(k1+4*k3+k2)/6;
t=t+dt;
plot(y(1),y(2),'o')
end;
drawnow
%Ahora, para el proceso de interpolación.
%El tiempo que la bala pasó por el blanco es un poco menor (debido al paso temporal de
%integración) que el tiempo final calculado en el while; por lo tanto la última distancia
%horizontal calculada es un poco mayor que la distancia a la que se encuentra el blanco.
%Podemos obtener esta diferencia temporal, que llamamos delta (y que es negativa para poder
%utilizarla para calcular la altura a la que pasó la bala al tiempo de llegada a la posición
%del blanco mediante desarollo en serie de Taylor hacia atrás):
delta=-(y(1)-dist)/(y(1)-ylast(1))*dt;
%Calculamos la altura final de la bala utilizando tres términos del desarrollo hacia atrás en
%serie de Taylor alrededor del último tiempo calculado, para obtener una medida más exacta, así:
hfinal=y(2)+y(4)*delta+0.5*delta^2*(y(4)-ylast(4))/dt;
%Finalmente, devolvemos la diferencia en altura:
dh=hfinal-height;
function f= cannonball(t,y)
%Esta función devuelve las derivadas temporales de las posiciones
%"x" y "z" y de las componentes de la velocidad, vx y vz.
%Tenemos los siguientes valores de parámetros:
m=5; %Masa de la bala (kg)
cd=0.44; %Coeficiente de arrastre
a=0.03; %Sección transversal de la bala (m^2)
rho=1.0; %Densidad del aire (kg/m^3)
g=9.8; %Aceleración debida a la gravedad (m/s^2)
%y las derivadas:
f(1)=y(3);
f(2)=y(4);
f(3)=-cd*a*rho/2/m*(y(3)^2+y(4)^2)^.5*y(3);
f(4)=-cd*a*rho/2/m*(y(3)^2+y(4)^2)^.5*y(4)-g;
%Observe que el coeficiente de arrastre total está distribuido entre las dos componentes
%de la velocidad y es proporcional a la velocidad en cada dirección.
ir arriba
U.T.N. Facultad Regional Rosario | Area Redes y Comunicaciones | Contactese | CSS and XHTML
59 deCreated
59 with novaPDF Printer (www.novaPDF.com). Please register to remove this message. 9/19/2013 7:13 AM