26#if defined (HAVE_CONFIG_H)
63 double *dif2,
double *dif3)
79 double y =
x - root[j];
81 dif3[i] = y * dif3[i] + 3.0 * dif2[i];
82 dif2[i] = y * dif2[i] + 2.0 * dif1[i];
83 dif1[i] = y * dif1[i];
151 double alpha,
double beta,
double *dif1,
double *dif2,
152 double *dif3,
double *root)
164 double ab = alpha + beta;
165 double ad = beta - alpha;
166 double ap = beta * alpha;
168 dif1[0] = (ad / (ab + 2.0) + 1.0) / 2.0;
176 double z = ab + 2 * z1;
178 dif1[i] = (ab * ad / z / (z + 2.0) + 1.0) / 2.0;
181 dif2[i] = (ab + ap + z1) / z / z / (z + 1.0);
185 double y = z1 * (ab + z1);
187 dif2[i] = y / z / (z - 1.0);
212 double xp = (dif1[j] -
x) * xn - dif2[j] * xd;
213 double xp1 = (dif1[j] -
x) * xn1 - dif2[j] * xd1 - xn;
227 zc -= z / (
x - root[j-1]);
236 if (++k > 100 || math::isnan (z))
239 if (std::abs (z) <= 100 * std::numeric_limits<double>::epsilon ())
244 x += std::sqrt (std::numeric_limits<double>::epsilon ());
260 dif (nt, root, dif1, dif2, dif3);
314 double *dif2,
double *dif3,
double *root,
double *vect)
338 vect[i] = dif2[i] / dif1[i] / 2.0;
340 vect[i] = dif3[i] / dif1[i] / 3.0;
344 double y = root[i] - root[j];
346 vect[j] = dif1[i] / dif1[j] / y;
349 vect[j] = vect[j] * (dif2[i] / dif1[i] - 2.0 / y);
361 double ax =
x * (1.0 -
x);
367 ax = ax / (1.0 -
x) / (1.0 -
x);
369 vect[j] = ax / (dif1[j] * dif1[j]);
375 vect[j] = vect[j] / y;
384 (*current_liboctave_error_handler) (
"CollocWt: fatal error '%s'", msg);
391 error (
"CollocWt: left bound greater than right bound");
402 error (
"CollocWt: right bound less than left bound");
417 error (
"CollocWt: width less than or equal to zero");
423 error (
"CollocWt: total number of collocation points less than zero");
428 double *pdif1 = dif1.
rwdata ();
431 double *pdif2 = dif2.
rwdata ();
434 double *pdif3 = dif3.
rwdata ();
437 double *pvect = vect.
rwdata ();
450 error (
"jcobi: newton iteration failed");
491 os <<
"left boundary is included\n";
493 os <<
"left boundary is not included\n";
496 os <<
"right boundary is included\n";
498 os <<
"right boundary is not included\n";
511OCTAVE_END_NAMESPACE(octave)
std::ostream & operator<<(std::ostream &os, const CollocWt &a)
N Dimensional Array with copy-on-write semantics.
T * rwdata()
Size of the specified dimension.
octave_idx_type left_included() const
octave_idx_type m_inc_left
void error(const char *msg)
octave_idx_type m_inc_right
octave_idx_type right_included() const
CollocWt & set_left(double val)
CollocWt & set_right(double val)
void resize(octave_idx_type n, const double &rfv=0)
void resize(octave_idx_type nr, octave_idx_type nc, double rfv=0)
Vector representing the dimensions (size) of an Array.
OCTAVE_BEGIN_NAMESPACE(octave) static octave_value daspk_fcn
#define liboctave_panic_unless(cond)
F77_RET_T const F77_DBLE * x