Источник: http://www.mycomp.com.ua/text/7105


N 25 (300) 21.06.2004

Пингвин на физмате

Владислав СВЕТЛИЧНЫЙ



В последнее время в компьютерной периодике, в том числе и в МК, довольно много внимания уделяется мультимедийным возможностям Linux, наряду с проблемами использования этой системы для работы в офисе, на домашних компьютерах и, естественно, на сервере. Но все почему-то забывают, что изначально компьютер изобрели вовсе не для того, чтобы слушать ?эмпэшки? и админить локалку, и даже не для того, чтобы геймиться в Кваку и набирать текст. Главная задача ПК кроется в его названии; если кто-то вдруг не в ладах с аглицким═- ?computer? означает ?тот, кто вычисляет?, а следовательно, первичное предназначение этого хитроумного устройства═- для научных задач, для исследований. В этой статье я попытаюсь рассказать про физматовский и инженерный софт для Linux, не обойду вниманием и CAD-системы. Думаю, тема актуальна для многих, начиная от школьников и студентов, кончая инженерами-конструкторами. Вначале мы попробуем на вкус...

Что-нибудь попроще

Калькулятор═- по-настоящему нужная вещь. По поводу оконных я особо распространяться не буду, скажу лишь, что наиболее удобным и функциональным мне показался kcalc из KDE (Рис.═1). Поддерживает статистические и тригонометрические функции, демонстрируя довольно высокую точность вычислений, вдобавок, может похвалиться прекрасным интерфейсом (последнее, впрочем, свойственно всем приложениям из комплекта KDE).

Рис. 1.

Но намного более удобны консольные калькуляторы. Как же консоль может быть удобнее иксов? Приведу пример. Нам надо вычислить значение 23-3(sin(x)+cos(x/2))/x при x=4. Запускаем консольный калькулятор bc и вводим следующие строки:

x=4

23-3*(s(x)+c(x/2))/x

Нажимаем Enter и получаем ответ: 23.87971199889130297877. А теперь если надо вычислить значение того же выражения для x=5, то вам не придется набирать все заново. Просто введите x=5, а затем воспользуйтесь историей команд (точно так же, как в bash,═- кнопками курсора ?вверх? и ?вниз?). А теперь попробуйте то же самое проделать в kcalc. Не спорю, это вполне осуществимо, но почему-то мне не хочется так делать═:-).

Итак, мой любимый калькулятор═- bc ( http://www.gnu.org/software/bc/). При кажущейся простоте и неказистости он способен на многое. Принцип его действия понятен любому чай... простите, любому неосведомленному пользователю: вы вводите 2+2, нажимаете Enter и получаете ответ: 4. Запускать программу лучше строкой bc═-l (ключ -l подключает дополнительные функции вроде синуса, экспоненты etc, а также разрешает работать с вещественными числами). Как я уже сказал, работает история команд, а еще доступны элементы программирования: переменные, операторы ввода-вывода, if...then...else, циклы for и while, функции и много чего другого. В выражениях можно использовать операции +, -, *═(умножение), /═(деление), ^═(возведение в степень), а также встроенные функции sqrt═(квадратный корень), s═(синус), c═(косинус) и некоторые другие. В bc можно использовать и C-like выражения, например x*=5 и c^=4 эквивалентны соответственно x=x*5 и c=c^4, а i++═- то же самое, что i=i+1. Больше я ничего вам не скажу, благо возможности программы исчерпывающе описаны в man═bc.

Еще один консольный редактор═- dc, отличительная особенность которого═- использование принципа ?обратной польской записи?. Вы когда-нибудь программировали на Форте? Ну а работали когда-нибудь на старом советском программируемом калькуляторе? Если да, то наверняка знаете, о чем речь; если нет═- обратитесь к man═dc.

Покамест на минутку оставим калькуляторы в покое и поговорим об очень полезных математических консольных программах, которые значительно облегчают жизнь.

Утилита factor═- раскладывает натуральное число на простые множители. Пользоваться ей очень просто: вы вводите factor═67893 и получаете ответ═- 67893:═3═7═53═61.

Утилита units═- для тех, кто недоумевает, почему гнусные англичане используют всякие там мили вместо привычных нам километров, а вместо Цельсия у них в почете товарищ Фаренгейт. Описываемая утилита с легкостью конвертирует различные величины друг в друга, понимая при этом 2131 (две тысячи сто тридцать одну═- для сомневающихся) различных единиц измерения и 53═префикса (всякие там милли-, пико-, нано- и═т.д.) Запускать программу нужно строкой units --verbose (--verbose включает режим комментирования расчетов). Хэлп я вам пересказывать не буду, даже не надейтесь═:-)═- поэтому зайдите в man═units. Кстати, ман-страница хорошо и обстоятельно написана, рекомендую прочитать.

Строим графики

Часто бывает нужно построить график какой-либо функциональной зависимости или изобразить графически какие-то данные. Способ ?взять бумагу, линейку и карандаш? даже не рассматривается (такие фантастические идеи оставим для РФ═:-))═- попробуем это сделать на компьютере.

Первая программа, рассматриваемая нами,═- это kmplot из комплекта KDE. Достаточно удобная софтина, которая предназначена для образовательных целей, но вполне может использоваться для построения не очень сложных графиков. Для того чтобы ввести формулы функций, выбираем пункт меню Functions═> Functions и в появившемся диалоге вводим выражения типа f(x)=1/x. Если вы хотите использовать несколько функций, то все они должны носить разные имена═- f(x), g(x), c(x) и так далее═- смотри Рис.═2. В результате мы получим нечто напоминающее Рис.═3.

Рис. 2. ═══ Рис. 3.

Теперь об экспорте в другие форматы. Вначале я думал, что в этой программе вообще отсутствует такое понятие как экспорт. Но оказалось, что не все так плохо,═- экспорт в PDF и PostScript все-таки предусмотрен. Для того чтобы сохранить график в один из этих форматов, заходим в File═> Print, и перед нами появляется вот такое диалоговое окошко, как показано на Рис.═4. Теперь в выпадающем списке выбираем Print to═File (PDF) или Print to═File (PostScript), а в текстовом поле Output File укажите имя файла. Жмите на кнопку Print и наслаждайтесь результатом. Я, кажется, предупреждал вас, что интерфейс KDE-приложений порой весьма озадачивает?

Рис. 4.

Еще одна программа подобного рода═- mathplot ( http://www.chez.com/prigaux/mathplot.html). В отличие от предыдущей kmplot, эта ?чертилка? обладает большим арсеналом встроенных функций, умеет исследовать функции (находить экстремумы, ?нули? и═т.д.), а экспорт в EPS (Encapsulated PostScript) вынесен в отдельный пункт меню, а не спрятан в диалоге настройки вывода на печать═:-). В качестве библиотеки виджетов используется Tk. Конечно, хотелось бы лицезреть более приятные виджеты Qt или GTK, но, как гласит русская пословица, фриварному коню в зубы не смотрят═:-). От себя замечу, что прога очень хорошо себя зарекомендовала по ходу изучения автором темы ?Мат.═анализ?═:-). Согласен, комп не сможет так подробно описать ход решения, как это сделаете вы, но все же ?решить задачу намного проще, если знаешь ответ? (это сказал кто-то из великих ученых═- по-моему, Нильс Бор).

Ну а теперь разбегайтесь все═- GNUPlot ( http://www.gnuplot.info) идет! Мощнейшая программа для построения графиков функций, да и не только. Графики могут быть как в 2D, так и трехмерные. Настраивается абсолютно все═- начиная от толщины линий и заканчивая углом, под которым будет виден 3D-график.

Попробую рассказать о том, как это чудо нужно юзать. Gnuplot работает в интерактивном консольном режиме (как и bc; при этом доступна история команд), но для прорисовки графиков ей необходимы иксы, а потому лучше всего запускать эту программу из эмулятора консоли вроде xterm или konsole. Для построения двухмерных графиков используется команда plot, для трехмерных═- splot. Например, plot sin(x)- строит график функции y=sin(x); plot [-3:3] 2*x+5-═- график y=2x+5 при x═?═[-3;3]; splot x**2-y**2- соорудит график z=x^2-y^2═- смотри Рис.═5 (пояснение по формуле функции═- в Gnuplot; вообще, во многих других программах операция═** означает возведение в степень).

Рис. 5.

Теперь о насущном═- об экспорте в другие форматы. По-моему, разработчики Gnuplot могли бы и получше продумать этот пункт. Вначале небольшой ликбез. В доке к Gnuplot повсеместно используются такие понятия как terminal и output. Terminal═- это тип изображения, которое генерирует программа. По умолчанию стоит терминал═ x11═- график показывается в отдельном иксовом окошке. Но командой set terminal terminal_type, где вместо terminal_type подставляется одно из значений═- png, dxf, gif, corel, latex, pdf, postscript, svg, x11 и так далее (полный список═- в документации), вы можете выставить любой тип терминала. Output═- это то, куда будет выводится чертеж. По умолчанию═- STDOUT, но командой set═output file_name можно перенаправить вывод в файл. Таким образом, чтобы сохранить график квадратичной функции в формате png, нужно выполнить следующие действия:

Вдумчивый читатель спросит: а почему я не добавил строку set═output STDOUT? Дело в том, что при установленном типе терминала x11 параметр output просто-напросто игнорируется! Почему? Ответ на этот и на многие другие вопросы вы попробуете найти в /usr/share/doc/gnuplot-x.x.x/gnuplot.html (в самом деле, не буду же я здесь пересказывать весь хэлп!) Вы не знаете английский?═- стыдитесь, это не избавляет вас от ответственности. Лироэпическое отступление. Во-первых, если вы вообще смеете подходить к компьютеру, то вы просто обязаны знать ангельскую мову на уровне разумения того, че там ваще написано═:-). А во-вторых: как вы думаете, неужели все разработчики ПО живут в Англии, США, Австралии и других англоязычных странах? Хотя бы те факты, что Торвальдс═- скандинав, KDE═- германская разработка, а над HTML-редактором Quanta изначально работали отечественные девелоперы, должен вас натолкнуть на тот факт, что приведенное выше утверждение не совсем соответствует истине═:-). А следовательно: во-первых, разработчики ПО при написании документации используют так называемый Basic English (?ломаный английский?), т.е. обходятся без замысловатых лексических оборотов, отчего текст читается достаточно легко; во-вторых, уж если программист удосужился выучить этот нудный и непонятный язык, то юзер просто обязан проявить к нему (то бишь к программисту) уважение и прочитать документацию к программе. Конец лироэпического отступления.

Даже такому безнадежному линуксоиду, как я, понятно, что ни у кого нет желания угробить раньше времени клавиатуру, набивая вручную команды, чтобы построить график. Поэтому немного скажу о фронтэндах. В принципе, в Сети вы найдете множество оболочек к gnuplot, но совершенно неожиданно я обнаружил одну из них... в LaTeX-редакторе Kile (http://kile.sourceforge.net)═- пункт меню Graph═> Gnuplot Front End. Благодаря удобному GUI-интерфейсу можно легко настроить практически все параметры, а также имеется возможность ручного редактирования введенных команд. Как выглядит окно Gnuplot Front End, показано на Рис.═6, построенный с помощью программы график═- на Рис.═7.

Рис. 6. ════ Рис. 7.

(Продолжение следует)


_ Выход _