nextupprevious

Next:5.3.5 Упражнения
Up:5.3 Программы обработки векторов
Previous:5.3.3 Подсчет количеств вхождений
 


5.3.4 Свертка вектора

Задача. Начальный отрезок вектора , содержащий его первые k элементов, сам является вектором, который мы будем обозначать ниже через C[1:k]. Если задана некоторая двуместная функция g, то g-сверткой вещественного вектора  назовем число, определяемое следующим образом:

Для заданного вещественного вектора  и функции g(x,y) = max(x+y, x-y) найти g-свертку вектора

Решение. В соответствии с определением g-свертки имеем
 


для всех i. Из этого соотношения легко усматривается следующий способ вычисления ответа:

1) последовательно за $n$ шагов вычисляются g-свертки векторов, образующих последовательность B[1:1], B[1:2], ... ,B[1:n];

2) на первом шаге g-свертка вектора B[1:1] равна a200;

3) на $i$-ом шаге для получения g-свертки вектора B[1:i+1] из g-свертки вектора B[1:i] в соответствии с соотношением (*) применяется функция g;

4) в качестве ответа выдается полученная на последнем шаге g-свертка вектора B[1:i+1]. Реализация указанного способа приводит к программе

module СверткаВектора;
    const M = 200;
    var A : array M+1 of real; T : real;
    procedure G (X,Y : real):real;
        var S, R : real;
        begin S:= X+Y; R:=X-Y; if S$>$R then return S else return R end G;
begin
    for I := 1 to M do read(A[I]) end; T := A[M];
    (* {T=свертка(B[1:1])} *)
    for I := M-1 to 1 by -1 do
          (* {T=свертка(B[1:200-I])} *)
          T := G(A[I],T)
    end;
    (* {T=свертка(B)} *)
    writeln ('Свертка равна',T)
end СверткаВектора.

Next:5.3.5 Упражнения
Up:5.3 Программы обработки векторов
Previous:5.3.3 Подсчет количеств вхождений


© В.Н. Касьянов, Е.В.Касьянова, 2004