fixfix
2014 dxdy logo

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

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




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

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


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

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

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


11/06/12
10390
стихия.вздох.мюсли
Так почему же уважаемый Dmitry40, человек, очевидно, не обделённый интеллектом, должен просить помощи у сообщества, столкнувшись с примитивной проблемой?

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


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

(Оффтоп)

В общем документация конечно "не фонтан" (трудно найти непонятно что), но в данном случае скорее "сам дурак".

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


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

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


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

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


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

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


12/10/16
658
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
12316
Soul Friend
Скажите тогда чего вы хотите (на каком-то конкретном примере).

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

(lines)

(output)

(prettyprinter)


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

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

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


12/10/16
658
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
1154
ещё 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
1154
Два вопроса про параллельные вычисления.

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
5710
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
1154
maxal
return() ведёт себя так же, как break(), а quit() - да, прерывает работу, но почему-то не сразу, а через 1.5-2 секунды, за которые остальные ядра успевают сделать нежелательные циклы. Может это так вин-версия себя ведёт, а линукс-версия более корректна? В Линуксе ещё не проверял.

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


05/09/16
12316
Вопрос вот какой.
Выяснил я тут намедни, что в 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
5710
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)} /* возвращаем результат */

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

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



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

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


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

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