2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему На страницу 1, 2, 3  След.
 
 Победить Фарроу - 2
Сообщение06.11.2013, 04:55 


05/09/12
2587
Небольшая предыстория. Есть один популярный вид локальной интерполяции, когда по 4 точкам строится полином Лагранжа 3 степени, проходящий через эти 4 точки, и значения этого полинома берутся в качестве интерполирующей функции на среднем интервале, задаваемом второй и третьей точкой. Для соседнего интервала строится свой такой же полином по 4 точкам, и т.д. Этот вид интерполяции широко применяется во многих практических приложениях, особенно в ЦОС (сразу оговоримся, что далее везде подразумевается равномерная сетка), он настолько популярен, что ему посвящается много статей, например вот, где приведена даже модификация Фарроу для оптимизации расчета коэффициентов полинома: требуется 1 деление на 6, 2 умножения/деления на 2 (сдвига при реализации алгоритма в машинном коде) и 8 сложений/вычитаний. Некоторое время назад я в определенном смысле "победил" этот алгоритм - нашел другой метод интерполяции, который требует для расчета коэффициентов столько же операций, но при этом на порядок (в 10 раз) точнее и как бонус имеет непрерывную первую производную. Даже написал маленькую статейку в инете по этому поводу, но это никого не заинтересовало :-)

А теперь, собственно, задача: реализовать алгоритм расчета коэффициентов локального сплайна, составленного именно из полиномов Лагранжа, проходящих через 4 точки (для среднего интервала на равномерной сетке), содержащий меньшее количество операций, чем выше представленная модификация Фарроу. Так сказать, победить его ещё раз, но теперь целиком на его поле :-)

ЗЫ те 2 участника этого форума, которые прочли ту мою статейку: если вы там обнаружили подсказки к решению этой задачи, не спешите пока их обнародовать - я лелею надежду, что другие участники могут заинтересоваться и захотеть подумать самостоятельно :-)

 Профиль  
                  
 
 Re: Победить Фарроу - 2
Сообщение06.11.2013, 22:59 


05/09/12
2587
В теге оффтопа код демо примера на Матлабе, если кто хочет подсмотреть ответ. В коде только конечные формулы расчета и построение графика, без теоретических выкладок и доказательств алгоритма.
ЗЫ при выборе синтаксиса Матлаба или С текст кода отображается почему-то некорректно, поэтому выбрал свободный синтаксис.

(Оффтоп)

код: [ скачать ] [ спрятать ]
  1. clf reset 
  2. N = 10; h = 0.01; x = 1:N; y = rand(1, N); 
  3. plot(x, y, 'or', 'LineWidth', 2); hold on; grid on; axis on; 
  4. title(['Локальная интерполяция случайного набора точек', ... 
  5. ' полиномом Лагранжа 3 степени, 2 алгоритма расчета.']); 
  6. plot(x(1), y(1), 'b-', x(1), y(1), 'g:'); 
  7. legend('точки', 'мой алгоритм', 'Фарроу'); 
  8. for k = 1:(N-2) 
  9.     % мой алгоритм: 1 умножение, 1 сдвиг, 6 сложений 
  10.     c = d; e = y(k+1) - y(k); d = y(k+2) - y(k+1) - e; 
  11.     b2 = c/2; b3 = (d - c)/6; b1 = e - b2 - b3; 
  12.      
  13.     if (k == 1) continue; end 
  14.     t = 0:h:1; f = b3.*t.^3 + b2.*t.^2 + b1.*t + y(k); 
  15.     plot(t+x(k), f, 'b-') 
  16.      
  17.     % Фарроу: 1 умножение, 2 сдвига, 8 сложений 
  18.     a3 = (y(k+2) - y(k-1))/6 + (y(k) - y(k+1))/2; 
  19.     a1 = (y(k+2) - y(k))/2 - a3; 
  20.     a2 =  y(k+2) - y(k+1) - a1 - a3; 
  21.      
  22.     t = -1:h:0; f = a3.*t.^3 + a2.*t.^2 + a1.*t + y(k+1); 
  23.     plot(t+1+x(k), f, 'g:') 
  24. end 

 Профиль  
                  
 
 Re: Победить Фарроу - 2
Сообщение07.11.2013, 08:26 
Модератор
Аватара пользователя


16/02/11
3788
Бурашево
_Ivana в сообщении #785475 писал(а):
ему посвящается много статей, например вот,
Статью в топку, автора - на костёр! За ортогональные многочлены Лагранжа.

 Профиль  
                  
 
 Re: Победить Фарроу - 2
Сообщение10.11.2013, 15:24 


05/09/12
2587
На другом форуме один участник выложил блок-схему своего варианта оптимизации, я перевел ее в свой скрипт. Его вариант оптимизации основан на алгоритме, представленном в ссылке первого поста, и уменьшает последний на 2 сложения, уступая теперь моему алгоритму только один сдвиг. Мой же алгоритм, в свою очередь, построен на другой математической модели, нежели стандартная постановка задачи построения полинома по 4 точкам, что и позволяет оптимизировать стандартный вариант.
Скрипт в теге оффтопа:

(Оффтоп)

код: [ скачать ] [ спрятать ]
  1. clf reset 
  2. N = 10; x = 1:N; y = rand(1, N); h = 0.01; d = 0; 
  3. plot(x, y, 'or', 'LineWidth', 2); hold on; grid on; axis on; 
  4. title(['Локальная интерполяция случайного набора точек', ... 
  5. ' полиномом Лагранжа 3 степени, 2 алгоритма расчета.']); 
  6. plot(x(1), y(1), 'b-', x(1), y(1), 'g:'); 
  7. legend('точки', 'мой алгоритм', 'Фарроу по Anatoliy'); 
  8. for k = 1:(N-2) 
  9.     % мой алгоритм: 1 умножение, 1 сдвиг, 6 сложений 
  10.     c = d; e = y(k+1) - y(k); d = y(k+2) - y(k+1) - e; 
  11.     b2 = c/2; b3 = (d - c)/6; b1 = e - b2 - b3; 
  12.      
  13.     if (k == 1) continue; end 
  14.     t = 0:h:1; f = b3.*t.^3 + b2.*t.^2 + b1.*t + y(k); 
  15.     plot(t+x(k), f, 'b-') 
  16.      
  17.     % Фарроу по _Anatoliy: 1 умножение, 2 сдвига, 6 сложений        
  18.     p = y(k) - y(k+1); q = (y(k+2) - y(k))/2; 
  19.     a3 = ( (y(k+2) - y(k-1))/3 + p )/2; 
  20.     a2 = p + q; a1 = q - a3; 
  21.      
  22.     t = -1:h:0; f = a3.*t.^3 + a2.*t.^2 + a1.*t + y(k+1); 
  23.     plot(t+1+x(k), f, 'g:') 
  24. end 

 Профиль  
                  
 
 Re: Победить Фарроу - 2
Сообщение17.05.2014, 18:11 


05/09/12
2587
На досуге подумал, убрал еще одно сложение. Теперь у меня 1 умножение, 1 сдвиг и 5 сложений против лучшей представленной альтернативы 1 умножение, 2 сдвига и 6 сложений:
код: [ скачать ] [ спрятать ]
Используется синтаксис Matlab M
clf reset
N = 10; x = 1:N; y = rand(1, N);
h = 0.01; g = y(3) - y(2); d = g - y(2) + y(1);
plot(x, y, 'or', 'LineWidth', 2); hold on; grid on; axis on;
title(['Локальная интерполяция случайного набора точек', ...
' полиномом Лагранжа 3 степени, 2 алгоритма расчета.']);
plot(x(1), y(1), 'b-', x(1), y(1), 'g:');
legend('точки', 'мой алгоритм', 'Фарроу по Anatoliy');
for k = 2:(N-2)
    % мой алгоритм: 1 умножение, 1 сдвиг, 5 сложений
    c = d; e = g; g = y(k+2) - y(k+1); d = g - e;
    b2 = c/2; b3 = (d - c)/6; b1 = e - b2 - b3;
    t = 0:h:1; f = b3.*t.^3 + b2.*t.^2 + b1.*t + y(k);
    plot(t+x(k), f, 'b-')
   
    % Фарроу по _Anatoliy: 1 умножение, 2 сдвига, 6 сложений      
    p = y(k) - y(k+1); q = (y(k+2) - y(k))/2;
    a3 = ( (y(k+2) - y(k-1))/3 + p )/2;
    a2 = p + q; a1 = q - a3;
   
    t = -1:h:0; f = a3.*t.^3 + a2.*t.^2 + a1.*t + y(k+1);
    plot(t+1+x(k), f, 'g:')
end

 Профиль  
                  
 
 Re: Победить Фарроу - 2
Сообщение17.05.2014, 18:31 
Заслуженный участник


11/05/08
32166
_Ivana в сообщении #785475 писал(а):
локального сплайна, составленного именно из полиномов Лагранжа,

Так не бывает. Или сплайн, или Лагранж.

 Профиль  
                  
 
 Re: Победить Фарроу - 2
Сообщение17.05.2014, 18:34 


05/09/12
2587
Это вопрос терминологии. Методика построения интерполирующей функции приведена, как назвать - вопрос второстепенный. Я считаю, что функция удовлетворяет всем условиям, чтобы носить гордое имя сплайна.

 Профиль  
                  
 
 Re: Победить Фарроу - 2
Сообщение17.05.2014, 18:55 
Заслуженный участник


11/05/08
32166
_Ivana в сообщении #864465 писал(а):
Я считаю, что функция удовлетворяет всем условиям, чтобы носить гордое имя сплайна.

Носить она может что угодно, однако чтобы носить с достоинством -- должна быть хотя бы один раз гладкой.

 Профиль  
                  
 
 Re: Победить Фарроу - 2
Сообщение17.05.2014, 19:02 


05/09/12
2587
На это у меня есть два пункта:
1) Ломаная по заданным точкам ни разу не гладкая, однако носит это имя, не знаю насчет достоинства.
2) Самое забавное, что рассматриваемая в теме интерполяция может быть названа квазигладкой в определенном смысле (я старался сказать как можно более аккуратно, чтобы не вызвать праведного негодования :-) ). И именно этот факт позволил мне оптимизировать процедуру ее численного расчета по сравнению с подходом "в лоб", лучший результат которого продемонстрирован в альтернативном расчете. И, кстати, этот факт я вскользь отмечал с той моей так и нигде не опубликованной статейке, которую вы некоторое время назад просмотрели и покритиковали.

 Профиль  
                  
 
 Re: Победить Фарроу - 2
Сообщение17.05.2014, 20:33 
Модератор
Аватара пользователя


16/02/11
3788
Бурашево
И там критиковали и тут укажем, что для любой локальной регулярной линейной интерполяции, при которой на интервале $t\in[t_k,t_{k+1}]$ интерполирующая функция $\psi(t)$ зависит от $M$ предшествующих и $M$ последующих отсчётов, фрагмент инерполирующей функции $\psi_k(t)$, соответствующий этому интервалу, описывается выражением: $$\psi_k(t)=\sum\limits_{m=-M}^{M+1}s_{k+m}\varphi_0(t-t_{k+m}),$$ где $s_k$ - дискретные значения сигнала, $\varphi_0(t)$ - порождающая функция метода интерполяции, $t_k=kT$ - момент дискретизации, $T$ - период дискретизации, $k=0,\pm 1,\pm2,...$

Конкретно в рассматриваемом вами случае мы имеем дело с локальной полиномиальной интерполяцией порядка $M=1$, при этом: $$\psi_k(t)=s_{k-1}\varphi_0(t-t_{k-1})+s_k\varphi_0(t-t_k)+s_{k+1}\varphi_0(t-t_{k+1})+s_{k+2}\varphi_0(t-t_{k+1}).$$ Выражение для порождающей функции приведено, например, в статье http://www.radiotec.ru/catalog.php?cat=jr8&art=12716 $$\varphi_0(t)=\begin{cases}\frac 1 2 \left|\frac t T\right|^3-\left(\frac t T\right)^2-\frac 1 2 \left|\frac t T\right|+1,|t|\leqslant T\\-\frac 1 6 \left|\frac t T\right|^3+\left(\frac t T\right)^2-\frac {11} {6} \left|\frac t T\right|+1,T\leqslant |t|\leqslant 2T\end{cases}$$ Никакие коэффициенты многочлена вычислять вообще на надо, поскольку при цифровой обработке сигналов, как правило, новые моменты дискретизации заранее известны и для них заранее же могут быть вычислены соответствующие значения порождающей функции, которые будут помещены в память и в дальнейшем будут фигурировать как коэффициенты.

Сам алгоритм получения нового отсчёта при локальной регулярной интерполяции первого порядка, таким образом, включает четыре умножения и три сложения, независимо от метода интерполяции.

 Профиль  
                  
 
 Re: Победить Фарроу - 2
Сообщение17.05.2014, 21:01 


05/09/12
2587
profrotter, если я правильно понимаю, вы записали выражение для интерполирующей функции в виде линейной комбинации некоторой "порождающей функции" с весами, равными значениям сигнала. Тогда конкретно в рассматриваем мною случае, эта "порождающая функция" будет представлять собой базисные полиномы Лагранжа. И с этим никто не спорит, более того, это было отмечено и в статье по ссылке из первого поста этого топика, за которую вы хотели отдать автора на костер - за "ортогональность" этих базисных полиномов Лагранжа.
Но когда доходит до практических расчетов, тогда именно что рассчитывают по нескольким точкам коэффициенты полинома и потом его значения в любом количестве внутренних точек интервала - так вычислительно эффективнее. А ваша фраза
profrotter в сообщении #864521 писал(а):
Никакие коэффициенты многочлена вычислять вообще на надо, поскольку при цифровой обработке сигналов, как правило, новые моменты дискретизации заранее известны и для них заранее же могут быть вычислены соответствующие значения порождающей функции, которые будут помещены в память и в дальнейшем будут фигурировать как коэффициенты.

Сам алгоритм получения нового отсчёта при локальной регулярной интерполяции первого порядка, таким образом, включает четыре умножения и три сложения, независимо от метода интерполяции.
- это представление полиномиальной интерполяции в виде полифазного КИХ фильтра с заранее рассчитанными коэффициентами для каждой фазы - и с этим тоже никто не спорит. Вопрос только в том, что не всегда количество фаз заранее известно и конечно, а даже если и конечно - то может быть настолько велико, что хранение всех заранее рассчитанных коэффициентов потребует много памяти.

ЗЫ вот по этой ссылке тема, где обсуждается вопрос "что лучше - Лагранж или полифазный фильтр"
ЗЗЫ и в любом случае, независимо от личных предпочтений и взглядов на то, кто что использует и как вычисляет, это не делает полученный мной результат неверным.

 Профиль  
                  
 
 Re: Победить Фарроу - 2
Сообщение17.05.2014, 21:24 
Модератор
Аватара пользователя


16/02/11
3788
Бурашево
_Ivana в сообщении #864532 писал(а):
Тогда конкретно в рассматриваем мною случае, эта "порождающая функция" будет представлять собой базисные полиномы Лагранжа.
В конкретно рассматриваемом вами случае выражение для порождающей функции было приведено. Это не базисная функция Лагранжа. Базисные функции Лагранжа не ортогональны.
_Ivana в сообщении #864532 писал(а):
так вычислительно эффективнее.
Нисколько. Рассчитав коэффициенты полинома делается три умножения и три сложения: $\psi_k(t)=a_{k3}t^3+a_{k2}t^2+a_{k1}t+a_{k0}$. Прибавьте к этому умножения, которые необходимы для расчёта коэффициентов и получите четыре (а то и больше) умножения и три сложения, о которых я вам писал.
_Ivana в сообщении #864532 писал(а):
Вопрос только в том, что не всегда количество фаз заранее известно и конечно,
Не надо инсинуаций. Если Вы хотите оперировать этим, то не ссылайтесь на цифровую обработку сигналов. А если нет - то отпадает и необходимость во всей вашей оптимизации.
_Ivana в сообщении #864532 писал(а):
что лучше - Лагранж или полифазный фильтр
Бессмысленно. Полифазный фильтр может быть построен для любого метода линейной локальной регулярной интерполяции, в том числе и для локальной полиномиальной, также для локальной сплайновой. Как это сделать я написал выше.
_Ivana в сообщении #864532 писал(а):
полученный мной результат
Результата Вы не предъявили. Копаться в чужом программном коде просто никто не стал и всё. Опишите алгоритм - будет о чём разговаривать.

 Профиль  
                  
 
 Re: Победить Фарроу - 2
Сообщение17.05.2014, 21:34 


05/09/12
2587
Я вам привел прямую ссылку на тему со специализированного форума, в которой люди, не менее вас считающие себя специалистами в ЦОС решают конкретную задачу ресемплинга с применением полиномиальной интерполяции, с графиками/картинками и т.п. Вы же мне инкриминируете какие-то инсинуации :-)
А придумать алгоритм было частью задачи этой темы, которая никого не заинтересовала особо. Может еще найдутся интересующиеся именно поставленной задачей темы, а не только критическим обзором ее необходимости в народном хозяйстве.

 Профиль  
                  
 
 Re: Победить Фарроу - 2
Сообщение17.05.2014, 21:42 
Модератор
Аватара пользователя


16/02/11
3788
Бурашево
_Ivana в сообщении #864543 писал(а):
Я вам привел прямую ссылку на тему со специализированного форума, в которой люди, не менее вас
Ссылки на авторитеты не катят, тем более, что эти авторитеты считают ортогональными базисные функции Лагранжа. Я вам ещё раз пишу, что никакой алгоритм Вы не описали. Без этого тема ни о чём - капаться в чужом программном коде, реализующем непонятно что бессмысленно.

 Профиль  
                  
 
 Re: Победить Фарроу - 2
Сообщение17.05.2014, 22:27 


05/09/12
2587
Хотелось бы подвести черту под бесплодными спорами и закончить их. А также резюмировать и напомнить: тема в разделе "Олимпиадные задачи." В моем коде вообще копаться не надо, надо задачу решить :-)
А она такова: есть некая процедура интерполяции, описанная по ссылке. Если надо, могу продублировать сюда ее описание. В той же ссылке приведен так называемый "оптимизированный алгоритм", реализующий эту процедуру, и содержащий $8$ операций сложения, $2$ сдвига и $1$ умножение для получения коэффициентов полинома каждого интервала. Собственно, задача - предложить и реализовать более оптимальный алгоритм.
ЗЫ а в коде (в котором не надо копаться, там готовые ответы) - результат участника другого форума, который оптимальнее "оптимизированного" по ссылке на $2$ сложения и мой, который оптимальнее на $3$ сложения и $1$ сдвиг.

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 32 ]  На страницу 1, 2, 3  След.

Модераторы: Модераторы Математики, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group