Бесплатное ПО для математиков
SMáth Stúdio
![]()
![]()
SMáth Stúdio — бесплатная программа для вычисления математических выражений и построения графиков функций. Работа с интерфейсом программы напоминает работу с обычным листом бумаги, так как все математические выражения в ней записываются не в строчку текстом а в графическом, удобном для человека, виде.
Первая публичная бета-версия программы была создана в 2005 году для карманных компьютеров на языке C# под платформу Microsoft .NET Compact Framework 1.0. На текущий момент SMath Studio имеет версии для нескольких платформ: КПК, коммуникаторов, смартфонов, персональных компьютеров на базе операционных систем Windows и Linux и логически разделена на две программы: Handheld (карманная) и Desktop (настольная), которые соответствуют типу поддерживаемых платформ.
Возможности программы
-
Мультиязычный интерфейс (переведена на 22 языка: английский, немецкий, датский, голландский, испанский, французский, португальский, хорватский, сербский, греческий, турецкий, китайский упрощённый, китайский традиционный, чешский, венгерский, итальянский, польский, русский, болгарский, литовский, украинский);
-
Работа на устройствах с любым разрешением и ориентацией экрана (начиная с 240х240 пикселей и выше);
-
Развитая поддержка единиц измерения (более двухсот встроенных, возможность создавать пользовательские);
-
Отображение двумерных (2D) и трёхмерных (3D) графиков функций;
-
Возможность работы с файлами Mathcad (открытие и сохранение);
-
Поддерживается работа как с числами, так и с символами;
-
Работа со стандартными функциями программирования (таких как if, for, while);
-
Поддерживается работа с параметрами и функциями (как встроенными, так и пользовательскими);
-
Всплывающее меню вставки встроеных функций и операторов при редактировании (как в визуальных средах программирования);
-
Поддержка следующих типов данных: системы, матрицы, векторы, комплексные числа, дроби и работа с бесконечностью;
-
Поддержка следующих операций и функций: сложение, вычитание, умножение (скалярное и векторное), деление, нахождение факториала, возведение в степень, работа с корнями, определение модуля, тригонометрические функции, обратные тригонометрические функции, гиперболические функции, обратные гиперболические функции, логарифмы, определение сигнатуры, вычисление аргумента числа, определение детерминанта (определителя) матрицы, транспонирование матриц и векторов, вычисление миноров матрицы, вычисление алгебраических дополнений матрицы, вычисление следа матрицы, определение ранга, перевод комплексных чисел из алгебраического в тригонометрический вид, численное дифференцирование и символьное дифференцирование, интегрирование, поиск вещественных корней уравнений и другие.
![]()
Коробка SMath Studio
Версии
-
SMath Studio 0.25 4 ноября 2005 — бета
-
SMath Studio 0.50.4 26 декабря 2006 — стабильная
-
SMath Studio 0.75 10 января 2009 — стабильная
-
SMath Studio 0.78 1 марта 2009 — стабильная
-
SMath Studio 0.80 1 мая 2009 — стабильная
-
SMath Studio 0.82 9 июля 2009 — стабильная
-
SMath Studio 0.85 1 сентября 2009 — стабильная
-
SMath Studio 0.87 10 февраля 2010 — стабильная
-
SMath Studio 0.88 12 апреля 2010 — стабильная
-
SMath Studio 0.89 23 июля 2010 — стабильная
CPLEX
CPLEX — пакет программного обеспечения (решатель), предназначенный для решения задач линейного и квадратичного программирования, в том числе целочисленного программирования.
CPLEX может быть использован из ряда коммерческих систем моделирования (AMPL, GAMS, AIMSS и OPL Development Studio), а также некоторых свободных (OpenOpt, PuLP).
Изначально CPLEX был разработан Робертом Биксби (Robert E. Bixby) и продавался через CPLEX Optimization Inc., которая была куплена ILOG в 1997; затем в 2009 ILOG был куплен IBM.
Fityk
Fityk — программа аппроксимации данных, спектров. Основное назначение — аппроксимация пикоподобными функциями. Имеется поддержка скриптов.
GAP
GAP (от англ. Groups, Algorithms, Programming — Группы, Алгоритмы, Программирование) — свободно распространяемая на условиях лицензии GNU GPL кроссплатформенная система компьютерной алгебры для вычислительной дискретной алгебры с особым вниманием к вычислительной теории групп. Совместная разработка университетов Сент-Эндрюс (Шотландия), Аахен (с 1986), Брауншвейг (Германия) и университета штата Колорадо (США). Возможности системы GAP можно расширить используя внешние пакеты и библиотеки, либо воспользовавшись паскалеподобным языком программирования, также называемым GAP.
Награды
-
В 2008 году группа разработчиков системы GAP стала лауреатом мемориальной премии имени Ричарда Дженкса.[2]
Пример работы с GAP в консоли
gap> G:=SmallGroup(8,1); # G объявлена как группа порядка 8.
<pc group of size 8 with 3 generators>
gap> i:=IsomorphismPermGroup(G); # Найти изоморфизм i группы G с соответствующей группой перестановок
<action isomorphism>
gap> Image(i,G); # Образ G под действием i. Результат — порождающие элементы образа.
Group([ (1,5,3,7,2,6,4,8), (1,3,2,4)(5,7,6,8), (1,2)(3,4)(5,6)(7,8) ])
gap> Elements(Image(i,G)); # Все элементы образа G под действием i.
[ (), (1,2)(3,4)(5,6)(7,8), (1,3,2,4)(5,7,6,8), (1,4,2,3)(5,8,6,7),
(1,5,3,7,2,6,4,8), (1,6,3,8,2,5,4,7), (1,7,4,5,2,8,3,6), (1,8,4,6,2,7,3,5) ]
Maxima
![]()
![]()
Maxima — свободная система компьютерной алгебры, написанная на языке Common Lisp.
История
Maxima произошла от системы Macsyma, разрабатывавшейся в MIT с 1968 по 1982 годы в рамках проекта Project MAC, финансируемого Министерством энергетики США (DOE) и другими государственными организациями. Вариант системы, известный как DOE Macsyma, поддерживался профессором Уильямом Шелтером (англ. William F. Schelter) в Техасском университете в Остине с 1982 года до своей смерти в 2001 году.
В 1998 году Шелтер получил от Министерства энергетики разрешение опубликовать исходный код DOE Macsyma под лицензией GPL, и в 2000 году он создал проект на SourceForge.net для поддержания и дальнейшего развития DOE Macsyma под именем Maxima.
Возможности
Maxima имеет широчайший набор средств для проведения аналитических вычислений, численных вычислений и построения графиков. По набору возможностей система близка к таким коммерческим системам как Maple и Mathematica. В то же время она обладает высочайшей степенью переносимости: она может работать на всех основных современных операционных системах на компьютерах, начиная от самых маломощных, вплоть до наладонных компьютеров.
Интерфейс
Maxima имеет несколько графических интерфейсов пользователя и надстроек: XMaxima (включен в поставку во многих ОС), wxMaxima и т. д., а также может работать в режиме командной строки (используя псевдографику).
Для редактирования научных текстов в Maxima может использоваться программа texmacs, которая позволяет экспортировать документы в ряд популярных форматов, включая TeX/LaTeX и HTML/MathML.
CalculiX
![]()
CalculiX — открытый, свободный программный пакет, предназначенный для решения линейных и нелинейных трёхмерных задач механики твёрдого деформируемого тела с помощью метода конечных элементов. Распространяется под лицензией GNU General Public License. Авторы программы Guido Dhondt (модуль CCX — решатель) и Klaus Wittig (модуль CGX — пре-, постпроцессор) работают в холдинге MTU Aero Engines, производящем двигатели для самолётов. Изначально создавался для Linux, в настоящее время существуют сборки для Windows и MacOS. Sun Microsystems предлагает использование CalculiX в своём коммерческом гриде Sun Grid.
CalculiX входит в состав дистрибутива CAELinux.
KmPlot
![]()
KmPlot — графопостроитель функций, входящий в пакет образовательных программ KDE Education Project. Распространяется согласно GNU General Public License.
Возможности программы
-
Работа с параметрическими функциями и функциями заданными в полярных координатах.
-
Несколько режимов отображения координатной сетки.
-
Расчёт площади, ограниченной осью абсцисс и графиком в некотором диапазоне.
-
Поиск экстремумов функции.
-
Построение производной и первообразной от функции.
Sage

![]()
Sage (анг. мудрец) — система компьютерной алгебры покрывающая много областей математики, включая алгебру, комбинаторику, вычислительную математику и матанализ.
Первая версия Sage была выпущена 24 февраля 2005 года в виде свободного программного обеспечения с лицензией GNU GPL. Первоначальной целью проекта было «создание открытого программного обеспечения альтернативного системам Magma, Maple, Mathematica, и MATLAB». Разработчиком Sage является Уильям Стейн — математик Университета Вашингтона.
Возможности
![]()
Веб-интерфейс Sage notebook работает в большинстве современных веб-браузеров.
![]()
Решение уравнений с использованием веб-интерфейса Sage notebook.
Многочисленные возможности Sage включают:
-
Интерфейс notebook для просмотра и повторного использования введённых команд и полученных результатов, включая графики и текстовые аннотации, доступный из большинства современных веб-браузеров. Доступно защищённое соединение через протокол HTTPS, когда конфиденциальность имеет значенние. Так же Sage может выполняться как локально, так и удалённо.
-
Интерфейс ввода на основе командной строки, с использованием мультипарадигменного языка IPython.
-
Поддержка параллельных вычислений с использованием как многоядерных процессоров, так и многопроцессорных системраспределённых вычислений.
и систем -
Матанализ реализован на основе систем Maxima и SymPy.
-
Линейная алгебра реализована на основе систем GSL, SciPy и NumPy.
-
Библиотеки элементарных и специальных математических функций.
-
Плоские и трёхмерные графики для функций и данных.
-
Средства работы с матрицами и массивами данных с поддержкой разреженных массивов.
-
Различные статистические библиотеки функций, использующие функциональность R и SciPy.
-
Набор инструментов для добавления собственного пользовательского интерфейса к вычислениям и приложениям.
-
Средства для обработки изображений с использованием pylab и Python.
-
Средства визуализации и анализа теории графов.
-
Процедуры для импорта и экспорта различных форматов данных: изображений, видео, аудио, САПР, ГИС, документов и медицинских форматов.
-
Поддержка комплексных чисел, символьных и вычислений с произвольной точностью.
-
Подготовка научно-технической документации с использованием редактора формул и возможностью встраивания Sage в документацию формата LaTeX.
-
Сетевые инструменты для соединения с базами данных SQL, поддержка сетевых протоколов, включая HTTP, NNTP, IMAP, SSH, IRC, FTP.
-
Программные интерфейсы для работы с системами Mathematica, Magma, и Maple.
Хотя это не представлено непосредственно, Sage может быть вызван из интерфейса Mathematica.
Философия разработки Sage
В процессе разработки Sage Уильям Стейн основывался на следующих фактах:
-
Для создания достойной альтернативы системам Magma, Maple, Mathematica, и MATLAB потребуются сотни или тысячи человеко-лет, если начинать процесс разработки с нуля.
-
Существует большое количество готового математического ПО с открытым исходным кодом, но написанного на различных языках программирования, из которых наиболее встречаемыми являются C, C++, Fortran и Python.
Таким образом, вместо того, чтобы начинать с нуля, было решено объединить всё специализированное математическое ПО в систему с общим интерфейсом. Конечному пользователю необходимо лишь знать язык Python.
Если для какой-то частной задачи не существовало ПО с открытым кодом, тогда стояла задача написания соответствующего блока для Sage. Но Sage не изобретает колесо, и в отличие от коммерческих систем компьютерной алгебры может открыто использовать исходные коды свободного ПО.
К разработке Sage привлекаются как профессионалы, так и студенты. Разработчики работают на общественных началах и поддерживаются грантами.
Производительность
Исходный код и исполняемые файлы Sage доступны для скачивания. Если компиляция производится на конечном компьютере, многие входящие в комплект библиотеки будут автоматически настроены для оптимальной работы на данном оборудовании, принимая в расчёт количество процессоров, размер кэш-буферов и поддержку специальных наборов инструкций, например SSE.
Лицензирование и доступность
Sage — свободное программное обеспечение, распространяемое по условиям лицензии GNU General Public License версии 2+. Доступность Sage имеет следующие аспекты:
-
Исходный код может быть скачан со страницы загрузки. Так же доступны релизы, находящиеся в процессе разработки, хотя они не рекомендуются обычным пользователям.
-
Исполняемые файлы доступны для операционных систем Linux, OS X и Solaris (как под архитектуру x86, так и SPARC).
-
Также доступен live CD с версией Linux, что позволяет опробовать Sage без установки на компьютер.
-
Пользователи могут использовать он-лайн версию Sage, доступную по адресу t2nb.math.washington.edu:8000. При этом имеются ограничения на объём доступной памяти и конфиденциальность работы.
Несмотря на то, что Microsoft спонсировала разработку версии Sage специально под ОС Windows, на данный момент пользователям этой операционной системы нужно использовать технологию виртуализации для работы с Sage. Рекомендуемая программа виртуализации — VirtualBox.
Содержащиеся в Sage программные пакеты
Математические пакеты
|
Алгебра |
GAP, Maxima, Singular |
|
Алгебраическая геометрия |
Singular |
|
Арифметика произвольной точности |
GMP, MPFR, MPFI, NTL |
|
Арифметическая геометрия |
PARI, NTL, mwrank, ecm |
|
Матанализ |
Maxima, SymPy, GiNaC |
|
Комбинаторика |
Symmetrica, Sage-Combinat |
|
Линейная алгебра |
Linbox, IML |
|
Теория графов |
NetworkX |
|
Теория групп |
GAP |
|
Численные расчёты |
GSL, SciPy, NumPy, ATLAS |
Другие пакеты
|
Интерфейс командной строки |
IPython |
|
Базы данных |
ZODB, Python Pickles, SQLite |
|
Графический интерфейс |
Sage Notebook, jsmath |
|
Графика |
Matplotlib, Tachyon3d, GD, Jmol |
|
Интерпретатор команд |
Python |
|
Сетевые возможности |
Twisted |
Анализ
x,a,b,c = var('x,a,b,c')
log(sqrt(a)).simplify_log() # returns (log(a))/2
log(a/b).simplify_log() # returns log(a) - log(b)
sin(a+b).simplify_trig() # returns cos(a)*sin(b) + sin(a)*cos(b)
cos(a+b).simplify_trig() # returns cos(a)*cos(b) - sin(a)*sin(b)
(a+b)ˆ5 # returns (b + a)ˆ5
expand((a+b)ˆ5) # returns bˆ5 + 5*a*bˆ4 + 10*aˆ2*bˆ3 +
# 10*aˆ3*bˆ2 + 5*aˆ4*b + aˆ5
limit((xˆ2+1)/(2+x+3*xˆ2), x=infinity) # returns 1/3
limit(sin(x)/x, x=0) # returns 1
diff(acos(x),x) # returns -1/sqrt(1 - xˆ2)
f = exp(x)*log(x)
f.diff(x,3) # returns e^x*log(x) + 3*e^x/x - 3*e^x/x^2 + 2*e^x/x^3
solve(a*x^2 + b*x + c, x) # returns [x == (-sqrt(b^2 - 4*a*c) - b)/(2*a),
# x == (sqrt(b^2 - 4*a*c) - b)/(2*a)]
f = xˆ2 + 432/x
solve(f.diff(x)==0,x) # returns [x == 3*sqrt(3)*I - 3,
# x == -3*sqrt(3)*I - 3, x == 6]
Дифференциальные уравнения
t = var('t') # define a variable t
x = function('x',t) # define x to be a function of that variable
DE = lambda y: diff(y,t) + y - 1
desolve(DE(x(t)), [x,t]) # returns '%e^-t*(%e^t+%c)'
Линейная алгебра
A = Matrix([[1,2,3],[3,2,1],[1,1,1]])
y = vector([0,-4,-1])
A.solve_right(y) # returns (-2, 1, 0)
A.eigenvalues() # returns [5, 0, -1]
B = Matrix([[1,2,3],[3,2,1],[1,2,1]])
B.inverse() # returns [ 0 1/2 -1/2]
# [-1/4 -1/4 1]
# [ 1/2 0 -1/2]
# Call numpy for the Moore-Penrose pseudo-inverse,
# since Sage does not support that yet.
import numpy
C = Matrix([[1 , 1], [2 , 2]])
matrix(numpy.linalg.pinv(C.numpy())) # returns [0.1 0.2]
# [0.1 0.2]
Теория чисел
prime_pi(1000000) # returns 78498, the number of primes less than one million
E = EllipticCurve('389a') # construct an elliptic curve from its Cremona label
P, Q = E.gens()
7*P + Q # returns (2869/676 : -171989/17576 : 1)
История версий
Ниже приведены только значительные релизы. В разработке Sage практикуются правило «release early, release often» (англ. "выпускай раньше, выпускай чаще"), новые релизы появляются каждые две-три недели.
Версии Sage
| Версия | Дата Релиза | Описание |
|---|---|---|
|
0.1 |
Январь, 2005 |
Включена Pari, но отсутствуют GAP и Singular |
|
0.2 — 0.4 |
С марта по июль 2005 |
База данных Cremona, мультивариантные полиномы, large finite fields и больше документации |
|
0.5 — 0.7 |
С августа по сентябрь 2005 |
Векторные поля, кольца, modular symbols и windows usage |
|
0.8 |
Октябрь 2005 |
В полном составе включены GAP, Singular |
|
0.9 |
Ноябрь, 2005 |
Добавлены Maxima и clisp |
|
1.0 |
Февраль, 2006 |
|
|
2.0 |
Январь, 2007 |
|
|
3.0 |
Апрель, 2008 |
|
|
4.0 |
Май, 2009 |
|
В 2007 году Sage выиграл первый приз международного конкурса свободного программного обеспечения en:Les Trophées du Libre (англ.) в разделе научного ПО.
Axiom
Axiom — свободная система компьютерной алгебры общего назначения. Она состоит из среды интерпретатора, компилятора и библиотеки, описывающей строго типизированную, математически правильную иерархию типов.
История
Разработка системы была начата в 1971 году группой исследователей IBM под руководством Ричарда Дженкса (англ. Richard Dimick Jenks). Изначально система называлась Scratchpad. Проект развивался медленно и в основном рассматривался как исследовательская платформа для разработки новых идей в вычислительной математике.
В 90-х система была продана компании Numerical Algorithms Group (NAG), получила название Axiom и стала коммерческим продуктом. Но по ряду причин система не получила коммерческого успеха и была отозвана с рынка в октябре 2001.
NAG решила сделать Axiom свободным программным обеспечением и открыла исходные коды под модифицированной лицензией BSD.
В 2007 у Axiom появились два форка с открытым исходным кодом: OpenAxiom и FriCAS.
Разработка системы продолжается, новые версии выходят каждые два месяца.
Документация
Axiom — литературная программа. Исходный код доступен в наборе томов на сайте: axiom-developer.org. Эти тома содержат актуальный исходный код системы.
На данный момент доступны следующие документы:
-
Общее оглавление
-
Volume 0: Axiom Jenks and Sutor — Основной учебник
-
Volume 1: Axiom Tutorial — Простое введение
-
Volume 2: Axiom Users Guide — Подробные примеры использования доменов (незавершённый)
-
Volume 3: Axiom Programers Guide — Руководство в примерах для написания программ (незавершённый)
-
Volume 4: Axiom Developers Guide — Короткие наброски на темы, специфичные для разработчиков (незавершённый)
-
Volume 5: Axiom Intepreter — Исходый код интерпретатора Axiom (незавершённый)
-
Volume 6: Axiom Command — Исходый код системных команд и скриптов (незавершённый)
-
Volume 7: Axiom Hyperdoc — Исходный код и разъяснения браузера справки X11 Hyperdoc
-
Volume 7.1 Axiom Hyperdoc Pages — Исходный код страниц Hyperdoc
-
-
Volume 8: Axiom Graphics — Исходый код подсистемы X11 Graphics
-
Volume 9: Axiom Compiler — Исходый код компилятора Spad (незавершённый)
-
Volume 10: Axiom Algebra Implementation — Наброски особенностей реализации (незавершённый)
-
Volume 10.1: Axiom Algebra Theory — Наброски, содержащие базовую теорию
-
Volume 10.2: Axiom Algebra Categories — Исходный код категорий Axiom
-
Volume 10.3: Axiom Algebra Domains — Исходый код доменов Axiom (незавершённый)
-
Volume 10.4: Axiom Algebra Packages — Исходый код Axiom packages (незавершённый)
-
-
Volume 11: Axiom Browser — Исходные страницы внешнего интерфейса Axiom для браузера Firefox
-
Volume 12: Axiom Crystal — Исходный код внешнего интерфейса Axiom Crystal (незавершённый)
Видео
Важной целью проекта Axiom является предоставление документации. В ноябре 2008 года проект анонсировал первое из серии обучающих видео, которые также доступны на сайте: axiom-developer.org. Первое видео рассказывает о источниках информации о Axiom.
Философия проекта
Технология литературного программирования Кнута используется по всему исходному коду. Проект Axiom планирует использовать проверенные технологии (такие как Coq и ACL2) для доказательства корректности алгоритмов.
Особенности
В Axiom все объекты имеют тип. Примерами типов являются математические структуры (такие как кольца, поля, многочлены), а также структуры данных из вычислительной техники (например, списки, деревья, хеш-таблицы).
Функция может получить тип в качестве аргумента, и её возвращаемое значение также может быть типом. Например, Fraction — функция, получающая IntegralDomain в качестве аргумента, и возвращающая поле отношений своего аргумента. В качестве другого примера кольцо
матриц действительных чисел может быть построено как SquareMatrix(4, Fraction Integer). Конечно, если работать в этом домене, 1 интерпретируется как единичная матрица и A^-1 позволяет получить обратную матрицу A, если она существует.
Некоторые операции могут иметь одинаковые имена, и тогда типы аргументов и результата используются для определения того, какая операция применяется, подобно тому, как в ООП.
Язык расширений Axiom называется SPAD. Вся математическая база Axiom написана на этом языке. Интерпретатор принимает почти такой же язык.
SPAD в дальнейшем разрабатывался под именем A# и позже Aldor. Последний, кроме того, может быть использован как альтернативный язык расширений. Однако, следует учесть, что он распространяется под другой лицензией.
Примеры
3j-символы
Вычисление 3j-символов и коэффициентов Клебша-Гордана.
j3Sum (j1, j2, j3, m1, m2, m3) ==
maxz := reduce (min, [j1+j2-j3, j1-m1, j2+m2])
minz := max(0, max ( -(j3-j2+m1), -(j3-j1-m2) ))
minz > maxz => 0
maxz < 0 => 0
sum ( (-1)^(z+j1-j2-m3) / _
( factorial(z) * factorial(j1+j2-j3-z) * factorial(j1-m1-z) * _
factorial(j2+m2-z) * factorial(j3-j2+m1+z) * factorial(j3-j1-m2+z) ), _
z=minz..maxz)
j3 (j1, j2, j3, m1, m2, m3) ==
m1 + m2 + m3 ~= 0 => 0
abs(j1 - j2) > j3 => 0
j1 + j2 < j3 => 0
abs(m1) > j1 => 0
abs(m2) > j2 => 0
abs(m3) > j3 => 0
not integer? (j1+j2+j3) => 0
sqrt ( _
factorial(j1+j2-j3) * factorial(j1-j2+j3) * factorial(-j1+j2+j3) / _
factorial(j1+j2+j3+1) * _
factorial(j1+m1) * factorial(j1-m1) * _
factorial(j2+m2) * factorial(j2-m2) * _
factorial(j3+m3) * factorial(j3-m3)
) * j3Sum (j1, j2, j3, m1, m2, m3)
clebschGordan (j1, j2, j, m1, m2, m) ==
(-1)^(j1-j2+m) * sqrt(2*j+1) * j3(j1, j2, j, m1, m2, -m)
Общая теория относительности
«Аксиома» выводит символы Кристоффеля и тензоры Римана и Риччи в решении Шварцшильда.
x := vector ['t, 'r, '%theta, '%phi];
dim := #x;
%nu := operator '%nu;
%lambda := operator '%lambda;
lg := matrix [
[exp(%nu r), 0, 0, 0], _
[ 0, - exp(%lambda r), 0, 0], _
[ 0, 0, -r^2, 0], _
[ 0, 0, 0, -r^2*sin(%theta)^2] _
];
ug := inverse lg;
grSetup(metric, names) ==
free x
free dim
free lg
free ug
x := names
dim := #x
lg := metric
ug := inverse lg
sum(list) == reduce (+, list)
Christoffel (k,l,i) ==
(1/2) * sum [ ug(i,m)*(D(lg(k,m), x(l)) + D(lg(m,l), x(k)) - D(lg(k,l), x(m)))
for m in 1..dim ]
Riemann (k,l,m,i) ==
D(Christoffel(k,m,i), x(l)) -
D(Christoffel(k,l,i), x(m)) +
sum [
Christoffel(n,l,i)*Christoffel(k,m,n) -
Christoffel(n,m,i)*Christoffel(k,l,n)
for n in 1..dim ]
Ricci (i,k) == sum [ Riemann(i,l,k,l) for l in 1..dim ]
scalarCurvature () == sum [ sum [
ug(i,k) * Ricci(i,k)
for i in 1..dim ] for k in 1..dim ]
lRiemann (i,i,l,m) == 0
lRiemann (i,k,l,l) == 0
lRiemann (i,k,l,m | i > k) == - lRiemann (k,i,l,m)
lRiemann (i,k,l,m | l > m) == - lRiemann (i,k,m,l)
lRiemann (i,k,l,m) == sum [ lg(i,n) * Riemann(k,l,m,n) for n in 1..dim ]
showChristoffel () ==
for k in 1..dim repeat
for l in 1..k repeat
for i in 1..dim repeat
if Christoffel(k,l,i) ~= 0 then
k > l => output infix ('=, [script('%Gamma,[[k-1,l-1],[i-1]]), _
script('%Gamma,[[l-1,k-1],[i-1]]), _
Christoffel(k,l,i)::OUTFORM])
k = l => output infix ('=, _
[script('%Gamma,[[k-1,l-1],[i-1]]), _
Christoffel(k,l,i)::OUTFORM])
showRicci () ==
for i in 1..dim repeat
for k in 1..i repeat
if Ricci(i,k) ~= 0 then
i = k => output infix ('=, [subscript('R,[i-1,k-1]), Ricci(i,k)::OUTFORM])
i > k => output infix ('=, [subscript('R,[i-1,k-1]), _
subscript('R,[k-1,i-1]), _
Ricci(i,k)::OUTFORM])
showRiemann () ==
for k in 1..dim repeat
for l in 1..dim repeat
for m in 1..dim repeat
for i in 1..dim repeat
if Riemann(k,l,m,i) ~= 0 then
output infix ('=, _
[script('R, [[k-1,l-1,m-1 ], [i-1]]), Riemann(k,l,m,i)::OUTFORM])
(21) -> showChristoffel()
Compiling function sum with type List Expression Integer ->
Expression Integer
Compiling function Christoffel with type (PositiveInteger,
PositiveInteger,PositiveInteger) -> Expression Integer
Compiling function showChristoffel with type () -> Void
%nu(r) ,
%e %nu (r)
1
%Gamma = ---------------
0,0 %lambda(r)
2%e
,
%nu (r)
0 0
%Gamma = %Gamma = -------
1,0 0,1 2
,
%lambda (r)
1
%Gamma = -----------
1,1 2
2 2 1
%Gamma = %Gamma = -
2,1 1,2 r
1 r
%Gamma = - ------------
2,2 %lambda(r)
%e
3 3 1
%Gamma = %Gamma = -
3,1 1,3 r
3 3 cos(%theta)
%Gamma = %Gamma = -----------
3,2 2,3 sin(%theta)
2
1 r sin(%theta)
%Gamma = - --------------
3,3 %lambda(r)
%e
2
%Gamma = - cos(%theta)sin(%theta)
3,3
Type: Void
(22) -> Ricci(3,3)
Compiling function Riemann with type (PositiveInteger,
PositiveInteger,PositiveInteger,PositiveInteger) -> Expression
Integer
Compiling function Ricci with type (PositiveInteger,PositiveInteger)
-> Expression Integer
, , %lambda(r)
- r%nu (r) + r%lambda (r) + 2%e - 2
(22) ---------------------------------------------
%lambda(r)
2%e
Type: Expression Integer

FreeMat
![]()
![]()
FreeMat — свободная среда для численных вычислений и язык программирования, подобный MATLAB и GNU Octave. В дополнение к поддержке многих функций MATLAB и некоторых функциональных возможностей IDL, имеет интерфейс к внешнему коду на C, C++, и Fortran, а также коннективные алгоритмы (через MPI), построение графиков и трехмерные визуализации.
GNU Octave
![]()
GNU Octave — свободный язык для математических вычислений, использующая совместимый с MATLAB язык высокого уровня.
Octave представляет интерактивный командный интерфейс для решения линейных и нелинейных математических задач, а также проведения других численных экспериментов. Кроме того, Octave можно использовать для пакетной обработки. Язык Octave оперирует арифметикой вещественных и комплексных скаляров и матриц, имеет расширения для решения линейных алгебраических задач, нахождения корней систем нелинейных алгебраических уравнений, работы с полиномами, решения различных дифференциальных уравнений, интегрирования систем дифференциальных и дифференциально-алгебраических уравнений первого порядка, интегрирования функций на конечных и бесконечных интервалах. Этот список можно легко расширить, используя язык Octave (или используя динамически загружаемые модули, созданные на языках C, С++, Фортран и др.).
Технические детали
-
Octave написан на C++ с использованием библиотек STL;
-
Для запуска скриптов Octave использует интерпретатор;
-
Octave можно дополнять динамически подгружаемыми модулями;
-
Для создания и распечатки графиков Octave использует gnuplot и Grace.
Язык Octave
Octave — интерпретируемый язык программирования. Он похож на C и поддерживает большинство основных функций стандартной библиотеки C, а также основные команды и и системные вызовы Unix. С другой стороны, он не поддерживает передачу аргументов (особенность дизайна).
Синтаксис языка очень похож на MATLAB, и грамотно написанные скрипты будут запускаться как в Octave, так и в MATLAB.
Графический интерфейс
Графический интерфейс представлен дополнениями (графики он может выводить и без них):
-
Kalculus — MATLAB-подобный интерфейс, написанный на Qt4;
-
Xoctave — очень похож на MATLAB;
-
OctaveNB — интеграция с NetBeans IDE;
-
QtOctave Graphical User Interface — находится в состоянии разработки.
Некоторые возможности
- Дополнение команд и переменных
При нажатии клавиши TAB, Octave попытается дополнить до полного имена переменной, функции и файлов (подобно автодополнению в Bash).
- История команд
В интерактивном режиме, Octave сохраняет набранные команды во внутреннем буфере, так что их можно вызвать заново и редактировать.
- Интеграция с C++
Программы, написанные на C++, можно запускать внутри скриптов Octave. К примеру, фрагмент кода для вызова rand([9000,1]):
#include <octave/oct.h>
...
ColumnVector NumRands(2);
NumRands(0) = 9000;
NumRands(1) = 1;
octave_value_list f_arg, f_ret;
f_arg(0) = octave_value(NumRands);
f_ret = feval("rand",f_arg,1);
Matrix unis(f_ret(0).matrix_value());
Совместимость с MATLAB
Octave был написан с учётом совместимости с MATLAB и реализует многие его возможности:
- Матрицы в качестве основных типов данных;
- Встроенная поддержка комплексных чисел;
- Мощные встроенные математические функции и большие библиотеки функций;
- Расширяемость, благодаря возможности создания пользовательских функций.
Но есть и отличия:
- Комментарии могут начинаться как с символа #, так и с символа %;
- Поддерживаются C-подобные операторы ++, --, +=, *=, /=;
- Элементы могут быть адресованы без создания новой переменной, например [1:10](3);
- Строки могут быть заданы как символом ", так и символом '.
Scilab

![]()
Scilab — пакет прикладных математических программ, предоставляющий мощное открытое окружение для инженерных (технических) и научных расчётов.
История
С 1994 года распространяется вместе с исходным кодом через Интернет. В 2003 году для поддержки Scilab был создан консорциум Scilab Consortium. Сейчас в него входят 25 участников, в том числе Mandriva, INRIA и ENPC (Франция).
Возможности
Scilab содержит сотни математических функций, и есть возможность добавления новых, написанных на различных языках (C, C++, Fortran …). Так же имеются разнообразные структуры данных (списки, полиномы, рациональные функции, линейные системы), интерпретатор и язык высокого уровня.
Scilab был спроектирован как открытая система, и пользователи могут добавлять в него свои типы данных и операции путём перегрузки.
В системе доступно множество инструментов:
-
2D и 3D графики, анимация
-
Линейная алгебра, разреженные матрицы (sparse matrices)
-
Полиномиальные и рациональные функции
-
Интерполяция, аппроксимация
-
Симуляция: решение ОДУ и ДУ
-
Scicos: гибрид системы моделирования динамических систем и симуляции
-
Дифференциальные и не дифференциальные оптимизации
-
Обработка сигналов
-
Параллельная работа
-
Статистика
-
Работа с КА
-
Интерфейс к Fortran, Tcl/Tk, C, C++, Java, LabVIEW
Scilab имеет схожий с MATLAB язык программирования. В состав пакета входит утилита, позволяющая конвертировать документы Matlab в Scilab.
Scilab позволяет работать с элементарными и большим числом специальных функций (Бесселя, Неймана, интегральные функции), имеет мощные средства работы с матрицами, полиномами (в том числе и символьно), производить численные вычисления (например численное интегрирование) и решение задач линейной алгебры, оптимизации и симуляции, мощные статистические функции, а также средство для построения и работы с графиками.
Для численных расчётов используются библиотеки Lapack, LINPACK, ODEPACK , Atlas и другие.
В состав пакета также входит Scicos — инструмент для редактирования блочных диаграмм и симуляции (аналог simulink в пакете MATLAB). Имеется возможность совместной работы Scilab с программой LabVIEW.
Распространение
Программа доступна для различных операционных систем, включая Linux и Microsoft Windows. Возможности Scilab могут быть расширены внешними программами и модулями, написанными на разных языках программирования. Программа имеет открытый исходный код, что позволяет как свободное коммерческое использование и распространение неизменённых версий, так и некоммерческое распространение измененных версий, которые должны включать в себя исходный код. Для коммерческого распространения измёненных версий необходимо согласование с INRIA.
Начиная с версии 5.0 программа распространяется под совместимой с GNU GPL 2 лицензией CeCILL.
Отличительные особенности
Отличия от некоторых коммерческих программ:
-
Бесплатность
-
Свободность (с версии 5.0)
-
Маленький размер — дистрибутив 4 версии занимал менее 20Мб против более чем двухгигабайтного пакета MATLAB. Инсталятор 5-й версии увеличился в объёме до 75 Мб.
-
Возможность запуска в консоли без использования графического интерфейса в том числе в версии под Windows (в UNIX-версии MatLab-а эта возможность присутствует). Это позволяет производить автоматизированные вычисления, есть пакетный режим.
Примеры
Простые вычисления
Код, задающий матрицу и считающий определитель:
M=[1 6 8; 7 8 8; 1 6 0]
det(M)
Графики
Построение простого графика функции
//установка значения x
x=[0:0.1:2*%pi]';
//простой график
plot2d(sin(x))
Более сложный график функции:
![]()
График, нарисованный с помощью Scilab
set("figure_style","new") //создать фигуру
subplot(211)
a=gca() //получить текущие оси координат
a.box="off";
t=-%pi:0.3:%pi;plot3d(t,t,sin(t)'*cos(t),80,50,'X@Y@Z',[5,2,4]);
subplot(212)
plot2d(); //простой график
a=gca(); //получить текущие оси координат
a.box="off";
a.x_location="middle";
MATLAB ON LINE - адаптированная версия Matlab для решения задач непосредственно в сети, поддерживает аккаунты пользователей, позволяя решать и возвращаться к решениям, сдавать лабораторные работы через сеть, визуализировать компьютерный эксперимент, содержит процедуры решения ЛСАУ, моделирования динамики Lsim, популярные матричные разложения и т.д., регулярно обновляется, с портал-поддержкой.
Добавлен режим реального времени (управление объектами через сеть интернет), обработка фотографий web-камер (анализ web-датчиков), в дополнение пиксельной добавлена векторная графика, значительно расширено количество демо-примеров.
Добавлен Виртуальный Роботрек (с субмариной): на базе постоянно работающего сервера пущена в строй Виртуальная Субмарина (имитация реальной субмарины с поставкой информации от датчиков глубины и руля глубины непосредственнно в интернет, с возможностью решать типовые задачи систем реального времени с программированием их через форум/блог) http://artspb.com/online/index.php.
Программа предназначена для студентов, аспирантов и преподавателей ВУЗОВ.
Сайт программы: http://artspb.com/matlab/index.php
Для освещения электрической части интернет-робототехники вышел компьютерный журнал http://artspb.com/articles
Последнее обновление (30.01.11 22:16)





