2014 dxdy logo

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

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




Начать новую тему Ответить на тему На страницу Пред.  1 ... 45, 46, 47, 48, 49, 50, 51 ... 54  След.

А вам пакет PARI/GP интересен?
Да 83%  83%  [ 58 ]
Нет 6%  6%  [ 4 ]
Не уверен(а) 11%  11%  [ 8 ]
Всего голосов : 70
 
 Re: интерактивный курс: введение в программирование на PARI/GP
Сообщение10.07.2023, 20:40 
Заслуженный участник
Аватара пользователя


13/08/08
14495
А вот как она считает. Два запуска подряд.
(20:29) gp > {pth="C:/GRIS/data_txt/";
fout = fileopen("C:/GRIS/data_txt/data_total.txt","w");
kf=0; kn=0;
for( i=1,10,
namefile=strprintf("%sdata_%d.txt",pth,i);
ier=iferr(fileopen(namefile), ERR, next);
fin= fileopen(namefile);
kf++;
printf("%d ",ier);
while (str = filereadstr(fin),
kn++;
filewrite(fout,str);
); fileclose(fin);
); fileclose(fout);
printf("\n%d lines in %d files",kn,kf);
}
1 2 3 4 5 6 7
4 lines in 7 files
(20:31) gp > {pth="C:/GRIS/data_txt/";
...
printf("\n%d lines in %d files",kn,kf);
}
8 9 10 11 12 13 14
4 lines in 7 files
(20:31) gp >

Я в ПАРИ вижу развлечение типа вашей доты.
Но чуть меньше рибая :-)
Кстати ваши совета запоминаю и использую.

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


20/08/14
11765
Россия, Москва
gris в сообщении #1600514 писал(а):
ier=iferr(fileopen(namefile), ERR, next);
fin= fileopen(namefile);
Эти две команды ДВАЖДЫ открывают один и тот же файл, причём закрываете Вы его потом лишь один раз, fin, а ier не закрываете, что плохо.
Собственно вторая команда и не нужна, надо в первой ier заменить на fin и всё.

gris в сообщении #1600514 писал(а):
printf("%d ",ier);
Результат fileopen (а здесь будет именно он) вовсе не обязан быть последовательным натуральным числом, он может быть любым числом (а может и даже не числом вообще)! Соответственно смысла в конкретном значении никакого нет и быть не может. И то что у Вас оно (пока) работает — всего лишь артефакт, побочный эффект, случайность, это нигде не гарантировано (насколько мне известно). Может случиться что в любой другой версии PARI/GP или на другой версии ОС оно работать перестанет. Нельзя так делать.

Ну и в который уже раз напоминаю использовать тег code или syntax для многострочных программ! Хотя бы из-за отступов.

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


05/09/16
12058
gris в сообщении #1600514 писал(а):
Я в ПАРИ вижу развлечение типа вашей доты.

Ну вот у меня эти ваши тексты работать не будут, в связи с отсутствием windows, диска c:\ и т.п.
Но вообще, "в качестве развлечения", напишите программу которая
1. Принимает имя папки как ввод с клавиатуры.
2. Проверяет существует ли такая папка.
3. Проверяет есть ли у программмы права на создание файлов в этой папке, что за ОС исполняет pari/gp.
4. Ну и делает что там вам надо - создаёт список файлов, идёт по нему, результат выводит в файл или на экран и т.п.
При этом, программа должна работать у вас (cmd.exe) и у меня (bash).
Вот это будет хардкорное развлечение :mrgreen:

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


13/08/08
14495
Вот такая смешная проблема.
Окно консоли падает, если введённый текст программки достаточно большой. Причём включая и комментарии. У меня 32-битная версия и достаточно большой — это увы не такой уж и большой.
Не нашёл соответствующих дефолтов :oops: .
Или это мои глюки?
Спасибо.

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


05/09/16
12058
gris в сообщении #1602172 писал(а):
Или это мои глюки?
Спасибо.

Без текста, на котором падает, понять чьи там глюки, будет затруднительно.
У меня от текста не падало пока, но
- тексты короткие
- без комменатриев (и вообще без символов выходящих за пределы ascii).
- ОС - линукс (виртуальный, но полноценный)

Попробуйте, для начала, убрать комментарии. И затем постепенно добавлять их обратно.

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


13/08/08
14495
wrest, вот ровно это я и делаю. Тексты вначале короткие, потом начинаю добавлять что-то и внезапно эта штука не читается. В принципе это не смертельно. С помощью функций и удаления пробелов :-) засовываю на выполнение. Конечно GP не предназначена для излишеств, просто хотелось бы знать. Кстати, default(parisizemax,10^8) не помогает.

Ну пример
{p=[
456587,7898,545,5654,46125564,
456587,7898,545,5654,46125564,
3444655];a=0}

Отрабатывает отлично. А вот если середину начать размножать, то рано или поздно окошко консоли закроется, причём прочитав несколько символов текста.
Ну это для демонстрации, а так я уже привык к синтаксису и нелепые ошибки у себя сразу нахожу.

Ещё никак не могу найти файл с историей. По команде default: histfile = "gp_history.txt"
но его нигде нет :cry:

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


20/08/14
11765
Россия, Москва
Попробуйте сократить размер текста за счёт укорочения массивов (не количеством элементов, а длиной чисел - например хранить в массивах лишь смещение от базы, или перейти на 16-ричную систему записи).
Другой способ - откажитесь от больших константных массивов и либо вычисляйте их полностью с нуля, либо из нескольких намного более коротких. Если я правильно понимаю о каких программах идёт речь, то на вычисление массивов уйдёт пара секунд, а программы работают часами.

-- 23.07.2023, 15:59 --

gris в сообщении #1602193 писал(а):
Ещё никак не могу найти файл с историей. По команде default: histfile = "gp_history.txt"
но его нигде нет :cry:
Ищите лучше, тут полтемы выше забито вопросами "где тот или иной файл". Или укажите сразу с полным путём, причём в папку с разрешённой записью.

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


13/08/08
14495
Dmitriy40, больших массивов у меня не водится или я их храню в файлах. Иногда хочется объединить две программы всего-то по 30 строк. А оно просто не читается. Я подумал, что может быть есть команда увеличения какого-то буфера.
В других местах с 64 битами всё работает. Надо комп менять. Заодно и квартиру.
Не в тему убрал

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


20/08/14
11765
Россия, Москва
gris в сообщении #1602200 писал(а):
Иногда хочется объединить две программы всего-то по 30 строк. А оно просто не читается.
60 строк это вовсе не большой объём. Например у меня есть программы с 60000 строк и прекрасно работают, и с gp32.exe тоже. Дело в чём-то другом. Приводите их здесь, что отдельно работают, а вместе не читаются, и как именно их читаете, посмотрим.

gris в сообщении #1602200 писал(а):
Надо комп менять. Заодно и квартиру.
Достаточно поставить виртуалку с x64 виндой (конечно если проц поддерживает x64, но без этого давненько уже нет, впрочем некоторые виртуалки могут и симулировать неподдерживаемые фичи проца). И ничего не менять.

gris в сообщении #1602200 писал(а):
Кстати, насчёт проверки симметричных паттернов на допустимость. Есть ли паттерн симметричный и пусть простой длины, большей 2, у которого проверка впервые срабатывает на простом, большей длины.
Простите, но не понимаю. Простой длины в смысле isprime(#pat)==1? Таких полно, и 3 и 5 и 7 и 11 и 13 и 17.
Что значит "на простом, большей длины"? Большей чего? Известные минимальные решения длиной 7,9,11,13,15,17,12,14,16,18 почему не подходят?
И почему вопрос в теме о PARI, а не о кортежах?

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


05/09/16
12058
Dmitriy40 в сообщении #1602202 писал(а):
60 строк это вовсе не большой объём. Например у меня есть программы с 60000 строк и прекрасно работают, и с gp32.exe тоже.

Я так понял, речь идёт именно о буфере обмена при копипасте в консоль, а не о длине gp скрипта в принципе.
Вы же эти 60000 строк не копипастите из блокнота?

-- 23.07.2023, 21:23 --

Dmitriy40 в сообщении #1602202 писал(а):
Достаточно поставить виртуалку с x64 виндой

А лучше -- виртуалку с линуксом ;) Например, какую-неть убунту с командной строкой, без gui.

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


13/08/08
14495
Да, дело в буфере для копипасты в консоль, ибо через \r всё работает.
Заодно обнаружил, что <CTRL-C> убивает задумавшуюся компутацию, но не gp-сессию, как $\times$ :!:

 Профиль  
                  
 
 Re:
Сообщение15.08.2023, 18:01 


25/07/23
74
Занимаюсь алгоритмами, в которых главную роль играют матрицы множеств, причем разные столбцы могут представлять разные универсумы. В основном, операции и проверки выполняются со строками матриц.
Пусть даны строки множеств $A=[A_1 \quad A_2  \quad \dots  \quad  A_n]$ и $B=[B_1 \quad B_2  \quad \dots  \quad  B_n]$. Тогда
Проверка включения одной строки в другую:
$A \subseteq B$, если и только если $A_i \subseteq B_i$ для всех $i = 1, 2,\ldots, n$;
Пересечение строк:
$A \cap B = [A_1 \cap B_1 \quad A_2 \cap B_2 \quad \dots  \quad  A_n \cap B_n]$.
Проверка пустой строки:
Если при вычислении $A \cap B$ окажется, что $A_i \cap B_i = \varnothing$ хотя бы для одного $i$, то $A \cap B= \varnothing$.
Объединения строк:
$A \cup B = [A_1 \cup B_1 \quad A_2 \cup B_2 \quad \dots  \quad  A_n \cup B_n]$.
Разность строк:
$A \setminus B = [A_1 \setminus B_1 \quad A_2 \setminus B_2 \quad \dots  \quad  A_n \setminus B_n]$.
В языке PARI/GP можно выражать и матрицы, и множества, но я не видел конструкции, в которой компонентами матриц были бы множества.
Вопрос: Как реализовать предложенные алгоритмы на языке PARI/GP или, может быть, для этих алгоритмов лучше выбрать другой язык программирования?

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


20/08/14
11765
Россия, Москва
Вообще-то никто не запрещает засунуть хоть в вектор хоть в матрицу любой представимый объект, например:
Код:
? m=matrix(3,4,a,b,Set(vector(a+b,i,a*(b+i))))
%1 =
[        [2, 3]           [3, 4, 5]             [4, 5, 6, 7]              [5, 6, 7, 8, 9]]

[     [4, 6, 8]      [6, 8, 10, 12]      [8, 10, 12, 14, 16]     [10, 12, 14, 16, 18, 20]]

[[6, 9, 12, 15] [9, 12, 15, 18, 21] [12, 15, 18, 21, 24, 27] [15, 18, 21, 24, 27, 30, 33]]

Но вот операций чтобы влезали внутрь элементов вектора или матрицы вроде бы нет, их придётся организовывать самому в виде циклов обхода вектора/матрицы (конечно удобнее убрать в функции). Насколько при этом PARI будет удобнее или неудобнее других языков так сразу сказать трудно, так и так делать циклы обхода внешней структуры. Но один минус виден сразу: нет перегрузки операций и нельзя будет записать $A+B$ даже если определите функцию суммирования своих объектов, только в виде $F(A,B)$ и не иначе. Так себе минус, скорее минусик, всё равно большинство операций не стандартны и нет готовых операций для перегрузки (правда если напишите свои, то и их перегрузить не сможете, нет самого механизма перегрузки).
Существеннее минус что нельзя создавать "типизированные" функции (с одним именем но разными типами аргументов и срабатывает та функция под которую походят аргументы в конкретном вызове). Это конечно решается проверкой аргументов в самой функции и либо приведением их, либо кучей if-ов для разных вариантов аргументов, но это не столь удобно.
В общем хорошо развитый язык с произвольными классами (или ООП) думаю был бы удобнее.

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


25/07/23
74
Dmitriy40 в сообщении #1605377 писал(а):
...Существеннее минус что нельзя создавать "типизированные" функции (с одним именем но разными типами аргументов и срабатывает та функция под которую походят аргументы в конкретном вызове). Это конечно решается проверкой аргументов в самой функции и либо приведением их, либо кучей if-ов для разных вариантов аргументов, но это не столь удобно.
В общем хорошо развитый язык с произвольными классами (или ООП) думаю был бы удобнее.

Спасибо!

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


13/08/08
14495
Есть возрастающий вектор, например
[300, 600, 1200, 1800, 2100] с суммой элементов 6000. Каждый элемент это вклад участника в общую сумму. Разделив вектор на сумму, получим доли участников. В данном случае можно записать удобнее:
[1, 2, 4, 6, 7] предполагая /20.
То есть имеем сумму обыкновенных дробей с единичной суммой и минимальным знаменателем.
В некотором эксперименте получили вектор
[302, 597, 1205, 1794, 2102]
Считая его приближением хорошего теоретического вектора, можно ли получить оный средствами PARI/GP без ухищрений почти автоматически? Вот пример.
[27782732256, 61105397046, 102828409213, 158375462452, 241618819957, 408288179076]
Что делать? Не получается :oops:

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 809 ]  На страницу Пред.  1 ... 45, 46, 47, 48, 49, 50, 51 ... 54  След.

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



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

Сейчас этот форум просматривают: Dmitriy40


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

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