|
Текст подпрограммы и версий iah4r_c.zip , iah4d_c.zip |
Тексты тестовых примеров tiah4r_c.zip , tiah4d_c.zip |
Вычисление коэффициентов разложения интеграла от заданной функции в ряд по многочленам Чебышева.
Пусть на отрезке [A, B] задана функция f (x). Тогда подпрограмма iah4r_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 затем вычисляются коэффициенты CINTj разложения интеграла от функции f (x) в ряд по многочленам Чебышева:
N
F(x) = ∫ f (t) dt ≈ [ ∑ CINTj Tj-1 (y) ] - CINT1 / 2
j=1
по формулам
CINTj = [ (cj-1 - cj+1) / (2(j-1)) ] * (B-A)/2 , j = 2, 3,..., N-1
CINTN = cN-1 / (2(N-1)) * (B-A)/2
Постоянной интегрирования соответствует коэффициент CINT1 , значение которого выбирается в подпрограмме таким образом, чтобы значение F (A) было равно нулю.
Н.С.Бахвалов. Численные методы. Изд - во "Наука", 1973.
int iah4r_c (real *a, real *b, real *c, integer *n,
real *func, real *cint, real *rf)
Параметры
| a, b - | нижняя и верхняя границы отрезка, на котором задана функция f (x) (тип: вещественный); |
| c - | вещественный вектор длины n, содержащий вычисленные значения коэффициентов разложения функции f (x) в ряд по многочленам Чебышева; |
| n - | заданное количество членов ряда (тип: целый); |
| func - |
имя вещественной подпрограммы - функции, вычисляющей
значения функции f (x) в любой точке отрезка [a, b];
ее первый оператор должен иметь вид: float func(float *x), где x - значение аргумента (тип: вещественный); |
| cint - | вещественный вектор длины n, содержащий вычисленные значения коэффициентов разложения интеграла от f (x) в ряд по многочленам Чебышева; |
| rf - | вещественный вектор длины n, используемый в подпрограмме в качестве рабочего. |
Версии
| iah4d_c - | вычисление коэффициентов разложения интеграла от заданной функции в ряд по многочленам Чебышева в режиме удвоенной точности; при этом параметры a, b, c, cint и rf должны иметь тип double, а функция func должна быть описана как double. |
Вызываемые подпрограммы
|
iah1r_c - iah1d_c | вычисление коэффициентов ряда по многочленам Чебышева, аппроксимирующего заданную функцию, в режиме одинарной и удвоенной точности; используются в подпрограммах iah4r_c и iah4d_c соответственно. |
Замечания по использованию: нет
int main(void)
{
/* Local variables */
extern float func_c();
static float cint[10];
extern int iah4r_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;
iah4r_c(&a, &b, c__, &n, (R_fp)func_c, cint, 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 ",cint[i-1]);
}
printf("\n ");
return 0;
} /* main */
float func_c(float *x)
{
/* System generated locals */
float ret_val;
/* Builtin functions */
double cos(double);
ret_val = (float)cos(*x);
return ret_val;
} /* func_c */
Результаты:
cint = ( 0.899853, 0.425221, -0.293447e-01,
-0.449977e-02, 0.154123e-03,
0.141370e-04, -0.321255e-06, -0.218021e-07,
0.540888e-09, 0.172063e-08 )