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

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




На страницу Пред.  1 ... 9, 10, 11, 12, 13  След.
 Re: Кортежи из простых чисел
Важна не только степень логарифма, но и не слишком быстрое возрастание числителя.

 Re: Кортежи из простых чисел
Yadryara в сообщении #1728145 писал(а):
Какой хвост? 50-е константы? Кого они колышат, если надо 30.

Так я-то смотрел на результат в целом. Я не знаю кого колышат... :mrgreen:

Yadryara в сообщении #1728145 писал(а):
Я вот для вас формулы старательно рисовал. Вы понимаете как возникает сходимость?


Пока не хочу вникать. В целом да - вижу знакопеременный ряд с убывающими (наверное) членами.

Кстати. Пришло время раскрыть тайну безымянных коэффициентов. Что вы с ними делаете?

 Re: Кортежи из простых чисел
Аватара пользователя
Я их попросту пересчитываю в константы. Прямо вставляю вектор ваших чисел в программу и всё. Вот как раз для [0, 210, 420] :

Код:
{print();
t0=getwalltime();

v = [0, 210, 420];
maxn = 99;

BC =vector(#v+maxn,k, if(k<#v, 0, prodeulerrat((p^k-k*p^(k-1))/(p-1)^k, 1, nextprime(k+1))));
vMC=vector(#v+maxn,k, if(k<#v, 0, x=1.0;

forprime(p=3  ,k      ,x/=p*(1-1.0/p)^k);
forprime(p=k+1,v[#v]/2,x/=p-k          );  x));

CC=vector(#v+maxn,k, 2^(k-1) * vMC[k] * BC[k]);

vC=[1.503494790230177e+80, 6.335728e+81, 1.31147e+83, 1.77751e+84, 1.77417e+85, 1.39066e+86, 8.91432e+86, 4.80519e+87, 2.22286e+88, 8.96184e+88, 3.18730e+89, 1.00975e+90, 2.87227e+90, 7.38472e+90, 1.72570e+91, 3.68278e+91, 7.20671e+91, 1.29770e+92, 2.15684e+92, 3.31757e+92, 4.73368e+92, 6.27830e+92, 7.75408e+92, 8.93202e+92, 9.60949e+92, 9.66738e+92, 9.10399e+92, 8.03275e+92, 6.64576e+92, 5.15893e+92, 3.75962e+92, 2.5733e+92, 1.6548e+92, 1.0000e+92, 5.6802e+91, 3.0326e+91, 1.5218e+91, 7.1775e+90, 3.1808e+90, 1.3242e+90, 5.1768e+89];

if(type(vC)!="t_VEC", print(vC); quit);

print("v = ",v, "   ", #vC);print;

for(i=1,#vC, vC[i]*=CC[i+#v-1]);
print("vC= ",vC);

print;print(strtime(getwalltime()-t0));print;
}quit;

 Re: Кортежи из простых чисел
Yadryara в сообщении #1728148 писал(а):
Я их попросту пересчитываю в константы. Прямо вставляю вектор ваших чисел в программу и всё.

А дальше?
Тут расчёт простой, я могу перенести его в программу, например, если это облегчит что-то.
Но там опять гигантские числа получаются, что вы с ними делаете дальше? Умножаете на интегралы и складываете?

 Re: Кортежи из простых чисел
wrest в сообщении #1728150 писал(а):
Тут расчёт простой, я могу перенести его в программу, например, если это облегчит что-то.
Думаю не надо: prodeulerrat() это интеграл произведение по простым до бесконечности, так что я бы не сказал что его так уж просто посчитать.
Да и сравнивать станет сложнее.
Уж пересчитать одни числа в другие за секунды проблемы не составляет.

 Re: Кортежи из простых чисел
Dmitriy40 в сообщении #1728153 писал(а):
Да и сравнивать станет сложнее.
Уж пересчитать одни числа в другие за секунды проблемы не составляет.

А, ну да, сравнивать сложнее будет. Бесконечность дело такое... :D

-- добавлено через 11 минут --

Dmitriy40 в сообщении #1728153 писал(а):
так что я бы не сказал что его так уж просто посчитать.

Вычисляется дзета-функция, pari там не перемножает конечно. Ну да ладно, не буду пока туда залазить, тут ещё с Монте-Карло не всё в порядке как выяснилось.

 Re: Кортежи из простых чисел
Аватара пользователя
wrest в сообщении #1728150 писал(а):
А дальше?

А дальше подставляю константы в формулу и интегрирую. Если, например, решил ограничиться 31 константой, то определить количество кортежей по паттерну [0, 210, 420] в интервале от 0 до $x$ можно вот так:

$$\int\limits_{2}^{x} \left( 17.149 - \dfrac{6940.1}{\ln t} + \dfrac{1.3785e6}{\ln^2 t} - ... + \dfrac{8.9784e42}{\ln^{30} t} \right) \dfrac{dt}{\ln^3 t}$$
Чтоб видеть сходимость и вклад каждой константы, последовательно считаю интегралы со всё большим количеством констант.

 Re: Кортежи из простых чисел
Yadryara в сообщении #1728158 писал(а):
Чтоб видеть сходимость и вклад каждой константы, последовательно считаю интегралы со всё большим количеством констант.

Погодите, вы ведь при этом заменяете интеграл суммы на сумму интегралов? Извините, если что...

-- добавлено через 56 минут --

Новая версия программы.
Добавил опцию --bias
Можно устанавливать наклон второго прохода этой опцией.
При --bias 0 будет фактически равномерный проход с удвоенной выборкой.
Изменения по выводимой инфе - убрал непонятное.
Дисперсии первого прогона считаются по другому (должно быть немного точнее).

Ссылка https://disk.yandex.ru/d/BLYFw4hJuTc2PQ

Текст справки
Код:
hl1_mc5_1 — Sequential Importance Sampling для оценки коэффициентов A[j].

ОПИСАНИЕ:
  Коэффициенты A[j] входят в формулу Харди–Литтлвуда для количества
  простых кортежей заданного диаметра d в интервале [1, x]: оно
  асимптотически равно Σⱼ A[j] · ∫₂ˣ dt / (ln t)^{|H₀|+j}, где |H₀| —
  длина базового паттерна, а j — число дополнительных простых позиций
  («загрязнений») внутри того же диаметра. Каждый коэффициент A[j] равен
  сумме локальных констант по всем допустимым конфигурациям с j
  загрязнениями и определяет совокупный вклад кортежей длины |H₀|+j
  в эту сумму.

  Программа использует Sequential Importance Sampling с двумя прогонами:
  - Прогон 1 (смещение=0): Равномерное сэмплирование, точное для малых j
  - Прогон 2 (смещение=bias): Importance Sampling, лучшее для больших j
  Результаты объединяются через обратные дисперсии.

ИСПОЛЬЗОВАНИЕ:
  ./hl1_mc5 [опции] MAXN h1 h2 ... hk

АРГУМЕНТЫ:
  MAXN          Максимальный индекс j для вывода (A[0]..A[MAXN]).
  h1 h2 ... hk  Элементы множества H₀ (обязательные позиции кортежа).
                Диаметр d = max(h_i). H₀ должно содержать 0 и d.

ОПЦИИ:
  --size N      Количество сэмплов на проход (K, M, G, T). По умолчанию: 5M
  --bias X      Параметр наклона второго прогона (по умолчанию: 2.0).
                Увеличение смещает выборку в сторону больших s,
                уменьшение делает распределение весов равномернее.
  --full        Выводить числа целиком (%.0f)
  --plain       Вывод без квадратных скобок (для парсинга)
  --nostdev     Не печатать массив относительных погрешностей (СКО)
  --help        Показать эту справку

ПРИМЕРЫ:
  ./hl1_mc5 --size 10M 99 0 210 420     # d=420, 10M сэмплов на проход, bias=2.0
  ./hl1_mc5 --size 1M --bias 1.0 30 0 210 420 630 840 1050 1260  # мягкий наклон


-- добавлено через 37 минут --

Можно вызвать прямо из pari
Функция:
Код:
hl1(maxn, H0, size="1M", bias=2.0) =
{
    my(cmd, lines, h0_str, i);
    h0_str = Str(H0[1]);
    for(i = 2, #H0, h0_str = Str(h0_str, " ", H0[i]));
    cmd = Str("./hl1_mc5  --size ", size, " --bias ", bias,
              " ", maxn, " ", h0_str);
    lines = externstr(cmd);
    [eval(lines[1]), eval(lines[2])]
}

Запуск:
Код:
? [A, ERR] = hl1(90, [0, 210, 420], "1M", 2.0);
Кортеж: диаметр 420, обязательных 3, возможных загрязнений 208, запрещенных позиций 0, простых 45
Счёт: выборка на проход 1M, смещение 2.0, потоков доступно 7, расчёт до j=90
Прогон 1. Смещение 0.0
  [100%] Прошло: 00:00:13   Осталось: 00:00:00   потоков используется: 1
Прогон 2. Смещение 2.0
  [100%] Прошло: 00:00:14   Осталось: 00:00:00   потоков используется: 1
Результат: 59 достоверных коэффициентов (err<100%)
? #A
%58 = 59
? A[1]
%59 = 1.5034947902255200000000000000000000000 E80
?

Сообщения и прогресс "пробросятся" в терминал pari (чтобы видеть как дела и когда закончится), а результаты попадут в переменные.

 Re: Кортежи из простых чисел
Аватара пользователя
wrest в сообщении #1728162 писал(а):
Погодите, вы ведь при этом заменяете интеграл суммы на сумму интегралов? Извините, если что...

Ну раз вы извиняетесь, значит понимаете, что я этого не делаю? Надеялся что понятно как делаю. Покажу на простом примере.

Как определить количество кортежей по паттерну [0, 8] в интервале от 0 до $x$? Например, вот так:
$$\int\limits_{2}^{x} \left( 1.320  \right) \dfrac{dt}{\ln^3 t}$$
А лучше так:
$$\int\limits_{2}^{x} \left( 1.320 - \dfrac{5.716}{\ln t} \right) \dfrac{dt}{\ln^3 t}$$
А ещё лучше так:
$$\int\limits_{2}^{x} \left( 1.320 - \dfrac{5.716}{\ln t} + \dfrac{4.151}{\ln^2 t} \right) \dfrac{dt}{\ln^3 t}$$
Даже скобки оставил, для единообразия. Таким образом, моё словосочетание "вклад каждой константы" это разговорное упрощение.

wrest в сообщении #1728162 писал(а):
Добавил опцию --bias
Можно устанавливать наклон второго прохода этой опцией.

Надеюсь, догадываетесь, что ИИ мне ещё вчера переделал прогу чтобы я мог экспериментировать с альфой, то бишь с наклоном.

Спасибо, скачал, разбираюсь.

 Re: Кортежи из простых чисел
Аватара пользователя
Код:
Выборка: 10 миллионов
СКО для констант 10 — 31 для разных наклонов, тысячные доли процента:

0.0   22  25  28  31  34  39  43  49  55  63  72  83  97 113 132 156 186 222 267 323 393 479
0.5   24  26  29  30  30  30  28  26  23  20  18  16  14  13  13  13  15  17  19  22  26  30
1.0   26  30  34  39  44  50  57  66  75  85  97 110 123 132 137 134 124 112  98  86  75  65

А чем объясняется расхождения в счёте старой и новой программами?

Код:
Выборка: 10 миллионов
СКО для констант 10 — 31, старая и новая программы, тысячные доли процента:

0.5   24  26  29  30  30  30  28  26  23  20  18  16  14  13  13  13  15  17  19  22  26  30
0.5   35  35  35  34  33  31  29  26  23  20  18  16  14  13  13  13  15  16  19  22  26  30

 Re: Кортежи из простых чисел
Yadryara в сообщении #1728158 писал(а):
Если, например, решил ограничиться 31 константой, то определить количество кортежей по паттерну [0, 210, 420] в интервале от 0 до $x$ можно вот так:

Что именно значит "определить количество кортежей по паттерну"? Это те кортежи, где на местах 0, 210 и 420 стоят простые, а на остальных местах любые?

-- добавлено через 2 минуты --

Yadryara в сообщении #1728171 писал(а):
А чем объясняется расхождения в счёте старой и новой программами?

Вопрос не понял. СКО (и результаты) будет разным в разных запусках одной и той же программы. Это же Монте-Карло, тут как повезёт...

Но вообще, я думаю что программа оценивает СКО э... "оптимистично".

 Re: Кортежи из простых чисел
Аватара пользователя
wrest в сообщении #1728173 писал(а):
Что именно значит "определить количество кортежей по паттерну"? Это те кортежи, где на местах 0, 210 и 420 стоят простые, а на остальных местах любые?

А на остальных местах строго составные.

Например:

Первый кортеж [0, 6], как недавно писал — 23, 29.
Первый кортеж [0, 12], как недавно писал — 199, 211.

Ну а первый кортеж [0, 8] — 89, 97.

wrest в сообщении #1728173 писал(а):
Это же Монте-Карло, тут как повезёт...

И опять-таки, я это понимаю, и, в частности, в вашей программе это видел. Но для одной и той же программы расхождения крошечные, особенно для левых констант. А здесь большие разности именно для левых.

 Re: Кортежи из простых чисел
Yadryara в сообщении #1728178 писал(а):
Но для одной и той же программы расхождения крошечные, особенно для левых констант. А здесь большие разности именно для левых.

Да, там теперь немного по-другому считается СКО,
wrest в сообщении #1728162 писал(а):
Дисперсии первого прогона считаются по другому (должно быть немного точнее).

Не в смысле результат точнее, а в смысле СКО точнее. Меньше оптимизма.
Но опять же, если у вас есть несколькотпервых точных значений, было бы неплохо проверить попадают ли выдаваемые программой значения в интервал СКО.

 Re: Кортежи из простых чисел
Аватара пользователя
wrest в сообщении #1728180 писал(а):
Но опять же, если у вас есть несколькотпервых точных значений,

Ну я уже проверял для паттерна [0, 210]. Если не считать первого числа — 6-5 первых цифр совпадали.

Для паттерна [0, 210, 420] : если не считать первого числа — 5-4 первых цифр совпадали.

Выберу время, может быть посчитаю поточнее.

 Re: Кортежи из простых чисел
Yadryara в сообщении #1728178 писал(а):
А на остальных местах строго составные.

Но для этого достаточно только первой (нулевой) константы, разве нет?

 [ Сообщений: 182 ]  На страницу Пред.  1 ... 9, 10, 11, 12, 13  След.


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