2014 dxdy logo

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

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




 
 Ряд Фурье
Сообщение28.04.2014, 16:27 
Описание
Горячий участок одной программы расчета течения жидкости вычисляет сумму ряда
$$\sum_{i=0}^{N}\sum_{j=0}^{N} a_{ij}\cos(ix)\cos(jy)$$для набора из M точек $(x,y)$, принадлежащих области течения $[-\pi/2;\pi/2]^2$. Запрограммируйте как можно более быстрый алгоритм расчета данной суммы. Коэффициенты $a_i_j$ задайте формулой
$$a_{ij} = \frac {1} {1+i+j+\frac{1}{\sqrt{1+ij}}}.$$Помогите, люди добрые. Не получается ничего :(

 
 
 
 Re: Ряд Фурье
Сообщение11.09.2015, 11:31 
Метод схлопывания пополам.
Область i,j бьётся на четвертинки, над каждой вызывается рекурсия.
Пока четвертинки не станут достаточно маленькими, чтобы напрямую сложить - 4 или 16 например.

 
 
 
 Re: Ряд Фурье
Сообщение11.09.2015, 17:54 
Не знаю, какое олимпиадное решение подразумевается, но по-нормальному, раз "горячий участок", то много раз считается, и, вероятно, пределы для возможных значений $N$ известны. Так что имеет смысл заранее посчитать значения коэффициентов и хранить в массиве. Сгруппируем слагаемые, вынося $\cos i x$ и получим алгоритм с $N(N+1)$ умножениями и $2N$ вычислениями косинусов. Поскольку вычисление косинусов медленнее, чем умножение, можно вычислять их рекуррентно по формулам приведения. В общем, получится $O(N^2)$ умножений плюс вычисление $\cos x$, $\sin x$, $\cos y$, $\sin y$.

 
 
 
 Re: Ряд Фурье
Сообщение11.09.2015, 18:11 
Это же дискретное преобразование Фурье массива $a_{ij}$. Для него написаны быстрые алгоритмы. Например, "Численные методы" Кобельков, Жидков.

 
 
 [ Сообщений: 4 ] 


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group