Octave для мелких задач

Увидел в очередной раз упоминание о `екселе` как о средстве обработки числовых данных. Не буду говорить почему это кажется мне неправильным. Расскажу лучше о том как это сделать проще.


Ограничусь простыми часто необходимыми задачами. Получить массив чисел, посчитать среднее значение, дисперсию. Построить графики по этим данным. Преобразовать эти числа. Все это можно сделать в octave почти в одну строку.

Основная ссылка.

www.gnu.org/software/octave/

Начнем. Вот так можно делать простые вычисления, чем я чаще всего и пользуюсь.

octave:3> 2^8
ans =  256
octave:4> 640*480*3/2^10
ans =  900
octave:5> 16e+6/8e+3
ans =  2000
octave:6> 0.0175 / (1/2*3.14) * 0.06
ans =  6.6879e-04
octave:7> floor(8e+6 / (16 * 4)) - 115200
ans =  9800


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


octave:8> x = rand(10,1)
x =

   0.4595014
   0.9991694
   0.8972970
   0.1707465
   0.0090593
   0.7366539
   0.4076605
   0.2373747
   0.3671748
   0.4610598



rand генерирует равновероятно распределенные случайные числа от 0 до 1, что можно узнать вот так.


octave:10> help rand


В параметрах указаны размеры матрицы, количество строк и столбцов. Пусть для примера это будут показания датчика (значение с АЦП) и нужно его откалибровать. Для каждого значения нам понадобится настоящее значение измеряемой величины. Пример искусственный так что я задам эти значения исходя из самого x. Положим величина есть температура от 14 до 116 °C, и каждое значение отображается на показание АЦП [0, 1] аффинным преобразованием. Которое на самом деле нужно найти (это и есть калибровка), но мы его сначала зададим а потом сделаем вид, что никогда его не знали.


octave:14> t = x * (116 - 14) + 14
t =

    60.869
   115.915
   105.524
    31.416
    14.924
    89.139
    55.581
    38.212
    51.452
    61.028



Теперь имея данные о температуре (t) и показания АЦП (x) будем искать зависимость.


octave:23> polyfit (x, t, 1)
ans =

   102.000    14.000



Если уже известно что зависимость аффинная, то этого достаточно, иначе можно попробовать увеличить степень полинома.


octave:24> polyfit (x, t, 2)
ans =

  -5.6317e-14   1.0200e+02   1.4000e+01



Здесь становится видно, что коэффициент у квадрата довольно мал (e-14) и необходимости в такой степени полинома нет.

Теперь можно напрямую проверить результат.


octave:26> x * 102 + 14 - t
ans =

   0
   0
   0
   0
   0
   0
   0
   0
   0
   0

octave:27>


Или воспользоваться polyval.


octave:27> polyval([102 14], x) - t
ans =

   0
   0
   0
   0
   0
   0
   0
   0
   0
   0


Другая задача, это выяснить есть ли зависимость между двумя величинами. Добавим к данным ещё случайных чисел в виде столбца y.


octave:28> y = rand(10,1)
y =

   0.0728853
   0.5938298
   0.5466520
   0.4775823
   0.8485842
   0.5222065
   0.0071697
   0.8210706
   0.3825664
   0.5258989


Смотрим линейную корреляцию.


octave:33> corrcoef(x,y)
ans = -0.13490
octave:34> corrcoef(x,t)
ans =  1.0000


Тоже самое можно посчитать вручную.


octave:46> sum((x - sum(x)/length(x)).*(t - sum(t)/length(t)))/length(x)/sqrt(sum((x - sum(x)/length(x)).^2)/length(x) * sum((t - sum(t)/length(t)).^2)/length(t))
ans =  1
octave:47> sum((x - sum(x)/length(x)).*(y - sum(y)/length(y)))/length(x)/sqrt(sum((x - sum(x)/length(x)).^2)/length(x) * sum((y - sum(y)/length(y)).^2)/length(y))
ans = -0.13490


Точка перед знаком операции означает, что операция производится поэлементно, а не по правилам линейной алгебры.

Для среднего значения и дисперсии/ковариации есть функции mean и cov.

Сохранение и загрузка данных из файлов.


octave:56> save('-ascii', 'file1', 't')

$ cat file1 
 6.08691403e+01
 1.15915283e+02
 1.05524298e+02
 3.14161395e+01
 1.49240483e+01
 8.91386987e+01
 5.55813735e+01
 3.82122191e+01
 5.14518306e+01
 6.10280991e+01



octave:59> c = load('file1')
c =

    60.869
   115.915
   105.524
    31.416
    14.924
    89.139
    55.581
    38.212
    51.452
    61.028



Файл можно сформировать как угодно, не обязательно записывать числа в нормализованном виде как это делает сам octave, load будет его читать.

Простые графики строятся тоже просто.


octave:48> plot(t)
octave:49> print -dpng '-S640,480' ex1.png
warning: print.m: fig2dev binary is not available.
Some output formats are not available.
warning: print.m: pstoedit binary is not available.


Вторая строка выводит результат в png файл.



Надеюсь это кому-то поможет.
  • +4
  • 16 апреля 2012, 22:21
  • amaora

Комментарии (86)

RSS свернуть / развернуть
Молодец! Но это просто… интересны полигоны )
а вообще Вы слышали автор энтой штуки отказался от проекта и типа кранты… =( или кто то подхватил?
это же обертка для GNUPlota причем одна из очень удачных для начинающих (Самые удачные это функции на Питоне ))))
0
Octave это никак не «обёртка для GNUPlota», это вполен серьёзный opensource математический софт. Интересен прежде всего тем, что синтактически сильно совместим с MatLab и всё освоенное в нём не пропадает даром. Даже на ml-class.org он был инструментом №1. Его можно использовать не только как инструмент, но и как линкуемую библиотеку.
0
значит с чем то спутал, была хорошая обертка…
0
ну… и как обёртку его тоже можно =)
0
Все, нашел свой проект, я их в связке использовал. не обертка это каюсь ) давно просто дело было )_
0
сильно совместим с MatLab
таки только в синтаксисе похож и то далеко не на 100%
и матлаб силен далеко не линейной алгеброй
0
Не слышал, на #octave irc.freenode.net мне быстро помогли когда был один вопрос. В прошлом году два раза был code sprint по написанию недостающих тестов. Про крупные изменения не знаю, не сильно слежу.
+1
Расскажу лучше о том как это сделать проще.
Ну вот подкат не соответствует данной фразе на мой взгляд. Общее впечатление о статье: Пользователю винды советуют пересесть на линукс-консоль. Это проще когда вы с ним работаете, а когда вы о «математике» и услышали то впервые…
Я так понимаю это типа мепл/матлаб/матхня только гнутая, нежели ексель. Да, со стороны вычисления полиномов оно лучше, но экселька всё же ближе к простому обывателю и удобнее ему в использовании, да и «более универсальна получается».
0
Экселю — экселево, матлабу — матлабово. Каждый инструмент для своих задач. Когда соберётесь калману хвосты крутить — эксель не поможет. А октава вполне.
+1
С другой стороны, когда надо посчитать табличку — эксель (оо калк для любителей опенсорса) уверенно октаву запинает.
0
А вот если пойти в сторону оффтопа. Какие есть «аналоги экселя» кроме Open Office Calc и Gnumeric? Что-то ориентированное под виндузятника, не шибко жрущее, что бы таблицы+формулы и граффики, ну и естестественно халявное/донейт.
0
Libra )))))
0
угу
не шибко жрущее
0
тогда боюсь что только обрезанные сильно полуфабрикаты… вообщем чистого слабожрущего аналога екселя не видел, они же когда его писали брали исходники микрософт и от них плясали… они тогда под влиянием антимонопольного комитета дали какие то исходники, потом правда спецом выпустили козлы новую криво совместимую версию с опен сорс…

по сему не будет счастья только если кто то сам напишет с нуля )))
0
Вот это (полуфабрикаты) именно то что надо :) Потому как все кто выпускают «крутые продукты» имеют те же самые полуфабрикаты, только раздутые «красивыми гуи» и «модными граффиками». Такой ПО не подходит для повседневного использования в качестве вспомогательной утилиты, поскольку кроме этой «утилиты» на системе нихрена больше и не запустишь.
0
Ну или вот как уже сказали — Libre Office и прочие клоны OpenOffice, либо… Вот лично сам прришёл к тому, что мне Google Docs Spreadsheet намного быстрее, сподручнее и удобнее всего оффлайнового. Но это лично для меня.

А если буду бегать по заказчикам, то лучше оригинального MS Excell ничего не будет. Одно время так и жил — дома хватало либры, а на работе только строго правильный ёксель.
0
Что-то ориентированное под виндузятника, не шибко жрущее, что бы таблицы+формулы и граффики, ну и естестественно халявное/донейт
SciLab
0
Благодарю. Но боюсь в моём понимании это тоже многожрущее.
0
«В отличие от Линукс-фанатов и яблочников, Windows пользователи не стараются сделать из использования своей системы культ и уж тем более не превращают факт потребления услуг, предоставляемых системой, в свой личный подвиг. Поведение же большинства линуксоидов иначе как аггресивным снобизмом назвать нельзя. Яблочники — это вообще гламурные кисо в мире ИТ…» (C)

Как по мне проще пару раз клацнуть мышкой и не парится.
+1
  • avatar
  • a9d
  • 16 апреля 2012, 22:53
октаве и гнуплот есть под МАСТДАЙ, УРА ВИНДУЗЯТНИКИ! ))) я сам под виндой их поднимал когда на форуме ктор то попросил гнуплот посмотреть ))))
0
там куча улыбок ) у меня благостное настроение, я 2012 роллер сезон открыл))) не ругайте меня )) не портите праздник ))) ну плиз )
0
мои поздравления)
0
Однако, установке Octave под виндой посвящена приличных размеров простыня в вики. Это несколько не соответствует Windows-way.
0
Впрочем, вон тот последний пункт в этой простыне таки похож на виндовс-вей.
0
Насколько я вижу, октава — аналог матлаба (виндузятного, между прочим), т.е. математический язык программирования. Так что работа в режиме интерпретатора — это из матлаба пришло, а не линуха.
Штука мощная, но требует освоения.
0
уууу… мужики давайте не будем вспоминать откуда пришел интерпретатор… а то я язык LISP вспомню… который был и в линуксе и виндоусе и применялся в первых и последних автокадах )))
0
Ага, вспомни релюшки и лампы ещё :)
0
ололшечки…
имхо, это фортран, но сначала упрощенный, а потом расширенный на многомерные массивы…
0
не напоминай мне вортран у меня он два года был… как средство зароботка в 10 классе )))
0
тифу фортран _) мама кандидат наук… чему еще чадо учить как не фортрану и бейсику )))
0
Самое полезное в этом языке это работа с матрицами, для остального мне он кажется малопригодным (сам язык, не функции). Но с матрицами, других таких не знаю.
0
На нем моделировать хорошо. Написал программу-модель и кормишь ее числами.
Можно писать программки для матрасчетов. Типа гуишная форма, куда забиваешь данные и жмешь «посчитать»)
На него есть всякие дополнения, вроде симулинка.
В общем, все плюсы именно языка программирования — он хорош для больших задач, а не мелочи вроде той, что в топике.
0
Симулинк сама сладость в матлабе!
0
Физлаб тоже жжот. Хотя возмжоно это плагин к симулинку.
0
Да не… что то я о такой либе в матлабе не слышал…
0
Могу ошибаться конечно, но что такое было, я с ней не работал, но вот мой друган в нем какие то теплофизические схемы считал. Вроде закипающего чайника.
0
Та не… то не матлаб!
0
это Femlab — для работы с системами с распределенными ДУ (решает в конечных разностях изменения состояния какого-либо поля в зависимости от времени) Нагрев, давление, электростатика…
0
Если при моделировании не использовать матрицы и готовые решалки-функции то я лучше напишу модель на C. Но так почти никогда не бывает.

Для мелочи тоже хорошо, но плюсы языка не используются, согласен, только функции, и как обертка над gnuplot.
0
Даже без учета матриц (которые основа матлаба, он даже так и называется — MATrix LABoratory) у него есть плюс по сравнению с С — большая библиотека матфункций.
И вообще, в целом это С, заточенный на матричную математику. Со всеми вытекающими.
0
А как же MatCAD? Для любой сложности вычислений подходит идеально!
Набрал формулу… вбил константы, переменный… и готов ответ!
0
Во первых, Mathcad. Во вторых — капризная и довольно ограниченная софтина с нулевыми средствами отладки. Основной плюс — оно WYSIWYG.
Хотя студенты любят — все нужное есть, а изучать его особо не требуется.
Так что это скорее для не слишком сложных вычислений. Скажем, задачу в посте им решать удобно.
0
Это уже CAS.
0
А что такое CAS в данном контексте? Гугл выдает слишком много вариантов.
0
Computer Algebra System. Символьные вычисления.
0
Ну да, у него тоже несколько иная ниша, чем у матлаба и ему подобных.
И кстати, для задачки в топике это пожалуй самое подходящее средство. Ну и из всего математического софта я им пользуюсь больше всего.
0
Зачем там аналитически что-то делать? Задача решается как минимизация суммы квадратов, которая в случае апрроксимации полиномом сводится к СЛАУ, которая решается численно.
0
Для этого надо чуть лучше матан знать ^_^'
0
Computer Algebra System. То ядро, которое позволяет решать СЛАУ и подобные вещи.
Вообще за то, что в экс-СНГ студентов не учат матлабу(или другой равноценной программе) или Латеху пора кого-то убить. Сам когда-то лабы делал в экселе, но к счастью завязал. Эксель- это табличный редактор, а не математический пакет. Реально матлаб учится меньше чем за неделю, и потом вдруг понимаешь, что жизнь куда проще без экрана в клеточку. Любые типы расчетов, матмоделирования, построения графиков, анализа данных… Люди, делающие это в Экселе напоминают игроков «трактористов», играющих в Квейк без мышки. А Simulink!!! A Toolboxes!!! Тремя кликами мышки делаем себе фильтр или нейросеть, и дальше только кормим ее данными.
0
Ну нас матлабу учили. Правда, в курсе информатики, вместо С++ или Delphi, и то потому, что препод информатики был фанатом матлаба)
Ну и лабы у нас делали в маткаде.
Кстати, LaTeX разве матсистема? Насколько я знаю, это система матверстки, т.е. предназначена исключительно для того, чтобы формулы рисовать и печатать.
0
Нет конечно, но смотреть потом на дипломные работы или публикации, накорябанные в Ворде (некоторые еще в 97, потомушта такой на кафедре стоит), с разъехавшимися формулами, сбитой нумерацией аннотаций просто неприятно. Ну и ручками переделывать ворд из архивной в журнальную версию тоже приятного мало. А всего-то надо что прочитать курс на первом году, да принимать работы только в латехе, и к 4 году они будут благодарить за это. Реально сейчас альтернативы латеху как средству верстки технических текстов нету.
0
Ну это да, я лабы и диплом в ворде и верстал, юзая для формул MS Equation или его замену (MathText чтоли...). В принципе, для вывода на бумагу хватало, а электронную версию я не сдавал. Я даже ПО (на маткаде, лол) сдавал в виде распечаток.
0
Меня учили в паскале делать сложные мат расчеты, потом это на делфи, а уж потом на си и и маткаде и матлабе!
Просто цена лицензии этого всего огогошная! вот и используют всякую хрень! да и не во всех вузах об этом знают (как не прискорбно)!
Как аналог всему- Scilab (бесплатная) и под линукс и под винду есть!
0
Да эксель тоже не самая дешевая штука…
0
Но не под 1к американских рублей (как минимум)!
0
Даже не считая бесплатных альтернатив, есть студенческие версии Matlab, Derive, Mathematica. Ну и хороший вуз обеспечивает ПО учащихся.
0
У нашего вуза денег на нормальные компы-то не было (хотя они по сравнению с софтом стоят копейки), а уж софт исключительно пиратский был…
0
Ну так тем более ничего не мешало использовать новейшие программы задаром :D. Правообладатели должны вообще говорить спасибо за бесплатную рекламу своего софта среди самой активной целевой аудитории :)
0
Ну вот мы маткад, матлаб и прочий оркад и юзали.
0
Жлобство! Лучше себе намутить на новый джип… чем купить вузу ПО нормальное! Так все и происходит то в наших странах!
А когда приезжают представители с нормульных фирм и говорят что выпускники то вуза и гроша ломаного не стоят… и кроме сраного гавноверда 97 ничем не умеют пользоваться… все шишки летят на нижние уровни (тобиш — преподавателей)!
+1
а у нас наоборот в вузе самые продвинутые компы, софт проинженер юниграфикс катиа матлаб математика и тд кадов докуя… все лицензионное оракл QNX и тд и тп _)
зато зарплаты преподам смешно сказать, наверное дворники зашибают круче если мебель таскают пару раз в месяц + к зарплате )
0
Да кстати зарплата смешная!
Стипендия у некоторых аспирантов и то больше может быть чем зарплата у кандидата!
0
ну да я преподавал три года потом послал нахер все вот сефчас иногда когда звонят приезжаю на аврал сессию или приемку помогаю экзамены принимать… так как на кафедре числюсь…
0
Ну а я этим сейчас и занимаюсь… Хотя зарплата не на много хуже чем на заводах у большинства инженеров конструкторов!
0
+1 я сейчас инженер НИИ
0
Как бы поболтаться в воздухе (пока нету семьи и детей), защитить кандидатскую… а потом и валить можно куда угодно! или свое что либо замутить! И цена твоя и спрос на тебя будет больший!
0
ну у меня кандидатская по ГЛОНАСС… херня все это ))) затянет ) или же кандидатская обычно это проект над тем чем работаешь, И если он узкоспециальный то и не нужен никому из работодателей они на это сморят… вот например мы с семьем думаем переезжать на Украину в Ялту в крым, к жене, воздух лдучше, море и я с ужосом думаю а что я там буду делать… ЧТО! я спец по ГЛОНАСС… они там НАКУЙ не нужны…
0
Милости просим к нам на Украину!
ГЛОНАСС — не ГЛОНАСС! Какая разница! Умному человеку всегда найдется работа, хоть в Украине… хоть в России!
Мне чуток по проще — я электроприводом занимаюсь и тоже накуй не кому не нужен, честно говоря!
0
а я занимался системами автоматического управления (теория). Свалил из ВУЗа как женился, сейчас работаю по профилю в конторе связанной с автоматикой в нефтяной промышленности, получаю бабок в 2.5 раза поболее. К.т.н., доцент, только кого это сейчас в образовании волнует?
0
Как сказать «для не слишком сложных вычислений»...
Очень уж много там всего можно! Матлабу конечно уступает… А вот по мощьней экселя уж точно на порядки!!! И используют его при весьма сложных вычислениях! Студенты полюбили как раз иза простоты — что пишем, на то и ответ получаем!
0
А вот по мощьней экселя уж точно на порядки!!
Ты сравниваешь теплое с мягким. Типичную задачку экселя на матлабе решить — адский геморрой. Обратное тоже верно.
0
Маткад няша! У него просто зашибенный формульный редактор. Я когда диплом делал то там набирал форумыл и копипастил в ворд. Как родные вошли.
0
Ну вот это его основной плюс и есть. Хотя в диплом я предпочел формулы MathText'ом набирать, у маткада они несколько неканоничны. И он не дает что попало набрать, только синтаксически правильные выражения.
0
У меня с этим трабл был… нормоконтроль зарубил все такие формулы пришлось перебирать в ворде…
0
нормаконтроль страшная вещь… у нас еще фамилия тетки что сидит на нем Булкина… как ей что нести аж трясет… как я ее еше матом не послал… за 8 лет работы не пойму… может у меня крылья режутся… надо жену попросить посмотреть…
0
Не… тут особо без проблем… есть один дядя на кафедре… мог вздрючить за все! он сам решал как должны выглядеть правильно графики… что должно получиться у тебя в результате и как делать расчеты… Пилять! Хоть сейчас он мозги не насилует людям, с него сняли эту привилегию… У меня (Не только у одного) было пару раз желание его топором подрубать… Не важно какая у тебя тематика… не откравая диплом говорил что у тебя лажа и нужно все переделывать!
0
Хм они же не отличаютс по виду никак.
0
А как же ":=" вместо "=" и другие подобные мелочи?
0
А вместо := ставилась = из логических выражений. Все мелочи также решались.
0
Вместо таких извращений удобнее юзать MathType (это его я MathText по ошибке называл, забыл как называется правильно). Он помощнее встроенного MS Equation и главное — позволяет набирать формулы побыстрее, то ли хоткеями, то ли TeX-образным языком.
А формулы из маткада имели свойство сбиваться при редактировании. Я из вставлял только там, где нужны были именно формулы из маткада.
0
Я его знаю. Но чето он вообще не попер. То ли у него хоткеи дебильные то ли че, не смог я им пользоваться вообще.
0
0
Linux +5 к холивару. Комплект Linux + Windows +100 к холивару.
0
  • avatar
  • a9d
  • 17 апреля 2012, 00:53
Как то пару раз приходилось системы моделировать в IDMS MASS! Прогулина досовская, разработки конца 80х, начала 90х! Научила терпеливости и в последствии пользоваться paint)))

Чисто так… для для разнообразия показал)))
0
Мну ещё юзает mathomatic для небольших рассчётов

0
Кстати, есть специальный блог для таких статей — we.easyelectronics.ru/blog/CADSoft/
0
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.