1
\ begingroup美元

我的问题:我创建了程序计算太阳辐射和我需要计算太阳和地球之间的半径。

这本书基于“指南HTML、JavaScript和PHP”科学家和工程师,由大卫·r·布鲁克斯。代码来自这链接这是一个计算器。我编辑的代码。

半径计算

在我的代码被定义为半径计算o - > R = 1.000001018 * (1.0 - e * e) / (1.0 + e * cos (f));在哪里e——地球轨道的偏心率:f-太阳真异常:

空白getSolarPosition(输入*我,SOLPOS * o){如果(我!我- > JulianDate) - > JulianDate = getJulianDate(我);/ /日期必须设置计算朱利安日期双degRad = 0.017453292519943295769236907684886;/ /π/ 180.0 / / 2451545.0 - 1月1日,2000年,在12:00:00 UT双T =(我- > juliandate - 2451545.0) / 36525.0;/ / L0——太阳的几何平均数经度:双L0 T + 0.0003032 = 280.46645 + 36000.76983 * * T * T;/ / M -意味着太阳异常:双M = 357.52910 + 35999.05030 * 0.0001559 * T * T - 0.00000048 T - T * T * T *;双M_rad = M * degRad;/ / e -地球轨道的偏心率:双e = 0.016708617 - -0.000042037 * 0.0000001236 T - * T * T;/ / C -太阳中心的双C = (1.914600 - -0.004817 * * T * 0.000014 T - T) *罪(M_rad) + (0.019993 - -0.000101 * T *罪(2。* M_rad) + 0.000290 *罪(3。* M_rad);双L_save = (10 + C) / 360。/ / L_true——太阳真经度双L_true; if (L_save < 0.) L_true = (L0+C) - ceil(L_save)*360.; else L_true = (L0+C) - floor(L_save)*360.; if (L_true < 0.) L_true+=360.; // f - true anomaly of the sun: double f = M_rad + C * degRad; // Earth-sun distance: o->R =1.000001018*(1.0-e*e)/(1.0+e*cos(f)); // Sidereal time (Theta0) double Sidereal_time=280.46061837+ 360.98564736629*( i->JulianDate-2451545.) + 0.000387933*T*T - T*T*T/38710000.; // Replacement code for Sidereal=fmod(Sidereal,360.) double S_save=Sidereal_time/360.; if (S_save < 0.) Sidereal_time=Sidereal_time-ceil(S_save)*360.; else Sidereal_time=Sidereal_time-floor(S_save)*360.; if (Sidereal_time < 0.) Sidereal_time+=360.; // Obliquity - (Axial tilt) o->obliquity=23.0+26./60.+21.448/3600.-46.8150/3600.*T-0.00059/3600.*T*T + 0.001813/3600.*T*T*T; // right_ascension: tan(alpha) o->right_ascension = atan2(sin(L_true*degRad)*cos( o->obliquity*degRad ), cos(L_true*degRad)); // declination: sin(delta) o->declination = asin(sin( o->obliquity*degRad )*sin(L_true*degRad)); // hour angle H of the sun with respect to the observer's longitude Lobs o->hour_angle=Sidereal_time + i->lon - o->right_ascension / degRad; o->elevation = (asin(sin( i->lat*degRad )*sin( o->declination)+cos(i->lat*degRad)*cos( o->declination )*cos( o->hour_angle*degRad )))/degRad; // Solar Zenit Angle o->Z = 90.-o->elevation; }

这是函数来计算太阳位置。它的工作原理完全相同的鸟和Hulstrom的太阳辐照度模型提到计算器(见上面的链接)。在这里,我使用输入数据保存和输入对象o关于太阳能输出对象,计算数据保存位置后计算。量化——回报的主要的反正切值y / x,以弧度表示(不管它意味着什么,这是来自C / c++手册-

  • 我不是数学家

)。装天花板轮;地板上轮下来。

问题是如果我把旧的日期1849年/ 06/31 11:15太阳常数半径不符合纠正历史记录。在1322.3会SolConst 1367的结果。这是疯狂的。根据历史数据应该是1361.035。因此我希望半径计算是错误的。

地球和太阳的距离修正是另一个函数来计算太阳辐射。代码:

/ /地球和太阳的距离修正,Rsq = 1 / R ^ 2 / /双Rsq = (1.00011 + 0.034221 * cos (d 1) /(6.28318 * 365) + 0.00128 *罪(d 1) / (6.28318 * 365) + 0.000719 * cos (2 * (6.28318 * (d 1) / 365)) + 0.000077 *罪(2 * (6.28318 * (d 1) / 365)));双Rsq = 1.0 / (solpos.R * solpos.R);

我想问你:

1)我在哪儿能得到的历史记录来观察太阳-地球半径

2)这个公式计算出了什么问题?你能建议更好的公式吗?

编辑:我需要的代码添加到计算辐射和太阳常数修正。

空白getSolRadBird(输入我SOLPOS SOLPOS, SOLRAD * o){双degRad = 0.017453292519943295769236907684886;/ /相对空气质量双= 1。/ (cos (solpos。Z * degRad) + 0.15 *战俘(93.885 -solpos.z, -1.25));双AMp = 1013 * i.sitePressure /。/ /瑞利双Tr = exp(-0.0903 *战俘(AMp, 0.84) * (1 + AMp-pow (AMp, 1.01)));/ /臭氧双Ozm = i.ozone *点;双Toz = 1. - -0.1611 * Ozm *战俘(1 + 139.48 * Ozm, -0.3035) -0.002715 * Ozm / (1 + 0.044 * Ozm + 0.0003 *战俘(Ozm 2。));/ /混合气体双Tm = exp(-0.0127 *战俘(AMp, 0.26));/ /水蒸气双Wm =我* i.water;/ /总水汽双Tw = 1. - -2.4959 * Wm /((1。+战俘(79.034 * Wm, 0.6828)) + 6.385 * Wm); // daily turbidity // Ta5=A*sin((Dan-B)*PI/180.)+C; aerosol optical depth at 500 nm // Ta3=Ta5+0.1; double Ta5=i.AOT500; double Ta3=i.AOT380; double Tau=0.2758*Ta3+0.35*Ta5; double Ta=exp((-pow(Tau,0.873))*(1.+Tau-(pow(Tau,0.7088)))*pow(AM,0.9108)); double TAA=1.-0.1*(1.-AM+pow(AM,1.06))*(1.-Ta); double TAs=Ta/TAA; double Rs=0.0685+(1.-0.84)*(1.-TAs); // clear irradiance double Io=i.SolConst; // direct // Earth/sun distance correction, Rsq = 1/R^2 // double d=f.doy; // double Rsq=(1.00011+0.034221*cos(6.28318*(d-1)/365)+0.00128*sin(6.28318*(d-1)/365)+0.000719*cos(2*(6.28318*(d-1)/365))+0.000077*sin(2*(6.28318*(d-1)/365))); double Rsq=1.0/ (solpos.R*solpos.R) ; //alert("R= "+Rsq); double Id=Rsq*Io*.9662*Tr*Toz*Tm*Tw*Ta; // direct on horizontal surface double Idh=Id*cos(solpos.Z*degRad); // diffuse (scattered) double Ias=0.79*Io*cos(solpos.Z*degRad)*Toz*Tm*Tw*TAA; Ias=Ias*(0.5*(1.-Tr)+0.85*(1.-TAs))/(1.-AM+pow(AM,1.02)); // total dif + dir on horizontal double Itot=(Idh+Ias)/(1.-i.albedo*Rs); double Idif=Itot-Idh; // Save the values o->air_m = AM; o->direct = Idh; o->diffuse = Idif; o->total = Itot; o->S_corrected = Rsq*Io; }
\ endgroup美元
8
  • \ begingroup美元 你的代码只显示你如何计算o - > R和其他参数与地球的轨道。你不展示你是如何纠正太阳常数。 \ endgroup美元
    - - - - - -大卫Hammen
    2017年7月27日,在十五11
  • \ begingroup美元 1.000001018 * (1.0 - e * e) / (1.0 + e * cos (f))来自:[url]books.google.cz /…你也可以打开计算器,在JavaScript中查看源代码。我认为太阳常数的计算不需要修正或辐射计算R。 \ endgroup美元
    - - - - - -user1141649
    2017年7月27日15:42
  • \ begingroup美元 这不是我问的问题。你是如何计算0 - > R而不是太阳常数。半径的计算是正确的。你的错误最可能是别的地方。说,因为你的代码是在C语言中,学会使用调试器。 \ endgroup美元
    - - - - - -大卫Hammen
    2017年7月27日16:05
  • \ begingroup美元 @David Hammen:问更新。看到o - > S_corrected = Rsq * Io;。C运行中的程序完全一样的HTML / Javascript计算器。SolConst纠正的输出值计算器是错误的。稍等我将添加太阳常数的函数计算和辐射 \ endgroup美元
    - - - - - -user1141649
    2017年7月27日在泰
  • \ begingroup美元 第一:你应该检查你的公式使用超过一个点。第二:辐照度受到太阳黑子吗?至少你参考包含一个链接到“修订记录太阳黑子的影响太阳能辐照度重建”。 \ endgroup美元
    - - - - - -圣地亚哥
    2017年7月27日17:44

2答案2

3
\ begingroup美元

这并不完全回答你的问题,但是如果通过“sun-earth半径”你的意思是地球和太阳之间的距离,你可以访问https://ssd.jpl.nasa.gov/?horizons这些设置:

在这里输入图像描述

看到地球的半长轴的长度(每一行的“A”价值)多年来没有太大的改变(它仍然非常接近1 AU,像预期的那样)。

然而,半轴长只是“普通”距离太阳对于一个给定的一年,这可能不是您想要的。

如果你使用这些设置:

在这里输入图像描述

你可以看到地球的实际坐标从太阳。从这些,你可以计算自己的距离,或者你可以看看“LT”价值光旅行时间,从而使光天的距离。注意,我故意选择了奇怪的间隔500天证明太阳的距离变化。

此外,这些都是“计算”的距离,没有历史记录。然而,考虑到测量误差距离太阳从历史上看,计算数字可能更准确。

这个问题很好,但是你可能想要访问astronomy.stackexchange.com如果你有其他问题更直接基于天文学。

\ endgroup美元
3
  • \ begingroup美元 我试图寻找1849 - 7月28天的坐标和我得到5个,87 e 03光秒应该76 e + 03公里。相比之下,我的程序,R = 1, 01677040986377盟……我的resultis 1, 52107 e + 11。1.76 e + 03公里1760公里-数量太小了…我从坐标的计算。d =√xx + yy + zz) = 6, 08年e-01 * 6, 08年e-01 + 8、15 e-01-8 15 e-01 + 2, 17 e-04 * 2, 17 e-04 = 1, 02年e + 00 ld。大约155000公里。 \ endgroup美元
    - - - - - -user1141649
    2017年7月28日10:18
  • \ begingroup美元 好吧,我要做的是,从1600年到2400年我导出所有天广告。我将计算立方体的对角线盒(d =√x坐标x * + yy + z * z))距离和立方体的对角线箱速度矢量速度。然后我会保存距离和速度文件,我将把它添加到我的程序那么它将能够得到所需的数据计算准确的半径。 \ endgroup美元
    - - - - - -user1141649
    2017年7月28日,在47
  • \ begingroup美元 我的错误。最终的结果,它说“LT =单向down-leg牛顿光线功夫(天)”,所以它实际上是在光天,不是光天,不是光秒。我已经纠正了这个职位。 \ endgroup美元
    - - - - - -user967
    2017年7月28日15:18
2
\ begingroup美元

我注意到在你的公式是,您使用的是一年365天的数量。也许会尝试使用365.25更多正确的,因为它占闰年。请让我知道如果这有助于/纠正这个问题。

\ endgroup美元
1
  • \ begingroup美元 公历比凯撒更准确。与罗马儒略历,每个年365.25天,格鲁吉亚日历有365.2425(365天5小时49分钟& 12秒)。 \ endgroup美元
    - - - - - -弗雷德
    2018年1月21日,在46

你的答案

通过点击“发布你的答案”,你同意我们服务条款,隐私政策饼干的政策

不是你要找的答案?浏览其他问题标记问你自己的问题