不把数据放上来看一哈吗
1、闲扯两句
略。
2、正儿八经的序言+理论
据《射电天文工具》,月球是一个在射电波段几乎严格遵守瑞利金斯定律的辐射源,所以它常被用于天线和射电望远镜的标定与测试,或许也可以用作电离层监测。所以,计算其亮温度和流量密度就变得十分重要。
月球的亮温度与月相和频率密切相关,在厘米波段的几个计算公式可以见下面的文献:XXXXXXXXXXXXXXXXXXXXXXX/document/XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXml
其计算公式形式为:T=T0+Txcos(I-i),式中T为亮温度,T0为不变的亮温度分量,Tx为改变的亮温度分量,I为月球(光学波段的)相位角,i为射电相比光学的相位延迟。
但是我只查到了有限的几个频率上的i、T0与Tx值,所以想要计算不同频率上月球的亮温度就遇到了一定困难。下面我们定性的分析一下这三个参数随波长的变化。首先是T0,这个基本上与波长关系不大,或许可以用在某一范围内递减的一次函数/二次函数修正一下瑞利金斯公式与普朗克方程的误差。然后是i和Tx,这个应该与电磁波的穿透深度及月球各层的热特性有关。(或许可以通过月面不同波段的观测数据反推月球的一些特性,这就是后话了,又是个深坑,一时半会填不上。)不管了不管了,全用各类函数凑一波数就算完了……
设波长为l,根据上文凑出来的
T0=-0.0074*l*l+1.7919*l+208.6803
Tx=4.82*pow(2.718,2.732/x)
i统一认为是40。
然后,根据瑞利金斯公式,我们还需要一个参数:月亮的立体角。为了弄明白这个立体角是啥,我费了点功夫。最后找到这样一个公式: 其中,θ是月亮的角半径,可以直接从相关软件上查,其计算虽然很简单但是我懒得推了。就这样吧。
3、程序实现
不需要太多的废话,直接上代码。
编程环境:Dev-C++,win7,EXE直接使用Dev编译得到,apk使用C4Droid编译得到。输入参数分别为月球相位角,月球角直径,观测波长,空格分割,单位分别是度,度,厘米。输出为两行,亮温度和通量密度,单位为K与Jy。为了方便以后搞正儿八经的综合性计算程序,把输入输出搞得简洁一些。有一段时间没有写C了,手生。
代码~
#include<stdio.h>
#include<math.h>
#include<iostream>
using namespace std;
const long double degtorad=180/(atan(1)*4);
const long double k=1.38E3;
double T0(double l){
return -0.0074*l*l+1.7919*l+208.6803;
}
double Tx(double l){
return 4.82*pow(2.718,2.732/l);
}
double i(double x){
return 40;
}
int main(){
double I,l,a;
scanf("%lf%lf%lf",&I,&a,&l);
double T=T0(l)+Tx(l)*cos((I-i(l))/degtorad);
printf("%f\n",T);
double omg=8*atan(1)*(1-cos(a/degtorad));
double S=omg*2*k*T/(l*l*1E-4);
printf("%f\n",S);
}
经测试,与射电天文工具一书上的数据基本一致。
下面是源代码和exe文件。
200字以内,仅用于支线交流,主线讨论请采用回复功能。