00001 #include "fpcsquare.h"
00002 #include "numericmethods.h"
00003 #include "fbsinverse.h"
00004
00005
00006 FPcSquare::FPcSquare(double n,double srw,double sro,double maxPc)
00007 {
00008 m_srw=srw;
00009 m_maxsw=1-sro;
00010 m_n = n;
00011 m_tau=sro*sro/((1.0-sro-srw)*(1.0-sro-srw));
00012 m_minS=srw;
00013 m_maxPc=INFINITY;
00014
00015 if (maxPc != INFINITY)
00016 {
00017 BSInverse finv(*this,srw,1-sro,1.e-8);
00018 double tmp;
00019 tmp=finv(maxPc,0);
00020 m_maxPc=(*this)(tmp);
00021 m_minS=tmp;
00022 }
00023 printf("%g %g %g\n",m_minS,m_maxPc,srw);
00024 }
00025
00026
00027
00028
00029 double FPcSquare::operator()(double x,unsigned cmp) const
00030 {
00031 if (x <= m_minS)
00032 return m_maxPc;
00033 if (x>=m_maxsw)
00034 return 0.0;
00035 double dd=x-m_srw;
00036 double d2=1.0-x;
00037 assert(cmp==0);
00038
00039 return m_n*(1.0/(dd*dd)-m_tau/(d2*d2));
00040 }
00041
00042
00043
00044