2014 dxdy logo

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

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




Начать новую тему Ответить на тему На страницу Пред.  1 ... 32, 33, 34, 35, 36, 37, 38 ... 54  След.

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


05/09/16
12058
gris в сообщении #1570971 писал(а):
Сделал в PARI кусок для LaTeX:

Там у них что-то для картинок имеется
Цитата:
Functions for PostScript or SVG output
in the same way that printtex allows you to have a TeX output corresponding to printed results, the functions plotexport, plothexport and plothrawexport convert a plot to a character string in either PostScript or Scalable Vector Graphics format. This string can then be written to a file in the customary way, using write. These export routines are available even if no Graphic Library is.

Но я не понимаю написанного...

В принципе, если вас попиксельный put в TeX устраивает (пикселей не миллионы), то почему бы и не.

Я бы делал универсально: формируете картинку в двумерный массив. Пишете функцию которая "печатает" этот массив. Потом как разберётесь, перепишете функцию чтобы она делала например не TeX, а SVG или BMP и т.п.

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


13/08/08
14495
wrest, а вроде бы что-то есть, связанное с графиками функций?

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


05/09/16
12058
gris
В общем я там поковырялся.
Вот такой код
? X=List([]);Y=List([]);n=1000;for(i=1,n,for(j=1,n,if(issquare(i*j),listput(X,i);listput(Y,j))))
делаем два списка с координатами. списки а не массивы потому что не знаем сколько понадобится
далее "печатаем" их в текстоую строку в формате "svg" конвертируя по ходу списки в векторы
? s=plothrawexport("svg",Vec(X),Vec(Y));
ну и записываем в файл
? write("graph.svg",s)
В файле картинка, её открывает браузер. Но хостинги картинок её не хотят. Конвертируем .svg в .png (я использовал https://svgtopng.com ) и грузим в хостинг:
Изображение
Получается криво конечно, масштаб по сторонам неравный, размером не управляем (хотя может и можем).

-- 22.11.2022, 18:06 --

gris в сообщении #1570993 писал(а):
а вроде бы что-то есть, связанное с графиками функций?

Да, графики рисует. Но вы спрашивали про пиксели :)
Для графиков я предпочитаю геогебру...
Правда как-то раз тут на форуме был вопрос что не так с с вычислением преобразования Фурье (что-то типа почему обратное преобразование не восстанавливает как надо), ну и понадобилось визуализировать, и я печатал графики через pari/gp

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


13/08/08
14495
wrest, спасибо. Картинка красивая и способ её получения увлекательный. Про графики я имел в виду, что есть пиксельный прямоугольный массив и можно туда посылать поток пар координат для окрашивания пикселей в хотя бы в чёрный цвет. Можно окрашивать и квадратики три на три для одной пары чисел. И картинка храниться в BMP. Ну это, конечно, ни к чему.

(Оффтоп)

Я пустил flash и думал, что за десять минут всё сделаю. А вдруг с недоумением туплюсь на скрипт
for (k=1; k < 132; k++){
for (i = 1; i < 132; i++) {
if (k*i== а где у вас тут issquare?) {нарисовать кружочек}
}}

А главное — монитор махонький и комп слабенький. Незаметно подошла эта самая :-(

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


05/09/16
12058
gris в сообщении #1571003 писал(а):
Про графики я имел в виду, что есть пиксельный прямоугольный массив и можно туда посылать поток пар координат для окрашивания пикселей в хотя бы в чёрный цвет. Можно окрашивать и квадратики три на три для одной пары чисел. И картинка храниться в BMP. Ну это, конечно, ни к чему.

Для этого python как я выше писал, хорошо подойдёт.

(Оффтоп)

Но потребуется освоение. pari/gp как видите работает с текстовыми форматами. типа svg и postscript. Но дальше с ними плохо работают визуализаторы картинок (браузеры и т.п.). Для python есть билиотеки, которые предоставляют интерфейс к пиксельным массивам любых форматов (.jpg, .bmp, и даже видео). я на питоне с помощью итернета делал скрипт, который берёт последовательность кадров из видеоролика и хитро усредняет попиксельно -- для получения одного кадра "длинной выдержки" с эффектом следов например от фар автомобилей из ночного ролика).

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


13/08/08
14495
"Although plotting is not even a side purpose of PARI,
a number of plotting functions are provided."


Почитал и слепил. Вдруг кому пригодится.
plotinit(0, 640, 640);
plotcolor(0, 0);plotrbox(0,640,640);plotcolor(0, 1);
for(n=1,300, for (m=1,300,
if(issquare(n*m),plotmove(0,2*n,2*m); plotrbox(0,2,2,1););
));
plotdraw(0);


Изображение

Тут ещё читать и читать. Amirite? :-)
Вопрос: число в массив цифр могу перевести digits(n).
можно ли одной командой узнать, есть ли в массиве элемент "2" например. И перемножить элементы массива.
Dmitriy40, спасибо

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


20/08/14
11771
Россия, Москва
gris в сообщении #1571252 писал(а):
можно ли одной командой узнать, есть ли в массиве элемент "2" например.
Я делаю так:
Код:
? v=[1,2,3,4,5,9,1,4,6]; #select(x->(x==2),v,1)>0
1
? v=[1,2,3,4,5,9,1,4,6]; #select(x->(x==2),v,1)
1
? v=[1,2,3,4,5,9,1,4,6]; select(x->(x==2),v,1)
Vecsmall([2])
? v=[1,2,3,4,5,9,1,4,6]; #select(x->(x==1),v,1)>0
1
? v=[1,2,3,4,5,9,1,4,6]; #select(x->(x==1),v,1)
2
? v=[1,2,3,4,5,9,1,4,6]; select(x->(x==1),v,1)
Vecsmall([1, 7])
? v=[1,2,3,4,5,9,1,4,6]; #select(x->(x==11),v,1)>0
0
Select выдаёт или элементы по условию (если третий параметр 0 или отсутствует), или их индексы в массиве (если 1).

gris в сообщении #1571252 писал(а):
И перемножить элементы массива.
Код:
? v=[1,2,3,4,5,6]; vecprod(v)
720
?


-- 23.11.2022, 23:16 --

Ещё есть vecsearch(), но она требует сортированного вектора.

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


05/09/16
12058
gris в сообщении #1571252 писал(а):
Почитал и слепил. Вдруг кому пригодится.

У меня например не работает, в виду полного отсутствия графических средств вывода на экран в окружении pari/gp (чисто текстовая строка) :mrgreen:

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


13/08/08
14495
wrest, а там вывода на экран не предусмотрено. У меня после отработки PARI автоматом запускается PAINT с картинкой. Можно сохранить в доступном формате, например, в gif. То есть никакой анимации, конечно. Но это и не нужно. Надо поизучать :-)

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


05/09/16
12058
gris в сообщении #1571291 писал(а):
а там вывода на экран не предусмотрено. У меня после отработки PARI автоматом запускается PAINT с картинкой.

Да, так оно работает в pari/gp для windows. Но у меня другое :) У меня в windows есть среда linux (windows subsystem for linux) с неработающей графической подсистемой. Я это к тому, что
wrest в сообщении #1570932 писал(а):
Это может существенно зависеть от окружения (операционная система, доступные библиотеки).

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


13/08/08
14495
Вот товарищ где-то прочитал, что есть картины из $\pi$ и очень красивые. Я попробовал.
{plotinit(0, 640, 640);plotcolor(0, 0);plotrbox(0,640,640);
default(realprecision, 20000);
pp=lift( Mod( digits( floor(Pi*10^10000)),6) );
for(n=0,99,for(m=1,100, k=100*n+m;
plotcolor(0, pp[k]);
plotmove(0, 6*m-5,6*n+1); plotrbox(0,6,6,1);
));
plotdraw(0);}

Сама картина пока не очень. Слишком пёстрая.
Интересно, значение $\pi$ каждый раз заново вычисляется или хранится?
Как проверить, что число полный куб?

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


05/09/16
12058
gris в сообщении #1571353 писал(а):
Интересно, значение $\pi$ каждый раз заново вычисляется или хранится?

Вычисляется один раз, по формуле Рамануджана, до текущей точности. Но если вы в процессе повышаете точность, то вычисляется под точность.

-- 24.11.2022, 15:49 --

gris в сообщении #1571353 писал(а):
Как проверить, что число полный куб?


Цитата:
ispower(x,{k},{&n}): if k > 0 is given, return true (1) if x is a k-th power, false (0) if not. If k is omitted, return
the maximal k >= 2 such that x = n^k is a perfect power, or 0 if no such k exist. If n is present, and the function
returns a nonzero result, set n to the k-th root of x.

Соответственно
? ispower(8,3)
%1 = 1
? ispower(9,3)
%2 = 0
?

Если хочется сразу и кубический корень извлечь, то например так:
? n=12345;ispower(8,3,&n);print(n);
2
? n=12345;ispower(9,3,&n);print(n);
12345
?

То есть если куб, то третий аргумент функции принимает значение основания куба, если не куб - то третий аргумент не меняется.

P.S. Это кстати редкий случай в PARI/GP когда функция в качестве аргумента принимает ссылку на переменную и меняет эту переменную по ссылке.

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


07/01/16
1612
Аязьма
Коллеги, прошу прощения за довольно глупый вопрос, я правильно понимаю, что если не хочу, чтобы объявленные внутри функции переменные вылазили за ее скоуп, должен обязательно их объявить внутри my()? Нарвался сегодня на ээ эффект, чуть с ума не сошел :P когда значение переменной x, объявленной внутри функции f1() прокралось в функцию f2(), где так же объявлена одноименная переменная, и которая вызывает f1()
И, если нетрудно, подскажите, где об этом в паришном хэлпе почитать? За разумное время я там нашел только намеки, что все эти my, inline, local - неспроста (здесь и тут)

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


05/09/16
12058
waxtep в сообщении #1571685 писал(а):
И, если нетрудно, подскажите, где об этом в паришном хэлпе почитать?

Стр 36-38 в руководстве https://pari.math.u-bordeaux.fr/pub/par ... /users.pdf

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


07/01/16
1612
Аязьма
wrest, супер, спасибо! В общем, My(), oh, my(), программируй, не зевай! :-)

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

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



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

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


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

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