- •Начала программирования в среде MatLab
- •Содержание
- •Предисловие
- •Введение
- •1. MatLAB как научный калькулятор
- •1.1. Командное окно
- •1.2. Операции с числами
- •1.2.1. Ввод действительных чисел
- •1.2.2. Простейшие арифметические действия
- •1.2.3. Ввод комплексных чисел
- •1.2.4. Элементарные математические функции
- •1.2.5. Специальные математические функции
- •1.2.6. Элементарные действия с комплексными числами
- •1.2.7. Функции комплексного аргумента
- •1.2.8. Задания
- •1.2.9. Вопросы
- •1.3. Простейшие операции с векторами и матрицами
- •1.3.1. Ввод векторов и матриц
- •1.3.2. Формирование векторов и матриц
- •1.3.3. Извлечение и вставка частей матриц
- •1.3.4. Действия над векторами
- •1.3.5. Поэлементное преобразование матриц
- •1.3.6. Матричные действия над матрицами
- •1.3.7. Матричные функции
- •1.3.8. Задания
- •1.3.9. Вопросы
- •1.4. Функции прикладной численной математики
- •1.4.1. Операции с полиномами
- •1.4.2. Обработка данных измерений
- •1.4.3. Функции линейной алгебры
- •1.4.4. Аппроксимация и интерполяция данных
- •1.4.5. Векторная фильтрация и спектральный анализ
- •1.4.6. Задания
- •1.4.7. Вопросы
- •1.5. Построение простейших графиков
- •1.5.1. Процедура plot
- •1.5.2. Специальные графики
- •1.5.3. Дополнительные функции графического окна
- •1.5.5. Задания
- •1.5.6. Вопросы
- •1.6. Операторы управления вычислительным процессом
- •1.6.1. Оператор условного перехода
- •1.6.2. Оператор переключения
- •1.6.3. Операторы цикла
- •1.6.4. Задания
- •1.6.5. Вопросы
- •2. Программирование в среде MatLAB
- •2.1. Функции функций
- •2.2. Создание М-файлов
- •2.2.1. Особенности создания М-файлов
- •2.3.1. Общие требования к построению
- •2.3.2. Типовое оформление процедуры-функции
- •2.3.3. Задания
- •2.3.4. Вопросы
- •2.4. Создание Script-файлов
- •2.4.1. Основные особенности Script-файлов
- •2.4.2. Ввод и вывод информации в диалоговом режиме
- •2.4.3. Организация повторения действий
- •2.4.4. Организация изменения данных в диалоговом режиме
- •2.4.5. Типовая структура и оформление Script-файла
- •2.5. Графическое оформление результатов
- •2.5.1. Общие требования к представлению графической информации
- •2.5.2. Разбивка графического окна на подокна
- •2.5.3. Вывод текста в графическое окно (подокно)
- •2.6. Создание функций от функций
- •2.6.1. Процедура feval
- •2.6.2. Примеры создания процедур от функций
- •2.6.3. Задания
- •2.7. Пример создания сложной программы
- •2.7.1. Программа моделирования движения маятника
- •2.7.2. Задания
- •3.1. Функции меню командного окна
- •3.1.2. Другие меню командного окна
- •3.1.3. Панель инструментов
- •3.2. Команды общего назначения
- •3.3. Создание М-книги
- •3.3.1. Начало новой М-книги
- •3.3.2. Написание М-книги
- •3.3.3. Редактирование М-книги
- •3.3.4. Преобразование документа WORD в М-книгу
- •3.3.6. Изменение параметров вывода результатов
- •4. Классы вычислительных объектов
- •4.1. Основные классы объектов
- •4.1.1. Класс символьных строк (char)
- •4.1.2. Класс записей (struct)
- •4.1.3. Класс ячеек (cell)
- •4.2. Производные классы MatLAB
- •4.2.1. Класс объектов Inline
- •4.2.2. Классы пакета CONTROL
- •4.3. Пример создания нового класса polynom
- •4.3.1. Создание подкаталога @polynom
- •4.3.2. Создание конструктора
- •4.3.3. Создание процедуры символьного представления polynom-объекта.
- •4.4. Создание методов нового класса
- •5.1. Формирование типовых процессов
- •5.1.1. Формирование одиночных импульных процессов
- •5.1.2. Формирование колебаний
- •5.2.1. Основы линейной фильтрации
- •5.2.2. Формирование случайных процессов
- •5.3. Процедуры спектрального (частотного) и статистического анализа процессов
- •5.3.1. Основы спектрального и статистического анализа
- •5.3.2. Примеры спектрального анализа
- •5.3.3. Статистический анализ
- •5.4. Проектирование фильтров
- •5.4.1. Формы представления фильтров и их преобразования
- •5.4.2. Разработка аналоговых фильтров
- •5.4.3. Проектирование БИХ-фильтров
- •5.5. Графические и интерактивные средства
- •5.5.1. Графические средства пакета SIGNAL
- •5.5.2. Интерактивная оболочка SPTOOL
- •6.1. Ввод и преобразование моделей
- •6.2. Получение информации о модели
- •6.3. Анализ системы
- •6.4. Интерактивный "обозреватель" ltiview
- •6.5. Синтез системы
- •7.1. Общая характеристика пакета SimuLink
- •7.1.1. Запуск SimuLink
- •7.1.2. Библиотека модулей (блоков)
- •7.1.3. Раздел Sinks (приемники)
- •7.1.4. Раздел Sources (Источники)
- •7.1.5. Раздел Сontinuous
- •7.1.6. Раздел Discrete
- •7.1.7. Раздел Math
- •7.1.8. Раздел Functions & Tables
- •7.1.9. Раздел Nonlinear
- •7.1.10. Раздел Signals & Systems
- •7.2. Построение блок-схем
- •7.2.1. Выделение объектов
- •7.2.2. Оперирование с блоками
- •7.2.3. Проведение соединительных линий
- •7.2.4. Проставление меток сигналов и комментариев
- •7.2.5. Создание подсистем
- •7.2.6. Запись и распечатка блок-схемы S-модели
- •7.3. Примеры моделирования
- •7.3.1. Моделирование поведения физического маятника
- •7.3.2. Моделирование поведения гироскопа в кардановом подвесе
- •7.4. Объединение S-моделей с программами MatLAB
- •7.4.2. Функции пересечения нуля
- •7.4.5. Образование S-блоков путем использования программ MatLab. S-функции
- •7.4.6. Пример создания S-функции
- •7.5.1. Создание библиотеки
- •7.5.2. Маскировка блоков
- •7.5.3. Моделирование процесса ориентации космического аппарата
- •Послесловие
- •Предметный указатель
- •Указатель операторов, команд, функций и функциональных блоков MatLAB
1.3. Операции с векторами и матрицами |
29 |
1.3. Простейшие операции с векторами и матрицами
MatLAB - система, специально предназначенная для осуществления сложных вычислений с векторами, матрицами и полиномами. Под вектором в MatLAB понимается одномерный массив чисел, а под матрицей - двумерный массив. При этом по умолчанию предполагается, что любая заданная переменная является вектором или матрицей. Например, отдельное заданное число система воспринимает как матрицу размером (1*1), а вектор-строку из N элементов - как матрицу разме-
ром (1*N).
1.3.1. Ввод векторов и матриц
Начальные значения векторов можно задавать с клавиатуры путем поэлементного ввода. Для этого в строке следует сначала указать имя вектора, потом поставить знак присваивания ' = ', затем, - открывающую квадратную скобку, а за ней ввести заданные значения элементов вектора, отделяя их пробелами или запятыми. Заканчивается строка записью закрывающей квадратной скобки.
Например, запись строки V = [ 1.2 -0.3 1.2e-5] задает вектор V, который содержит три элемента со значениями 1.2, -0.3 и 1.2е-5 (рис. 1.14):
Рис. 1.14
После введения вектора система выводит его на экран. То, что в приведенном примере последний элемент выведен как 0, обусловлено установленным форматом short, в соответствии с которым выводятся данные на экран.
Длинный вектор можно вводить частями, которые потом объединять с по-
мощью операции объединения векторов в строку : v = [ v1 v2 ]. Например:
Рис. 1.15
Язык MatLAB дает пользователю возможность сокращенного введения век-
тора, значения элементов которого составляют арифметическую прогрессию.
Если обозначить: nz - начальное значение этой прогрессии (значение первого эле-
1.3. Операции с векторами и матрицами |
30 |
мента вектора); kz - конечное значение прогрессии (значение последнего элемента вектора); h - разность прогрессии (шаг), то вектор можно ввести с помощью короткой записи V = nz : h : kz . Например, введение строки V = - 0.1 : 0.3 : 1.4 приведет к такому результату:
Рис. 1.16
Если средний параметр (разность прогрессии) не указан, то он по умолчанию принимается равным единице. Например, команда
>> -2.1 : 5
приводит к формированию такого вектора
ans = -2.1000 -1.1000 -0.1000 0.9000 1.9000 2.9000 3.9000 4. 9000
Так вводятся векторы-строки. Вектор-столбец вводится аналогично, но
значения элементов отделяются знаком ";".
Ввод значений элементов матрицы осуществляется в MatLAB в квадратных скобках, по строкам. При этом элементы строки матрицы один от другого отде-
ляются пробелом или запятой, а строки одна от другой отделяются знаком ";"
(рис. 1.17).
Рис. 1.17
1.3.2. Формирование векторов и матриц
MatLAB имеет несколько функций, которые позволяют формировать векторы и матрицы некоторого определенного вида. К таким функциям относятся:
zeros(М,N) - создает матрицу размером (М*N) с нулевыми элементами, например:
» zeros(3,5) ans =
0 0 0 0 0
1.3. Операции с векторами и матрицами |
31 |
||||
0 |
0 |
0 |
0 |
0 |
|
0 |
0 |
0 |
0 |
0 |
|
ones(М,N) - создает матрицу размером (М*N) с единичными элементами, например:
» ones(3,5)
ans = |
|
|
|
|
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
eye(М,N) - создает единичную матрицу размером (М*N), т. е. с единицами по главной диагонали и остальными нулевыми элементами, например:
» eye(3,5)
ans = |
|
|
|
|
|
|
|
1 |
0 |
0 |
0 |
0 |
|
|
|
0 |
1 |
0 |
0 |
0 |
|
|
|
0 |
0 |
1 |
0 |
0 |
|
|
|
rand(М,N) - создает матрицу размером (М*N) из случайных чисел, равно- |
|||||||
мерно распределенных в диапазоне от 0 до 1, например: |
|||||||
» rand(3,5) |
|
|
|
|
|
|
|
ans = |
|
|
|
|
|
|
|
2.1896e-001 6.7930e-001 |
|
5.1942e-001 5.3462e-002 |
7.6982e-003 |
||||
4. 7045e-002 |
|
9. 3469e-001 |
8. 3097e-001 |
5. 2970e-001 |
3. 8342e-001 |
||
6. 7886e-001 |
|
3. 8350e-001 |
3. 4572e-002 |
6. 7115e-001 6. 6842e-002 |
randn(М,N) - создает матрицу размером (М*N) из случайных чисел, распределенных по нормальному (гауссовому) закону с нулевым математическим ожиданием и стандартным (среднеквадратичным) отклонением, равным единице, например:
» randn(3,5)
ans = |
|
|
|
|
|
|
1.1650e+000 |
3.5161e-001 |
5.9060e-002 |
8.7167e-001 |
1.2460e+000 |
||
6. 2684e-001 |
-6. 9651e-001 |
1. 7971e+000 |
-1. |
4462e+000 |
-6. |
3898e-001 |
7. 5080e-002 |
1. 6961e+000 |
2. 6407e-001 |
-7. |
0117e-001 |
5. |
7735e-001 |
hadamard(N)- создает матрицу Адамара размером (N*N), например:
» hadamard(4)
ans = |
|
|
|
1 |
1 |
1 |
1 |
1 |
-1 |
1 |
-1 |
1 |
1 |
-1 |
-1 |
1 |
-1 |
-1 |
1 |
hilb(N) - создает матрицу Гільберта размером (N*N), например:
» hilb(4)
ans = |
|
|
|
1.0000e+000 |
5.0000e-001 |
3.3333e-001 |
2.5000e-001 |
5.0000e-001 |
3.3333e-001 |
2.5000e-001 |
2.0000e-001 |
3. 3333e-001 |
2. 5000e-001 |
2. 0000e-001 |
1. 6667e-001 |
2. 5000e-001 |
2. 0000e-001 |
1. 6667e-001 |
1. 4286e-001 |
invhilb(N) - создает обратную матрицу Гильберта размером (N*N), например:
» invhilb(4)
ans = |
|
|
|
16 |
-120 |
240 |
-140 |
-120 |
1200 |
-2700 |
1680 |
240 |
-2700 |
6480 |
-4200 |
-140 |
1680 |
-4200 |
2800 |
1.3. Операции с векторами и матрицами |
32 |
pascal(N) - создает матрицу Паскаля размером (N*N), например:
» pascal(5)
ans = |
|
|
|
|
1 |
1 |
1 |
1 |
1 |
1 |
2 |
3 |
4 |
5 |
1 |
3 |
6 |
10 |
15 |
1 |
4 |
10 |
20 |
35 |
1 |
5 |
15 |
35 |
70. |
В языке MatLAB предусмотрено несколько функций, которые позволяют формировать матрицу на основе другой (заданной) или используя некоторый заданный вектор. К таким функциям принадлежат:
fliplr(A) - формирует матрицу, переставляя столбцы известной матрицы А относительно вертикальной оси, например:
A = |
|
|
|
|
|
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
» fliplr(A) |
|
|
|
|
|
ans = |
|
|
|
|
|
6 |
5 |
4 |
3 |
2 |
1 |
12 |
11 |
10 |
9 |
8 |
7 |
18 |
17 |
16 |
15 |
14 |
13 |
flipud(A) - переставляет строки заданной матрицы А относительно горизонтальной оси, например:
» flipud(A)
ans = |
|
|
|
|
|
13 |
14 |
15 |
16 |
17 |
18 |
7 |
8 |
9 |
10 |
11 |
12 |
1 |
2 |
3 |
4 |
5 |
6 |
rot90(A) - формирует матрицу путем "поворота" заданной матрицы А на 90 градусов против часовой стрелки:
» rot90(A)
ans = |
|
|
6 |
12 |
18 |
5 |
11 |
17 |
4 |
10 |
16 |
3 |
9 |
15 |
2 |
8 |
14 |
1 |
7 |
13 |
reshape(A,m,n) - образует матрицу размером (m*n) путем выборки элементов заданной матрицы А по столбцам и последующему распределению этих элементов по 'n' столбцам, каждый из которых содержит 'm' элементов; при этом число элементов матрицы А должно равняться m*n, например:
» reshape(A,2,9)
ans = |
|
|
|
|
|
|
|
|
1 |
13 |
8 |
3 |
15 |
10 |
5 |
17 |
12 |
7 |
2 |
14 |
9 |
4 |
16 |
11 |
6 |
18 |
tril(A) - образует нижнюю треугольную матрицу на основе матрицы А путем обнуления ее элементов выше главной диагонали:
» tril(A)
ans = |
|
|
|
|
|
1 |
0 |
0 |
0 |
0 |
0 |
7 |
8 |
0 |
0 |
0 |
0 |
1.3. Операции с векторами и матрицами |
33 |
13 14 15 0 0 0
triu(A) - образует верхнюю треугольную матрицу на основе матрицы А путем обнуления ее элементов ниже главной диагонали:
» triu(A)
ans = |
|
|
|
|
|
1 |
2 |
3 |
4 |
5 |
6 |
0 |
8 |
9 |
10 |
11 |
12 |
0 |
0 |
15 |
16 |
17 |
18 |
hankel(V) - образует квадратную матрицу Ганкеля, первый столбец которой совпадает с заданным вектором V, например:
>> V = [-5 6 7 4]
V = |
-5 |
6 |
7 4 |
» hankel(V) |
|
||
ans = |
|
|
|
-5 |
6 |
7 |
4 |
6 |
7 |
4 |
0 |
7 |
4 |
0 |
0 |
4 |
0 |
0 |
0 |
Процедура diag(х) - формирует или извлекает диагональ матрицы.
Если х - вектор, то функция diag(х) создает квадратную матрицу с вектором х на главной диагонали:
» diag(V)
ans = |
|
|
|
-5 |
0 |
0 |
0 |
0 |
6 |
0 |
0 |
0 |
0 |
7 |
0 |
0 |
0 |
0 |
4 |
Чтобы установить заданный вектор на другую диагональ, при обращении к функции необходимо указать еще один параметр (целое число) - номер диагонали
(при этом диагонали отсчитываются от главной вверх), например:
» diag(V, |
-1) |
|
||
ans = |
|
|
|
|
0 |
0 |
0 |
0 |
0 |
-5 |
0 |
0 |
0 |
0 |
0 |
6 |
0 |
0 |
0 |
0 |
0 |
7 |
0 |
0 |
0 |
0 |
0 |
4 |
0 |
Если х - матрица, то функция diag создает вектор-столбец, который состоит из элементов главной диагонали заданной матрицы х, например, для матрицы А, указанной перед примером применения процедуры fliplr:
» diag(A) ans =
1
8
15
Если при этом указать дополнительно номер диагонали, то можно получить вектор-столбец из элементов любой диагонали матрицы х, например:
» diag(A,3) ans =
4
11
18