- •§ 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.13.3. Приоритет операций.
Логические операции (кроме операции «Логическое НЕ», называемой также «операция отрицания») имеют самый низкий приоритет. Более подробные сведения о приоритете операций (в порядке убывания) в системе MATLAB приведена ниже:
1) Круглые скобки ( );
2) Транспонирование (.’), транспонирование с комплексным сопряжением (’), возведение в степень (^), поэлементное возведение в степень (.^);
3) Унарный плюс (+), унарный минус (-), логическое отрицание (~);
4) Умножение и деление (.*, ./, .\, *, /, \);
5) Сложение и вычитание (+, -);
6) Оператор сечения массива (:);
7) Операции отношения (<, <=, >, >=, ==, ~=);
8) Логическое И (&);
9) Логическое ИЛИ (|);
Отметим, что в одном выражении можно использовать все вышеперечисленные операции (арифметические, логические, операции сравнения), при этом последовательность выполнения операций определяется их расположением внутри выражения, их приоритетом и наличием круглых скобок (круглые скобки используются, в частности, для изменения приоритета операций в математических выражениях, причем степень вложения скобок не ограничивается).
Арифметические операции с комплексными числами реализуются в системе MATLAB точно также как и с вещественными числами (в соответствии с известными математическими правилами). Тоже самом относится и к операциям отношения «равно» и «не равно». Вместе с тем, как известно, операции сравнения комплексных чисел в математике не определены. Тем не менее, в системе MATLAB соответствующие операции с комплексными числами проводятся, но их значения определяются действительными частями рассматриваемых операндов:
>> x=1+2i; y=5i; z=7i;
>> x>y
ans =
1
>> y<=z
ans =
1
>> y>=z
ans =
1
Если один из операндов является скаляром, а другой – массивом, то происходит сравнение всех элементов второго операнда-массива со значением первого операнда-скаляра:
>> M=[-4 1; 0 2]
M =
-4 1
0 2
>> M>0
ans =
0 1
0 1
Таким образом, спектр применения операторов отношения в системе MATLAB шире, чем в традиционных языках программирования в силу того, что операндами являются не только числа (скаляры), но и векторы, матрицы, массивы. Операнды также могут быть символьными выражениями.
§ 2.14. Формирование одномерных числовых массивов
2.14.1. Задание одномерных массивов и доступ к их элементам.
Прежде всего, напомним, что основные способы создания одномерных массивов уже рассматривались в первой части настоящей главы. Тем не менее, целесообразно вновь вернуться к этому важному вопросу.
Итак, как уже отмечалось все данные в системе MATLAB интерпретируются как массивы (даже скаляры в своем внутреннем представлении являются массивами, состоящими из единственного элемента). Поэтому для эффективного использования MATLAB важно изучить основы работы с массивами, в простейшем случае одномерными.
Массив – это упорядоченный набор однородных данных. Такими данными могут быть действительные и комплексные числа, переменные, либо арифметические выражения. Сразу оговоримся, что массивы в MATLAB не образуют нового типа данных. Числовые массивы (вещественные или комплексные) состоят из элементов типа double. Каждый массив имеет имя.
Помимо памяти, необходимой для хранения собственно значений числовых элементов (по 8 байт на каждый элемент для вещественного массива и по 16 байт на каждый элемент для комплексного массива), при создании массивов MATLAB автоматически выделяет и дополнительную память для управляющей информации (в этой области памяти хранятся размерность массива, количество элементов по каждой размерности, тип элементов (вещественные или комплексные) и т.д. Отметим, что при построении массивов MATLAB не требует от пользователя предварительного задания размерности и размеров массива (в отличие от ранних версий стандарта языка FORTRAN (FORTRAN77 и более ранние)). Пользователь может вводить соответствующие параметры постепенно, при этом MATLAB будет динамически перестраивать структуру массива.
Для создания одномерного массива используется операция конкатенации. Поясним, что оператор конкатенации – это пара квадратных скобок ([, ]), внутри которых указываются отдельные элементы или блоки массива. Так, например, следующее выражение
>> z=[1 2 4]
формирует переменную с именем z, являющуюся одномерным массивом, состоящим из трех элементов (вещественных чисел). При использовании операции конкатенации объединяемые в одномерный массив элементы располагаются между открывающей и закрывающей квадратными скобками и отделяются друг от друга либо пробелом (см. выше), либо запятой. Таким образом, выражение
>> z=[1,2,4]
по своему результату абсолютно идентично предыдущему. Отметим, что если массивы состоят из комплексных чисел или элементы массивов задаются выражениями, то с позиции наглядности рекомендуется использовать в качестве разделителя элементов запятую. Так, например, при создании массива комплексных чисел будем иметь:
>> w=[1+2i,2+3i,4-5i];
В общем случае массивы бывают одномерными, двумерными и многомерными, т.е. имеют разную размерность. Для доступа к отдельному элементу одномерного массива требуется применить операцию индексации: после имени массива указать в круглых скобках индекс (номер) элемента. Иными словами, доступ к конкретному элементу массива производится путем указания его индекса, т.е. номера элемента в массиве. Для доступа к элементу одномерного массива используется один индекс, двумерного – два индекса, трехмерного – три индекса и т.д. Нумерация элементов массивов в системе MATLAB начинается с единицы. В частности, в последнем примере первый элемент массива w обозначается w(1), второй элемент – w(2), третий элемент – w(3). Таким образом, индексы задаются в круглых скобках после имени массива. При необходимости, например, изменить второй элемент сформированного операцией конкатенации массива w можно применить операцию индексации и операцию присваивания:
>> w(2)=7-2i
Если, например, третий элемент массива w должен стать равным среднему арифметическому первого и второго элементов, необходимо выполнить следующую команду
>> w(3)=(w(1)+w(2))/2
Элементы массива могут использоваться при создании новых массивов:
>> x=[2 7 9];
>> y=[x(3) 1 x(2)]
y =
9 1 7
Размер массива определяется количеством элементов вдоль каждого из его измерений. Количество элементов в одномерном массиве возвращает функция length:
>> w=[1+2i,2+3i,4-5i];
>> length(w)
ans =
3
Итак, операцию индексации можно применять как справа от знака операции присваивания (доступ к элементу массива «по чтению»), так и слева от нее (доступ к элементу массива «по записи»). При попытке чтения несуществующего элемента (например, пятого элемента массива w) в командном окне будет выдано сообщение об ошибке:
>> w=[1+2i,2+3i,4-5i];
>> w(5)
Index exceeds matrix dimensions.
В данном сообщении указывается на то, что индекс превысил размер массива. Вместе с тем, запись несуществующего элемента вполне допустима и означает добавление нового элемента к уже существующему массиву:
>> z=[1 2 4]
z =
1 2 4
>> z(4)=7
z =
1 2 4 7
Заметим, что тоже самое действие («удлинение» массива z) можно выполнить посредством операции конкатенации:
>> z=[1 2 4]
z =
1 2 4
>> z=[z 7]
z =
1 2 4 7
В данном случае операндами операции конкатенации являются массив z, состоящий из трех элементов, и добавляемый к нему четвертый элемент, равный 7. Конкатенации можно подвергнуть и несколько массивов. Так, например, следующий код
>> z=[1 2 4];
>> x=[z 7 z z]
x =
1 2 4 7 1 2 4 1 2 4
порождает одномерный массив x, состоящий из десяти элементов: его первые три элемента повторяют элементы массива z, четвертый элемент равен числу 7, элементы с пятого по седьмой повторяют элементы массива z, а элементы с восьмого по десятый делают то же самое.
Разумеется, можно создавать массивы и без использования операции конкатенации, указывая явно значение каждого элемента массива, например:
>> a(1)=0.8;
>> a(2)=-1.4;
>> a(3)=0.05;
>> a
a =
0.8000 -1.4000 0.0500
Описанное выше пошаговое создание массива из трех элементов возможно потому, что система MATLAB с каждым новым присваиванием автоматически перестраивает (актуализирует) свою служебную информацию о массиве, а также область памяти, отводимой под хранение его элементов. После первого присваивания MATLAB считает, что массива a состоит из одного элемента, при втором присваивании MATLAB перестраивает всю структуру памяти, отведенную под данный массив, с каждым последующим присваиванием эту перестройку приходится повторять.
Очевидно, что описанный способ формирования одномерного массива не является эффективным и уступает в быстродействии операции конкатенации. Этот проигрыш мало заметен в интерактивном режиме, когда пользователь вводит всю необходимую информацию с клавиатуры, однако разница в быстродействии становится ощутимой в программном режиме, в случаях, когда система MATLAB выполняет подряд многочисленные действия с массивами.
