Для приближения непериодических функций используется ортогональная система функций – многочлены Чебышева, которые,
в сущности, являются функциями Фурье cos nq,
замаскированными простым преобразованием переменной
q = arccos x.
Tаким образом,
причем T0(x) = 1, T1(x) = x.Tn+1(x) = 2xTn(x) – Tn–1(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|.
Hа рис.5.7 изображена часть синусоиды, на которую наложен шум (Y=SIN(X)+RAND(-0.1, 0.1, 1937)), и приближение этой функции многочленами Чебышева (два случая: M = 12 и M = 6).
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 не следует изменять между обращениями к функции.