GNU Octave: система численных математических расчётов и какая от неё польза в народном хозяйстве

Расчёты бывают разной сложности: проверить, сколько будет 6*6, посчитать сумму стоимости товаров в чеке, решить систему линейных уравнений для домашней работы, или, скажем, рассчитать деградацию волнового фронта при прохождении многослойной турбулентной атмосферы. Если первые два примера можно посчитать на любом калькуляторе, то линейные уравнения решают инженерные калькуляторы. Последний пример могут решить только системы численных расчётов, которые используют для научных исследований - например GNU Octave. Вот о ней-то в этом посте и рассказывается.



Пояснения и предупреждения

Octave и MATLAB - это не просто "программа-калькулятор, которая может посчитать матрицу". Это интерактивные среды разработки и интерпретаторы языка в одном флаконе. На Октаве\Матлабе не просто считают матрицы - на них пишут программы. Нужно это для того, чтобы быстро набросать или протестировать новый алгоритм обработки изображений, сигналов, можно задизайнить цифровой контроллер или написать целый оптический симулятор.

Так что если вы не студент технического ВУЗа или университета, Octave вам скорее всего не нужна. Но для изучения линейной алгебры или теории вероятности Octave будет просто бесценна - собственно, на ней можно попробовать вычислить то, чему вас учили (и кучу всего, чему не научат) на курсе матричной\линейной алгебры.

Увы, но вопреки желаниям радетелей опенсорса, Octave это не замена MATLAB ни единого раза - это как старый ушастый Запорожец не замена для Lamborgini Diablo. Хотя и то, и то - ездит. Если даже после этих предупреждений вы твёрдо уверены, что оно вам надо - переходим к установке.


Установка GNU Octave в Debian GNU/Linux
Для нормальной работы нам нужна Octave 3.0 и выше, так что если в ваших репозиториях всё ещё валяется хлам в виде Octave 2.1 - не надо его ставить. Перед установкой пакетов лучше поискать:

apt-caсhe search octave
и установить самую свежую версию. Установка довольно проста:
aptitude install octave3.0 qtoctave
Первый пакет - собственно, система численных математических рассчётов GNU/Octave, а второй - это графическая оболочка QtOctave, о которой был отдельный пост.
Для Windows сборка Octave тоже есть, и тоже бесплатная. Кроме того, под Windows есть и графический интерфейс для Octave - GUIOctave, доступный по этой ссылке. Другие графические оболочки для октавы обсуждаются тут.
Всё вместе занимает около 50Мб на диске, но красота требует жертв:
From Debianist Notes: Так выглядит QtOctave

Установка Octave в Windows хорошо проиллюстрирована здесь в красивых цветастых картинках. Правда, после всего этого вас встретит чОрная страшная консоль Octave:

From Debianist Notes: жутьOctave как она есть

Тем не менее, такой брутальный интерфейс стоит, чтобы его немного освоить.


Octave как иллюстрированное пособие по курсу линейной алгебры
Если вас учили или учат в институте старые советские преподаватели по старым советским книжкам, то GNU Octave вам сильно поможет понять линейную алгебру, без которой инженеру абсолютно нечего делать в повседневной деятельности.
Кстати, вместо старых советских учебников лучше купить \ найти на просторах Интернета замечательную книжку Linear Algebra and Its Applications за авторством Gilbert Strang. Ещё лучше вместе с книжкой посмотреть его видеолекции, чтобы сэкономить время, если требуется освежить разделы линейной алгебры.

Также автор этих строк настоятельно рекомендует купить \ достать превосходный, умопомрачительно подробный Handbook of Linear Algebra авторства несравненной Leslie Hogben. Эти 1400 страниц плотного математического справочника содержат все факты о линейной алгебре, которые вам могут когда-либо пригодиться в студенческой и научной жизни.
Вооружившись свежими книгами, смело идём постигать линейную алгебру до полного просветления.

Курс молодого бойца Линейной Алгебры
Для разбега посмотрим на набор матриц:
A=[1 2; 4 5 ]

A =

1 2
4 5


B = [1, 1; 1, 1]

B =

1 1
1 1

Столбцы матрицы можно набирать пробелом или запятой, разделение на строки - точка с запятой ;

Как нас учит линейная алгебра, матрицы можно
складывать
octave:3> A+B
ans =

2 3
5 6
вычитать
octave:4> A-B
ans =

0 1
3 4

и умножать друг на друга, если они подходят по размерностям:
octave:5> A*B
ans =

3 3
9 9

Делить матрицы друг на друга, как числа, нельзя, но можно умножить матрицу на инверсную. Octave, как и MATLAB, это знают, но пользователь об этом может не догадываться:

octave:> [1 2; 3 4]/[1 1; 1 1]
ans =


0.75000 0.75000
1.75000 1.75000

Такая операция приводит к умножению матрицы A на (псевдо)инверсную матрицу B:

octave:10> [1 2; 3 4]*pinv([1 1; 1 1])
ans =


0.75000 0.75000
1.75000 1.75000
То есть будет вычислено Least Squares решение, как намекает нам документация. Пойдём дальше и посмотрим на другие возможности Octave.


Системы линейных уравнений
На семинарах по линейной алгебре пытаются учить решению систем линейных уравнений, которые выглядят несколько устрашающе:


Эту систему можно переписать в компактном виде А*X = В где коэффициенты являются элементами матриц:


Простой пример для системы из 3 линейных уравнений:
Матрица коэффициентов А и свободных членов В для этой системы:
Для Октавы это будет две команды:

octave:9> A=[1 3 5; 3 1 3; 4 1 3]
A =

1 3 5
3 1 3
4 1 3
и
octave:10> B = [22;14;15]
B =

22
14
15

Решать системы уравнений можно по-разному, например так:
octave:11> A^(-1)*B
ans =

1
2
3

Но это в реальных задачах всегда стараются избегать такого решения. Часто бывает так, что уравнений больше, чем неизвестных - тут нам на помощь придёт метод наименьших квадратов (Least Squares). В Октаве и Матлабе решение в смысле least squares можно записать компактно:
octave:12> A\B
ans =

1
2
3

Это на самом деле (A^T * A)^(-1)*A^T * B или, в выражениях Октавы, inv(A'*A)*A'*B


Как вычислить собственные вектора и собственные значения в Octave
Это ещё один популярный сорт рыбьего жЫра, коим пичкают скубентов злые преподаватели высших учебных заведений, почти никогда не поясняя, зачем они (собственные вектора и значения) нужны. А они нужны, и даже очень - в обработке сигналов и изображений, для алгоритмов Face Detection и для анализа стабильности контроллеров в теории (и практике!) управления, и для много чего ещё.

В Octave/MATLAB вычислением оных собственных векторов и значений занимается команда eig и сейчас мы её пощупаем. Вводим матрицу
octave:13> A=[1 3 5; 3 1 3; 4 1 3]
A =

1 3 5
3 1 3
4 1 3
теперь считаем собственные вектора U и значения V вот так:
octave:15> [U,V] = eig(A)
U =

-0.62701 -0.82511 -0.22384
-0.51095 0.23555 -0.81183
-0.58804 0.51353 0.53928

V =

8.13398 0.00000 0.00000
0.00000 -2.96831 0.00000
0.00000 0.00000 -0.16567
Матрица выдаётся V в канонической форме, с собственными значениями по главной диагонали. Этим примером хотелось показать eigenvalue decomposition в действии:

[U,V] = eig(A);

и обратно:

U*V*inv(U)

получится опять А.

Отмечу, что Octave/MATLAB считают eigenvalue decomposition совсем не так, как вас учат в институте, поэтому знаки собственных значений могут отличаться от посчитанных вами. Матлабовская документация намекает на причины этого.

Едва ли в курсе линейной алгебре вам расскажут, как посчитать собственные вектора для матриц размерности более 3 или 4. Хотя метод iterative QR decomposition прекрасно реализован в Octave и умеет это делать. Книги Gilbert "наше линейное всё" Strang ждут своих заинтересованных читателей, коим откроется это и многое другое.


Детерминант и ранг матрицы
Эти важные свойства матриц, как правило, довольно просто посчитать вручную, но если это делать лень, можно запрячь Octave:

octave:16> det(A)
ans = 4

и ранг матрицы:
octave:17> rank(A)
ans = 3


На Октаве можно решать и другие задачи из курса алгебры.


Продвинутое использование Octave
Несколько примеров, приведённых ниже, используются уже для написания программ на Octave/MATLAB, а не просто для того, чтобы посчитать домашнее задание.

Matrix Reshape
Иногда удобнее всего работать с матрицей, если вытянуть её в одну строчку. Потом обычно её нужно собрать обратно, после того, как над ней сделали что-то. Для этого нам пригодится команда reshape.


Вот например:

>> x = [1 2 3 4 5 6 ]

x =

1 2 3 4 5 6
Мы хотим сделать этот вектор-строку в виде матрицы 2х3 - легко:
>> x1 = reshape(x,2,3)

x1 =

1 3 5

2 4 6
И обратно собрать:
>> x1 = reshape(x,1,6)

x1 =

1 2 3 4 5 6

Разреженые (Sparce) Матрицы
Иногда встречаются матрицы, в которых очень много нулей и очень мало ненулевых значений. Памяти занимают много, считаются долго. Для экономии ресурсов нам на помощь спешит Sparce Matrix.
Используя специально предназначенные алгоритмы для работы с разреженными матрицами, можно сильно сэкономить память и ускорить вычисления.

Например:
>> a = [1,0,0;0,2,0;0,0,3]


a =


1 0 0
0 2 0
0 0 3

Нулей в матрице много, а значений - всего два. Сделаем её разреженной:

octave:19> a_sparse = sparse(a)
a_sparse =

Compressed Column Sparse (rows = 3, cols = 3, nnz = 3)

(1, 1) -> 1
(2, 2) -> 2
(3, 3) -> 3
Отлично. Теперь, например, мы хотим выцедить из неё главную диагональ. Для этого заведём переменную:


>> d = [0]


d =


0
и воспользуемся специальной командой для разреженных матриц:
>> a_diag = spdiags(a_sparse,d)


a_diag =


1
2
3
Здесь d содержит номера диагоналей, которые надо вытащить: 0 - главная диагональ, 3 - третья справа от главной (выше на 3 позиции), а -2 это под главной диагональю на 2 позиции.


Использование структур для хранения данных
Помимо матиц, в Octave можно хранить ещё и структуры. Структура это удобный метод хранения различных типов данных в одной "переменной".
Например, в симуляторе есть данные, касающиеся параметров турбулентности атмосферы, и они все хранятся в одной структуре по имени atm.

Создание структуры дело нехитрое, и это можно делать в цикле:

for ii=1:4
atm.layer_height{ii} = height;
end

Для просмотра содержимого структуры достаточно вызвать её по имени.
>> atm

atm =

n_layers: 1
layer_height: {[5000]}
layer_thickness: {[100]}
Cn_squared: {[1.3514e-17]}
Cn_squared_model: 'pureHufnagel'
psi_cell: {[128x128 double]}
nx_grid_points: {[128]}
ny_grid_points: {[128]}
screen_width: {[16]}
outer_scale: {[1.9512]}
inner_scale: {[0.0021]}
sampling_delta: {[0.1250]}
sampling_delta_f: {[0.0625]}
r0: 0.1600
power_spectrum_model: 'kolmogorov'
phase_screenwidth: 16
Reynolds_number: 9000

Теперь, скажем, я хочу передать значение n_layers в цикл (это число слоёв турбулентной атмосферы). Пишем:
k = atm.n_layers
Но это просто число. Так как здесь используются слои, структура получается многомерной. Например, нужно получить высоту слоя турбулентности layer_height пишем:

>> k = atm.layer_height(1)

получаем:

k =

[5000]

Это первый элемент структуры, но он не просто число, а cell array:
>> whos k
Name Size Bytes Class

k 1x1 68 cell array

Grand total is 2 elements using 68 bytes
Что делать, как спрашивают классики? Фигурные скобки позволяют получить непосредственно значение элемента:

>> k = atm.layer_height{1}

k =

5000

Теперь это число и с ним можно работать.

>> whos k
Name Size Bytes Class

k 1x1 8 double array



Удобство структур в том, что их можно передавать в функции, как одну большую переменную. Если при этом вы захотите добавить новые переменные, корректировать вызов функций не придётся - вы передаёте всю структуру целиком, так что все необходимые переменные там будут.


Ссылки
На этот пост меня сподвиг Блог ни о чем и его заметки про Октаву. Из оных заметок может сложиться впечатление, что Октава это "типа калькулятор, только консольный". Что неверно: несмотря на прорву недостатков Октавы (обрывочную документацию, криво реализованные матлабовские функции, неспособность выдавать интерактивные графики и зачаточный графический интерфейс) это - вполне себе мощная система численных расчётов и язык программирования. В качестве пособия по линейной алгебре GNU Octave более чем достаточна.

35 комментариев: |высказаться!| RSS-лента дискуссии.|
Unknown комментирует...

Спасибо за пост про милую душе Октаву. :)
Хотелось бы заметить, что под Windows для нее тоже есть графические оболочки, одна из них - GUI Octave (http://guioctave.com/).

Анонимный комментирует...

В самом конце опечатка: "криво ные матлабовские функции".
Вероятно, имелось в виду "криво написаные/реализованые/и т.п. матлабовские функции".

yanchick комментирует...

В последнее время мне почему то кажется что Python станет свободным инструментом инженера. Там и комьюнити больше да и возможность разрабатывать готовые приложение там более богата. Хотя не спорю, и у Octave есть свои преимущества.

virens комментирует...

@Spider комментирует...
Спасибо за пост про милую душе Октаву.
Пожалуйста. Просто у меня набрался материал по теме, и надо бы его запостить, чтобы самому проще было искать.

Хотелось бы заметить, что под Windows для нее тоже есть графические оболочки, одна из них - GUI Octave
О, спасибо за ссылку! Добавил в пост, и его чуток поправил.


@Анонимный комментирует...
В самом конце опечатка: "криво ные матлабовские функции".
Есть такое. Поправил.

В тему кривости октавы: по крайней мере в 3.0.1 нельзя загрузить TIFF файл (говорит, что он неправильный), и синтаксис у многих функций по теории управления другой. Asta la vista, baby...


@yanchick комментирует...
В последнее время мне почему то кажется что Python станет свободным инструментом инженера.
А мне так не кажется. Если речь идёт о Sage, то нам такого питоньего гадюшника пожалуйста не надо :-)

Серьёзно, у питона есть одна большая проблема - разношёрстность версий и плохая обратная совместимость. В academic world очень важно legacy - тут его просто огромное количество, и программы, написанные 10 лет назад, ОБЯЗАНЫ работать на новых версиях. Переписывать их, из-за питонистов, никто не станет.

Там и комьюнити больше да и возможность разрабатывать готовые приложение там более богата.
А не нужно готовые приложения разрабатывать. Октава - это быстрое прототипирование. Надо реализовать алгоритм, отшлифовать его - здесь не до программизма. А вот когда дело дойдёт до установки на железо (что не часто) - тогда питон тоже не нужен, а нужен С\С++\Фортран (в клинических случаях).

Я не говорю, что питон плох - мне очень нравится на нём писать мелкие скрипты. Но для серьёзного моделирования он, как мне кажется, мало пригоден.

Vlsu комментирует...

Спасибо за пост (особенно про то, что у октавы есть GUI)
Кстати, не проще ли выполнить "aptitude install qtoctave"? Моя убунта по этой команде выкачала и "octave3.2" (зависимость), и "octave3.2-htmldoc" (рекоммендация). В дебиане вроде то же самое: http://packages.debian.org/squeeze/qtoctave.

Анонимный комментирует...

[b]Я не говорю, что питон плох - мне очень нравится на нём писать мелкие скрипты. Но для серьёзного моделирования он, как мне кажется, мало пригоден.[/b]

зря Вы так.

scipy/numpy и есть не что иное как С\С++\Фортран способные вызываться из питона.
сам пользуюсь для относительно серьезных задач и доволен. по крайней мере в одиночку за полгода смог получить результаты соизмеримые с коммерческими пакетами

а по поводу gui это будет то же размахивание мечами как при вёрстке [любой]office vs latex :)

Ross комментирует...

Жаль что в целом свободного стандарта полноценного инструмента нет...а используют гораздо чаще Matlab
Утверждение "хлам" про старые учебники -не понравилось.

Михаил Саушкин комментирует...

В советском курсе линейной алгебре вам не расскажут, как посчитать собственные вектора для матриц размерности более 3 или 4.

Это Вы, батенька, зря ...

virens комментирует...

@Vlsu комментирует...
Спасибо за пост (особенно про то, что у октавы есть GUI)
Гуй у октавы есть, но его единственный разработчик недавно сказал, что больше тянуть лямку не может.

Кстати, не проще ли выполнить "aptitude install qtoctave"? Моя убунта
Да что ж вы с убунтой-то своей :-)


@Анонимный комментирует...
scipy/numpy и есть не что иное как С\С++\Фортран способные вызываться из питона.
Проблема в том, что за всеми библиотеками придётся бегать и подключать их. Это время и усилия, которые могли бы быть потрачены на, собственно, исследования. Плюс версионные болячки питона ("ой, а я был написан для пистона 2.2, а у вас 2.4 - бедааааа!" :-)

а по поводу gui это будет то же размахивание мечами как при вёрстке [любой]office vs latex :)
Гуй нужен на этапе освоения. И он реально нужен новичкам. А потом да, я вырубаю его при работе, чтобы побыстрее всё шевелилось.

@Ross комментирует...
Жаль что в целом свободного стандарта полноценного инструмента нет...а используют гораздо чаще Matlab
Есть некоторые количество недоделок (Octave) и сноповязалок с вертикальным взлётом (Scilab, sage). В Октаве полно багов и ошибок, и оно до сих пор не умеет строить интерактивные графики. Сноповязалки не пригодно даже для обучения (документацию Scilab все видели?).

Matlab и IDL, естественно, правят балом.

Утверждение "хлам" про старые учебники -не понравилось.
Поправил. Имелось в виду тем, что пичкать в 21 веке книжками 60-х годов как-то того, не очень здорово это. На русском ничего уже не пишется, а современное зарубежное по патриотическим причинам в вузах не дают. Имеем: мифи образца 2006-2010 на Т-факультете ничего про численные методы инженерам не сказал. Ни одного курса...

@Михаил Саушкин комментирует...
>> В советском курсе линейной алгебре вам не расскажут, как посчитать собственные вектора для матриц размерности более 3 или 4.

Это Вы, батенька, зря ...

Нам не говорили. Такой же вопрос поставил знакомого-бауманца в тупик. Кстати, Михаил, не покажете ссылку на Iterative QR \ другие численные методы в советском учебнике по линейной алгебре? Мне просто интересно.

Медведь комментирует...

В качестве примера добавлю, что на недавних онлайн-курсах по машинному обучению именно на октаве выполнялись домашние задания невероятной крутости - распознавание символов и людей на изображении, реализация нейронной сети для фильтрации спама и проч.
При программировании таких задач на "классических" языках программирования ушло бы куда больше времени, а тут все уже готово к использованию. Очень быстро и удобно, а на освоение(базовое) уходит один-два вечера.

iv_vl комментирует...

Вставлю и я своих два цента. Моё сугубо личное мнение, что в мире свободного софта выживают те проекты, которые умеют делать, возможно, всего одну вещь, но умеют это лучше других. Например, тот же TeX подходит только для научных публикаций, в отличие от MS Word, не нацелен на вставку видео в документ и прочего непотребства. Но в то же время, предоставляя надежные и гибкие средства для создания научных публикаций, рвёт последнего как Тузик грелку. Emacs - устаревший редактор с почти мёртвым языком Elisp, в котором писать программы сложнее, чем в MS Visual Studio и других IDE. Его цель - редактирование текста, и здесь по своим возможностям с ним никто и рядом не стоял, поэтому редактор продолжает жить, в том числе, в виде различных Emacs Starter Kit. Так сможет ли продолжить своё существование такой монстр как Octave? В теперешнем своём виде, скорее всего, нет. Нужны производительные свободные библиотеки - есть LAPACK, GSL, GMP; нужен инструмент для создания на скорую руку прототипа, - пожалуйста, вот вам Python с кучей оберток на все случаи жизни, от NumPy до Sage. Может ли в ближайшее время ситуация измениться? Наблюдая за стагнацией монстров Matlab, Mathematica, Maple, сам собой напрашивается отрицательный ответ.

Михаил Саушкин комментирует...

ссылка на Iterative QR \ другие численные методы в советском учебнике по линейной алгебре?

Ну может это и не совсем советский учебник:
<>Гловацкая. Методы и алгоритмы вычислительной математики. М.: Радио и связь, 1999. C. 364-369

Мои однокурсники по университету такие алгоритмы реализовывали на курсовых работах на 2-ом курсе :)

Анонимный комментирует...

\\
Проблема в том, что за всеми библиотеками придётся бегать и подключать их. Это время и усилия, которые могли бы быть потрачены на, собственно, исследования. Плюс версионные болячки питона ("ой, а я был написан для пистона 2.2, а у вас 2.4 - бедааааа!" :-)
\\

наверное соглашусь.
хотя в моём случае для поиска библиотек хватило репозитория дебиана.
а время потраченное на собственно исследования несоизмеримо больше :)

п.с. как насчет псевдообращения разреженных матриц?

Vlsu комментирует...

@virens
Гуй у октавы есть, но его единственный разработчик недавно сказал, что больше тянуть лямку не может.
Печалька... Может, кто-нибудь другой поддержит проект, он ведь свободный вроде...
Да что ж вы с убунтой-то своей :-)
Убунта здесь особой роли не играет. Даже некоторые дебианщики ставят октаву через закачку GIU, мотивируя это тем, что "По зависимостям потянется и новая версия GNU/Octave, если она ещё не установлена."

Alex комментирует...

Я не совсем понимаю спор, по поводу использования octave или чего-то другого. То что с помощью питона можно сделать что-то подобное это не значит, что он может заменить октаву. По поводу комментария в сторону emacs, то это не уместное сравнение. Emacs жив и будет жить еще долго, и не известно что проживет дольше MSVS или emacs и для меня вопрос чем пользуются больше, тоже открыт.

К автору один вопрос. В примере с собственными значениями, это собственные значения или жорданова нормальная форма? почему матрицей ответ?

virens комментирует...

@Медведь комментирует...
на октаве выполнялись домашние задания невероятной крутости - распознавание символов и людей на изображении

Ну там как бы имеет место быть Images Processing Toolbox, который в версии 3.0.1 вышел с багом и не умел загружать TIFF-файлы, чем доставил много радости автору этих строк. А так да, Октава это то, что в целом уже пригодно хотя бы к какой-то практической деятельности.

При программировании таких задач на "классических" языках программирования ушло бы куда больше времени

А не надо лезть в классическое программирование при разработке алгоритмов. Это лишнее. Матлаб\Октава\IDL тут очень в тему.

Кстати, среди читателей есть заядлые IDLщики есть? Чем оно замечательно по сравнению с Октавой?

@iv_vl комментирует...
Вставлю и я своих два цента. Моё сугубо личное мнение, что в мире свободного софта выживают те проекты, которые умеют делать, возможно, всего одну вещь, но умеют это лучше других.

Всё в духе Юникс. И потом, у красноглазых энтузиастов на комбайн, как правило, не хватает ни познаний, ни денег, ни усилий. Koffice и GnomeOffice тому примеры.

Например, тот же TeX подходит только для научных публикаций

Да он ко всему подходит. Автор этих строк вон на ЛаТехе реализацию GTD забабахал :-)

не нацелен на вставку видео в документ и прочего непотребства.
iv_vl, ты не прав: непотребства с мультимедией и презентациями там тоже можно сделать. Несколько гиковато и красноглазо, но можно.

Emacs - устаревший редактор с почти мёртвым языком Elisp
Ох как ты лихо набросил - сейчас вимеры тебя съедят :-)
Нормальный редактор, кстати. Вполне. Но автор всё-таки предпочитает вим.

Так сможет ли продолжить своё существование такой монстр как Octave? В теперешнем своём виде, скорее всего, нет.
Не согласен. Собственно, там уже многое сделано, оно может запускать (некоторые) матлабовские файлы, занимает немного места, работает быстро. Но да: дерьмовая документация, не умеет строить интерактивные графики, качество тулбоксов среднее. Но по сравнению с версией 2.0 - очевидные улучшения.

Кстати, Октава использует те же библиотеки типа LAPACK и BLAS. Если я ничего не путаю, то матлаб использует DGEMM.

пожалуйста, вот вам Python с кучей оберток на все случаи жизни, от NumPy до Sage.
А вот эти газонокосилки с газотурбинными движками и тормозами на собачьих упряжках как раз и должны помереть. Питон и поддержка легаси-кода несовместимы. И потом, когда я в последний раз видел Sage, это был такой глюкодром, что туши свет.


Наблюдая за стагнацией монстров Matlab, Mathematica, Maple
У монстров другая проблема - они уже всё сделали, что только можно. Их бы на откуп опенсорсу отдать, чтобы допиливали и долавливали баги - там всё уже сделано, развитие в основном окончилось. Но это серьёзные инструменты, на которые можно положиться.


@Михаил Саушкин комментирует...
Ну может это и не совсем советский учебник:
Гловацкая. Методы и алгоритмы вычислительной математики. М.: Радио и связь, 1999. C. 364-369

Неплохо, но это довольно свежая книга. Автора в мифи учили по Ильину-поздняку 1974 года разлива, и там этого, натурально, не было. Собственно, именно этот прискорбный факт (как и огрызок теории вероятности в полгода по отвратительной книжке Чистякова 1978 года). Вот потому на мифи и поставили крест, во всех смыслах.

virens комментирует...

@Анонимный комментирует...
наверное соглашусь.
Да там многие согласятся, особенно когда нужно обмениваться программами на разных платформах, и использовать студенческие поделки прошлых лет.

хотя в моём случае для поиска библиотек хватило репозитория дебиана.
Всё равно, нужно тратить время и силы, да ещё (как правило) с дурной документацией. Матлаб решает.

п.с. как насчет псевдообращения разреженных матриц?
Надо бы, это да. У меня вообще есть глобальная идея по посту про sparse matrix. Но нету времени. Попробую что-нибдь придумать.


@Vlsu комментирует...
Может, кто-нибудь другой поддержит проект, он ведь свободный вроде...
Он свободный, в том числе и от разработчиков. А кдешникам некогда, они плазму с бубенчиками пилят. Им не до этого :-)

Даже некоторые дебианщики ставят октаву через закачку GIU, мотивируя это
О шайтан... а ведь правда :-) Ну ты умыл автора, Vlsu, причём очень знатно. Даже не знаю, как выкрутиться...

@Alex комментирует...
Я не совсем понимаю спор, по поводу использования octave или чего-то другого.
Алекс, а это не спор - просто обмен мнениями. Есть много оголтелых питонистов и они хотят привычный синтаксис. Вот так появляются всякие франкенштейны типа Sage. Они ж не со зла...

То что с помощью питона можно сделать что-то подобное это не значит, что он может заменить октаву.
Разработчики Sage с тобой не согласятся - они уверяют, что оно затопчет Matlab и Maple и всё остальное. Осталось это увидеть.

В общем, альтернатив много, но Октава ближе всего к сколько-нибудь серьёзному применению.

К автору один вопрос. В примере с собственными значениями, это собственные значения или жорданова нормальная форма? почему матрицей ответ?
Да, это я немного неаккуратно выразился. Матрица V в канонической форме; хотелось показать eigenvalue decomposition:

[U,V] = eig(A);

и обратно:

U*V*inv(U)

получится опять А.

Да, вот ещё что. В посте про структуры - это я сюда впаял для того, чтобы самому искать было проще. Надо бы написать про cell array и structures, а то я их использую, а синтаксис постоянно забываю.

Alex комментирует...

Я тоже, можно сказать, оголделый питонист. И тоже люблю рассказывать про SymPy и то как они дублируют Mathematica (я перейду на символьные пакеты). Причем у них тоже вроде как цель замены, они даже в качестве хелпа предлагают выдержки с сайта Wolfram. Но не смотря на это, для любого математика сложно перейти от Mathematica к SymPy. И наверное на данный момент это только для фанатиков.

pa23 комментирует...

а кто-нибудь пробовал это http://freemat.sourceforge.net/ ? хотелось бы узнать мнение здесь собравшихся об этом ПО

iv_vl комментирует...

@virens комментирует...
Да он ко всему подходит. Автор этих строк вон на ЛаТехе реализацию GTD забабахал :-)
virens, моя таки хочет сказать, что Кнут разрабатывал TeX как систему компьютерной вёрстки и сделал всё возможное, чтобы она была надёжной как скала. Для TeX'а им разработан Metafont, позволяющий контролировать всё и вся в вёрстке и даже создавать свои шрифты. Сам TeX - тьюринг-полный язык для создания мощных макросов. Это вам не LaTeX с бубенцами - всё очень строго и аскетично. А дальше уже пришло осознание другими, что на этом можно сделать не одну свистелку, но ставить телегу впереди лошади не надо.

iv_vl, ты не прав: непотребства с мультимедией и презентациями там тоже можно сделать.
Когда формат DVI создавался специально для TeX'а, не этим был озабочен дядюшка Кнут. Только с распространением PDF стало возможным создание видео-презентаций, но на Linux с этим пока всё плохо.

Emacs - устаревший редактор с почти мёртвым языком Elisp. Ох как ты лихо набросил - сейчас вимеры тебя съедят :-)
Нормальный редактор, кстати.

Устаревший - не значит плохой, TeX ещё старше.

оно может запускать (некоторые) матлабовские файлы
Вот ты всё время это пытаешься обойти, но Octave обязан запускать все матлабовские файлы. Про то, что документация во многом не соответствует действительности, я вообще промолчу. Нельзя настолько безответственно подходить к делу научных расчётов.

Python с кучей оберток на все случаи жизни, от NumPy до Sage. А вот эти газонокосилки с газотурбинными движками и тормозами на собачьих упряжках как раз и должны помереть
У меня вообще только православный Си. Но прецедент создан - значит не так просто, как кажется, поддерживать уже существующий код Octave.

Sage, это был такой глюкодром, что туши свет
Sage - это только обёртки к другим программам, боюсь представить, что творится внутри оригинальной поделки SymPy.

Их бы на откуп опенсорсу отдать, чтобы допиливали и долавливали баги
Вашими бы устами да мёд пить. Но мы говорим Mathematica - подразумеваем Mac OS, говорим Mac OS - подразумеваем Mathematica.

iv_vl комментирует...

@Alex комментирует...
люблю рассказывать про SymPy
Судя по странице проекта, основной вклад в SymPy - это Google Summer 2009-2011 гг., поэтому напрашиваются выводы: а) у проекта нет постоянных разработчиков, кто бы отвечал за качество продукта; б) это сборная солянка, где части кода написаны разными группами без должного согласования друг с другом; в) пишется студентами, желающими на данном проекте освоить Python, благо низкий порог вхождения позволяет. Да уж, SymPy - только для фанатиков.

virens комментирует...

@Alex комментирует...
Я тоже, можно сказать, оголделый питонист. И тоже люблю рассказывать про SymPy и то как они дублируют Mathematica
Я заведу свою любиму пластинку на патефоне, и пластинка называется просто: Legacy. Недавно в руки мне попал матлабовский код от симулятора 1998 года. Алекс, он работает! Я могу его запустить (собственно, уже уволок к себе в свой симулятор) на современном Матлабе2009.

В academic world это всё. Старое должно запускаться по-любому. Вот почему это барахло под названием Фортран до сих пор живёт. Я понимаю, что за эти слова меня сейчас сгнобит старая гвардия с седыми яйцами, но перекомпилировать огромный проект под каждый чих мне не улыбается, вы уж извините.

Так что не пойми меня превратно, Алекс: мне питон нравится за наименее ущербный и наиболее человекоподобный синтаксис. На пистоне пишу скрипты для массовой генерации графиков. Но если они вдруг перестанут работать - буду фигачить на перле. Это не критично. Но если у меня всё написано на Sage, который использует пистон2.6, а скоро выйдет 3.0 и мне придётся всё переписывать - это меня не обрадует.

Но не смотря на это, для любого математика сложно перейти от Mathematica к SymPy.
Есть у меня такое соотношение для перехода на другой продукт: (отдача функционала)*(как с легаси?) делённое на (маразматичность синтаксиса)*(человекочасы на освоение).

С линуксом и латехом для меня это однозначно стоит, с вимом\емаксом и октавой - нет. Поясню. Ты привык к инструменту, и он делает то, что ты хочешь, и так, как ты ждёшь. Тебя всё радует, дело идёт, результаты получаются, и всё без напрягов. Пример: латех. Да, придётся попыхтеть и осваивать, но результат будет превосходным - ворду такое никогда не снилось. То есть ты получаешь качественное улучшение, breakthrough. Это как транзисторный приёмник и ламповый.

Но тут приходит питонист\линуксоид\вимер\вставить_нужное и агитирует за новизну и крутизну. Ты спрашиваешь: а какую отдачу я получу от нового инструмента? Окупятся ли часы\месяцы на освоение нового? Не устареет ли оно быстро? Здесь ситуация как с телефоном от HTC и OpenMoko - первое есть отличный смартфон из коробки, второе - красноглазая недоделка, которая звонит через раз, но поиграцца весело :-)

Так вот, Mathematica это транзисторный HTC, а SymPy - ламповый OpenMoko ;-) То есть если хочется трэша и угара, то попитонировать можно всласть, но работать-то надо, правильно!?


@Artem Petrov комментирует...
а кто-нибудь пробовал это http://freemat

Если вопрос ко мне, то ответ (после их вебсайта и Q&A) будет в стиле "Пастернака не читал, но осуждаю" :-) Собственно, они сами на него и отвечают:

Q. Why another MATLAB clone? Have you heard of Octave, Scilab, etc.?

Yes! FreeMat is chartered to go beyond MATLAB


Да сколько таких было-то, гоунинг беёнд матлаб, трали-вали... Ну и где они, беёнд-то? Или хотя бы неарбай? Бойцы поминают минувшие дни, и битвы, что вместе продули они...

Q. Is FreeMat 100% compatible with MATLAB? What about IDL?

No. FreeMat supports roughly 95%


Ой-вей, а Октава так все 99%, при этом:
- Image processing toolbox глюкав и с ошибками на самых видных местах (оно не может загрузить tif!)
- Control Toolbox наполовину пуст, на вторую - убог. Я не могу запустить ни одного скрипта с контроллерами на моём симуляторе в Октаве.
- Про гнуплот в качестве штатного построителя графиков я уже всё сказал.
- Дурные на всю голову и невменяемые сообщения об ошибках Октавы: вы когда-нибудь пробовали отладить большой проект на октаве по её error messages, друзья? Надписи на дисплеях в фильме "Звёздные войны" и то понятнее.

iv_vl комментирует...

@virens комментирует...
Про гнуплот в качестве штатного построителя графиков я уже всё сказал.
Гнуплот с построением графиков по большому кол-ву данных справляется, или тебе нужен сразу готовый вид для вставки в публикацию? Какие здесь есть альтернативы? Графики из Matlab уже давно прямо в статьи и пихают, китайцы так с этим усердствуют, что аж в глазах рябит (при этом, у всех графиков один и тот же вид, только параметры расчёта знай себе меняют). Пропиарю свою статью, где все графики сделаны в Metapost - по-моему, результат выглядит намного лучше выхлопа Matlab.

virens комментирует...

@iv_vl комментирует...
Это вам не LaTeX с бубенцами - всё очень строго и аскетично. А дальше уже пришло осознание другими, что на этом можно сделать не одну свистелку

Вот ты всё время это пытаешься обойти, но Octave обязан запускать все матлабовские файлы. Про то, что документация во многом не соответствует действительности, я вообще промолчу. Нельзя настолько безответственно подходить к делу научных расчётов.
iv_vl, автор этих строк, насмотревшись на кошмары в лице Sage и особенно Scilab, стал намного мягче и снисходительнее к опенсорцу. По сравнению с этим кривоногим и дегенеративным Scilab, Октава просто Белый Лебедь. То есть там движение в правильную сторону просматривается, и уже за это Октаве можно всё простить.

Хранцузы со своим пафосным консорциумом и недоделкой Scilab (у меня про него есьт пост с попытками сделать там простейший assigment, выкачу как-нибудь, когда все матюги оттуда уберу) всё догоняют Simulink, но им до него всё так же далеко, как ФобосГрунту до Марса :-)


Гнуплот с построением графиков по большому кол-ву данных справляется, или тебе нужен сразу готовый вид для вставки в публикацию?
Нет, мне нужен график, который можно подёргать и посмотреть с разных сторон. Пример: корячился тутова намедни с моделированием деформируемого зеркала. Сделал на Thin Plate Splines, и возжелал поглядеть, как оно в объёме. Матлаб построил mesh, а я его крутил-вертел в окошке мышкой.

Графики из Matlab уже давно прямо в статьи и пихают, китайцы так с этим усердствуют
Да знаю. Я вообще китайские статьи стараюсь не читать, а конференции - тем более. Они все на одно лицо (и статьи, и китайцы): кратенькое вступление с цитатами хуней, ляней и прочих своих мянь-глянь, дальше выплюнуто 24 графика на один лист, зе резальтс аре презентер зере (си фигуре ван) и всё, шерше ля фам.

Кстати, насколько я помню, Матлаб лицензировал куски Гнуплота для графиков.

графики сделаны в Metapost - по-моему, результат выглядит намного лучше выхлопа Matlab.
Ну да, естественно. У меня в этом всё проще: обозначения на графиках не нужны, так что подойдёт и просто гнуплот. И да, графики в гнуплоте выглядят лучше матлабовских.

Const комментирует...

Нет, мне нужен график, который можно подёргать и посмотреть с разных сторон. Пример: корячился тутова намедни с моделированием деформируемого зеркала. Сделал на Thin Plate Splines, и возжелал поглядеть, как оно в объёме. Матлаб построил mesh, а я его крутил-вертел в окошке мышкой.
Я, конечно, согласен, Гнуплот не без недостатков… но у что-что, а крутить 3D график мышью он позволяет ;)

virens комментирует...

@Const комментирует...
Я, конечно, согласен, Гнуплот не без недостатков… но у что-что, а крутить 3D график мышью он позволяет ;)
Const, а как?! Мой гнуплот в Ленни - не позволяет. Оттого и страдания.

И ещё. В матлабе на графиках можно посмотреть значения - там есть такой инструмент, типа пипетки: ткнулся и видишь значение в точке. В Октаве вместо этого шиш с маслом - только координата (а она мне зачем?).

Const комментирует...

Const, а как?! Мой гнуплот в Ленни - не позволяет. Оттого и страдания.

set term wxt

У меня оно, кстати, по умолчанию стоит.

Ну и, на всякий случай: Version 4.4

Анонимный комментирует...

Надеюсь, автор / редактор читает такие запоздалые комментарии.
Исправьте, пожалуйста, систематическую опечатку: «GNU/Octave» на «GNU Octave», т.е. слэш на пробел — больно глаз режет.
Спасибо.

virens комментирует...

@Const комментирует...
set term wxt
Проблема в том, что я не знаю, как Октава вызывает Гнуплот и как оно передаёт ей параметры.

Далее. Ещё проблема в том, что в Матлабе я могу ткнуть в график мышкой и посмотреть, например, значения кривой. В Октаве этого нет, а очень-очень нужно.

Ну и, на всякий случай: Version 4.4
У меня тоже, но я честно про возможность крутить графики в гнуплоте не знал. Век живи, век учись... Попробуем.


@Анонимный комментирует...
Надеюсь, автор / редактор читает такие запоздалые комментарии.
Обязательно читает. Автор, во всяком случае :-)

Исправьте, пожалуйста, систематическую опечатку: «GNU/Octave»
Я думал, что оно так политкорректнее будет. Типа напоминание, что это относится к проекту GNU. Тем не менее, Анонимус прав - без слеша читается лучше. Исправлено.

Анонимный комментирует...

Лично мне довелось познакомиться с Матлабом года с 94-го, когда ещё под DOS. Так что Октава по-моему чрезвычайно удобная штука, когда на Матлаб просто нет денег, а считать надо.

Насчёт Октавы под Windows - есть ещё тот же Cygwin-овский X Server. По ним и Октава, и gnuplot, и ftlk. Разобравшись - сносно, хотя Windows даёт о себе знать.

Iskander комментирует...

@virens
(как и огрызок теории вероятности в полгода по отвратительной книжке Чистякова 1978 года)
Какая блин, до боли во всех местах, знакомая книжка, они ее во все подразделения МИФИ пихают чтоли?
Вот потому на мифи и поставили крест, во всех смыслах
Боюсь крест не только на МИФИ, но и действительно на ВСЕЙ российской науке...

Константин комментирует...

Возник вопрос, а если переменная зависит от некоторого параметра, как это забить в Octave при использовании символьных вычислений?
Например:
% phi - переменная зависящая от t
% dphi - первая производная phi по t
S = Cos(phi)

В ответе я должен получить: S = -dphi*Sin(phi)

Попробовал использовать следующий прием:
phi = dphi*t
Но на выходе я получил:
S = -dphi*Sin(dphi*t)
Или на крайний случай, как сделать так, чтобы он не заменял phi на dphi*t?

Анонимный комментирует...

В MathLab есть Simulink для моделирования процессов. Каким ПО свободного распространения можно его заменить?

virens комментирует...

@ Анонимный комментирует...

В MathLab есть Simulink для моделирования процессов. Каким ПО свободного распространения можно его заменить?
Полностью - естественно, никаким. И в случае с симулинком - даже не стоит пытаться.

Есть Scilab, но это самое убогое поделие (написанное французской INRIA, во имя всего святого!) которое я встречал в ёпенсорце. Матлаб по Юникс есть, и он работает очень хорошо.

Анонимный комментирует...

А вот и собрал Octave-4 теперь и GUI и в общем вчера день сборки был - KiCAD, Qucs, Octave теперь вообще хорошо.

Отправить комментарий

Подписаться на RSS-ленту комментариев к этому посту.