2014 dxdy logo

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

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


Правила форума


Посмотреть правила форума



Начать новую тему Ответить на тему
 
 Упрощение суммирования для достаточно больших m
Сообщение04.06.2023, 13:20 
Аватара пользователя


22/11/13
02/04/25
549
Пусть $a(n)$ - произвольная целочисленная последовательность.

Пусть также $b(n,m)$ - целочисленная последовательность, такая, что
$$b(n,m)=\sum\limits_{k=1}^{n}b(k,m-1)b(n-k,m), b(n,0)=a(n), b(0,m)=1$$

Какие существуют способы вычисления $b(n,m)$ для достаточно больших $m$ (например $m=2^{1000}$)?

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

 Профиль  
                  
 
 Re: Упрощение суммирования для достаточно больших m
Сообщение04.06.2023, 14:26 
Заслуженный участник


18/09/21
1756
Тут вроде на свёртку похоже.
Можно через Фурье посчитать, что быстро, т.к. есть быстрый алгоритм Фурье-преобразования.

 Профиль  
                  
 
 Re: Упрощение суммирования для достаточно больших m
Сообщение04.06.2023, 14:41 
Аватара пользователя


22/11/13
02/04/25
549
zykov в сообщении #1596467 писал(а):
Тут вроде на свёртку похоже.
Можно через Фурье посчитать, что быстро, т.к. есть быстрый алгоритм Фурье-преобразования.

Благодарю за ответ! Можно чуть подробнее? Если что, я не математик, а просто энтузиаст. Мне желательно иметь код на PARI/GP для сравнения по скорости с моим.

 Профиль  
                  
 
 Re: Упрощение суммирования для достаточно больших m
Сообщение04.06.2023, 16:56 
Заслуженный участник


18/09/21
1756
Свёртка (математический анализ)
Дискретное преобразование Фурье
Быстрое преобразование Фурье

-- 04.06.2023, 17:18 --

kthxbye в сообщении #1596454 писал(а):
(например $m=2^{1000}$)?
Впрочем $2^{1000}$ - это перебор.
В какую память это влезет???

 Профиль  
                  
 
 Re: Упрощение суммирования для достаточно больших m
Сообщение04.06.2023, 19:41 
Заслуженный участник


12/08/10
1677
Пусть $B_m(x)=\sum_{k=0}^{\infty}b(k,m)x^k$ - формальный степенной ряд. Если я ни где не накосячил $B_m(x)=\frac{2}{2-B_{m-1}(x)}$. Пусть $F(u)=\frac{2}{2-u}$. Тогда $F^{m}(u)$($m$ итераций) - дробно-линейная функция и её коэффициенты считаются за $O(\log^3{m})$. А потом подставляем в неё ряд $B_0(x)$.

 Профиль  
                  
 
 Re: Упрощение суммирования для достаточно больших m
Сообщение05.06.2023, 10:58 
Аватара пользователя


22/11/13
02/04/25
549
zykov, благодарю за ссылки, буду разбираться!
zykov в сообщении #1596495 писал(а):
Впрочем $2^{1000}$ - это перебор.
В какую память это влезет???

У меня на PARI/GP для $m=2^{1000}$ и $n=1\cdots 50$ считается за две минуты. К сожалению мой алгоритм вычисляет не отдельные значения, а первые $k$ значений, а также работает только для последовательностей $a(n)$ у которых $a(1)=1$. Вот и он:
Код:
a(n)=n--; binomial(2*n, n)/(n+1)
f(n)=my(v, v1, v2); v=vector(n+2,i,if(i==1,vector(n+2,j,a(j)),vector(n-i+3,j,(j==1)))); v1=vector(n+1,i,0); v1[1]=a(2)-1; for(i=2,n+1,for(j=2,i,v[j][i-j+2]=v[j-1][i-j+3]-sum(k=1,j-1,v1[j-k]*v[k][i-j+2])); v1[i]=v[i][2]-sum(j=1,i-1,v1[j])-1); v1
b(n,m)=my(v, v1, v2, v3); v=f(n); v1=vector(n+1,i,1); v2=v1; v3=vector(n+1,i,0); v3[1]=1; for(i=1,n,for(j=1,n-i+1,v2[j]=v1[j+1]+sum(q=1,j,(m+1)^-(j-q+1)*v[j-q+1]*v1[q])); v1=v2; v3[i+1]=v1[1];); for(i=1,n,v3[i+1]*=(m+1)^i); v3

Null, благодарю за ответ! Буду пробовать и обязательно поделюсь результатом. Функцию $F(u)$ надо просто возводить в степень или же для подсчета ее коэффициентов есть какой-то хитрый ход?

 Профиль  
                  
 
 Re: Упрощение суммирования для достаточно больших m
Сообщение05.06.2023, 11:06 
Заслуженный участник


12/08/10
1677
kthxbye в сообщении #1596625 писал(а):
Функцию $F(u)$ надо просто возводить в степень или же для подсчета ее коэффициентов есть какой-то хитрый ход?

$F^{2k+1}(x)=F(F^k(F^k(x)))$
$F^{2k}(x)=F^k(F^k(x))$

 Профиль  
                  
 
 Re: Упрощение суммирования для достаточно больших m
Сообщение05.06.2023, 11:37 
Аватара пользователя


22/11/13
02/04/25
549
Null, еще раз благодарю! Вот слепил программку на скорую руку:
Код:
a(n)=numbpart(n)
F(x,m)=if(m==0,2/(2-x),F(F(x,m-1)))
B(x)=sum(k=1,10,a(k)*x^k)
b(n,m)=polcoeff(F(B(x+O(x^11)),m),n)

Прога успешно возвращает $b(n,1)$, а вот уже на $b(n,2)$ начинает ошибаться. Кроме того, не проверяя базовых случаев, я сразу забил в прогу $m=2^{1000}$ и она пожаловалась мне на ошибку deep recursion для $F(x)$.

 Профиль  
                  
 
 Re: Упрощение суммирования для достаточно больших m
Сообщение05.06.2023, 14:57 
Заслуженный участник


12/08/10
1677
Итерации функции надо считать за $O(\log{m})$. Причем в явном виде. Делает ли ваша программа это? Можно свести в возведению матрицы в степень.
Попробуйте $F(u)=\frac{1}{2-u}$. Похоже я накосячил.
$a(0)=1$?

 Профиль  
                  
 
 Re: Упрощение суммирования для достаточно больших m
Сообщение05.06.2023, 15:25 
Аватара пользователя


22/11/13
02/04/25
549
Null, вот первые 30 ($m=0\cdots29$) значений $F(x,m)$:
Код:
2/(-x + 2)
(-x + 2)/(-x + 1)
(-2*x + 2)/-x
x
2/(-x + 2)
(-x + 2)/(-x + 1)
(-2*x + 2)/-x
x
2/(-x + 2)
(-x + 2)/(-x + 1)
(-2*x + 2)/-x
x
2/(-x + 2)
(-x + 2)/(-x + 1)
(-2*x + 2)/-x
x
2/(-x + 2)
(-x + 2)/(-x + 1)
(-2*x + 2)/-x
x
2/(-x + 2)
(-x + 2)/(-x + 1)
(-2*x + 2)/-x
x
2/(-x + 2)
(-x + 2)/(-x + 1)
(-2*x + 2)/-x
x
2/(-x + 2)
(-x + 2)/(-x + 1)

Т.е. функция зацикливается и ходит по кругу. Вероятно так быть не должно. Либо моя программа вычисляет функцию неправильно, либо проблема в чем-то другом.

Null в сообщении #1596654 писал(а):
Итерации функции надо считать за $O(\log{m})$. Причем в явном виде. Делает ли ваша программа это? Можно свести в возведению матрицы в степень.

Что такое в явном виде? Надо задавать цикл for длины $m$ который программа обязана будет пройти? Что за матрица? Как ее возводить?

Null в сообщении #1596654 писал(а):
$a(0)=1$?

Если внимательно посмотреть на формулу $b(n,m)$, то можно заметить, что $a(0)$ не влияет на расчеты. У меня $a(0)=0$. При этом, конечно, $b(0,0)=1$.

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 10 ] 

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



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

Сейчас этот форум просматривают: YandexBot [bot]


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

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