- z[1][0] = p[0] * z[0][0];
- z[1][1] = p[0] * z[0][1] + p[1] * z[0][0];
- for (i = 2; i <= max; ++i)
- z[1][i] = p[0] * z[0][i] + p[1] * z[0][i-1] + p[2] * z[0][i-2];
- if (j < ma->n - 1) z[1][max+1] = z[1][max+2] = 0.;
+// for (; _min < _max && z[0][_min] < TINY; ++_min) z[1][_min] = 0.;
+// for (; _max > _min && z[0][_max] < TINY; --_max) z[1][_max] = 0.;
+ _max += 2;
+ if (_min == 0)
+ k = 0, z[1][k] = (2*j+2-k)*(2*j-k+1) * p[0] * z[0][k];
+ if (_min <= 1)
+ k = 1, z[1][k] = (2*j+2-k)*(2*j-k+1) * p[0] * z[0][k] + k*(2*j+2-k) * p[1] * z[0][k-1];
+ for (k = _min < 2? 2 : _min; k <= _max; ++k)
+ z[1][k] = (2*j+2-k)*(2*j-k+1) * p[0] * z[0][k]
+ + k*(2*j+2-k) * p[1] * z[0][k-1]
+ + k*(k-1)* p[2] * z[0][k-2];
+ for (k = _min, sum = 0.; k <= _max; ++k) sum += z[1][k];
+ for (k = _min; k <= _max; ++k) z[1][k] /= sum;
+ if (j < ma->n - 1) z[1][_max+1] = z[1][_max+2] = 0.;