⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 planck.c

📁 linux下用PCMCIA无线网卡虚拟无线AP的程序源码
💻 C
字号:
/*							planck.c * *	Integral of Planck's black body radiation formula * * * * SYNOPSIS: * * double lambda, T, y, plancki(); * * y = plancki( lambda, T ); * * * * DESCRIPTION: * *  Evaluates the definite integral, from wavelength 0 to lambda, *  of Planck's radiation formula *                      -5 *            c1  lambda *     E =  ------------------ *            c2/(lambda T) *           e             - 1 * * Physical constants c1 = 3.7417749e-16 and c2 = 0.01438769 are built in * to the function program.  They are scaled to provide a result * in watts per square meter.  Argument T represents temperature in degrees * Kelvin; lambda is wavelength in meters. * * The integral is expressed in closed form, in terms of polylogarithms * (see polylog.c). * * The total area under the curve is *      (-1/8) (42 zeta(4) - 12 pi^2 zeta(2) + pi^4 ) c1 (T/c2)^4 *       = (pi^4 / 15)  c1 (T/c2)^4 *       =  5.6705032e-8 T^4 * where sigma = 5.6705032e-8 W m^2 K^-4 is the Stefan-Boltzmann constant. * * * ACCURACY: * * The left tail of the function experiences some relative error * amplification in computing the dominant term exp(-c2/(lambda T)). * For the right-hand tail see planckc, below. * *                      Relative error. *   The domain refers to lambda T / c2. * arithmetic   domain     # trials      peak         rms *    IEEE      0.1, 10      50000      7.1e-15     5.4e-16 * *//*Cephes Math Library Release 2.8:  July, 1999Copyright 1999 by Stephen L. Moshier*/#include <math.h>#ifdef ANSIPROTextern double polylog (int, double);extern double exp (double);extern double log1p (double); /* log(1+x) */extern double expm1 (double); /* exp(x) - 1 */double planckc(double, double);double plancki(double, double);#elsedouble polylog(), exp(), log1p(), expm1();double planckc(), plancki();#endif/*  NIST value (1999): 2 pi h c^2 = 3.741 7749(22) 佔 10-16 W m2  */double planck_c1 = 3.7417749e-16;/*  NIST value (1999):  h c / k  = 0.014 387 69 m K */double planck_c2 = 0.01438769;doubleplancki(w, T)  double w, T;{  double b, h, y, bw;  b = T / planck_c2;  bw = b * w;  if (bw > 0.59375)    {      y = b * b;      h = y * y;      /* Right tail.  */      y = planckc (w, T);      /* pi^4 / 15  */      y =  6.493939402266829149096 * planck_c1 * h  -  y;      return y;    }  h = exp(-planck_c2/(w*T));  y =      6. * polylog (4, h)  * bw;  y = (y + 6. * polylog (3, h)) * bw;  y = (y + 3. * polylog (2, h)) * bw;  y = (y          - log1p (-h)) * bw;  h = w * w;  h = h * h;  y = y * (planck_c1 / h);  return y;}/*							planckc * *	Complemented Planck radiation integral * * * * SYNOPSIS: * * double lambda, T, y, planckc(); * * y = planckc( lambda, T ); * * * * DESCRIPTION: * *  Integral from w to infinity (area under right hand tail) *  of Planck's radiation formula. * *  The program for large lambda uses an asymptotic series in inverse *  powers of the wavelength. * * ACCURACY: * *                      Relative error. *   The domain refers to lambda T / c2. * arithmetic   domain     # trials      peak         rms *    IEEE      0.6, 10      50000      1.1e-15     2.2e-16 * */doubleplanckc (w, T)     double w;     double T;{  double b, d, p, u, y;  b = T / planck_c2;  d = b*w;  if (d <= 0.59375)    {      y =  6.493939402266829149096 * planck_c1 * b*b*b*b;      return (y - plancki(w,T));    }  u = 1.0/d;  p = u * u;#if 0  y = 236364091.*p/365866013534056632601804800000.;  y = (y - 15458917./475677107995483570176000000.)*p;  y = (y + 174611./123104841613737984000000.)*p;  y = (y - 43867./643745871363538944000.)*p;  y = ((y + 3617./1081289781411840000.)*p - 1./5928123801600.)*p;  y = ((y + 691./78460462080000.)*p - 1./2075673600.)*p;  y = ((((y + 1./35481600.)*p - 1.0/544320.)*p + 1.0/6720.)*p -  1./40.)*p;  y = y + log(d * expm1(u));  y = y - 5.*u/8. + 1./3.;#else  y = -236364091.*p/45733251691757079075225600000.;  y = (y + 77683./352527500984795136000000.)*p;  y = (y - 174611./18465726242060697600000.)*p;  y = (y + 43867./107290978560589824000.)*p;  y = ((y - 3617./202741834014720000.)*p + 1./1270312243200.)*p;  y = ((y - 691./19615115520000.)*p + 1./622702080.)*p;  y = ((((y - 1./13305600.)*p + 1./272160.)*p - 1./5040.)*p + 1./60.)*p;  y = y - 0.125*u + 1./3.;#endif  y = y * planck_c1 * b / (w*w*w);  return y;}/*							planckd * *	Planck's black body radiation formula * * * * SYNOPSIS: * * double lambda, T, y, planckd(); * * y = planckd( lambda, T ); * * * * DESCRIPTION: * *  Evaluates Planck's radiation formula *                      -5 *            c1  lambda *     E =  ------------------ *            c2/(lambda T) *           e             - 1 * */doubleplanckd(w, T)  double w, T;{   return (planck_c2 / ((w*w*w*w*w) * (exp(planck_c2/(w*T)) - 1.0)));}/* Wavelength, w, of maximum radiation at given temperature T.   c2/wT = constant   Wein displacement law.  */doubleplanckw(T)  double T;{  return (planck_c2 / (4.96511423174427630 * T));}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -