MATLAB для студента, специалиста...

Цель данной статьи - познакомить читателя с одной из наиболее популярных систем компьютерного моделирования. Автор надеется, что после изучения этого материала читатели проявят интерес к MATLAB, а, возможно, попробуют реализовать примеры, приведенные ниже. Не исключено, что в результате на свет появятся новые приверженцы этой системы, которые с успехом запишут на месте многоточия, оставленного в заголовке статьи, свою профессию или занятие. Все-таки недаром пользователи MATLAB отмечают его безграничность.

Итак, что же умеет MATLAB? Во-первых, для неискушенного пользователя он может стать просто удобным калькулятором. Наберите в командной строке 2+2, нажмите Enter, получите ответ. :-) Такой калькулятор считает точно, знает все необходимые математические функции и константы, легко справляется с комплексными числами.

Следующим этапом знакомства с программой станет так называемый диалоговый режим. MATLAB запоминает все результаты вычислений и введенные ранее команды, поэтому решать с его помощью самые разные классы задач очень удобно: ввел оператор, посмотрел результат, выполнил следующее действие и т.д., до получения конечного результата. При необходимости весь ход расчетов можно сохранить и позже вернуться к нему. Уже здесь пользователю начнут открываться замечательные особенности системы MATLAB. Ведь даже название программы далеко не случайно - слова "Матричная Лаборатория" указывают, что базовой структурой, с которой работает MATLAB, является матрица. Это действительно удобно, ведь чаще всего работа ведется с набором значений каких-либо функций или переменных. Рассмотрим реализованный средствами MATLAB классический пример табулирования функции. Здесь он займет всего две строки:

x=0:0.1:10
y=sin(x)

В первой определяется матрица значений аргумента функции x от 0 до 10 с шагом 0.1, во второй строке вычисляется матрица значений функции y=sin x. Все просто! Отметим, что поскольку такие вычисления в программе являются естественными, то и выполняются они с потрясающей скоростью. Если теперь ввести еще одну команду, получим график синусоиды.

 
plot(x,y)

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

Есть у авторов MATLAB еще один конек - скорость. Если решение какой-либо задачи можно ускорить, используя новые алгоритмы или методы, - будьте уверены, MATLAB уже умеет это делать. Чтобы расставить все точки над i, проведем небольшой тест по сравнению производительности наиболее популярных среди пользователей систем символьной и компьютерной математики. Классическую задачу обращения квадратной матрицы большого размера выполнят MATLAB, MathCad и Mathematica. Испытания проводились на одном компьютере, учитывалось лишь время выполнения оператора B=inv(A), B:=A^(-1), B=Inverse[A] для каждой программы соответственно. Результаты действительно потрясают: MATLAB выполнил расчет быстрее, чем MathCad и Mathematica, вместе взятые. Сравните сами: 2 секунды против 23 и 26 секунд! Можно проводить и другие тесты, но вряд ли картина сильно изменится.

Как всем прекрасно известно, хорошего всегда не хватает. Поэтому рано или поздно у пользователей системы возникает ощущение, когда при всем богатстве встроенных функций хочется чего-то большего. Это значит, что настало время открыть для себя богатство и гибкость m-файлов. MATLAB позволяет разрабатывать собственные программы, придумывать новые алгоритмы и нестандартные приемы. Программировать будет несложно, ведь все операторы уже встречались при работе в диалоговом режиме. Просто теперь они записаны последовательно в одном файле! (Те, кто пытается программировать в MathCad, уже могут завидовать.) Также появляется возможность реализовывать циклы, условия и прочие радости настоящих программистов. При необходимости разработанный проект можно будет скомпилировать в исполняемый exe-файл.

Такая свобода маневра для пользователя может быть полезна в случае оптимизации времени выполнения сложных алгоритмов. В качестве примера можно привести процесс решения дифференциальных уравнений. Разумеется, MATLAB умеет решать такие уравнения, однако если вас не устраивает реализованный программистами метод Рунге-Кутты, можно написать свой. Подобная открытость программы будет весьма кстати и при решении нестандартных задач. Так, например, любители решать дифференциальные уравнения в частных производных по достоинству оценят как встроенные решатели, так и функции по работе со специальными видами матриц, позволяющие реализовать свои собственные алгоритмы. Следующие две строки кода показывают, как в MATLAB легко получается тридиагональная разреженная матрица для представления второй производной для n точек в классическом методе конечных разностей:

e = ones(n,1)
A = spdiags([e -2*e e], -1:1, n, n)

Осталось добавить десяток-другой строк кода, и ваш собственный решатель готов!

Разработчики MATLAB в последнее время достаточно оперативно вносят в программу полезные изменения и новые возможности. Например, в версии 2007а впервые появилась поддержка распределения выполняемых задач на несколько процессорных ядер. При этом от пользователя не требуется внесение изменений в уже разработанные программы - параллельность реализуется на уровне вычислительного ядра MATLAB. В свете грядущей гегемонии двух-, четырех- и более ядерных процессоров, согласитесь, новшество весьма интересное. Первые оценки пользователей показали приблизительно тридцатипроцентный рост производительности на двухъядерных процессорах для различных классов задач.

Не забывают разработчики и об удобстве пользователей. В последних версиях программы серьезно изменился встроенный редактор для работы с m-файлами. В частности, появилась возможность выделять участки кода в ячейки (cells). Такой подход действительно помогает визуально отделить различные блоки, а при отладке еще и оперировать каждой ячейкой в отдельности.

Возможно, пользователи системы Mathematica сделают замечание, что они с понятием ячеек знакомы уже давным-давно. И, ко всему прочему, они могут в своих проектах сворачивать ячейки (аналог модного сейчас термина folding), а вот MATLAB этого делать не умеет. Да, это так. И здесь весьма четко просматривается приверженность создателей MATLAB к процедурному программированию. Зачем нам прятать куски кода, если можно легко оформить его в виде подключаемой функции? А позже использовать полученную функцию снова и снова для вновь создаваемых программ!

Также сравнительно недавно в системе MATLAB появилась одна из интересных новинок, серьезно ускоряющих построение и редактирование графиков. Речь идет о возможности вручную настроить внешний вид и параметры полученного двумерного или объемного изображения, а затем автоматически создать m-файл, в котором все заданные пользователем параметры будут сгенерированы в виде функции.

Теперь дальнейшая работа по построению остальных графиков сведется к передаче этой функции новых данных. Красота!

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

BULB

Версия для печатиВерсия для печати

Номер: 

40 за 2007 год

Рубрика: 

Software
Заметили ошибку? Выделите ее мышкой и нажмите Ctrl+Enter!