5.7. Aппроксимация функций ортогональными многочленами Чебышева

Для приближения непериодических функций используется орто­гональная система функ­ций – многочлены Чебышева, которые, в сущности, являются функциями Фурье cos nq, за­мас­ки­ро­ван­ны­ми простым преобразованием переменной q = arccos x. Tаким образом, Tn (x) = cos(n arccosx). Mногочлены Чебышева связаны рекуррент­ным соотношением:

Tn+1(x) = 2xTn(x)Tn–1(x).
причем T0(x) = 1, T1(x) = x.

Приближающая функция ищется в виде суммы многочленов Чебыше­ва, т. е.

.
(5.8)

Используя узловые точки многочленов, т. е. систему точек, на которой многочлены Че­бы­ше­ва ортогональны, получаем следующую формулу для вычисления коэффициентов ci:

.
(5.9)

Узловые точки многочленов распределены неравномерно (они сгущаются к концам интервала [-1, 1]), а именно

.
(5.10)

Программа CHENSP вычисляет коэффициенты ci для дискретной функции, заданой в равноотстоящих точках, используя при этом соответствующее преобразование переменной (5.10). После того, как коэффициенты известны, программа позволяет вычислить значе­ния функции на заданной равномерной сетке, опять-таки с преобра­зованием переменной.

Cледует заметить, что коэффициенты ci (см. (5.9)) не зависят от M, т. е. от количества многочленов, входящих в сумму (5.8). Этот факт используется в примере, который приводится вслед за описанием программы.

Программа CHENSP(YM,N,YH,K,C,M) позволяет вычислить коэффи­циенты при­бли­жа­ю­щей функции C (если N > 0) и ее значения YH (если K > 0) на множестве рав­но­от­сто­я­щих точек, используя орто­гональную систему функций - многочлены Че­бы­ше­ва. Eс­ли N = 0, то значения YH вычисляются в предположении, что коэффициенты C вы­чис­ле­ны ра­нее (см. пример). Программа имеет следующие параметры:

YM
вектор значений дискретной функции длины |N|;
YH
вектор значений приближающей функции длины |K|;
C
вектор коэффициентов приближающей функции длины |M|.

рис.5.7 изображена часть синусоиды, на которую наложен шум (Y=SIN(X)+RAND(-0.1, 0.1, 1937)), и приближение этой функции многочленами Чебышева (два случая: M = 12 и M = 6).


Рис.5.7. Пример, иллюстрирующий аппроксимацию функции мно­гочленами Че­бы­ше­ва.


     DIMENSION YM(100),YH(100),C(12)
     KR=1937
     XM=0.
     YM(1)=RAND(-1.01,0.01,KR)
     DO 1 I=2,100
     XM=XM+0.0314159
 1   YM(I)=SIN(XM)+RAND(-0.1,0.1,KR)
     CALL CHENSP(YM,100,YH,100,C,12)
     CALL PAGE(17.,26., '5.7',3,0)
     CALL REGION(1.,1.,13.,10.,0,0,0)
     CALL LIMITS(0.,3.3,-0.2,1.15)
     CALL AXES('M=12',4,0.,0,0,0,0.,0,0)
     CALL INCLIN(0.,0.0314159,0,YM,100,0,0)
     CALL INCLIN(0.,0.0314159,0,YH,100,0,0)
     CALL CHENSP(0.,0,YH,100,C,6)
     CALL REGION(1.,13.,13.,10.,0,0,0)
     CALL AXES('M=6',3,0.,0,0,0,0.,0,0)
     CALL INCLIN(0.,0.0314159,0,YM,100,0,0)
     CALL INCLIN(0.,0.0314159,0,YH,100,0,0)
     CALL ENDPG(0)
     END

Функция RAND(A,B,KR) позволяет генерировать псевдослучай­ные числа с рав­но­мер­ным рас­пре­де­ле­ни­ем в интервале (A,B), где A < B. Функция имеет следующие па­ра­мет­ры:

A,B
нижняя и верхняя границы интервала;
KR
целая переменная, принимающая значения в диапазоне от 1 до 67108863.

Перед первым обращением к функии RAND необходимо занести в KR нечетное число в указанных пределах. Значение KR не следует изменять между обращениями к функции.