- •§ 2.2. Командное окно системы matlab
- •§ 2.3. Рабочее пространство системы matlab
- •§ 2.4. Скаляры и массивы. Индексированные переменные
- •§ 2.5. Форматы представления вещественных чисел
- •§ 2.6. Арифметические выражения
- •2.6.1. Некоторая специфика использования вещественных данных
- •2.6.2. Некоторая специфика использования комплексных данных
- •2.6.3. Некоторые приемы работы с матрицами и векторами
- •2.6.4. Некоторые специфика выполнения арифметических и логических операций.
- •§ 2.7. Элементарные математические функции
- •Часть 2. Визуализация результатов вычислений
- •§ 2.8. Особенности графической подсистемы matlab
- •§ 2.9. Построение графиков функций одной переменной
- •2.9.1. Простые графики в декартовой системе координат.
- •2.9.2. Визуализация нескольких графиков.
- •2.9.3. Функция fplot.
- •2.9.4. Построение графиков в логарифмическом и полулогарифмическом масштабах.
- •2.9.5. Построение графиков в полярных координатах.
- •§ 2.10. Оформление графиков и графических окон
- •2.10.1. Выбор свойств линий.
- •2.10.2. Оформление осей координат.
- •2.10.3. Добавление надписей, заголовков и координатной сетки.
- •§ 2.11. Средства управления в графическом окне
- •§ 2.12. Общее знакомство с трехмерной графикой в matlab
- •2.12.1. Общий алгоритм визуализации функций двух переменных.
- •2.12.2. Построение трехмерных линий.
- •2.12.3. Построение поверхностей.
- •2.12.4. Задание дополнительных параметров трехмерных графиков.
- •2.12.5. Построение линий уровня.
- •2.12.6. Построение траектории точки, движущейся в пространстве.
- •2.12.7. Интерактивное редактирование графиков.
- •Часть 3. Вычисления с действительными и комплексными массивами чисел
- •§ 2.13. Операции отношения и логические операции над числами
- •2.13.1. Операции отношения.
- •2.13.2. Логические операции.
- •2.13.3. Приоритет операций.
- •§ 2.14. Формирование одномерных числовых массивов
- •2.14.1. Задание одномерных массивов и доступ к их элементам.
- •2.14.2. Об ускорении операций задания массива.
- •2.14.3. Об использовании операции формирования диапазона.
- •§ 2.15. Матрицы и векторы. Двумерные массивы чисел
- •2.15.1. Создание матриц и векторов.
- •2.15.2. Доступ к отдельным фрагментам матриц.
- •2.15.3. Удаление строк и столбцов матрицы.
- •2.15.4. Использование функций перестановки частей матриц.
- •2.15.5. Определение размеров и размерностей массивов.
- •2.15.6. Использование операций индексации.
- •2.15.7. Изменение размеров массива.
- •2.15.8. Специальные функции формирования массивов.
- •§ 2.16. Вычисления с массивами
- •2.16.1. Поэлементные и групповые операции над массивами.
- •2.16.2. Решение некоторых типовых задач линейной алгебры и аналитической геометрии.
- •2.16.3. Применение операций отношения и логических операций к массивам.
- •2.16.4. Некоторые функции для работы с массивами.
- •Часть 4. Стандартные средства решения некоторых типовых задач линейной алгебры и математического анализа
- •§ 2.17. Решение систем линейных алгебраических уравнений
- •§ 2.18. Решение некоторых задач линейной алгебры. Матричные функции
- •§ 2.19. Разреженные матрицы
- •§ 2.20. Решение нелинейных уравнений
- •§ 2.21. Поиск минимального значения функции
- •§ 2.22. Численное интегрирование
- •2.22.1. Использование метода трапеций.
- •2.22.2. Использование методов Симпсона и Гаусса-Лобатто.
- •2.22.3. Вычисление двойных интегралов.
- •§ 2.23. Операции над полиномами
- •2.23.1. Вычисление значения полинома.
- •2.23.2. Вычисление корней полинома.
- •2.23.3. Умножение и деление полиномов.
- •2.23.4. Дифференцирование и интегрирование полиномов.
- •§ 2.24. Интерполяция и аппроксимация данных
- •2.24.1. Полиномиальная аппроксимация.
- •2.24.2. Интерполяция сплайнами.
- •Часть 5. Символьные вычисления
- •§ 2.25. Создание символьных переменных, выражений и матриц
- •2.25.1. Создание символьных переменных.
- •2.25.2. Создание символьных выражений.
- •2.25.3. Создание символьных матриц.
- •§ 2.26. Символьные вычисления
- •2.26.1. Символьное дифференцирование.
- •2.26.2. Вычисление пределов.
- •2.26.3. Символьное интегрирование.
- •2.26.3. Вычисление суммы ряда. Разложение функций в ряды.
- •2.26.4. Упрощение выражений. Подстановки.
- •2.26.5. Управление точностью вычислений.
- •2.26.6. Операции над векторами. Операции над матрицами. Некоторые операции линейной алгебры.
- •2.26.7. Решение уравнений и систем уравнений.
- •§ 2.27. Визуализация результатов символьных вычислений
- •2.27.1. Построение двумерных графиков.
- •2.27.2. Построение трехмерных графиков.
- •Часть 6. Основы программирования на m-языке
- •§ 2.28. Основные понятия программирования в системе matlab
- •2.28.1. Назначение языка программирования matlab.
- •2.28.2. Основные средства программирования.
- •2.28.3. Основные типы данных.
- •2.28.4. Виды программирования.
- •2.28.5. Двойственность операторов, команд и функций.
- •2.28.6. Некоторые ограничения.
- •§ 2.29. Создание и использование m-файлов
- •2.29.1. Понятие об m-файлах.
- •2.29.2. Типы m-файлов.
- •2.29.3. Создание файл-программ.
- •2.29.4. Создание файл-функций.
- •2.29.5. Глобализация переменных и функций.
- •2.29.6. Синтаксический контроль программ.
- •§ 2.30. Управляющие структуры
- •2.30.1. Понятие об управляющих структурах.
- •2.30.2. Операторы цикла.
- •2.30.3. Операторы ветвления.
- •2.30.4. Прочие операторы.
- •§ 2.31. Работа с файлами
- •2.31.1. Общие замечания.
- •2.31.2. Подготовка файла к работе.
- •2.31.3. Завершение работы с файлами.
- •2.31.4. Контроль за исчерпанием данных.
- •2.31.5. Чтение из текстового файла.
- •2.31.6. Анализ ошибок в файловых операциях.
- •§ 2.32. Форматный ввод-вывод данных
- •2.32.1. Форматные преобразования (sprintf, sscanf).
- •2.32.2. Форматные преобразования при работе с файлами (fprintf, fscanf).
- •§ 2.33. Рекурсивные файл-функции. Производительность файл-функций
- •2.33.1. Понятие о рекурсивных файл-функциях.
- •2.33.2. Оценка производительности файл-функции.
- •§ 2.34. Файл-функции с переменным числом входных параметров и выходных значений
- •§ 2.35. Диалоговые программы
- •2.35.1. Ввод числовых и символьных данных.
- •2.35.2. Вывод результатов вычислений.
- •§ 2.36. Анимационные эффекты
- •§ 2.37. Контроль входных и выходных параметров файл-функции
- •§ 2.38. Отладка программы
- •2.38.1. Понятие о способах отладки программы.
- •2.38.2. Рекомендации по созданию и отладке программ.
- •Часть 7. Создание программ с визуальным интерфейсом
- •§ 2.39. Понятие о графическом интерфейсе пользователя (gui)
- •2.39.1. Предварительные замечания.
- •2.39.2. Основные команды для создания gui.
- •§ 2.40. Общие сведения о визуальной среде guide
- •§ 2.41. Программирование событий в matlab
- •§ 2.42. Свойства основных компонентов в matlab
- •§ 2.43. Диалоговые окна в matlab
- •§ 2.44. Динамическое создание компонентов
- •§ 2.45. Создание меню
- •§ 2.46. Некоторые рекомендации по созданию приложений с графическим интерфейсом пользователя
§ 2.36. Анимационные эффекты
Применим полученные знания об операторах M-языка для получения анимационных эффектов при визуализации результатов вычислений. Для решения такой задачи осуществляется предварительная подготовка отдельных кадров, которые сохраняются для последующего показа в некотором числовом массиве. Далее с помощью функции movie осуществляется последовательный покадровый показ созданного анимационного клипа.
В качестве первого соответствующего примера рассмотрим задачу о визуализации равномерного движения по окружности материального тела в виде бусинки. Имеем:
% Предварительное построение окружности
x=-2:0.01:2;
y1=sqrt(4-x.*x);
y2=-y1;
plot(x,y1,'k',x,y2,'k');
axis square;
hold on
% Размещаем бусинку в начальном положении
x=2; y=0;
h=plot(x,y,'.r');
% Задание режима отрисовки и стрирания объекта
set(h,'EraseMode','xor','MarkerSize',36);
% Динамически изменяем координаты точки, относящейся
% к графическому объекту line с описателем h,
% выполняем циклическое продвижение бусинки и ее перерисовку
t=0;
dt=0.1;
alpha=2*pi/200;
for k=1:1000
t=t+dt;
x=2*cos(alpha*t);
y=2*sin(alpha*t);
set(h,'XData',x,'YData',y) % перемещаем точку
% в новое положение
SMovie(k)=getframe; % сохраняем созданный
% файл видеоклипа
end;
movie(SMovie,1) % воспроизведение
% созданного видеоклипа
Результаты выполнения условно первой части представленной программы, связанной с предварительным построением окружности, приведены на рис. 2.36.1. Результат последующего размещения бусинки в начальном положении иллюстрирует рис. 2.36.2. Для воспроизведения созданного видеоклипа используется команда movie, причем при необходимости прокрутить снятый ролик несколько раз подряд, в качестве второго аргумента функции movie следует указать целое число большее единицы. При отсутствии дальнейшей необходимости в хранении видеоклипа рекомендуется освободить память в рабочем пространстве системы MATLAB, занятую под переменную Buf, т.е. задать команду
clear buf
(это целесообразно ввиду того, что видеобуферы имеют, как правило, весьма значительные размеры и нерационально расходуют память компьютера).
§ 2.37. Контроль входных и выходных параметров файл-функции
Как уже отмечалось ранее, несовпадение типов, а также количества фактических и формальных параметров является причиной неправильной работы, а в ряде случаев и аварийной останова M-функций. Для предотвращения подобных ситуаций при разработке соответствующей файл-функции в теле функции следует размещать блоки команд, осуществляющие проверку типов и количества входных значений.
Рассмотрим способы решения данной проблемы на примере следующей файл-функции MatrixOper:
function [A,B]=MatrixOper(X1,X2,x)
A=X1.*X2*x;
B=X2.*X2+x;
В результате работы данной файл-функции два массива X1 и X2 одинакового размера перемножаются поэлементно (одинаковые размеры вход-
Рис. 2.36.1. Траектория движения бусинки.
Рис. 2.36.2. Положение бусинки в момент времени t=0.
ных массивов X1 и X2 гарантируют выполнимость операции их поэлементного умножения), после чего результат этого перемножения дополнительно умножается на скаляр x. Таким образом, порождается первый из выходных массивов – массив A. Второй массив B отличается от первого тем, что получается сложением со скаляром (а не умножением).
Очевидно, что если пользователь по ошибке задаст формальные параметры X1 и X2 в виде массивов разных размеров, то в процессе выполнения файл-функции MatrixOper возникнет ошибка. Для того, чтобы избежать такой ситуации необходимо организовать в теле файл-функции MatrixOper проверку размерностей первого и второго передаваемого параметров:
function [A,B]=MatrixOper(X1,X2,x)
n1=ndims(X1);
n2=ndims(X2);
% Проверка размерностей векторов X1 и X2
if n1==n2
error('Размерности векторов X1 и X2 не совпадают')
else
for i=1:n1
if(size(X1,i)~=size(X2,i)
error('Размерности векторов не совпадают')
end
end
end
% Выполнение вычислений
A=X1.*X2*x;
A=X2.*X2+x;
После представленной выше модификации при вызове файл-функции MatrixOper с несовпадающими размерами первого и второго аргументов стандартная функция error будет корректно останавливать работу и выводить в командное окно диагностические сообщения (аргументы функции error). Далее пользователю будет необходимо повторно вызвать файл—функцию MatrixOper с правильными параметрами.
В целях дальнейшего повышения надежности следует добавить проверку третьего параметра файл-функции MatrixOper на скалярность (напомним, что в системе MATLAB скалярами являются матрицы размером 1х1), т.е. дополнить приведенный выше листинг файл-функции MatrixOper следующим фрагментом кода:
[m,n]=size(x)
if(m~=1|n~=1)
error('Третий параметр не является скаляром')
end
Разумеется, также целесообразно проверить общее число элементов в списке формальных параметров. Для этой цели в системе MATLAB предусмотрена специальная переменная с именем nargin, значением которой является количество аргументов, фактически переданное файл-функции при ее вызове. Проверка количества формальных параметров осуществляется следующим образом:
if nargin~=3
error('Неверное количество входных параметров')
end
В системе MATLAB также предусмотрена переменная nargout, содержащая число возвращаемых значений в текущей форме вызова рассматриваемой файл-функции. Так, например, вызов вида
[s1,s2,s3]=MatrixOper(X1,X2,x)
предполагает получение трех возвращаемых значений, в то время как из определения файл-функции следует, что возвращаемых параметров у файл-функции два. В целях предотвращения такого формата вызова файл-функции MatrixOper и предупреждения пользователя о несовпадении количества ожидаемых возвращаемых значений их номинальному количеству в теле файл-функции следует осуществить проверку переменной nargout:
if nargout~=2
error('Неверное количество выходных параметров')
end
Выполненные дополнения файл-функции MatrixOper обеспечивают обращение к файл-функции лишь с правильным количеством входных и выходных параметров. Вместе с тем, ранее уже рассматривались встроенные функции системы MATLAB, которые вызывались с разным количеством входных параметров (что, впрочем, не вполне типично). При этом фактически разные, но близкие друг другу по логике варианты работы функции, выполнялись под одним и тем же именем, что достаточно наглядно и удобно. Такой функцией является, например, функция plot, осуществляющая построение графиков функций.
Итак, при разработке файл-функций целесообразно предусматривать многовариантность схем вычислений, выбор которых зависит от количества выходных параметров, при этом необходимо предусмотреть проверку их количества, и, вместо прекращения выполнения файл-функции обеспечить исполнение соответствующей ветви реализуемого алгоритма. Указанное выше в полной мере относится и к количеству возвращаемых значений. Рассмотрим, например, файл-функцию Test_Function:
function [res1,res2]=Test_Function(var1,var2)
switch nargin
case 1
if nargout==1
res1=var1*2;
elseif nargout==2
res1=var1*2;
res2=var1+3;
else error('Требуется 1 или 2 выходных параметра')
end
case 2
if nargout==1
res2=var1.*var2;
elseif nargout==2
res1=var1.*var2;
res2=var1+3;
else error('Требуется 1 или 2 выходных параметра')
end
otherwise error('Требуется 1 или 2 параметра')
end
Представленная файл-функция допускает несколько вариантов заранее предусмотренных форматов вызова.
Заметим, что здесь для краткости опущена проверка размеров входных параметров, подробно рассмотренная выше. Кроме того, для большей наглядности здесь отслеживается ситуация несоответствия количества формальных и фактических входных и выходных параметров.
В целом, степень подробности проверок зависит от назначения файл-функции. Если файл-функция создается для собственного использования, то проверки, очевидно, могут быть несколько менее строгими, ввиду того, что выполнение файл-функций осуществляется в режиме интерпретации под полным контролем системы MATLAB. Возникающие ошибки автоматически обрабатываются самой этой системой, и в командном окне выдается соответствующее диагностическое сообщение. Вместе с тем, при разработке файл-функций для внешних потребителей, проверки необходимо сделать более жесткими, так как внешнему пользователю, как правило, сложно разобраться во всех деталях работы рассматриваемой файл-функции.
