- •§ 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.16.1. Поэлементные и групповые операции над массивами.
Прежде всего, отметим, что над массивами одинаковых размеров допускаются операции сложения и вычитания, обозначаемые стандартными знаками + и –. Если A и B – массивы произвольной размерности, но одинаковых размеров, то допустимы выражения
>> A=[4 1; 0 5]
A =
4 1
0 5
>> B=[2 2; 1 7]
B =
2 2
1 7
>> C=A+B
C =
6 3
1 12
>> D=A-B
D =
2 -1
-1 -2
где элементы массивов C и D равны сумме и разности элементов массивов A и B соответственно. Иными словами, операции сложения и вычитания выполняются поэлементно и порождают массивы тех же размеров, что и исходные операнды. Если используются операнды разных размеров выдается сообщение об ошибке:
A =
4 1
0 5
>> S=[1 2 3; 0 4 2]
S =
1 2 3
0 4 2
>> A+S
Error using +
Matrix dimensions must agree.
Исключением в этом смысле является ситуация, когда один из операндов является скаляром:
>> A+7
ans =
11 8
7 12
В таких случаях скаляр предварительно расширяется до массива того же размера, что и матричный операнд. Так например, в приведенном примере из скаляра 7 сначала генерируется матрица [7 7; 7 7], которая и складывается далее поэлементно с матрицей A.
Для поэлементного умножения и поэлементного деления массивов одинаковых размеров применяются операции, обозначаемые комбинациями двух символов – «.*» для умножения и «./» для деления (поясним, что кавычки, разумеется, не входят в состав обозначений для указанных операций). Использование комбинаций символов можно объяснить тем фактом, что символами «*» и «/» обозначены специальные операции линейной алгебры над матрицами и векторами.
Заметим, что помимо операции «./», называемой также операцией правого поэлементного деления, в системе MATLAB имеется также операция левого поэлементного деления, обозначаемая «.\». Поясним, что выражение типа A./B приводит к матрице с элементами A(k,m)/B(k,m), где k и m – соответствующие индексы элементов матрицы. Выражение A.\B приводит, в свою очередь, к матрице с элементами B(k,m)/A(k,m).
При поэлементном возведении в степень каждый элемент первой матрицы возводится в степень, равную соответствующему элементу второй матрицы. Показателем степени может быть не только матрицы того же размера, что и исходная, но и число. Поэлементное возведение в степень обозначается знаком «.^». В частности, имеем:
>> X=[8 5 3 6; -2 4 -7 1]
X =
8 5 3 6
-2 4 -7 1
>> Y=[2 4 -7 9; 1 3 2 8]
Y =
2 4 -7 9
1 3 2 8
>> X.^3
ans =
512 125 27 216
-8 64 -343 1
>> X.^Y
ans =
1.0e+07 *
0.0000 0.0001 0.0000 1.0078
-0.0000 0.0000 0.0000 0.0000
Следует обратить внимание на результат, полученный при выполнении операции X.^Y. Как видно, система MATLAB выделила общий множитель 1.0e+07 для всех элементов результирующей матрицы. Кроме того, полученная матрица включает достаточно много нулевых элементов. Это объясняется тем, что по умолчанию в MATLAB установлен формат представления чисел short, при котором после десятичной точки отображается только четыре десятичные цифры. Более точный результат может быть получен, если задать формат short e:
>> format short e
>> X.^Y
ans =
6.4000e+01 6.2500e+02 4.5725e-04 1.0078e+07
-2.0000e+00 6.4000e+01 4.9000e+01 1.0000e+00
Знак «*» (кавычки, как и прежде, не входят в обозначение операции) закреплен за операцией умножения матрицы на матрицу (или матрицы на вектор) в смысле линейной алгебры. Отметим, что данная операция выполнима, лишь при условии, что количество столбцов в левом операнде равно количеству строк в правом операнде:
>> A=[4 -1 1; 1 5 1; 10 2 42]
A =
4 -1 1
1 5 1
10 2 42
>> x=[1; 2; 3]
x =
1
2
3
>> y=A*x
y =
5
14
140
Отметим, что простейшая в таком смысле операция умножения вектора на число может выполняться с помощью обычного оператора умножения («*»), причем умножать вектора на число можно как справа, так и слева:
>> q=[6 7 8 9]
q =
6 7 8 9
>> q*4
ans =
24 28 32 36
>> 4*q
ans =
24 28 32 36
Умножение матрицы на число подобно умножению вектора на число.
Как известно, произведение двух векторов можно вычислить лишь в том случае, когда они имеют одинаковую длину и один из них является вектор-строкой, а второй – вектор-столбцом:
>> u=[1 5 7];
>> v=[2; 4; 6];
>> u*v
ans =
64
>> v*u
ans =
2 10 14
4 20 28
6 30 42
Как и следовало ожидать операция произведения векторов не является перестановочной.
Выполним теперь транспонирование матрицы (т.е. перемену мест ее строк и столбцов):
>> A=[1 2 3; 4 5 6]
A =
1 2 3
4 5 6
>> At=A'
At =
1 4
2 5
3 6
Приведем примеры умножения матрицы на матрицу:
>> A=[1 2 3; 4 5 6];
>> B=[2 0 -3; 1 2 7];
>> A*B'
ans =
-7 26
-10 56
>> A'*B
ans =
6 8 25
9 10 29
12 12 33
Для того, чтобы операции умножения матриц имели смысл, в первом случае потребовалось транспонировать матрицу B, а во втором – матрицу A.
Операция возведения матрицы в степень эквивалентна умножению матрицы на саму себя то число раз, которое соответствует показателю степени. Показатель степени должен быть целым положительным либо целым отрицательным числом, а матрица должна быть квадратной, например:
>> C=[5 1 4; 1 7 7; 2 9 6]
C =
5 1 4
1 7 7
2 9 6
>> C^3
ans =
320 829 778
433 1672 1465
488 1827 1599
Возведение матрицы в отрицательную степень эквивалентно умножению обратной матрицы на саму себя то число раз, которое соответствует показателю степени:
>> C^-3
ans =
1.8900e-03 -5.9837e-02 5.3903e-02
-1.4081e-02 -8.2427e-02 8.2371e-02
1.5512e-02 1.1244e-01 -1.0994e-01
Деление вектора на число происходит с помощью обычного оператора деления («/»), однако деление числа на вектор невозможно:
>> q/4
ans =
1.5000 1.7500 2.0000 2.2500
>> 4/q
Error using /
Matrix dimensions must agree.
