maple
Только сегодня: скидка до 20% в подарок на первый заказ.
Какую работу нужно написать?
Другую работу
Помощник Анна
Методы решения математических задач в Maple Скалярное, векторное произведение векторов и угол между векторами.
| n | |
| Скалярное произведение двух векторов | ( a , b ) = ∑ a i b i |
| i = 1 |
вычисляется командой dotprod(a,b). Векторное произведение двух векторов [ a , b ] вычисляется командой crossprod(a,b). Угол между двумя векторами a и b вычисляется с помощью команды angle(a,b) .
| Норма вектора. | a = ( x 1 . x n ) , которая | |||
| Норму | (длину) | вектора | равна | |
| a = x 1 2 | + . + x n 2 | , можно | вычислить с помощью | команды |
norm(а,2) . Можно нормировать вектор а с помощью команды normalize(a), в результате выполнения которой будет получен вектор единичной длины a a . Нахождение базиса системы векторов. Ортогонализация системы векторов по процедуре Грамма-Шмидта. Если имеется система n векторов < a 1 , a 2 . a n >, то с помощью команды basis([a1,a2,…,an]) можно найти базис этой системы. При помощи команды GramSchmidt([a1,a2,…,an]) можно ортогонализовать систему линейно-независимых векторов < a 1 , a 2 . a n >. Задание 1. 1. Даны два вектора: a = (2,1,3,2) и b = (1,2, − 2,1) . Найти ( a , b ) и угол между a и b . Для решения этой задачи наберите: > with(linalg): > a :=([2,1,3,2]); b:=([1,2,-2,1]); a :=[2,1,3,2] b :=[1,2,-2,1] > dotprod(a,b); 0 > phi=angle(a,b);
Методы решения математических задач в Maple φ = π 2 2. Найти векторное произведение c = [ a , b ] , а затем скалярное произведение ( a , c ) , где a = (2, − 2,1) , b = (2,3,6) . > restart; with(linalg): > a:=([2,-2,1]); b:=([2,3,6]); a :=[2, − 2,1] b :=[2,3,6] > c:=crossprod(a,b); c :=[ − 15, − 10,10] > dotprod(a,c); 0 3. Найти норму вектора a = (2, − 2,1) . > restart; with(linalg): > a:=vector([1,2,3,4,5,6]): norm(a,2);
| 91 | |
| 4. Из системы векторов: | a 1 = (1,2,2, − 1) , a 2 = (1,1, − 5,3) , |
| a 3 = (3,2,8,7) , a 4 = (0,1,7, − 4) , | a 5 = (2,1,12, − 10) выделить базис и |
ортогонализовать его по процедуре Грамма-Шмидта: > restart; with(linalg): > a1:=vector([1,2,2,-1]): a2:=vector([1,1,-5,3]): a3:=vector([3,2,8,7]): a4:=vector([0,1,7,-4]): a5:=vector([2,1,12,-10]): > g:=basis([a1,a2,a3,a4,a5]); g := [ a1, a2, a3, a5 ]
| > GramSchmidt(g); | 81 | − 93 | 327 | 549 | |||||||||
| [[1,2,2, − 1], [2,3, − 3,2], | , | , | , | , | |||||||||
| 65 | 65 | ||||||||||||
| 65 | 65 | ||||||||||||
| 1633 | , | − 923 | , | − 71 | , | − 355 | |||||||
| 724 | 724 | 724 | |||||||||||
| 724 | |||||||||||||
§2. Действия с матрицами Определение матрицы. Для определения матрицы в Maple можно использовать команду matrix(n, m, [[a11,a12,…,a1n], [a21,a22,…,a2m],…,
Методы решения математических задач в Maple [an1,an2,…,anm]]), где n − число строк, m – число столбцов в матрице. Эти числа задавать необязательно, а достаточно перечислить элементы матрицы построчно в квадратных скобках через запятую. Например: > A:=matrix([[1,2,3],[-3,-2,-1]]);
| 1 | 2 | 3 |
| A : = | − 2 | |
| − 3 | − 1 | |
В Maple матрицы специального вида можно генерировать с помощью дополнительных команд. В частности диагональную матрицу можно получить командой diag . Например: > J:=diag(1,2,3);
| 1 | 0 | 0 |
| 2 | ||
| J : = 0 | 0 | |
| 0 | ||
| 0 | 3 |
Генерировать матрицу можно с помощью функции f ( i , j ) от переменных i , j – индексов матрицы: matrix(n, m, f), где где n — число строк, m – число столбцов. Например: > f:=(i, j)->x^i*y^j; f : = ( i , j ) → x i y j > A:=matrix(2,3,f);
| xy | xy 2 | xy 3 | |
| A : = | x 2 y 3 | ||
| x 2 y x 2 y 2 | |||
Число строк в матрице А можно определить с помощью команды rowdim(A) , а число столбцов – с помощью команды coldim(A) . Арифметические операции с матрицами. Сложение двух матриц одинаковой размерности осуществляется теми же командами, что и сложение векторов: evalm(A+B) или matadd(A,B). Произведение двух матриц может быть найдено с помощью двух команд: 1) evalm(A&*B); 2) multiply(A,B). В качестве второго аргумента в командах, вычисляющих произведение, можно указывать вектор, например: > A:=matrix([[1,0],[0,-1]]); > B:=matrix([[-5,1], [7,4]]);
Методы решения математических задач в Maple
| 1 | 0 | − 5 | 1 | |
| A : = | B : = | 7 | ||
| 0 | − 1 | 4 | ||
> v:=vector([2,4]); v : = [2,4] > multiply(A,v);
| > multiply(A,B); | [2, − 4] |
| − 5 | 1 |
| − 7 | − 4 |
| > matadd(A,B); | |
| − 4 | 1 |
| 7 | 3 |
Команда evalm позволяет также прибавлять к матрице число и умножать матрицу на число. Например: > С:=matrix([[1,1],[2,3]]): > evalm(2+3*С); 5 36 11 Определители, миноры и алгебраические дополнения. Ранг и след матрицы. Определитель матрицы А вычисляется командой det(A). Команда minor(A,i,j) возвращает матрицу, полученную из исходной матрицы А вычеркиванием i -ой строки и j -ого столбца. Минор M ij элемента a ij матрицы А можно вычислить командой det(minor(A,i,j)). Ранг матрицы А вычисляется командой rank(A). След матрицы А , равный сумме ее диагональных элементов, вычисляется командой trace(A). 7 > A:=matrix([[4,0,5],[0,1,-6],[3,0,4]]);
| 4 | 0 | 5 | |
| 1 | |||
| A : = 0 | − 6 | ||
| 0 | 4 | ||
| 3 | |||
> det(A); 1 > minor(А,3,2);
Методы решения математических задач в Maple
| 4 | 5 |
| 0 | − 6 |
> det(%); -24 > trace(A); 9 Обратная и транспонированная матрицы. Обратную матрицу А − 1 , такую что А − 1 А = АА − 1 = Е , где Е − единичная матрица, можно вычислить двумя способами: 1) evalm(1/A); 2) inverse(A). Транспонирование матрицы А – это изменение местами строк и столбцов. Полученная в результате этого матрица называется транспонированной и обозначается А’ . Транспонированную матрицу А’ можно вычислить командой transpose(A). Например, используя заданную в предыдущем пункте матрицу А , найдем ей обратную и транспонированную: > inverse(A);
| 4 | 0 | − 5 | |
| 1 | |||
| − 18 | 24 | ||
| − 3 | 0 | ||
| 4 | |||
| > multiply(A,%); | 1 | 0 | 0 |
| 1 | |||
| 0 | 0 | ||
| 0 | |||
| > transpose(A); | 0 | 1 | |
| 4 | 0 | 3 | |
| 1 | |||
| 0 | 0 | ||
| − 6 | |||
| 5 | 4 | ||
Выяснение типа матрицы. Выяснить положительную или отрицательную определенность
| матрицы можно | при помощи команды definite(A,param), где | |
| param может принимать значения: ‘positive_def’ | – | |
| положительно определена ( A >0), ‘positive_semidef’ | – | |
| неотрицательно | определенная ( A ≥ 0) , ‘negative_def’ – | |
Методы решения математических задач в Maple отрицательно определенная ( A <0), 'negative_semidef' − неположительно определенная ( A ≤ 0) . Результатом действия будет константа true – подтверждение, false – отрицание сделанного предположения. Например: >A:=matrix([[2,1],[1,3]]); 2 1 A : = 1 3 > definite(А,’positive_def’); true Проверить ортогональность матрицы А можно командой orthog(A). > В:=matrix([[1/2,1*sqrt(3)/2], [1*sqrt(3)/2,-1/2]]);
| 1 | 1 | 3 |
| 2 | 2 | |
| B : = | 1 | |
| 3 | − 1 | |
| 2 | 2 | |
> orthog(В); true Функции от матриц. Возведение матрицы А в степень n производится командой evalm(A^n). Вычисление матричной экспоненты e A возможно с помощью команды exponential(A). Например: > Т:=matrix([[5*a,2*b],[-2*b,5*a]]);
| 5 a | 2 b | |
| T : = | ||
| − 2 b | 5 a | |
> exponential(Т);
e (5 a ) cos(2 b ) − e (5 a ) sin(2 b ) > evalm(Т^2); 25 a 2 − 4 b 2 − 20 ab
e (5 a ) sin(2 b ) e (5 a ) cos(2 b ) 20 ab 25 a 2 − 4 b 2
Методы решения математических задач в Maple Задание 2.
| 1. Даны матрицы: A = 4 | 3 , | B = − 28 | 93 | , C = 7 | 3 . Найти: |
| 7 | 5 | 38 | − 126 | 2 | 1 |
( AB ) C , det A , det B , det C , det[( AB ) C ]. Наберите: > with(linalg):restart; > A:=matrix([[4,3],[7,5]]): > B:=matrix([[-28,93],[38,-126]]): > C:=matrix([[7,3],[2,1]]): > F:=evalm(A&*B&*C);
| 2 | 0 | ||
| F = | |||
| 0 | 3 | ||
| > Det(A)=det(A); Det(B)=det(B); Det(C)=det(C); | |||
| Det(F)=det(F); | Det( A )= − 1 | ||
| Det( B )= − 6 | |||
| Det( C )=1 | |||
| Det( F )=6 | |||
| 2 | 5 | 7 | |
| 2. Дана матрица A = 6 | 3 | 4 , | найти: det A , A − 1 , A’ , det( M 22 ). |
| − 2 | |||
| 5 | − 3 | ||
Наберите: > A:=matrix([[2,5,7],[6,3,4],[5,-2,-3]]);
| 2 | 5 | 7 | ||
| A : = | 3 | |||
| 6 | 4 | |||
| 5 | − 2 | |||
| > Det(A)=det(A); | − 3 | |||
| Det( A )= − 1 | ||||
| > transpose(A); | ||||
| 2 | 6 | 5 | ||
| 5 | 3 | |||
| − 2 | ||||
| 4 | ||||
| 7 | − 3 | |||
> inverse(A);
Методы решения математических задач в Maple
| 1 | − 1 | 1 | |||
| 41 | |||||
| − 38 | − 34 | ||||
| 27 | − 29 | ||||
| 24 | |||||
| > det(minor(A,2,2)); | − 41 | ||||
| 8 | − 4 | 5 | 5 | 9 | |
| 1 | − 3 | − 5 | 0 | ||
| 3. Найти ранг матрицы | A = | − 7 | |||
| − 5 | . | ||||
| 7 | 1 | 4 | 1 | ||
| 3 | − 1 | 3 | 2 | 5 | |
> A:=matrix([[8,-4,5,5,9], [1,-3,-5,0,-7], [7,-5,1,4,1], [3,-1,3,2,5]]): > r(A)=rank(A); r( A )=3
| 4. | 3 | − 1 | |||
| Вычислить e T , где T = | . | ||||
| 1 | 1 | ||||
| > exponential([[3,-1],[1,1]]); | |||||
| 2 e 2 | − e 2 | ||||
| 0 | |||||
| e 2 | |||||
| 5 | 1 | 4 | |||
| 5. | Дана матрица | 3 | Найти значение многочлена | ||
| A = 3 | 2 . | ||||
| 2 | |||||
| 6 | 10 | ||||
P ( A ) = A 3 − 18 A 2 + 64 A . > A:=matrix([[5,1,4],[3,3,2],[6,2,10]]): > P(A)=evalm(A^3-18*A^2+64*A);
| 64 | 0 | 0 | |
| 0 | 64 | ||
| P ( A ) = | 0 | ||
| 0 | 0 | ||
| 64 | |||
§3. Спектральный анализ матрицы Собственные числа и собственные векторы матрицы. Из курса линейной алгебры известно, что если А х = λ х , то вектор х называется собственным вектором матрицы А , а число λ –
Методы решения математических задач в Maple собственным числом, соответствующим данному собственному вектору. Совокупность всех собственных чисел матрицы называется спектром матрицы. Если в спектре матрицы одно и тоже собственное число встречается k раз, то говорят, что кратность этого собственного числа равна k . Для нахождения собственных чисел матрицы А используется команда eigenvalues(A). Для нахождения собственных векторов матрицы А используется команда eigenvectors(A). В результате выполнения этой команды будут получены собственные числа, их кратность и соответствующие собственные векторы. Чтобы понять, в каком виде получаются результаты выполнения команды eigenvectors, внимательно разберитесь со следующим
| 3 | − 1 | 1 | ||||||
| 5 | имеет 3 собственных вектора: | |||||||
| примером: матрица A = − 1 | − 1 | |||||||
| 1 | − 1 | |||||||
| 3 | ||||||||
| a 1 = ( − 1,0,1) , | отвечающий собственному числу | λ 1 = 2 | кратности 1, | |||||
| a 2 | = (1,1,1) , отвечающий | собственному числу | λ 2 = 3 | кратности 1, | ||||
| a 3 | = (1, − 2,1) , | отвечающий собственному числу | λ 3 = 6 | кратности 1. | ||||
Найдем их в Maple : > A:=matrix([[3,-1,1],[-1,5,-1],[1,-1,3]]): > eigenvectors(A); [2,1,], [3,1,], [6,1,] В строке вывода перечислены в квадратных скобках собственное число, его кратность и соответствующий собственный вектор в фигурных скобках , затем следующие наборы таких же данных. Характеристический и минимальный многочлены матрицы.
| Для | вычисления | характеристического | многочлена | |||
| P A ( λ ) = det( λ E − A ) | матрицы | A | используется | команда | ||
| charpoly(A,lambda). | ||||||
Минимальный многочлен (делитель) матрицы А можно найти с помощью команды minpoly(A,lambda). Канонические и специальные виды матрицы. Привести матрицу А к нормальной форме Жордана можно командой jordan(A). К треугольному виду матрицу А можно привести тремя способами:
Методы решения математических задач в Maple 1) команда gausselim(A) приводит матрицу А к треугольному виду методом Гаусса; 2) команда ffgausselim(A) приводит матрицу А к треугольному виду методом Гаусса без деления. Эта команда предпочтительней для работы с символьными матрицами, так как не производит нормировку элементов и исключает возможные ошибки, связанные с делением на нуль; 3) команда gaussjord(A) приводит матрицу А к треугольному виду методом Гаусса-Жордана. Характеристическую матрицу F ( A ) = λ E − A можно вычислить командой charmat(A,lambda). Задание 3.
| 3 | 2 − i | . Найти ее собственные векторы и | |
| 1. Дана матрица U = | + i | 7 | |
| 2 | |||
собственные числа. > U:=matrix([[3,2-I],[2+I,7]]): > eigenvectors(U);
| 2 | 1 | , [ 2,1, < [ − 2 + I ,1 ] >] | |||
| 8,1, | − | 5 | I ,1 > | ||
| 5 | |||||
| 3 | − i | 0 | |||
| 3 | . | Найти собственные векторы, | |||
| 2. Дана матрица A = i | 0 | ||||
| 0 | |||||
| 0 | 4 | ||||
собственные числа, характеристический многочлен и минимальный многочлен, Жорданову форму. > A:=matrix([[3,-I,0],[I,3,0],[0,0,4]]): > eigenvectors(A); [2, 1, <([1, − I , 0])>], [4, 2, <([0, 0, 1]), ([ − I , 1, 0])>] > P(lambda):=charpoly(A,lambda); P ( λ ) : = λ 3 − 10 λ 2 + 32 λ − 32 > d(lambda):=minpoly(A,lambda); d ( λ ) : = 8 − 6 λ + λ 2 > jordan(A);
Научный форум dxdy
интерактивный курс: введение в программирование на PARI/GP
интерактивный курс: введение в программирование на PARI/GP
20.05.2008, 11:19
Последний раз редактировалось maxal 21.05.2008, 11:38, всего редактировалось 3 раз(а).
Давно обещался расписать азы программирования на PARI/GP — пора выполнять обещания
Курс — это конечно громкое слово, у меня даже плана особого нет. Буду писать о том, что первое в голову приходит, но если у вас возникнут вопросы — задавайте, попробую ответить.
Начну, пожалуй, с небольшой рекламы. PARI/GP — это «калькулятор» (математический пакет), изначально ориентированный на теоретико-числовые расчеты, но неплохо справляющийся также с типовыми задачами линейной алгебры, полиномиальными вычислениями, и пр.
Плюсы: небольшой размер, быстрый код, бесплатный и с открытыми исходниками, может использоваться другими программами в качестве библиотеки или же пользователем из текстовой оболочки. Собственно, PARI — это ядро пакета (библиотека), а GP — это интерактивная оболочка. Этот вводный курс будет ориентирован на программирование в GP.
Ссылки на лекции:
Лекция 1, где мы будем знакомиться с оболочкой GP, вычислять и печатать простые числа. (идет в этом сообщении ниже)
Лекция 2, где мы познакомимся с векторами и матрицами и научимся писать небольшие программки.
Мини-лекция о файловом вводе/выводе.
продолжение следует.
Буду предполагать, что с установкой PARI/GP вы справитесь. Берется он на официальной страничке.
Под винду он поставляется в скомпилированном виде, пользователям других систем придется самим компилировать исходники (хотя во многих дистрибутивах линукса PARI/GP тоже присутствует). В общем скачайте и установите его. После этого можно приступать к первой лекции.

Лекция 1 , где мы будем знакомиться с оболочкой GP, вычислять и печатать простые числа.
Итак, запустив PARI/GP, вы увидите примерно такую картинку:
GP/PARI CALCULATOR Version 2.4.3 (development CHANGES-1.2161)
amd64 running linux (x86-64/GMP-4.2.2 kernel) 64-bit version
compiled: May 13 2008, gcc-4.3.1 20080501 (prerelease) (Debian 4.3.0-4)
(readline v5.2 enabled, extended help enabled)
Copyright (C) 2000-2008 The PARI Group
PARI/GP is free software, covered by the GNU General Public License, and
comes WITHOUT ANY WARRANTY WHATSOEVER.
Type ? for help, \q to quit.
Type ?12 for how to get moral (and possibly technical) support.
parisize = 8000000, primelimit = 500000
?
Версия и прочая информация в шапке сейчас не имеет никакого значения, так как пользоваться мы будет только базовыми возможностями (хотя имейте в виду, что пакет активно развивается и часто выходят новые версии).
На что сейчас имеет смысл обратить внимание:
для выхода из PARI/GP нужно набрать quit или просто \q и нажать enter ;
для получения справки по той или иной команде нужно набрать ? и имя этой команды (ну и нажать enter ) — например:
? ?quit
quit(): quit, return to the system with exit status ‘status’
Из этой справки по команде quit мы узнаем, что ей, оказывается, можно передавать аргумент, который будет возвращен PARI/GP в родительскую среду в качестве кода возврата . Впрочем, этот аргумент не обязательный и нам он в ближайшее время не понадобится.
Заметьте, что первый ? в коде выше — это промпт самой оболочки (у вас может использоваться другой символ — зависит от настроек), набирать нужно лишь ?quit .
Кстати, если вы просто наберете ? и нажмете enter , то PARI/GP покажет список разделов помощи, выбор конкретного раздела осуществляется командой ?число. Например, ?2 выдаст список функций из раздела 2: CONVERSIONS and similar elementary functions (попробуйте!)
Справка по PARI/GP доступна также на официальном сайте, в удобно отформатированном виде: http://pari.math.u-bordeaux.fr/dochtml/html/ Таким образом, познакомиться с возможностями PARI/GP можно даже его не запуская.
Если подробности указанные во внутренней справке вас не устраивают, можно попробовать вызвать расширенную справку по команде ?? — например, ??quit выдаст расширенную справку по команде quit и т.п.
parisize = 8000000, primelimit = 500000
говорит нам о том, что под свои нужды PARI/GP захапала 8000000 байтов памяти (примерно 8 мегабайт) и создала список всех простых чисел меньших 500000. Простые числа используются во многих встроенных процедурах и их готовый список ускоряет вычисления.
Если PARI/GP ругнется на нехватку памяти, то можно ей выделить больше памяти командой allocatemem :
? allocatemem(2^27)
*** allocatemem: Warning: new stack size = 134217728 (128.000 Mbytes).
а если PARI/GP ругнется на нехватку предвычисленных простых чисел, то увеличить длину списка простых можно командой default(primelimit,N) как в этом примере:
? primepi(10^6)
*** primepi: not enough precomputed primes, need primelimit ~ 1000000.
? default(primelimit,10^6)
%1 = 1000000
? primepi(10^6)
%2 = 78498
Здесь мы попытались вычислить функцию
— количество простых чисел меньших
, но количества предвычисленных простых нам не хватило для получения результата. После увеличения их количества, искомое значение было вычислено: 
Из последнего примера также видно, что результаты исполнения команд нумеруются как %1, %2 и т.д. и становятся доступны в таком виде для дальнейших вычислений:
? 2+2
%3 = 4
? %3*2
%4 = 8
Теперь давайте напечатаем числа от 1 до 10 — для этого познакомимся с конструкцией цикла for( индекс = A, B, тело_цикла ) , в которой индекс бежит от целого числа A до целого числа B с шагом 1:
? for( i = 1, 10, print(i) )
1
2
3
4
5
6
7
8
9
10
А теперь тоже самое в строчку и через запятую:
? for( i = 1, 10, print1(i,», «) )
1, 2, 3, 4, 5, 6, 7, 8, 9, 10,
Как видно из этих примеров, команда print1() отличается от print() тем, что у нее нет перевода строки в конце.
Напоследок познакомимся со специальным видом цикла — цикл по простым числам:
forprime( индекс = A, B, тело_цикла ) , в котором индекс бежит по всем простым числам в отрезке [A,B]:
? forprime( i = 1, 100, print1(i,», «) )
2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97,
Здесь мы напечатали все простые в пределах первой сотни.
На этом первую лекцию будем считать оконченной. Вопросы?
20.05.2008, 17:21
спасибо за знакомство с программой.
По лекции у меня вопросов нет, наверное, потому, что я эту программу не ставил пока.
Но у меня есть принципиальный вопрос — зачем она нужна? Поясню. Когда я начинал использовать системы компьютерной математики, начал с Maple, то это как, правило сводилось к проверке интегралов, поиску пределов — вообщем, к тем вещам, которыми балуются несерьезные студенты. Со временем задачи стали серьезнее, в отличие от исполнителя, и возникла необходимость делать «вкрапления» из собственного программного кода. Здесь я преимущество отдаю MatLab. Вывод: в Maple и MatLab все необходимые инструменты, лично для меня, «под рукой». Если опустить некоторые вопросы, связанные с этими СКМ, например, лицензию, требуемые ресурсы компа, порой и огрехи кода, то эти программы практически идеальны. + эти программы не заставляют пользователя дополнительно думать о таких вещах, как объем необходимой память (хотя я не говорю, что это плохо или хорошо).
Наверное, у этой программы широкие возможности по интеграции с другими приложениями и по написанию собственного кода, но применительно к каким задачам она особенно хороша?
20.05.2008, 19:44
maxal , спасибо. Я уж думал хорошей идеи не суждено быть реализованной.
По этой вводной части вопросов у меня нет.
reader_st
По поводу — зачем все это нужно. Во-первых, Maple далеко не идеальное средство при работе с большими числами. Например, попробуйте реализовать модульное возведение в большую степень в лоб. Во-вторых, вопрос похож на такой: зачем нам Linux, когда есть Windows. Мне кажется, что научный софт должен быть с открытым кодом, это стимулирует исследования и способствует развитию самого софта.
20.05.2008, 19:55
Как я уже сказал, PARI/GP ориентирована на теоретико-числовые вычисления: модулярная арифметика, числовые поля, полиномы, степенные ряды, комбинаторика, линейная алгебра (в том числе над кольцом целых чисел), решетки, эллиптические кривые и т.д.
Интегралы он не берет (если только не от полиномов или степенных рядов), пределы не вычисляет — для таких задач нужно использовать другие пакеты.
В отличие от всяких монстров типа маплов с матлабами, PARI/GP — очень маленький пакет (размер дистрибутива меньше более чем в 100 раз), ну и свободный к тому же.
Насчет не думать об объеме памяти — это плохо. Сколько раз у меня получалось, например, так, что мапл уходил в глубокие раздумья и начинал дуром есть память, вызывая активный своппинг, а оболочка переставала реагировать на действия пользователя (в частности, не было возможности прервать все это безобразие). В PARI/GP над этим полный контроль — если памяти не хватает (о чем PARI/GP сообщит, а также скажет сколько ему нужно), ее всегда можно выделить в разумных пределах (исходя из объема физической памяти) — если же разумных пределов также не хватает, то нужно задуматься о перенесении вычислений на более мощный компьютер.
20.05.2008, 20:34
maxal писал(а):
. а оболочка переставала реагировать на действия пользователя (в частности, не было возможности прервать все это безобразие).
Просто люди из Waterloo похоже забыли про многопоточность или приоритеты процессов некорректно расставили, потому что эта беда часто происходит даже если памяти еще хватает. Впрочем, это уже offtop.
А есть ли PARI/GP online-калькулятор?
20.05.2008, 20:45
Последний раз редактировалось maxal 24.05.2022, 17:02, всего редактировалось 1 раз.
