1. Nombre del alumno: Carlos Perales González
Nombre de la asignatura: Programación Científica
Curso académico: 1º del Grado de Física, 2011-2012
Nombre y número de la práctica:
27.- CÁLCULO DEL NÚMERO DE MACH
2. 1.-Descripción y análisis del problema
1.1-Número de Mach
El número de Mach, que se aplica para cálculos relacionados con flujos
en fluidos compresibles, es la relación entre la velocidad de una de las partes
de un cuerpo que se mueve en un fluido y la velocidad del sonido en ese
fluido. El número de Mach, por tanto, se expresa así:
M=
V cuerpo
V sonido
1.2.-Regímenes de flujo
Si nos fijamos en la gama de valores que puede tomar M, podemos
distinguir cinco regímenes de flujo:
-Régimen incompresible: La proporción es pequeña, muy inferior a la unidad
(aproximadamente 0.2 para gases perfectos). El fluido se considera
incompresible.
-Régimen subsónico: El número de Mach es mayor que 0.2 pero menor que
0.7. Los efectos de la compresibilidad del fluido empiezan a notarse.
-Régimen transónico: El número de Mach se situa entre 0.7 y 1.2. Dentro de
este régimen se incluyen los objetos que viajan a la velocidad del sonido
(Mach 1).
-Régimen supersónico: Mach toma valores desde 1.2 hasta otros que
pueden alcanzar el 5.
-Régimen hipersónico: El número de Mach es superior a 5
1.3.-Número de Mach crítico y coeficiente de presión
Para entender el número de Mach Crítico, debemos suponer que el
observador del movimiento es el propio cuerpo que se desplaza en un fluido.
En ese caso, M sería la proporción entre la velocidad del fluido que se mueve
en torno a él y la velocidad del sonido en ese fluido. El número de Mach
Crítico es entonces aquel en el cual el flujo del fluido, en una de las partes
del cuerpo, alcanza la velocidad del sonido en dicho fluido. Sin embargo,
otras partes del fluido se desplazarán en torno al cuerpo a menor velocidad,
siendo por tanto el número de Mach crítico necesariamente menor que la
unidad.
El coeficiente de presión, Cp, se define como la presión que ejerce un
3. flujo sobre un cuerpo para un número Mach. Si M es Mach crítico, C p será la
máxima presión que se ejerce sobre el cuerpo. En el aire, la ecuación de C p
es:
2
( 7/2 )
(2+0.4×M )
1
C p=
×[[
]
2
2.4
(0.7× M )
−1]
Cuando se realizan test a aviones a bajas velocidades, los efectos de
compresibilidad son despreciables y se puede calcular el valor
experimentalmente del coeficiente de presión mínima, C pi. Este coeficiente se
relaciona con Cp a través de la relación de Kármán-Tsien:
C pi
M 2×C pi
2
=√ (1−M )+
Cp
(2×(1+√ (1−M 2)))
Para determinar M, se sustituye la expresión de C p en la relación de
Kárman-Tsien, y se resuelve la ecuación que resulta para M.
M 2×C pi
2
(7/ 2)
(2+0.4× M )
1
[ √(1− M )+(
)]×[
×((
)
2
2.4
(0.7×M )
(2×(1+ √(1− M 2 )))
2
−1)]−(C pi)=0
2.-Problema, gráfica y desarrollo informático
2.1.-Problema
Una vez que sabemos esto, la actividad que se nos presenta es
calcular el valor del número de Mach crítico M, teniendo como dato que C pi =
- 0.383 y que el valor es menor que 1.
El obstáculo con el que nos encontramos es que dicha ecuación no
puede resolverse por métodos algebraicos, por lo que debemos recurrir a
métodos númericos. Para este problema, nos piden que calculemos M
usando:
-El método de la bisección con una tolerancia de ε = 10⁻².
-El método de la secante, partiendo de los mismos valores iniciales, con una
tolerancia de 10-6.
Sabemos que, como el método de la secante es más eficaz, en la
misma tolerancia tendríamos la misma solución con muchas menos
4. iteraciones que en el caso del método de la bisección. La desventaja del
método de la secante es que supone que la ecuación con la que trabajamos
es, no solo continua (condición necesaria también para el método de la
bisección), sino también derivable en el intervalo, mientras que ese requisito
no es necesario en el caso de aplicar el método de la bisección.
Graficaremos la función para ver si es continua y derivable en todo el
intervalo.
Nos informan de que el valor de M se espera menor que la unidad,
luego el intervalo que tenemos que tomar es desde 0 hasta 1. Aquí una
gráfica de la ecuación con la que trabajamos (es la ecuación en función de M
con Cpi=-0.383, expuesta en el punto 1.3)
Cuando la graficamos en un intervalo mayor (desde -1 hasta +1, por
ejemplo), nos damos cuenta de que la función tiende hacia menos infinito en
el punto cero, luego no es derivable en dicho punto.
5. Hay que tener en cuenta eso para no elegir el valor x = 0 como punto
de partida en el programa del método de la secante. Elgiremos, en ese caso,
x = 1.
2.2.-Códigos en Matlab
Este es el código de la función del método de la bisección que usaremos
function [solucion,x,fsolucion,fx,error,iter] = biseccion(fun,a,b,tolinter,tolfun,maxiter)
% Aproxima por el metodo de la biseccion una raiz de la ecuacion
%
fun(x)=0
% suponiendo que esta existe y es unica en el intervalo [a,b]
%------------------------------------------------------------% Argumentos de entrada:
%----------------------% a = extremo inferior del intervalo
% b = extremo superior del intervalo
% tolinter = tolerancia para el intervalo
% tolfun = tolerancia para el valor de la funcion
% maxiter = numero maximo de iteraciones a realizar
% fun
= funcion (debe estar definida en el programa
%
de llamada usando 'inline' )
%-------------------------------------------------------------
6. % Argumentos de salida:
%----------------------% solucion = raiz aproximada
% x
= vector con la sucesion de valores que da el metodo
% fsolucion = valor de la funcion en la raiz aproximada
% fx
= vector con la sucesion de los valores de la funcion
% error = error cometido
% iter
= numero de iteraciones realizadas
%------------------------------------------------------------fa=fun(a);
fb=fun(b);
% Se comprueba que la raiz est� en los extermos
if fa==0
fprintf('La raiz es = %f n',a)
return
end
if fb==0
fprintf('La raiz es = %f n',b)
return
end
% Se comprueba que hay cambio de signo en [a,b]
if sign(fa)==sign(fb)
disp('Error la funcion debe cambiar de signo en (a,b)');
return;
end
% Inicializacion de variables
% Se hace la primera iteracion de la biseccion
iter
= 1;
error =(b-a)*0.5;
solucion = a+error;
fsolucion =fun(solucion);
x
= solucion;
fx
= fsolucion;
% Iteraciones de la biseccion
while (error >tolinter | fsolucion>tolfun) & (iter < maxiter)
% Se comprueba si se ha dado con la solucion
if fsolucion==0
fprintf('La raiz es = %f n',fsolucion)
return
end
% Se busca el nuevo subintervalo
if sign(fa)==sign(fsolucion)
% el cambio de signo esta entre b y solucion
a = solucion;
fa = fsolucion;
else
% el cambio de signo esta entre a y solucion
% Puedo comentar las dos instrucciones que siguen porque, al calcular el
% punto medio en la forma que se hace no se necesita ni el valor de b ni el
% de fun(b)
%
b =solucion;
% fb =fsolucion;
7. end
% actualizacion de las variables
error = error/2;
solucion = a+error;
fsolucion = fun(solucion);
x
= [x solucion];
fx
= [fx fsolucion];
iter
= iter+1;
end
% Se comprueba si se han alcanzado las tolerancias
if error > tolinter | fsolucion>tolfun
disp('No se alzanzan las tolerancias en las iteraciones dadas')
end
Este es el código de la función del método de la secante que usaremos
function [x2,xvect,nit]=metodosecante(f,x,maxiter,tolerancia)
% Aproxima por el metodo de la biseccion una raiz de la ecuacion
%
f(x)=0
% suponiendo que esta, y su derivada, existen en [a,b]
%------------------------------------------------------------% Argumentos de entrada:
%----------------------% x = valor inicial del que partimos
% tolerancia = tolerancia para el intervalo
% maxiter = numero maximo de iteraciones a realizar
% f
= funcion (debe estar definida en el programa
%
de llamada usando 'inline' )
%------------------------------------------------------------% Argumentos de salida:
%----------------------% x2 = raiz aproximada
% xvect
= vector con la sucesion de valores que da el metodo
% intervalo = error cometido
% nit
= numero de iteraciones realizadas
%------------------------------------------------------------% Definimos fuera del intervalo el número de iteraciones
nit=0;
% Para calcular una aproximación en este método, necesitamos dos
% anteriores. Definimos uno como "x" y otro como "x1" tal que
x1=f(x)+x;
% Agruparemos todos los resultados en un vector llamado "xvect"
xvect=x1;
for a=1:maxiter
intervalo=x1; % este será el valor que nos de la cota de error entre un valor de x y el
anterior
x2=x1-f(x1)*(x1-x)/(f(x1)-f(x));
xvect=[xvect x2];
nit=nit+1;
intervalo=abs(intervalo-x2);
if intervalo<tolerancia;
return
8. else % cambio de variables
x=x1;
x1=x2;
end
end
Teniendo estos dos archivos en la misma carpeta, creamos dos programas
diferentes: uno que calcule la solución con el método de la bisección y otro
con el de la secante
-Según el método de la bisección:
% Con este programa evaluaremos el numero de Mach (M) para un coeficiente
% de presion minimo de un fluido de -0.383
disp('Calculo del numero de Mach por el metodo de la biseccion');
Cpi=-0.383;
f=inline('((1-M^2)^(1/2)+M^2*(-0.383)/(2*(1+(1-M^2)^(1/2))))*1/
(0.7*M^2)*(((2+0.4*M^2)/2.4)^(7/2)-1)-(-0.383)');
% Graficamos la función para asegurarnos de que corta con el eje OX en ese
% intervalo
ezplot('((1-M^2)^(1/2)+M^2*(-0.383)/(2*(1+(1-M^2)^(1/2))))*1/
(0.7*M^2)*(((2+0.4*M^2)/2.4)^(7/2)-1)-(-0.383)',[0,1]); grid on;
% Sabiendo que M está entre 0 y 1
a=0;
b=1;
% Definiremoson una tolerancia de 10^-2
tolinter=10^-2;
% Usaremos una tolerancia de f muy pequeño, lo suficiente para que el
% programa no se detenga debido a esta tolerancia. Estableceremos también
% un número grande de iteraciones, con la misma finalidad
tolfun=10^-8;
maxiter=1000;
% Llamamos a la funcion 'biseccion'
[M,x,fM,fx,error,iter]=biseccion(f,a,b,tolinter,tolfun,maxiter);
% Con esta solucion, podríamos aplicar el metodo de la
% secante para aproximarnos más a la solución
fprintf('Para un coeficiente de presión mínimo de %2.4fn',Cpi)
fprintf('El número de Mach es %f,n',M)
fprintf('con un error de %2.1e ',error)
fprintf('en %i iteracionesn',iter)
-Según el método de la secante:
% Con este programa evaluaremos el numero de Mach (M) para un coeficiente
% de presion minimo de un fluido de -0.383
disp('Calculo del numero de Mach por el metodo de la secante');
Cpi=-0.383;
f=inline('((1-M^2)^(1/2)+M^2*(-0.383)/(2*(1+(1-M^2)^(1/2))))*1/
(0.7*M^2)*(((2+0.4*M^2)/2.4)^(7/2)-1)-(-0.383)');
% Graficamos la funcion para asegurarnos de que corta con el eje OX en ese
9. % intervalo
ezplot('((1-M^2)^(1/2)+M^2*(-0.383)/(2*(1+(1-M^2)^(1/2))))*1/
(0.7*M^2)*(((2+0.4*M^2)/2.4)^(7/2)-1)-(-0.383)',[0,1]); grid on;
% Como hemos visto en la grafica, usaremos 1 como punto de partida
x=1;
% Definimos ahora la tolerancia como 10^-6, y dejaremos el mismo numero de
% maximas iteraciones permitidas que en la funcion anterior
tolerancia=10^-6;
maxiter=1000;
% Llamamos a la funcion 'metodosecante'
[M,xvect,nit,intervalo]=metodosecante(f,M,maxiter,tolerancia);
fprintf('Para un coeficiente de presión mínimo de %2.4fn',Cpi)
fprintf('El número de Mach es %2.8f, ',M)
fprintf('con un error de %2.1en',intervalo)
fprintf('en %i iteracionesn',nit)
3.-Análisis de los resultados matemáticos obtenidos
El número de Mach obtenido nos da una idea de la resistencia al aire
que opone el cuerpo, ya que a números de Mach de entre el 2% y el 5% del
Mach crítico, la resistencia al aire aumenta significativamente (es lo que se
conoce como drag).
El primer programa (método de la bisección) nos da una solución de
0.738281 con un error de 3.9x10⁻³ en 8 iteraciones. El segundo programa,
sin embargo, resulta para M un valor de 0.73959828, con un error de
1.8x10⁻⁷ en 14 iteraciones. Cogiendo cualquiera de los dos valores podemos
afirmar que el cuerpo es muy aerodinámico, ya que, por ejemplo, el número
de Mach Crítico de un helicóptero ronda el 0.3, y el de algunos
aerorreactores, 0.75.
Parece importante destacar la diferencia en el número de iteraciones
realizadas. Aunque el segundo programa realizó la aproximación en más
iteraciones, aproximó con más del cuadrado de afinidad en menos del doble
de iteraciones. Tal y como comentamos en el punto 2, el método de la
bisección es mucho más lento, ya que el orden de error máximo es 1 (la cota
de error de una aproximación es la mitad de la cota de error de la
aproximación anterior). Sin embargo, el método de la secante es de orden Ф
= 1.618…, por ello aproxima mejor en un menor número de pasos.