Текст подпрограммы и версий 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