Текст подпрограммы и версий iah5r_c.zip , iah5d_c.zip |
Тексты тестовых примеров tiah5r_c.zip , tiah5d_c.zip |
Вычисление коэффициентов разложения производной от заданной функции в ряд по многочленам Чебышева.
Пусть на отрезке [A, B] задана функция f (x). Тогда подпрограмма iah5r_c вычисляет коэффициенты cj (j = 1, 2, ..., N) по формуле
N cj = 2/N ∑ f ( (B-A)/2 cos (π (k-1/2) / N) + (B+A)/2 ) cos (π (j-1) (k-1/2) / N) k=1
в разложении функции f (x) в ряд по многочленам Чебышева:
N f(x) ≈ [ ∑ cj Tj-1(y) ] - c1 / 2 , j=1 где y ≡ ( x - (B + A) / 2 ) / ( (B - A) / 2 ) .
По вычисленным коэффициентам cj затем вычисляются коэффициенты CDERj разложения производной от функции f (x) в ряд по многочленам Чебышева на основе формул:
CDER(N) = 0 CDER(N-1) = 2 (N-1) cN * 2 / (B-A) CDER j-1 = ( CDER j+1 + 2 (j-1) cj ) * 2 / (B-A) , j = N-1, N-2, ... , 2
Н.С.Бахвалов. Численные методы. Изд - во "Наука", 1973.
int iah5r_c (real *a, real *b, real *c, integer *n, real *func, real *cder, real *rf)
Параметры
a, b - | нижняя и верхняя границы отрезка, на котором задана функция f (x) (тип: вещественный); |
c - | вещественный вектор длины n, содержащий вычисленные значения коэффициентов разложения функции f (x) в ряд по многочленам Чебышева; |
n - | заданное количество членов ряда (тип: целый); |
func - |
имя вещественной подпрограммы-функции, вычисляющей
значения функции f (x) в любой точке отрезка [a, b];
ее первый оператор должен иметь вид: float func(float *x), где x - значение аргумента (тип: вещественный); |
cder - | вещественный вектор длины n, содержащий вычисленные значения коэффициентов разложения производной от функции f (x) в ряд по многочленам Чебышева; |
rf - | вещественный вектор длины n, используемый в подпрограмме в качестве рабочего. |
Версии
iah5d_c - | вычисление коэффициентов разложения производной от заданной функции в ряд по многочленам Чебышева в режиме удвоенной точности; при этом параметры a, b, c, cder и rf должны иметь тип double, а функция func должна быть описана как double. |
Вызываемые подпрограммы
iah1r_c - iah1d_c | вычисление коэффициентов ряда по многочленам Чебышева, аппроксимирующего заданную функцию, в режиме одинарной и удвоенной точности; используются в подпрограммах iah5r_c и iah5d_c соответственно. |
Замечания по использованию: нет
int main(void) { /* Local variables */ static float cder[10]; extern float func_c(); extern int iah5r_c(float *, float *, float *, int *, R_fp, float *, float *); static float a, b, c__[10]; static int n, i; static float rf[10]; n = 10; a = 0.f; b = 1.f; iah5r_c(&a, &b, c__, &n, (R_fp)func_c, cder, rf); for (i = 1; i <= 10; ++i) { printf("\n %16.7e ",c__[i-1]); } printf("\n "); for (i = 1; i <= 10; ++i) { printf("\n %16.7e ",cder[i-1]); } printf("\n "); 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 */ Результаты: cder = ( 0.164717e+01, -0.232300, -0.537147e-01, 0.245783e-02, 0.282683e-03, -0.798864e-05, -0.101397e-06, 0.0, 0.490963e-06, 0.0 )