2014 dxdy logo

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

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




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

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


13/08/08
14452
А вот как она считает. Два запуска подряд.
(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
11177
Россия, Москва
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
11536
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
14452
Вот такая смешная проблема.
Окно консоли падает, если введённый текст программки достаточно большой. Причём включая и комментарии. У меня 32-битная версия и достаточно большой — это увы не такой уж и большой.
Не нашёл соответствующих дефолтов :oops: .
Или это мои глюки?
Спасибо.

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


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

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

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

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


13/08/08
14452
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
11177
Россия, Москва
Попробуйте сократить размер текста за счёт укорочения массивов (не количеством элементов, а длиной чисел - например хранить в массивах лишь смещение от базы, или перейти на 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
14452
Dmitriy40, больших массивов у меня не водится или я их храню в файлах. Иногда хочется объединить две программы всего-то по 30 строк. А оно просто не читается. Я подумал, что может быть есть команда увеличения какого-то буфера.
В других местах с 64 битами всё работает. Надо комп менять. Заодно и квартиру.
Не в тему убрал

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


20/08/14
11177
Россия, Москва
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
11536
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
14452
Да, дело в буфере для копипасты в консоль, ибо через \r всё работает.
Заодно обнаружил, что <CTRL-C> убивает задумавшуюся компутацию, но не gp-сессию, как $\times$ :!:

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


25/07/23
12
Занимаюсь алгоритмами, в которых главную роль играют матрицы множеств, причем разные столбцы могут представлять разные универсумы. В основном, операции и проверки выполняются со строками матриц.
Пусть даны строки множеств $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
11177
Россия, Москва
Вообще-то никто не запрещает засунуть хоть в вектор хоть в матрицу любой представимый объект, например:
Код:
? 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
12
Dmitriy40 в сообщении #1605377 писал(а):
...Существеннее минус что нельзя создавать "типизированные" функции (с одним именем но разными типами аргументов и срабатывает та функция под которую походят аргументы в конкретном вызове). Это конечно решается проверкой аргументов в самой функции и либо приведением их, либо кучей if-ов для разных вариантов аргументов, но это не столь удобно.
В общем хорошо развитый язык с произвольными классами (или ООП) думаю был бы удобнее.

Спасибо!

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


13/08/08
14452
Есть возрастающий вектор, например
[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:

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

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



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

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


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

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