我需要在Matlab中计算日出和日落时间,但我找不到一个正确(简单)的方法来做到这一点.
我需要得到与以下相同的结果:
https://www.esrl.noaa.gov/gmd/grad/solcalc/和http://sunrise-sunset.org/api
我已经尝试基于这些文章实现了一个函数https://en.wikipedia.org/wiki/Sunrise_equation和http://www.wikihow.com/Estimate-the-Time-of-Sunrise-or-Sunset但是结果是错误的.(也许我做错了什么)
我还在Matlab中开发了一个似乎更准确的脚本,但我还没有得到确切的日出和日落时间:
% Parameters definition
lat = -23.545570; % Latitude
lng = -46.704082; % Longitude
UTCoff = -3; % UTC offset
nDays = daysact('01-jan-2017', '15-mar-2017'); % Number of days since 01/01
% Longitudinal correction
longCorr = 4*(lng - 15*UTCoff);
B = 360*(nDays - 81)/365; % I have no idea
% Equation of Time Correction
EoTCorr = 9.87*sind(2*B) - 7.53*cosd(B) - 1.5*sind(B);
% Solar correction
solarCorr = longCorr - EoTCorr;
% Solar declination
delta = asind(sind(23.45)*sind(360*(nDays - 81)/365));
sunrise = 12 - acosd(-tand(lat)*tand(delta))/15 - solarCorr/60;
sunset = 12 + acosd(-tand(lat)*tand(delta))/15 - solarCorr/60;
sprintf('%2.0f:%2.0f:%2.0f\n', degrees2dms(sunrise))
sprintf('%2.0f:%2.0f:%2.0f\n', degrees2dms(sunset))
Run Code Online (Sandbox Code Playgroud)
根据ESRL(NOAA),这个功能在05:51:25给出了日出,应该是06:09,日落是18:02:21,应该是18:22 .
该功能是基于此开发的:https://www.mathworks.com/matlabcentral/fileexchange/55509-sunrise-sunset/content/SunriseSunset.mlx
我可以做些什么来提高ESRL(NOAA)的准确度并获得相同的值?
你在这里混合苹果和橘子!
您使用的公式是计算实际日出和日落(几何).
该NOAA网站给出了明显的日出和日落.这些值针对大气折射进行校正!
在NOAA网站的词汇表中,写道:
由于大气折射,日出发生在太阳越过地平线之前不久.来自太阳的光在进入地球大气层时会弯曲或折射.见表观日出图.这种效应导致明显的日出早于实际的日出.同样,明显的日落比实际日落稍晚.
因此,这正是您在计算错误时所观察到的效果.
如果您真的想要计算明显的日出和日落,请参阅NOAA本身的太阳能计算详情或此SO答案.但请注意:"......这很复杂!"
编辑:请参阅我的其他答案,以获得精确的函数来计算MatLab中的明显日出和日落
| 归档时间: |
|
| 查看次数: |
1563 次 |
| 最近记录: |