|
Текст подпрограммы и версий iah3r_c.zip , iah3d_c.zip |
Тексты тестовых примеров tiah3r_c.zip , tiah3d_c.zip |
Вычисление значения функции в заданной точке отрезка по известным коэффициентам ее разложения в ряд по многочленам Чебышева на этом отрезке.
Пусть известны коэффициенты cj разложения функции f (x) в ряд по многочленам Чебышева на отрезке [A, B]. Тогда подпрограмма iah3r_c вычисляет значение этого разложения в точке x = X ∈ [A, B]:
N
f (X) ≈ [ ∑ cjTj -1(Y) ] - c1/ 2 ,
j =1
где Y ≡ ( X - (B + A)/2 ) / ( (B - A)/2 ) .
Н.С.Бахвалов. Численные методы. Изд - во "Наука", 1973.
int iah3r_c (real *a, real *b, real *c, integer *n, real *x,
real *res)
Параметры
| a, b - | нижняя и верхняя границы отрезка, на котором задано разложение функции f (x) в ряд по многочленам Чебышева (тип: вещественный); |
| c - | вещественный вектор длины n, содержащий известные значения коэффициентов разложения функции f (x) в ряд по многочленам Чебышева; |
| n - | заданное количество членов ряда (тип: целый); |
| x - | заданная точка отрезка [a, b], в которой вычисляется значение разложения функции f (x) в ряд по многочленам Чебышева (тип: вещественный); |
| res - | вещественная переменная, значение которой полагается равным вычисленному значению разложения функции f (x) в ряд по многочленам Чебышева в точке x. |
Версии
| iah3d_c - | вычисление значения функции в заданной точке отрезка по известным коэффициентам ее разложения в ряд по многочленам Чебышева на этом отрезке в режиме удвоенной точности; при этом параметры a, b, c, x и res должны иметь тип double. |
Вызываемые подпрограммы: нет
Замечания по использованию: нет
int main(void)
{
/* Builtin functions */
double sin(double);
/* Local variables */
extern float func_c();
extern int iah1r_c(float *, float *, float *, int *, R_fp, float *),
iah3r_c(float *, float *, float *, int *, float *, float *);
static float a, b, c__[10];
static int n, i;
static float x, rf[10], res, res1;
n = 10;
a = 0.f;
b = 1.f;
x = .5f;
iah1r_c(&a, &b, c__, &n, (R_fp)func_c, rf);
for (i = 1; i <= 10; ++i) {
printf("\n %16.7e ",c__[i-1]);
}
iah3r_c(&a, &b, c__, &n, &x, &res);
res1 = (float)sin(x);
printf("\n\n %16.7e %16.7e \n",res, res1);
return 0;
} /* main */
float func_c(float *x)
{
/* System generated locals */
float ret_val;
/* Builtin functions */
double sin(double);
ret_val = (float)sin(*x);
return ret_val;
} /* func_c */
Результат: res = 0.479426