AnalysisSystemForRadionucli.../aatami_start.txt
2024-06-04 15:25:02 +08:00

138 lines
5.4 KiB
Plaintext

aatami_start.m
setAnalysisMode ———— 设置分析模式
———— Global Af_analysisMode
———— setupInit.txt
———— loadCtrlGUI.txt
lMakeInterp 插入法求效率
mat erfcore(mat x, int jint)
{
//if ~isreal(x),
// error('MATLAB:erfcore:ComplexInput', 'Input argument must be real.')
//end
rowvec tmp; tmp << gNaN;
mat result = repmat(tmp, x.n_rows, x.n_cols);
mat y, z, xnum, xden, del;
// evaluate erf for |x| <= 0.46875
double xbreak = 0.46875;
uvec k = find(abs(x) <= xbreak);
if(!k.is_empty()) //if ~isempty(k)
{
mat a;// = [3.16112374387056560e00; 1.13864154151050156e02; 3.77485237685302021e02; 3.20937758913846947e03; 1.85777706184603153e-1];
mat b;// = [2.36012909523441209e01; 2.44024637934444173e02; 1.28261652607737228e03; 2.84423683343917062e03];
a << 3.16112374387056560e00 << 1.13864154151050156e02 << 3.77485237685302021e02
<< 3.20937758913846947e03 << 1.85777706184603153e-1;
b << 2.36012909523441209e01 << 2.44024637934444173e02 << 1.28261652607737228e03 << 2.84423683343917062e03;
y = abs( x(k) ); //y = abs(x(k));
z = y % y;
xnum = a(4)*z; // xnum = a(5)*z;
xden = z;
for(int i=0; i<3; i++)
{
xnum = (xnum + a(i)) % z;
xden = (xden + b(i)) % z;
}
result(k) = x(k) % (xnum + a(3)) / (xden + b(3)); // result(k) = x(k) % (xnum + a(4)) / (xden + b(4));
if(jint != 0) result(k) = 1 - result(k); //result(k) = 1 - result(k);
if(jint == 2) result(k) = exp(z) % result(k); //result(k) = exp(z) % result(k);
}
// evaluate erfc for 0.46875 <= |x| <= 4.0
k = find((abs(x) > xbreak) && (abs(x) <= 4.));
if(!k.is_empty())
{
mat c;/* = [5.64188496988670089e-1; 8.88314979438837594e00; 6.61191906371416295e01;
2.98635138197400131e02; 8.81952221241769090e02; 1.71204761263407058e03;
2.05107837782607147e03; 1.23033935479799725e03; 2.15311535474403846e-8];*/
mat d;/* = [1.57449261107098347e01; 1.17693950891312499e02;
5.37181101862009858e02; 1.62138957456669019e03;
3.29079923573345963e03; 4.36261909014324716e03;
3.43936767414372164e03; 1.23033935480374942e03];*/
c << 5.64188496988670089e-1 << 8.88314979438837594e00 << 6.61191906371416295e01
<< 2.98635138197400131e02 << 8.81952221241769090e02 << 1.71204761263407058e03
<< 2.05107837782607147e03 << 1.23033935479799725e03 << 2.15311535474403846e-8;
d << 1.57449261107098347e01 << 1.17693950891312499e02 << 5.37181101862009858e02 << 1.62138957456669019e03
<< 3.29079923573345963e03 << 4.36261909014324716e03 << 3.43936767414372164e03 << 1.23033935480374942e03;
y = abs( x(k) );//y = abs(x(k));
xnum = c(8) * y; //xnum = c(9)*y;
xden = y;
for(int i=0; i<7; i++)
{
xnum = (xnum + c(i)) % y;
xden = (xden + d(i)) % y;
}
result(k) = (xnum + c(7)) / (xden + d(7)); // result(k) = (xnum + c(8)) / (xden + d(8));
if(jint != 2)
{
z = fix(y*16)/16;
del = (y-z)%(y+z);
result(k) = exp(-z%z) % exp(-del) % result(k); // result(k) = exp(-z%z) % exp(-del) % result(k);
}
}
// evaluate erfc for |x| > 4.0
k = find(abs(x) > 4.0);
if(!k.is_empty())
{
mat p;/* = [3.05326634961232344e-1; 3.60344899949804439e-1; 1.25781726111229246e-1;
1.60837851487422766e-2; 6.58749161529837803e-4; 1.63153871373020978e-2]*/;
mat q;/* = [2.56852019228982242e00; 1.87295284992346047e00; 5.27905102951428412e-1;
6.05183413124413191e-2; 2.33520497626869185e-3];*/
p << 3.05326634961232344e-1 << 3.60344899949804439e-1 << 1.25781726111229246e-1
<< 1.60837851487422766e-2 << 6.58749161529837803e-4 << 1.63153871373020978e-2;
q << 2.56852019228982242e00 << 1.87295284992346047e00 << 5.27905102951428412e-1
<< 6.05183413124413191e-2 << 2.33520497626869185e-3;
y = abs( x(k) ); //y = abs(x(k));
z = 1 / (y % y);
xnum = p(5)*z; // xnum = p(6)%z;
xden = z;
for(int i=0; i<4; i++)
{
xnum = (xnum + p(i)) % z;
xden = (xden + q(i)) % z;
}
result(k) = z % (xnum + p(4)) / (xden + q(4)); // result(k) = z % (xnum + p(5)) / (xden + q(5));
result(k) = (1/sqrt(pi_) - result(k)) / y; // result(k) = (1/sqrt(pi_) - result(k)) / y;
if(jint != 2)
{
z = fix(y*16)/16;
del = (y-z)%(y+z);
result(k) = exp(-z%z) % exp(-del) % result(k); // result(k) = exp(-z%z) % exp(-del) % result(k);
k = find_nonfinite(result); //k = find(~isfinite(result));
MatAssign(result, k, 0);
}
}
// fix up for negative argument, erf, etc.
if(jint == 0)
{
k = find(x > xbreak);
result(k) = (0.5 - result(k)) + 0.5;
k = find(x < -xbreak);
result(k) = (-0.5 + result(k)) - 0.5;
}
else if(jint == 1)
{
k = find(x < -xbreak);
result(k) = 2. - result(k);
}
else // jint must = 2
{
k = find(x < -xbreak);
z = fix( x(k) * 16 )/16;
del = (x(k)-z)%(x(k)+z);
y = exp(z%z) % exp(del);
result(k) = (y+y) - result(k); // result(k) = (y+y) - result(k);
}
return result;
}