2014 dxdy logo

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

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




Начать новую тему Ответить на тему На страницу Пред.  1 ... 17, 18, 19, 20, 21, 22  След.

А вам пакет PARI/GP интересен?
Да 85%  85%  [ 46 ]
Нет 4%  4%  [ 2 ]
Не уверен(а) 11%  11%  [ 6 ]
Всего голосов : 54
 
 Re: интерактивный курс: введение в программирование на PARI/GP
Сообщение12.08.2018, 00:29 


05/09/16
7077
Aritaborian в сообщении #1331852 писал(а):
Боюсь, что-то с системой не так (в плане документации).

Не бойтесь, все там описано, и component тоже.

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


11/06/12
9025
pesheni.alipoweka.warefu
Так почему же уважаемый Dmitry40, человек, очевидно, не обделённый интеллектом, должен просить помощи у сообщества, столкнувшись с примитивной проблемой?

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


20/08/14
6072
Россия, Москва
Aritaborian

(Оффтоп)

Ум не всегда подразумевает талант к поиску инфы на плохо знакомом языке и не всегда понятными терминами, я многие очевидные вещи долго не могу найти в том же гугле (вот не получается нормально запрос сформулировать, бывает через пару месяцев не могу повторно найти какую-нить страницу в гугле, не помню какими словами нашёл тогда, а в истории браузера утонешь). Теперь-то понимаю что поиском по INTMOD и перепробованием всех функций рядом с его упоминанием проблема бы решилась. Но я пытался найти понятную функцию конвертации типов, а не какой-то непонятный лифт. Ну а про component (maxal, спасибо, запомним) и подумать не мог, слишком привык к процедурному типу мышления (даже массивы предпочитаю обходить циклами for, а не сделать условную выборку [f(x)|x<-vector,x>0]). Я вон команды AVX2 помню и уж точно понимаю лучше функций PARI ...
В общем документация конечно "не фонтан" (трудно найти непонятно что), но в данном случае скорее "сам дурак".

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


11/01/06
5430
Функция lift(), кстати, очень логично называется, так как в точности соответствует понятию поднятия элемента из фактор-кольца в базовое кольцо.

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


12/10/16
463
Almaty, Kazakhstan
Здравствуйте.
Как вывести длинную матрицу так, чтобы каждая строка была отдельно в квадратных скобках? Pari_GP так выводит только несколько строк, а дальше пишет [+++].

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


05/09/16
7077
Soul Friend
Это какая-то настройка в defaults, но кажется print() печатает полностью.

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


12/10/16
463
Almaty, Kazakhstan
print() всё смешивает в кучу и разделяет строки точкой с запятой, хотелось бы чтобы выглядела как матрица, упорядоченно:
[1 5 21 85 341]

[0 0 0 0 0]

[3 13 53 213 853]
и.т.д.
А в настройках не нашёл регулировки.

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


05/09/16
7077
Soul Friend
Скажите тогда чего вы хотите (на каком-то конкретном примере).

Настоойки (defaults):

(lines)

lines
If set to a positive value, gp prints at most that many lines from each result, terminating the last line shown with [+++] if further material has been suppressed. The various print commands (see Section se:gp_program) are unaffected, so you can always type print(%) or \a to view the full result. If the actual screen width cannot be determined, a "line" is assumed to be 80 characters long.

The default value is 0.

(output)

output
There are three possible values: 0 ( = raw), 1 ( = prettymatrix), or 3 ( = external prettyprint). This means that, independently of the default format for reals which we explained above, you can print results in three ways:

* raw format, i.e. a format which is equivalent to what you input, including explicit multiplication signs, and everything typed on a line instead of two dimensional boxes. This can have several advantages, for instance it allows you to pick the result with a mouse or an editor, and to paste it somewhere else.

* prettymatrix format: this is identical to raw format, except that matrices are printed as boxes instead of horizontally. This is prettier, but takes more space and cannot be used for input. Column vectors are still printed horizontally.

* external prettyprint: pipes all gp output in TeX format to an external prettyprinter, according to the value of prettyprinter. The default script (tex2mail) converts its input to readable two-dimensional text.

Independently of the setting of this default, an object can be printed in any of the three formats at any time using the commands \a and \m and \B respectively.

The default value is 1 (prettymatrix).

(prettyprinter)

prettyprinter
The name of an external prettyprinter to use when output is 3 (alternate prettyprinter). Note that the default tex2mail looks much nicer than the built-in "beautified format" (output = 2).

The default value is "tex2mail -TeX -noindent -ragged -by_par".

Настройки меняются командой default(key,value) например: default(output,1)
Печать всех настроек: \d

Например чтобы вывод печатался полностью, а не завершался через 25 строк подстрокой [+++], дайте команду default(lines,0)

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


12/10/16
463
Almaty, Kazakhstan
спасибо, помогли. Искал не в тех настойках.
хотел вывести эту матрицу:
Код:
M=matrix(100, 20)
for(m=1, 20, for(n=1, 100, if(Mod(2*n-1,3)==1, M[n,m]=((2^(2*m)*(2*n-1))-1)/3, if(Mod(2*n-1,3)==2, M[n,m]=((2^(2*m-1)*(2*n-1))-1)/3, M[n,m]=0))))

Числа-градины.

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


16/08/05
993
ещё printp напечатает матрицу в естественном виде
Код:
? ?printp
printp({str}*): outputs its string arguments (in prettymatrix format) ending with a newline.

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


16/08/05
993
Два вопроса про параллельные вычисления.

1) Как прервать цикл parfor на всех ядрах? Команда break() останавливает вычисления на каком-то текущем ядре, остальные продолжают выполняться. Пока вынужден вызывать внешнюю команду system("taskkill /f /im gp.exe /t"), убивая все процессы gp.exe в системе.

2) Как получить и напечатать номер текущего ядра при выполнении print внутри parfor (хотя бы вызовом какой-то внешней команды внутри system()?

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


11/01/06
5430
dmd, для 1) - return() или quit() не подходит?

-- Thu Oct 11, 2018 08:54:30 --

Soul Friend в сообщении #1344434 писал(а):
Код:
M=matrix(100, 20)
for(m=1, 20, for(n=1, 100, if(Mod(2*n-1,3)==1, M[n,m]=((2^(2*m)*(2*n-1))-1)/3, if(Mod(2*n-1,3)==2, M[n,m]=((2^(2*m-1)*(2*n-1))-1)/3, M[n,m]=0))))
Эту матрицу в оптимизированной форме можно задать так:
Код:
M=matrix(100, 20, m, n,  [0,((2^(2*m)*(2*n-1))-1)/3,((2^(2*m-1)*(2*n-1))-1)/3][(2*n-1)%3+1] )

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


16/08/05
993
maxal
return() ведёт себя так же, как break(), а quit() - да, прерывает работу, но почему-то не сразу, а через 1.5-2 секунды, за которые остальные ядра успевают сделать нежелательные циклы. Может это так вин-версия себя ведёт, а линукс-версия более корректна? В Линуксе ещё не проверял.

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


05/09/16
7077
Вопрос вот какой.
Выяснил я тут намедни, что в pari/gp есть средства по созданию словарей, помещении и извлечению оттуда значений.
Это удобно если есть функция, которая может долго рекурсивно вычисляться, много раз повторно. Тогда мы по мере вычислений, кладем вычисленные значения в словарь и повторно вычислять не надо - берем из словаря.

Мемоизация, короче.

Но есть проблемка.

Функция, которая делает вычисления - рекурсивная. Соответственно, словарь должен быть более глобальным чем внутренность функции. Я читал доки по pari/gp и не понял как сделать одну (рекурсивную) функцию внутри другой, чтобы
во внешней функции объявлялась переменная (словарь), затем вызывалась внутренняя (рекурсивная) функция, которая бы могла пользоваться словарём, а по окончании вычислений словарь бы удалялся.

Собсно, вот код. Функция p(n,k) -- рекурсивная функция которая вычисляет количество разбиений числа n на не более чем k частей. Переменная M - более глобальная (внешняя) по отношению к функции p().

Код:
p(n,k)={
my(res=0);
if(n==0 && k==0, /* проверяем первое условие*/
   return(1));  /* возвращаем результат если выполняется */
if(k<1, /* проверяем второе условие */
   return(0)); /* возвращаем результат если выполняется */
if(mapisdefined(M,[n,k],&res), /* проверяем вычислялось ли уже значение */
   return(res)); /* возвращаем результат если вычислялось */
if(k>=n, /* проверяем третье условие */
   res=numbpart(n); /* если выполняется то вычисляем нерекурсивным методом */
   mapput(M,[n,k],res); /* кладем результат в словарь */
   return(res)); /* возвращаем результат */
res=p(n,k-1)+p(n-k,k); /* никакие условия не сработали, вычисляем через рекурсию */
mapput(M,[n,k],res); /*кладем результат в словарь */
return(res)} /* возвращаем результат */

Вызывать надо так:
1. создаём глобальный пустой словарь
? M=Map();
2. запускаем вычисления
? n=p(100,30);print(n)
164955700

3. удаляем словарь
? kill(M)

Надо сделать чтобы все три пункта делались внутри какой-то (внешней по отношению к p()) функции. Как это можно и можно ли устроить?

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


11/01/06
5430
wrest в сообщении #1403201 писал(а):
Надо сделать чтобы все три пункта делались внутри какой-то (внешней по отношению к p()) функции. Как это можно и можно ли устроить?


Добавьте в свою функцию:
Код:
p(n,k)={
my(res=0,flg=0);
global(M);
if(type(M)!="t_LIST",M=Map();flg=1);
...
if(flg,listkill(M));
return(res)} /* возвращаем результат */

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 329 ]  На страницу Пред.  1 ... 17, 18, 19, 20, 21, 22  След.

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



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

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


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

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