Está en la página 1de 14

posición y movimiento de los objetos celestes, incluido el Sol.

Utilizando MICA,
se generaron los valores de referencia de las verdaderas coordenadas
horizontales del Sol para el período 1990-2005, con una precisión de medio
segundo de arco. Se obtuvieron una serie de dichos valores de valores
correspondientes de referencia para 184 104 instantes de tiempo, (los generados
al muestrear el período de 0ℎ UT del 1 de enero de 1990 a 23ℎ 40𝑚 UT el 31 de
diciembre cada 20 minutos) y comparados con los valores correspondientes
proporcionados por el algoritmos. La comparación se realizó para la ubicación
de la Plataforma Solar de Almería (longitud 2° 21′ 36′′ 𝑂, latitud37° 6′ 2′′ 𝑁). Para
cada algoritmo se evaluaron los siguientes indicadores estadísticos:
1. Promedio de error en el angulo acimutal (∆𝛾 ̅̅̅̅), error en la distancia del
angulo zenital (∆𝜃̅̅̅̅̅𝑧 ),y la desviación angular ( 𝛩̅).
2. La desviación estándar del error en azimut (𝜎𝛾 ) error en la distancia
cenit( 𝜎𝜃𝑧 ), y desviación angular ( 𝜎𝛩 ).
3. Desviación media del error en acimut ( 𝑀𝐷𝛾 ), error en la distancia cenital
( 𝑀𝐷𝜃𝑍 ), y desviación angular (𝑀𝐷𝛩 ).
4. Gama del error en azimut ( 𝑅𝛾 ), error distancia cenital ( 𝑅𝜃𝑍 ), y la
desviación angular ( 𝑅𝛩 ).
Los errores en acimut y distancia cenit ( 𝛾 y 𝜃𝑧 ), se calculan como la diferencia
entre el valor suministrado por el algoritmo y que suministra por MICA.
La desviación angular se calcula como el ángulo entre el vector solar
suministrado por el. La desviación angular se calcula como el ángulo entre el
vector solar suministrado por el algoritmo y el suministrado por MICA. Figura 1
muestra la dirección origen y positivo de ángulos considerados. La Tabla 2
muestra las expresiones de los indicadores estadísticos utilizados. Dos
conclusiones pueden extraerse de los resultados obtenidos:
1. El algoritmo de Spencer, debido a su precisión relativamente pobre, no es
adecuado para su uso en concentrar los sistemas de seguimiento de
energía solar térmica
2. Los otros algoritmos analizados son exactos suficiente para ese
propósito, el propuesto por resultados más exacta.
Tabla 2. Indicadores estadísticos utilizados para todas las variables analizadas
(Error en la distancia cenital, error en azimut y desviación del vector solar)
Indicador estadístico Expresión
Promedio 𝑁
1
𝑥̅ = ∑ 𝑥𝑖
𝑁
𝑖=1
Desviación estándar 𝑁
1
𝜎𝑥 = ( ∑(𝑥𝑖 − 𝑥̅ )2 )1⁄2
𝑁−1
𝑖=1
Desviación media 𝑁
1
𝑀𝐷𝑥 = ∑(𝑥𝑖 − 𝑥̅ )
𝑁
𝑖=1
Rango 𝑅𝑥 = [min(𝑥𝑖 ), max(𝑥𝑖 ) ]𝑖 = 1 … 𝑁

4. EL ALGORITMO PSA
Aunque el algoritmo de Michalsky se puede considerar lo suficientemente bueno
para la mayoría de las aplicaciones de seguimiento solar, su precisión, eficiencia
informática y facilidad de uso aún se pueden mejorar. Estas tareas se han llevado
a cabo y, como resultado, se ha desarrollado un nuevo algoritmo denominado
algoritmo PSA, que tiene las siguientes características:
1. Su facilidad de uso se ha mejorado al incorporar un método eficiente para
calcular el día juliano a partir de la fecha del calendario y el horario
universal.
2. La administración de la memoria se ha mejorado al controlar el alcance y
la duración de las variables.
3. Se ha mejorado la velocidad y la solidez al eliminar las operaciones
innecesarias y el uso de expresiones robustas simples para calcular el
azimut solar, que son válidas para ambos hemisferios.
4. La precisión se ha mejorado modificando las ecuaciones simplificadas del
Almanaque Náutico utilizado por Michalsky con la introducción de nuevos
coeficientes y nuevos términos, e incluyendo la corrección de paralaje.
4.1. Precisión
Tabla 3. Comparación del rendimiento de diferentes algoritmos para determinar
la position del sol para los años 1990 a 2005. (En minutos de arco)
Desviación Desviación
Promedio Distancia
estándar media
Error en la distancia
cenital
Spencer -0.657 13.895 11.34 [-45.568,40918 ]
Pitman y Vant – Hull -0.119 0.235 0.186 [ -1.036,0.649]
Walrayen -0.119 0.196 0.155 [-0.798,0.486 ]
Michalsky -0.121 0.139 0.110 [-0.666,0.345 ]
Error en azimut
Spencer 0.059 15.377 12.378 [-530516,42.066]
Pitman y Vant – Hull -0.068 0.376 0.270 [-2.875,2.287]
Walrayen -0.176 0.253 0.187 [-2.465,0.894]
Michalsky -0.042 0.214 0.155 [-1.917,1.532]
Desviación del Vector
del Sol
Spencer 15.966 9.203 7.588 [0.055,46.460]
Pitman y Vant – Hull 0.322 0.175 0.140 [0.000,1.097]
Walrayen 0.271 0.139 0.112 [0.000,0.798]
Michalsky 0.207 0.107 0.085 [0.000,0.667]
Tabla 4. Rendimiento del algoritmo de PSA en la determinación de la posición
del sol entre los años 1990 y 2005 (todas las cantidades en minutos de arco)
Promedio Desviación Desviación Distancia
estándar media
Error en la
-0.001 0.114 0.091 [-0.398,0.370]
distancia cenital
Error en acimut 0.002 0.190 0.138 [-1.568,1.461]
Desviación del
0.147 0.080 0.065 [0.000,0.409]
vector solar

La precisión del algoritmo PSA se evaluó de la misma manera que el Michalsky


y los otros tres algoritmos mencionados anteriormente. Los resultados se
muestran en la Tabla 4. Una comparación de estos resultados con los
presentados en la Tabla 3 muestra que el algoritmo PSA se comporta mejor que
el algoritmo Michalsky al calcular la distancia cenital, el acimut y el vector de
dirección del Sol. Por ejemplo, la desviación estándar del error al calcular la
distancia cenital, el acimut y el vector de dirección del Sol es 18, 11 y 25% menor
que para el algoritmo Michalsky. Las funciones de densidad de probabilidad de
los errores en el cálculo de la distancia cenital, el acimut y la dirección del vector
del Sol utilizando los cinco algoritmos analizados se representan en las Figs. 2-
4. En todas estas figuras, el rendimiento superior del algoritmo PSA es evidente.
Figs. 5 y 6 muestran que la precisión del algoritmo PSA en el cálculo de las
verdaderas coordenadas horizontales del Sol no parece disminuir
significativamente con el tiempo en el período analizado (1990-2005).

Finalmente, la Fig. 7 muestra que el comportamiento del algoritmo PSA se


comporta correctamente para ambos hemisferios y su precisión parece ser en
gran parte independiente de la ubicación en la que se calcula la posición del Sol.
4.2. Eficiencia computacional
Una implementación aerodinámica C + + del Algoritmo PSA (disponible en
formato electrónico en http: / /www.psa.es/sdg/sunpos.htm) se da en Apéndice
A. Para fines de comparación, Tabla 5 muestra el número de principales
matemáticos y operaciones lógicas en esta implementación de la Algoritmo PSA
y para la FORTRAN original implementación del algoritmo Michalsky como
presentado en su artículo de 1988. Al comparar esos números, debe recordarse
que el PSA el algoritmo es más funcional que el de Michalsky. Por ejemplo,
mientras el usuario de Michalsky algoritmo tiene que proporcionar el número de
días del año como un número entero y el tiempo universal como número decimal
como datos de entrada, el usuario del PSA algoritmo solo tiene que proporcionar
la fecha en el habitual formato (día, mes y año) y el Universal Tiempo, también
en el formato familiar (horas, minutos y segundos).
Una comparación directa de la velocidad de ambos algoritmos no es sencillo, ya
que son implementados en lenguajes de computadora completamente
diferentes. Sin embargo, debido al hecho de que el PSA Algoritmo tiene
operaciones aritméticas un poco más que el algoritmo Michalsky, pero menos if-
declaraciones, operaciones trigonométricas y de módulos, debería correr más
rápido que Michalsky, ya que este último son computacionalmente más caros
que los primeros.
5. DESCRIPCIÓN DEL ALGORITMO
La entrada al algoritmo PSA es el tiempo y ubicación. El tiempo para el momento
considerado se da como la fecha (año, mes y día) y el Tiempo Universal (horas,
minutos y segundos). La ubicación se da como la longitud y la latitud del
observador en grados. Latitud es considerado positivo para el norte y la longitud
para el este. El día juliano, jd, se calcula a partir de la entrada datos por la
siguiente expresión:
donde m es el mes, y es el año, d es el día del mes y la hora es la hora del día
en hora universal en formato decimal, es decir, incluye los minutos y segundos
como una fracción de hora, y todos las divisiones excepto la última son divisiones
enteras.
Esta expresión difiere de la propuesta por Fliegel y Van Flandern (1968) solo en
los dos últimos términos. La adición de estos términos hace es posible calcular
el Día Juliano en forma decimal para cualquier instante de tiempo dado. En
cuanto a la expresión original de Fliegel y Van Flandern, la expresión propuesta
es válida para cualquier fecha posterior 1 de marzo de 4800 a. C., ya sea
gregoriano o proleptico gregoriano.
Las coordenadas eclípticas del Sol se calculan a partir del Día Juliano, mediante
el siguiente conjunto de ecuaciones (todos los ángulos en radianes):
Se debe tener cuidado para asegurar que la ascensión correcta se compute
correctamente como un valor entre 0 y 2p en la ecuación. (8)
La conversión de coordenadas celestes a horizontales se logra mediante el
siguiente conjunto de ecuaciones:
Tabla 5. Número de principales operaciones matemáticas y lógicas para el PSA
y Michalsky algoritmos Algoritmo
Función Función
Adiciones / productos / si Funciones
Algoritmo trigonométrica trigonométrica
restas divisiones declaraciones del módulo
directa inversa
Michalsky 28 25 19 4 10 5
PSA 35 36 16 4 2 0
Tabla 6. Comparación entre la distancia azimutal y cenital suministrada por el
Observatorio Real de la Armada y MICA para 1999-2005 (en segundos de arco)

Promedio Desviación estándar Desviación media Rango


Diferencia en la -0.015 0.148 0.125 [ -0.346, 0.347]
distancia cenital
Diferencia en -0.041 0.294 0.220 [-1.350, 1.132 ]
acimut

donde el radio medio de la Tierra y la distancia al Sol considerado están dados por:

Radio medio de la tierra = 6371.01 km

Unidad Astronómica = 149597890 km

6. VALIDACIÓN A LARGO PLAZO DEL ALGORITMO PSA

El programa MICA solo proporciona datos relacionados con el Sol para el intervalo entre
1990 y 2005. Sin embargo, con la colaboración del Observatorio Real de la Armada en
San Fernando (España), ha sido posible probar la validez del algoritmo PSA hasta el
año 2015.
Siguiendo nuestra petición, el Observatorio Real generó 447 048 valores de referencia
de las verdaderas coordenadas horizontales del Sol, evaluando dichas coordenadas,
usando fórmulas de alta precisión, cada 20 minutos para el período de tiempo
transcurrido desde entonces) 0:00 UT 1 de enero de 1999 hasta 23:40 UT 31 de
diciembre de 2015. Obviamente, la precisión de dichos datos de referencia no es
constante durante el lapso de tiempo en consideración. Para cualquier año posterior a
2000, la diferencia entre el tiempo universal y el tiempo terrestre dinámico debe
extrapolarse, y cuanto mayor sea la extrapolación, mayor será la incertidumbre.
Específicamente, para generar los datos de referencia, se supuso que, en promedio, la
diferencia entre Tiempo Universal y Tiempo Dinámico Terrestre ha crecido
constantemente en un segundo por año. Como resultado, el error de los datos de
referencia no puede garantizarse como menos de medio segundo de arco durante el
intervalo de tiempo completo considerado. La comparación de los valores generados
por MICA y los proporcionados por el Observatorio Real para el período 1999-2005 que
se muestra en la Tabla 6 parece indicar que este error puede ser mayor, del orden de
un segundo de arco.

La Tabla 7 muestra los resultados de la comparación entre los valores de referencia


suministrados por el Observatorio Real de la Armada y los generados por el PSA y el
algoritmo Michalsky. En esta tabla, está claro que el algoritmo PSA es mejor que el de
Michalsky durante todo el período bajo consideración. Para este período, la desviación
estándar del error al calcular la verdadera distancia cenital, el acimut y el vector de
dirección del sol es 22, 14 y 28% menor que para el algoritmo Michalsky,
respectivamente. Del mismo modo, el rango de la

Tabla 7. Comparación de los algoritmos PSA y Michalsky y para la determinación de la


posición del Sol para 1999-2015 (en minutos de arco)

Promedio Desviación Desviación Rango


estándar media
Error en la -0.128 0.137 0.109 [ -0.666, 0.340]
distancia Zenith [ -0.396, 0.366]
-0.008 0.107 0.084
Michalsky
Algoritmo PSA
Error en Azimuth -0.065 0.206 0.150 [ -1.903, 1.344]
Michalsky [ -1.553, 1.443]
0.000 0.177 0.127
Algoritmo PSA
Desviación del 0.208 0.110 0.086 [ 0.000, 0.667]
Vector del Sol [ 0.000, 0.433]
0.136 0.079 0.063
Michalsky
Algoritmo PSA
los errores en los que se incurre al calcular la verdadera distancia cenital, el acimut y el
vector de dirección del Sol son 24, 8 y 35% menores para el algoritmo PSA que para el
Michalsky.

7. CONCLUSIONES

Los sistemas térmicos solares de alta concentración requieren algoritmos que sean
precisos y de bajo costo computacional para determinar las coordenadas del sol.

La literatura solar presenta varios ejemplos de tales algoritmos, todos los cuales se
basan en el uso de ecuaciones orbitales simplificadas del Almanaque Náutico.

Se ha desarrollado un nuevo algoritmo, llamado algoritmo PSA, que constituye una


mejora sobre los de la literatura. El nuevo algoritmo proporciona estimaciones del
verdadero azimut y el ángulo cenital del Sol que son respectivamente 15% y 22%
mejores en promedio que los proporcionados por cualquier algoritmo similar propuesto
hasta ahora. Para el período de 1999 a 2015, permite determinar la dirección del vector
solar con un error de menos de 0,5 minutos de arco. Además, es más simple y fácil de
usar que los algoritmos existentes.

NOMENCLATURA

jd Julian Day

hour Hora del día en hora universal y formato decimal

n Diferencia entre el día juliano actual y el día juliano 2 451 545.0 (mediodía 1 de enero
de 2000)

L Longitud media del sol

g anomalía media del sol

l longitud Eclíptica del Sol

ep Oblicuidad de la eclíptica

ra ascensión recta

𝛿 Declinación

gmst Greenwich significa tiempo sidéreo

lmst Tiempo sideral medio local

Long Longitud geográfica


∅ Latitud geográfica

w Ángulo de hora

𝜃𝑧 Distancia Zenith

𝛾 Azimut solar

APENDICE A

// This file is available in electronic form at


http://www.psa.es/sdg/sunpos.htm

#ifndef __SUNPOS_H
#define __SUNPOS_H

// Declaration of some constants


#define pi 3.14159265358979323846
#define twopi (2*pi)
#define rad (pi/180)
#define dEarthMeanRadius 6371.01 // In km
#define dAstronomicalUnit 149597890 // In km

struct cTime
{
int iYear;
int iMonth;
int iDay;
double dHours;
double dMinutes;
double dSeconds;
};

struct cLocation
{
double dLongitude;
double dLatitude;
};

struct cSunCoordinates
{
double dZenithAngle;
double dAzimuth;
};

void sunpos(cTime udtTime, cLocation udtLocation, cSunCoordinates


*udtSunCoordinates);

#endif
// This file is available in electronic form at
http://www.psa.es/sdg/sunpos.htm

#include "sunpos.h"
#include <math.h>

void sunpos(cTime udtTime,cLocation udtLocation, cSunCoordinates


*udtSunCoordinates)
{
// Main variables
double dElapsedJulianDays;
double dDecimalHours;
double dEclipticLongitude;
double dEclipticObliquity;
double dRightAscension;
double dDeclination;

// Auxiliary variables
double dY;
double dX;

// Calculate difference in days between the current Julian Day


// and JD 2451545.0, which is noon 1 January 2000 Universal
Time
{
double dJulianDate;
long int liAux1;
long int liAux2;
// Calculate time of the day in UT decimal hours
dDecimalHours = udtTime.dHours + (udtTime.dMinutes
+ udtTime.dSeconds / 60.0 ) / 60.0;
// Calculate current Julian Day
liAux1 =(udtTime.iMonth-14)/12;
liAux2=(1461*(udtTime.iYear + 4800 + liAux1))/4 +
(367*(udtTime.iMonth
- 2-12*liAux1))/12- (3*((udtTime.iYear + 4900
+ liAux1)/100))/4+udtTime.iDay-32075;
dJulianDate=(double)(liAux2)-0.5+dDecimalHours/24.0;
// Calculate difference between current Julian Day and
JD 2451545.0
dElapsedJulianDays = dJulianDate-2451545.0;
}

// Calculate ecliptic coordinates (ecliptic longitude and


obliquity of the
// ecliptic in radians but without limiting the angle to be
less than 2*Pi
// (i.e., the result may be greater than 2*Pi)
{
double dMeanLongitude;
double dMeanAnomaly;
double dOmega;
dOmega=2.1429-0.0010394594*dElapsedJulianDays;
dMeanLongitude = 4.8950630+
0.017202791698*dElapsedJulianDays; // Radians
dMeanAnomaly = 6.2400600+
0.0172019699*dElapsedJulianDays;
dEclipticLongitude = dMeanLongitude + 0.03341607*sin(
dMeanAnomaly )
+ 0.00034894*sin( 2*dMeanAnomaly )-0.0001134
-0.0000203*sin(dOmega);
dEclipticObliquity = 0.4090928 - 6.2140e-
9*dElapsedJulianDays
+0.0000396*cos(dOmega);
}

// Calculate celestial coordinates ( right ascension and


declination ) in radians
// but without limiting the angle to be less than 2*Pi (i.e.,
the result may be
// greater than 2*Pi)
{
double dSin_EclipticLongitude;
dSin_EclipticLongitude= sin( dEclipticLongitude );
dY = cos( dEclipticObliquity ) *
dSin_EclipticLongitude;
dX = cos( dEclipticLongitude );
dRightAscension = atan2( dY,dX );
if( dRightAscension < 0.0 ) dRightAscension =
dRightAscension + twopi;
dDeclination = asin( sin( dEclipticObliquity
)*dSin_EclipticLongitude );
}

// Calculate local coordinates ( azimuth and zenith angle ) in


degrees
{
double dGreenwichMeanSiderealTime;
double dLocalMeanSiderealTime;
double dLatitudeInRadians;
double dHourAngle;
double dCos_Latitude;
double dSin_Latitude;
double dCos_HourAngle;
double dParallax;
dGreenwichMeanSiderealTime = 6.6974243242 +
0.0657098283*dElapsedJulianDays
+ dDecimalHours;
dLocalMeanSiderealTime = (dGreenwichMeanSiderealTime*15
+ udtLocation.dLongitude)*rad;
dHourAngle = dLocalMeanSiderealTime - dRightAscension;
dLatitudeInRadians = udtLocation.dLatitude*rad;
dCos_Latitude = cos( dLatitudeInRadians );
dSin_Latitude = sin( dLatitudeInRadians );
dCos_HourAngle= cos( dHourAngle );
udtSunCoordinates->dZenithAngle = (acos(
dCos_Latitude*dCos_HourAngle
*cos(dDeclination) + sin( dDeclination
)*dSin_Latitude));
dY = -sin( dHourAngle );
dX = tan( dDeclination )*dCos_Latitude -
dSin_Latitude*dCos_HourAngle;
udtSunCoordinates->dAzimuth = atan2( dY, dX );
if ( udtSunCoordinates->dAzimuth < 0.0 )
udtSunCoordinates->dAzimuth =
udtSunCoordinates->dAzimuth + twopi;
udtSunCoordinates->dAzimuth = udtSunCoordinates-
>dAzimuth/rad;
// Parallax Correction
dParallax=(dEarthMeanRadius/dAstronomicalUnit)
*sin(udtSunCoordinates->dZenithAngle);
udtSunCoordinates->dZenithAngle=(udtSunCoordinates-
>dZenithAngle
+ dParallax)/rad;
}
}