2014 dxdy logo

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

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




Начать новую тему Ответить на тему На страницу Пред.  1 ... 36, 37, 38, 39, 40, 41, 42 ... 54  След.

А вам пакет PARI/GP интересен?
Да 83%  83%  [ 58 ]
Нет 6%  6%  [ 4 ]
Не уверен(а) 11%  11%  [ 8 ]
Всего голосов : 70
 
 Re: интерактивный курс: введение в программирование на PARI/GP
Сообщение16.12.2022, 14:13 


05/09/16
12110
gris в сообщении #1574053 писал(а):
А как тогда отрабатывается !==, раз ошибка не указывается?

Видимо, как "факториал равен" т.е. k!== то же что (k!)==
Проверяем гипотезу:
? {k=3; print1("wh "); while( k!==6, print1(k,"."); k++; if(k==10,break)) ;print("#");}
wh 3.#
?

 Профиль  
                  
 
 Re: интерактивный курс: введение в программирование на PARI/GP
Сообщение16.12.2022, 15:05 
Заслуженный участник
Аватара пользователя


13/08/08
14495
можно даже в шутку загадки строить:
{if(4!!==8, print("4!! is 8"), print("4!! is not 8"))}
4!! is not 8

но как человеку рассеянному составлять длинные программы?

 Профиль  
                  
 
 Re: интерактивный курс: введение в программирование на PARI/GP
Сообщение16.12.2022, 15:12 
Заслуженный участник


20/08/14
11867
Россия, Москва
gris в сообщении #1574062 писал(а):
но как человеку рассеянному составлять длинные программы?
Как и всем остальным, или Вы всерьёз думаете кто-то может удержать в голове программу на миллион строк? Проверки кода, тестовые запуски, деление на небольшие куски и детальное описание и тестирование каждого, и прочие известные стандартные техники программирования.

 Профиль  
                  
 
 Re: интерактивный курс: введение в программирование на PARI/GP
Сообщение16.12.2022, 15:22 


05/09/16
12110
gris в сообщении #1574062 писал(а):
но как человеку рассеянному составлять длинные программы?

Ну примерно так же, как доказывать теорему, когда доказательство длинное. Или как роман писать. Надо иметь общий замысел, и реализовывать его постепенно. Попутно доказывая леммы (создавая подпрограммы-функции) и затем аккуратно используя их. Следить за последовательностью обозначений (именами переменных) ну и всё такое. :mrgreen:

 Профиль  
                  
 
 Re: интерактивный курс: введение в программирование на PARI/GP
Сообщение20.12.2022, 19:02 
Аватара пользователя


09/11/22

39
Скажите пожалуйста, как выглядит теорема Ферма на PARI/GP? Из вариантов которые перепробовал мне понравился этот алгоритм. Впечатлило, что его оптимизировали.

(Оффтоп)

Код:
n= 3
m= 51
for a in range(1, m+1):
    an= a ** n
    c= a; cn= an
    for b in range(a+1, m+1):
        anbn= an + b ** n
        while anbn > cn:
            c+= 1
            cn= c ** n
        if anbn == cn: # Bingo!
            print (a, b, c)


Еще нравятся эти две формулы $a^3 + b^3 = c^3 + 1$ и $a^3 + b^3 = c^3 - 1$:

(Оффтоп)

Код:
n= 3
m= 51
for a in range(1, m+1):
    an= a ** n
    c= a; cn= an
    for b in range(a+1, m+1):
        anbn= an + b ** n
        while anbn > cn:
            c+= 1
            cn= (c ** n)+1
        if anbn == cn: # Bingo!
            print (a,'³','+',b,'³','=',c,'³','+1', '|', a ** 3,'+',b ** 3,'=',c ** 3,'+1', '|', m)

(Оффтоп)

Код:
n= 3
m= 51
for a in range(1, m+1):
    an= a ** n
    c= a; cn= an
    for b in range(a+1, m+1):
        anbn= an + b ** n
        while anbn > cn:
            c+= 1
            cn= (c ** n)-1
        if anbn == cn: # Bingo!
            print (a,'³','+',b,'³','=',c,'³','-1', '|', a ** 3,'+',b ** 3,'=',c ** 3,'-1', '|', m)


И формула которая начинается с 0,5 и с шагом 0,5.

-- 20.12.2022, 18:04 --

gris Мне понравилась ваша картина,
Цитата:
отклонение суммы кубов целых чисел от 1 до 320 от целого куба на малые расстояния
. Поделитесь кодом? Сумма кубов это теорема Ферма?

 Профиль  
                  
 
 Re: интерактивный курс: введение в программирование на PARI/GP
Сообщение20.12.2022, 21:02 
Заслуженный участник
Аватара пользователя


13/08/08
14495
Avdij, задать цвет в PARI можно по-разному:
{plotinit(0,240,60);
plotcolor(0,2); plotmove(0,0,0);plotrbox(0,60,60,1);
plotcolor(0,"green"); plotmove(0,60,0);plotrbox(0,60,60,1);
plotcolor(0,"#FF0000"); plotmove(0,120,0);plotrbox(0,60,60,1);
plotcolor(0,255,255,0]); plotmove(0,180,0);plotrbox(0,60,60,1); plotdraw(0);}

Изображение

21:28 +++ Avdij, ну эта тема для каких-то неизвестных вопросов именно по PARI, я думал вам понравилось колористический подход к ВТФ.
А центральная формула — ispower(a^n+b^n,n), хотя для огромных чисел нужны ухищрения, чтобы не делать лишние возведения в степень. В диапазоне до тысячи и небольших степеней можно махнуть рукой. А так возможно надо делать предварительный массив :?: .

 Профиль  
                  
 
 Я ожидал, в коде будет формула
Сообщение20.12.2022, 21:16 
Аватара пользователя


09/11/22

39
gris Я ожидал, в коде будет формула, а не рисование.

(Оффтоп)

Код:
syntax error, unexpected ';': ...ox(0,60,60,1);plotdraw(0);

 Профиль  
                  
 
 Re: интерактивный курс: введение в программирование на PARI/GP
Сообщение20.12.2022, 22:05 
Заслуженный участник


20/08/14
11867
Россия, Москва
Avdij
Цикл for на PARI записывается так: forstep(a=start,stop,step, ...), где a это переменная цикла, start с какого значения начать, stop на каком остановиться (оно будет последним использованным), step с каким шагом изменять переменную цикла.
Цикл while на PARI выглядит так: while(cond, ...), где cond это условие выполнения тела цикла.
Условный оператор в простейшем виде выглядит так: if(cond, ...), где cond это условие выполнения тела оператора. В документации приведены и более сложные формы данного оператора, включая множественное ветвление и проверка многих разных (но взаимоисключающих) условий.
Цикл по cn не нужен, в PARI есть готовая функция ispower, которая проверяет что аргумент является заданной степенью некоего числа, причём показатель степени можно и не указывать, тогда она сама его определит.

Возможно Вам стоит почитать тему с самого начала, такие базовые вещи уже многократно описывались.

-- 20.12.2022, 22:11 --

Avdij в сообщении #1574517 писал(а):
И формула которая начинается с 0,5 и с шагом 0,5.
Цикл с таким шагом запустить можно, но лучше не стоит: далеко не все дробные числа представимы точно, только те что имеют в знаменателе (при записи в виде дроби) только степени двойки. 0.5 можно, 0.25 тоже, и 0.125 можно, и 0.375 можно, а например 0.1 и 0.2 и 0.3 и 0.4 могут вызвать странное поведение, когда переменная цикла не попадёт в целые значения. Потому лучше цикл запускать по целым значениям, а к дробным их пересчитывать уже внутри цикла, при этом ошибка хотя бы не будет накапливаться на каждой итерации.

 Профиль  
                  
 
 У меня похоже не получится
Сообщение20.12.2022, 22:35 
Аватара пользователя


09/11/22

39
Dmitriy40
Цитата:
Цикл по cn не нужен, в PARI есть готовая функция ispower, которая проверяет что аргумент является заданной степенью некоего числа, причём показатель степени можно и не указывать, тогда она сама его определит.

На что-то подобное я и расчитывал, что PARI/GP сможет оптимизировать лучше.

Цитата:
Цикл с таким шагом запустить можно, но лучше не стоит: далеко не все дробные числа представимы точно, только те что имеют в знаменателе (при записи в виде дроби) только степени двойки. 0.5 можно, 0.25 тоже, и 0.125 можно, и 0.375 можно, а например 0.1 и 0.2 и 0.3 и 0.4 могут вызвать странное поведение, когда переменная цикла не попадёт в целые значения. Потому лучше цикл запускать по целым значениям, а к дробным их пересчитывать уже внутри цикла, при этом ошибка хотя бы не будет накапливаться на каждой итерации.

Печально, я видел кирпичный дом, так там именно пол кирпичика обычно не хватает, хотелось попробовать, посмотреть, что получится. Насколько я понимаю, что из Python-а в PARI/GP мне никто не поможет переписать, а у меня похоже не получится. Ладно, пусть тогда остается в Python. Я пробовал в Python начинать с 0.5 и натыкался на ошибку. В этой теме нельзя консультироваться по Python?

 Профиль  
                  
 
 Re: интерактивный курс: введение в программирование на PARI/GP
Сообщение20.12.2022, 23:57 


05/09/16
12110
Avdij в сообщении #1574538 писал(а):
В этой теме нельзя консультироваться по Python?

Нельзя.

 Профиль  
                  
 
 Re: интерактивный курс: введение в программирование на PARI/GP
Сообщение20.12.2022, 23:59 
Заслуженный участник


20/08/14
11867
Россия, Москва
Avdij в сообщении #1574538 писал(а):
В этой теме нельзя консультироваться по Python?
Понятно что нет. Заведите свою отдельную тему, там и спрашивайте.
Avdij в сообщении #1574538 писал(а):
Насколько я понимаю, что из Python-а в PARI/GP мне никто не поможет переписать,
Столь простые программки нет смысла помогать переписывать, там при желании самому разобраться дело получаса. Брать и пробовать. Читать документацию когда непонятно. Есть краткая встроенная справка по командам: ? command. Причём можно набрать набрать лишь начало команды и дважды нажать клавишу Tab (однократное нажатие - автодополнение набранного) - покажут список возможных продолжений набранного.

Ну и делать извлечение кубического корня путём линейного перебора вариантов это как минимум долго (и глупо). Есть же много других методов, от математических (экспонента от логарифма) до алгоритмических (метод Ньютона или побитового взвешивания/подбора). Или например просто тупо возвести в степень 1/3 (кстати возведение в степень в PARI математическое, символом ^), округлить к ближайшему целому и проверить не корень ли это (возведением в куб и сравнением). Для чисел до десятков знаков это получится вполне точно, а до более длинных чисел Вы всё равно не доберётесь.

 Профиль  
                  
 
 Аргумент
Сообщение21.12.2022, 00:30 
Аватара пользователя


09/11/22

39
Dmitriy40
Цитата:
Понятно что нет. Заведите свою отдельную тему, там и спрашивайте.
Не настолько мне это нужно, чтоб аж тему заводить. Любопытство, это не достаточный аргумент.

Цитата:
Столь простые программки нет смысла помогать переписывать, там при желании самому разобраться дело получаса. Брать и пробовать.
Да, вообще-то пробовал, да и не пол часа. Как переменные определить - понял n=3; m=51;, как цикл сделать - понял for( i = 1, 10, print1(i,", ") ), как в степень возвести - понял 3^3. Как range добавить, как сделать цикл в цикле, как до купы собрать - не понял.

Цитата:
Ну и делать извлечение кубического корня путём линейного перебора вариантов это как минимум долго (и глупо).
Это же весомый аргумент, чтоб этого не делать? Если я знаю что есть пути и получше, может лучше не идти заведомо не правильным путем?

 Профиль  
                  
 
 Re: интерактивный курс: введение в программирование на PARI/GP
Сообщение21.12.2022, 00:44 
Заслуженный участник


20/08/14
11867
Россия, Москва
Avdij в сообщении #1574551 писал(а):
Как range добавить,
Подумать что такое range и чем оно отличается от 1,10 в Вашем же цикле.
Если цикл надо с шагом ровно 1, то можно упростить: for(k=start,stop, ...).
Avdij в сообщении #1574551 писал(а):
как сделать цикл в цикле
Так и сделать: вставить вместо print ещё один цикл. Или этот обернуть ещё одним. Разумеется с другой переменной цикла. Читайте тему, всё было.
Avdij в сообщении #1574551 писал(а):
как до купы собрать
"Купа" - непонятно что.
Avdij в сообщении #1574551 писал(а):
Если я знаю что есть пути и получше, может лучше не идти заведомо не правильным путем?
Проверять численно ВТФ (да ещё и на столь малых числах) - заведомо неправильный путь.

-- 21.12.2022, 00:53 --

PS. Avdij, мне кажется данная тема для изучения PARI, а не для обучения программированию в принципе. Возьмите любой учебник программирования, с примерами на любом языке (да хоть на том же питоне если он Вам лучше понятен) и прочувствуйте самые базовые вещи: переменные, типы данных, циклы, функции, вложенные операторы, ввод-вывод информации, рекурсию, вообще преобразование формул в программу. Именно как самостоятельные сущности, без привязки к конкретному языку. А потом уж смотрите как оно всё реализовано в PARI. Учиться программировать на примере PARI не слишком правильно, маловато доступной информации именно для самых начинающих, некоторая квалификация (общие знания) уже весьма желательны.

-- 21.12.2022, 00:57 --

И да, если надо просто переписать одну-две-три программы на другой язык (даже не обязательно PARI) - открывайте новую тему и уже в ней спрашивайте как именно это сделать.

 Профиль  
                  
 
 Re: интерактивный курс: введение в программирование на PARI/GP
Сообщение21.12.2022, 01:05 
Аватара пользователя


09/11/22

39
Dmitriy40
Цитата:
Ну и делать извлечение кубического корня путём линейного перебора вариантов это как минимум долго (и глупо). Есть же много других методов, от математических (экспонента от логарифма) до алгоритмических (метод Ньютона или побитового взвешивания/подбора). Или например просто тупо возвести в степень 1/3 (кстати возведение в степень в PARI математическое, символом ^), округлить к ближайшему целому и проверить не корень ли это (возведением в куб и сравнением). Для чисел до десятков знаков это получится вполне точно, а до более длинных чисел Вы всё равно не доберётесь.
Речь идет о выборе, что лучше точность (глупость) или скорость? Лучше - точность.

Цитата:
Если цикл надо с шагом ровно 1, то можно упростить: for(k=start,stop, ...).
Мы по-разному похоже видим простоту.

Цитата:
Так и сделать: вставить вместо print ещё один цикл. Или этот обернуть ещё одним. Разумеется с другой переменной цикла.
Да, я много разных вариантов перепробовал, пока что не получилось.

Цитата:
Читайте тему, всё было.
Дочитал до 11-й страницы, не внимательно читал, т.с. по диагонали.

Цитата:
"Купа" - непонятно что.
Программа, это кирпичики, из этих кирпичиков можно собрать программу. Если кирпичиков не хватает, можно по другому сказать - не могу собрать до кучи.

Цитата:
Проверять численно ВТФ (да ещё и на столь малых числах) - заведомо неправильный путь.
Я пока что смотрю (ищу) на числа (+1 и -1), если их будет достаточно много, планирую их собрать в базу и выводить на экран - любоваться т.е. Но чем дальше иду, тем их меньше, скорей всего откажусь от поиска.

-- 21.12.2022, 00:09 --

Dmitriy40
Цитата:
Возьмите любой учебник программирования, с примерами на любом языке (да хоть на том же питоне если он Вам лучше понятен) и прочувствуйте самые базовые вещи
Так на питоне уже есть.
Цитата:
открывайте новую тему и уже в ней спрашивайте как именно это сделать
Овчинка выделки не стоит - просто забудьте про меня.

 Профиль  
                  
 
 Re: интерактивный курс: введение в программирование на PARI/GP
Сообщение21.12.2022, 01:28 
Заслуженный участник


20/08/14
11867
Россия, Москва
Avdij в сообщении #1574554 писал(а):
Дочитал до 11-й страницы, не внимательно читал, т.с. по диагонали.
9-я страница, короткий пример вложенных циклов:
Dmitriy40 в сообщении #1194432 писал(а):
Aether
for(n=1,10, for(m=1,5, x=n*m; print(x)))

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 810 ]  На страницу Пред.  1 ... 36, 37, 38, 39, 40, 41, 42 ... 54  След.

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



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

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


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

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