MATLAB для студента, специалиста.
Цель данной статьи — познакомить читателя с одной из наиболее популярных систем компьютерного моделирования. Автор надеется, что после изучения этого материала читатели проявят интерес к MATLAB, а, возможно, попробуют реализовать примеры, приведенные ниже. Не исключено, что в результате на свет появятся новые приверженцы этой системы, которые с успехом запишут на месте многоточия, оставленного в заголовке статьи, свою профессию или занятие. Все-таки недаром пользователи MATLAB отмечают его безграничность.
Итак, что же умеет MATLAB? Во-первых, для неискушенного пользователя он может стать просто удобным калькулятором. Наберите в командной строке 2+2, нажмите Enter, получите ответ. 🙂 Такой калькулятор считает точно, знает все необходимые математические функции и константы, легко справляется с комплексными числами.
Следующим этапом знакомства с программой станет так называемый диалоговый режим. MATLAB запоминает все результаты вычислений и введенные ранее команды, поэтому решать с его помощью самые разные классы задач очень удобно: ввел оператор, посмотрел результат, выполнил следующее действие и т.д., до получения конечного результата. При необходимости весь ход расчетов можно сохранить и позже вернуться к нему. Уже здесь пользователю начнут открываться замечательные особенности системы MATLAB. Ведь даже название программы далеко не случайно — слова «Матричная Лаборатория» указывают, что базовой структурой, с которой работает MATLAB, является матрица. Это действительно удобно, ведь чаще всего работа ведется с набором значений каких-либо функций или переменных. Рассмотрим реализованный средствами MATLAB классический пример табулирования функции. Здесь он займет всего две строки:
В первой определяется матрица значений аргумента функции x от 0 до 10 с шагом 0.1, во второй строке вычисляется матрица значений функции y=sin x. Все просто! Отметим, что поскольку такие вычисления в программе являются естественными, то и выполняются они с потрясающей скоростью. Если теперь ввести еще одну команду, получим график синусоиды.
Надо сказать, что практически все задачи, решаемые в 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 точек в классическом методе конечных разностей:
Осталось добавить десяток-другой строк кода, и ваш собственный решатель готов!
Разработчики MATLAB в последнее время достаточно оперативно вносят в программу полезные изменения и новые возможности. Например, в версии 2007а впервые появилась поддержка распределения выполняемых задач на несколько процессорных ядер. При этом от пользователя не требуется внесение изменений в уже разработанные программы — параллельность реализуется на уровне вычислительного ядра MATLAB. В свете грядущей гегемонии двух-, четырех- и более ядерных процессоров, согласитесь, новшество весьма интересное. Первые оценки пользователей показали приблизительно тридцатипроцентный рост производительности на двухъядерных процессорах для различных классов задач.
Не забывают разработчики и об удобстве пользователей. В последних версиях программы серьезно изменился встроенный редактор для работы с m-файлами. В частности, появилась возможность выделять участки кода в ячейки (cells). Такой подход действительно помогает визуально отделить различные блоки, а при отладке еще и оперировать каждой ячейкой в отдельности.
Возможно, пользователи системы Mathematica сделают замечание, что они с понятием ячеек знакомы уже давным-давно. И, ко всему прочему, они могут в своих проектах сворачивать ячейки (аналог модного сейчас термина folding), а вот MATLAB этого делать не умеет. Да, это так. И здесь весьма четко просматривается приверженность создателей MATLAB к процедурному программированию. Зачем нам прятать куски кода, если можно легко оформить его в виде подключаемой функции? А позже использовать полученную функцию снова и снова для вновь создаваемых программ!
Также сравнительно недавно в системе MATLAB появилась одна из интересных новинок, серьезно ускоряющих построение и редактирование графиков. Речь идет о возможности вручную настроить внешний вид и параметры полученного двумерного или объемного изображения, а затем автоматически создать m-файл, в котором все заданные пользователем параметры будут сгенерированы в виде функции.
Теперь дальнейшая работа по построению остальных графиков сведется к передаче этой функции новых данных. Красота!
Надеюсь, все мои восторги были высказаны не зря, и читатели с удовольствием продолжат знакомство с MATLAB самостоятельно. Желаю удачи в изучении увлекательного мира систем компьютерной математики.
Табулирование функции в системе MATLAB
Математическая функция может быть представлена в виде формулы, таблицы или графика. В системе MATLAB табулирование функции осуществляется с помощью функции subs ().
Синтаксис функции subs(f, х, х1) выглядит следующим образом: f — функция, заданная аналитически; х — аргумент функции f; х1 — набор значений аргумента х, для которых определяется значение функции f.
Переменная х1 может быть представлена в виде вектора или ранжированной переменной хn, где хn начальное значение х1, Δх — шаг, хk — конечное значение х1.
Технология табулирования функции f(x) включает несколько шагов:
- Определение необходимых символьных переменных с помощью команды syms
- Задание значений переменной х1.
- Задание функции табулирования у =f(x).
- Вызов функции табулирования subs с соответствующим параметрами.
- аргумент лежит в диапазоне [0; 1] и меняется с постоянным шагом h=0.2;
- значения аргумента заданы вектором [0, 0.5, 1, 2, 5].
Функция subs позволяет табулировать одновременно несколько функций. Для этого необходимо параметр у представить в виде матрицы табулируемых функций.
Кроме того, MATLAB позволяет табулировать функции, используя матричные операции и не обращаясь к функции subs. Технология вычислений в этом случае состоит в выполнении следующих операций:
Раздел 2. Программирование в MatLab и табулирование функций
Создать 2 отдельных М-файла, содержащих каждый свою отдельную функцию. Каждый М-файл должен содержать задание области значений переменной при помощи условного оператора перехода – «if»; определять конкретное значение параметра(ов).
В отдельном М-файле написать программу обращения к созданным М-файлам, используя условный оператор перехода – «if». Точка перехода от одной функции к другой: х= последняя цифра студенческого.
Задать вектор независимых переменных. Задать необходимые параметры (если эти числа не были определены в М-файлах).
Используя арифметический оператор цикла задать шаг х и последовательно вычислить у.
Создать матрицу независимых переменных и соответствующих значений функции.
Построить график (х, у) с заданным цветом и типом линий.
Отчет о выполненных заданиях, тексты программ и результаты представить в виде контрольной работы.
Варианты заданий
Номер варианта соответствует порядковому номеру студента в списке студентов группы.
1.
;

2
.


3. 

4
.

5
.

6
.


7. 

8
.


9. 

1
0.

1
1.

1
2.


13. 

1
4.


15. 

1
6.

1
7.

1
8.


19. 


20. 

2
1.

2
2.

2
3.

2
4.

2
5.

Основы работы в MATLAB: учебное пособие/ М.В.Бураков.- ГУАП. СПб., 2006.-68с.;
Ануфриев И. MatLab 5.3/6.х – самоучитель, «ВВХВ-Петербург»,С-Пб 2003г. 722с.;
Дьяконов В.П. Справочник по применению системы MatLab – М., 1993г.,112с.
Кривилев А.В. Основы компьютерной математики с использованием системы MATLAB. М.:Лекс-Книга, 2005.-496 с.
Некоторые справочные сведения по применению системы MatLab
Формирование векторов и матриц.
i=[1 2 3 4 5] — создает вектор-строку из пяти элементов.
i=[1;2;3;4;5] — создает вектор-строку из пяти элементов.
i=1:0.5:20 — создает вектор-строку из равноотстоящих на величину 0.5 элементов в диапазоне от 1 до 20.
i=(1:0.5:20)’ — создает вектор-строку из равноотстоящих на величину 0.5 элементов в диапазоне от 1 до 20.
Символ «’» обозначает эрмитово сопряжение – сочетание транспонирования и комплексного сопряжения. Так как элементы вектора вещественные, комплексное сопряжение ничего не меняет.
Для указания транспонирования без комплексного сопряжения необходимо добавить точку – «.’».
Команда L=length(x) возвращает длину вектора х.
Точка используется и для указания поэлементных операций умножения и деления матриц.
Y=A*B — умножение матриц A и B по правилам матричной алгебры.
Y=A.*B — перемножает одноименные элементы матриц А и В.
Самый простой способ формирования матриц заключается в непосредственном вводе их элементов (по строкам) с клавиатуры – например: А= [1 2 3; 4 5 6; 7 8 9], получается матрица А размером 3*3:
Введение
MATLAB- это высокопроизводительный язык для технических расчетов. Он включает в себя вычисления, визуализацию и программирование в удобной среде, в которой задачи и решения выражаются в форме, близкой к математической. Типичное использование MATLAB:
* анализ данных, исследования и визуализация;
* научная и инженерная графика;
* разработка приложений, включая создание графического интерфейса.
Слово MATLAB означает матричная лаборатория (matrixlaboratory). MATLAB был специально написан для обеспечения легкого доступа к LINPACK и EISPACK, которые представляют собой современные программные средства для матричных вычислений.
MATLAB развивался в течении нескольких лет, ориентируясь на различных пользователей. В университетской среде, он представлял собой стандартный инструмент для работы в различных областях математики, машиностроении и науки. В промышленности, MATLAB — это инструмент для высокопродуктивных исследований, разработок и анализа данных.
В MATLAB важная роль отводится специализированным группам программ, называемых toolboxes. Они очень важны для большинства пользователей MATLAB, так как позволяют изучать и применять специализированные методы. Toolboxes — это всесторонняя коллекция функций MATLAB (М-файлов), которые позволяют решать частные классы задач. Toolboxes применяются для обработки сигналов, систем контроля, нейронных сетей, нечеткой логики, вэйвлетов, моделирования и т.д.
Табулирование функций
1.1 Постановка задачи
Данная задача широко используется в экологии, теплофизике и других дисциплинах. Обычно функции, описывающие какой-либо процесс, весьма громоздки и создание таблиц их значений требует большого объема вычислений.
Рассмотрим два случая табулирования функции:
1. С постоянным шагом изменения аргументов.
2. С произвольным набором значений аргумента.
Алгоритм реализуется путем организации какого-либо цикла.
Пример 1. Вычислить

при R = 4.28 10 -2 ; = 2.87;
хi изменяется с шагом х = 2; хп = 2; хк = 10.
Введем обозначение la = 2.87.
R = 4.28е-02; la = 2.87;
% Задается начальное значение х, шаг dx и конечное значение х

% Для вывода значения у в конце строки символ ;не ставится!
В окне команд появляются после нажатия кнопки выполнить значения функции у, которые затем можно скопировать в какой-либо файл.
Результаты вычислений: ans =
Решение системы линейных алгебраических уравнений (СЛАУ)методом исключения Гаусса
2.1 Постановка задачи
К решению систем линейных уравнений сводятся многочисленные практические задачи, например различные краевые задачи для обыкновенных и в частных производных дифференциальных уравнений. Можно с полным основанием утверждать, что данная проблема является одной из самых распространенных и важных задач вычислительной математики.
Пусть задана система п линейных алгебраических уравнений с п неизвестными:

Система уравнений (2.1) в матричной форме представляется следующим образом:
где А — квадратная матрица коэффициентов, размером п п строк и столбцов;
Х — вектор-столбец неизвестных;
В — вектор-столбец правых частей.
Систему уравнений (2.2) можно решить различными методами. Один из наиболее простых и эффективных методов является метод исключения Гаусса и его модификации. Алгоритм метода основан на приведении матрицы А к треугольному виду (прямой ход) и последовательном вычислении неизвестных (обратный ход). Эти процедуры можно выполнять над невыраженными матрицами, в противном случае метод Гаусса неприменим.
Недостатком метода является накапливание погрешностей в процессе округления, поэтому метод Гаусса без выбора главных элементов используется обычно для решения сравнительно небольших (п 100) систем уравнений с плотно заполненной матрицей и не близким к нулю определителем. Если матрица А сильно разрежена, а ее определитель не близок к нулю, то метод Гаусса пригоден для решения больших систем уравнений. В MATLAB имеется обширный арсенал методов решения систем уравнений (2.2) методом исключения Гаусса. Для этого применяются следующие операторы