Справочник от Автор24
Поделись лекцией за скидку на Автор24

Система MATLAB

  • 👀 505 просмотров
  • 📌 479 загрузок
Выбери формат для чтения
Загружаем конспект в формате docx
Это займет всего пару минут! А пока ты можешь прочитать работу в формате Word 👇
Конспект лекции по дисциплине «Система MATLAB» docx
• Тема 1. Знакомство с MATLAB. Основные объекты языка MATLAB ◦ Общая информация о разделеСтраница ◦ 1.1. Режим прямых вычисленийСтраница ◦ 1.2. Базовые объекты языка MATLABСтраница ◦ • Тема 2. Операции с матрицами ◦ Общая информация о разделеСтраница ◦ 2.1. Функции генерации типовых матрицСтраница ◦ 2.2. Преобразование матрицСтраница ◦ 2.3. Поэлементные операции с матрицамиСтраница ◦ 2.4. Операции с матрицами в задачах линейной алгебрыСтраница ◦ 2.4.1. Арифметические операции с матрицамиСтраница ◦ 2.4.2. Транспонирование и эрмитово сопряжение матрицСтраница ◦ 2.4.3. Обращение матрицСтраница ◦ 2.4.4. Матричное делениеСтраница ◦ Тест по темам 1 и 2 • Тема 3. Типы массивов ◦ Общая информация о разделеСтраница ◦ 3.1. Матрицы числового и логического типовСтраница ◦ 3.2. Матрицы символьного типаСтраница ◦ 3.3. Структуры (массивы записей)Страница ◦ 3.4. Массивы ячеекСтраница ◦ 3.5. Определение типа массиваСтраница ◦ ◦ Тест по теме 3 • Тема 5. Режим программирования: script-файлы и function-файлы ◦ Общая информация о разделеСтраница ◦ 5.1. Создание и хранение M-файловСтраница ◦ 5.2. Script-файлыСтраница ◦ 5.3. Function-файлыСтраница ◦ 5.4. Оформление и вывод листинга M-файловСтраница ◦ 5.5. Вывод данныхСтраница ◦ 5.6. Пауза и досрочное прерывание программыСтраница ◦ ◦ Тест по теме 5 • Тема 6. Режим программирования: организация разветвлений и циклов Для организации разветвлений и циклов в М-файлах используются операторы языка MATLAB, рассматриваемые в следующих разделах.  ◦ 6.1. Операторы организации разветвленийСтраница ◦ 6.2. Операторы организации цикловСтраница ◦ ◦ Тест по теме 6 Общая информация о разделе Система MATLAB — это интерактивная система, предназначенная для компьютерного моделирования практически в любой области науки и техники. Интерфейс MATLAB образуют следующие окна: • Command Window (Командное окно) — основное окно интерактивной системы MATLAB с активизированной командной строкой. Из активизированной командной строки пользователь может возвращаться к ранее введенным командам с помощью стрелок "вверх" и "вниз" на клавиатуре; • Current Folder (Текущая папка) — в этом окне выводится содержимое папки, имя которой отображается в раскрывающемся списке Current Folder на панели инструментов окна MATLAB. Создание собственной папки в окне Current Folder выполняется с помощью контекстного меню, в котором последовательно выбираются команды New (Новая) и Folder (Папка), и новой папке присваивается имя. Сохранение пути к собственной папке в окне Current Folder выполняется по команде контекстного меню Add to Path | Selected Folders (Добавить к пути | Выделенные папки); • Workspace (Рабочая область памяти) — в этом окне выводится список текущих переменных, сохраняемых в рабочей области памяти Workspace до выхода из MATLAB; • Command History (История команд) — в этом окне выводится построчный список объектов языка MATLAB, вводимых в ходе текущей и предшествующих сессий. Двойным щелчком левой кнопки мыши можно дублировать любую строку из Command History в Command Window. Система оперативной помощи MATLAB включает в себя: • справочную систему в формате HTML (Hyper Text Markup Language — язык гипертекстовой маркировки), обращение к которой производится по команде MATLAB Help в пункте меню Help окна MATLAB; • команду: help <стандартное имя объекта языка MATLAB> 1.1. Режим прямых вычислений Режим прямых вычислений (называемый также командным режимом) означает, что вычисления выполняются без составления программы. Объекты языка MATLAB в ходе текущей сессии (сеанса работы до выхода из MATLAB) вводятся построчно в командной строке окна Command Window с соблюдением следующих правил: • символ " ; " (точка с запятой) в конце строки блокирует автоматический вывод результата; • символ " ... " (многоточие) в конце строки является признаком продолжения предыдущей строки; • символ " % " (процент) в начале строки соответствует комментарию. 1.2. Базовые объекты языка MATLAB К базовым объектам языка MATLAB относятся: • команды; • операторы; • константы; • переменные; • функции; • выражения. Команда — это объект языка MATLAB со стандартным именем, предназначенный для взаимодействия с системой MATLAB и имеющий формат: <команда> <содержательная часть> где <команда> — стандартное имя команды; <содержательная часть> — уточняется для каждой конкретной команды и может отсутствовать. В конце команды символ ";" не ставится. Список команд общего назначения выводится по команде: help general Некоторые распространенные команды приведены в табл. 1.1. Другие будут рассматриваться по мере изложения материала. Таблица 1.1. Команды Команда Назначение clc Очистка окна Command Window clear Удаление объектов из Workspace (без содержательной части — очистка Workspace) ver Вывод информации об установленной версии MATLAB и пакетах расширения whos Вывод содержимого Workspace с дополнительными сведениями Оператор — это объект языка MATLAB со стандартным именем, предназначенный для разработки программ.   Простейшим оператором является оператор присваивания с форматом: <имя переменной> = <выражение> или <выражение> В последнем случае значение выражения присваивается переменной со стандартным именем ans. Константа — это объект языка MATLAB, имеющий в процессе вычислений неизменное значение. Различают следующие типы констант: • численные, среди которых выделяют: 1. целые; 2. вещественные; 3. комплексные; • логические; • символьные. Целые и вещественные константы могут вводиться в обычной форме с разделением точкой целой и дробной частей: >> 158; >> -17.38; или в форме E, которой соответствует представление числа в показательной форме: μ · 10p,                    (1.1) где μ — мантисса — вещественная константа, а p — порядок — целая константа; 10 — основание, обозначаемое буквой e: >> 0.157e-3; Комплексные константы вводятся в алгебраической форме: ξ + jη.           (1.2) Мнимая единица вводится как i или j, но выводится всегда как i: >> 5+3.7j ans =      5.0000 + 3.7000i Возможен ввод с использованием символа умножения в мнимой части: >> 5+3.7*j ans =      5.0000 + 3.7000i Стандартные константы — это константы со стандартными именами. Их полный список может быть выведен по команде: help elmat а наиболее распространенные константы приведены в табл. 1.2. Таблица 1.2. Стандартные константы Стандартное имя константы Назначение i или j Мнимая единица, соответствующая : >> i=sqrt(-1) pi Число π Inf (или inf) Машинная бесконечность (число, большее максимально допустимого во внутренних вычислениях в MATLAB) Nan Не число (Not-a-number). Присваивается неопределенностям типа 0/0, inf/inf, 0∙inf Логические константы — это константы, принимающие значения 1 (true — истина) или 0 (false — ложь). Символьные константы — это любые последовательности символов, заключенные в апострофы: >> 'Sella' ans = Sella Переменная — это объект языка MATLAB, который в процессе вычислений может менять свое значение. Переменные представляются своими именами (идентификаторами). Имя переменной составляется из последовательности латинских букв, цифр и символа подчеркивания и начинается с буквы. В MATLAB прописные и строчные буквы различаются. Массивом называют упорядоченную совокупность данных, объединенных одним именем. Массив характеризуется: • размерностью; Размерность массива равна количеству индексов k, которые указывают на упорядоченность данных в k-мерном пространстве. Если данные упорядочены в строку (столбец), то их порядок следования указывается с помощью одного индекса, и массив называют одномерным или вектором. Если данные упорядочены одновременно по строкам и по столбцам, то их порядок следования указывается с помощью двух индексов, и массив называют двумерным или матрицей. • размером; В матричной алгебре в качестве размера массива принято указывать произведение числа элементов по каждому индексу, а именно: n — одномерный массив; m · n — двумерный и т. д. Матрицу называют квадратной порядка n, если число строк равно числу столбцов: m = n. В MATLAB нижняя граница индексов массива равна единице. • типом. Тип массива определяется типом его элементов. Например, элементами числового массива являются численные константы. Особенностью MATLAB является то, что тип переменной не объявляется, и любая переменная по умолчанию считается матрицей (отсюда и название MATLAB — MATrix LABoratory). Матрица вводится построчно в квадратных скобках, элементы строки отделяются пробелом или запятой, а строки — точкой с запятой: >> A=[1 2 3;5 6 7;8 9 7] A =      1     2     3      5     6     7      8     9     7 Вектор (вектор-строка) размером 1 · n вводится в квадратных скобках, а его элементы — через пробел или запятую: >> A=[1 4 5 7 8] A =      1     4     5     7     8 Вектор-столбец размером n · 1 вводится в квадратных скобках, а его элементы — через точку с запятой: >> A=[1;4;5] A =      1      4      5 Скаляр размером 1 · 1 можно вводить без квадратных скобок: >> b=1.5e-3; Функции  в MATLAB представлены двумя разновидностями: • встроенные; • внешние. Встроенная функция (по умолчанию функция) — это объект языка MATLAB со стандартным именем, предназначенный для выполнения действий с параметрами (аргументами), перечисленными через запятую и заключенными в круглые скобки. Список основных элементарных математических функций, сгруппированных по назначению, представлен в табл. 1.3. Их полный список выводится по команде: help elfun Таблица 1.3. Элементарные математические функции Тип функции Функция Назначение Тригонометрическая sin(X) Синус — sin(x) cos(X) Косинус — cos(x) tan(X) Тангенс — tg(x) cot(X) Котангенс — ctg(x) Экспоненциальная exp(X) Экспонента — ex Логарифмическая log(X) Натуральный логарифм — ln(x) log10(X) Десятичный логарифм — lg(x) log2(X) Логарифм по основанию 2 — log2x Корень квадратный sqrt(X) Корень квадратный  Число по модулю m mod(X,m) Число x по модулю m — modmx С комплексным аргументом abs(X) Модуль числа |x| angle(X) Аргумент числа x real(X) Выделение вещественной части — Re(x) imag(X) Выделение мнимой части — Im(x) conj(X) Комплексно-сопряженное число Выражение — это объект языка MATLAB, представляющий собой имеющую смысл совокупность констант, переменных и функций, объединенных символами операций. К основным типам выражений относятся арифметические и логические выражения. Арифметическим выражением называют имеющую математический смысл совокупность констант, переменных и функций, объединенных символами (или функциями) арифметических операций: >> x+sin(a)-sqrt(c+b); Приоритет операций в арифметических выражениях устанавливается с помощью круглых скобок и старшинства операций внутри них, а именно: сначала вычисляются функции, затем возведение в степень, затем умножение и деление и в заключение — сложение и вычитание. Операции одного ранга выполняются слева направо. Логическим выражением называют имеющую математический смысл совокупность арифметических выражений, объединенных символами (или функциями) операций отношения и логических операций: >> (i==j)&((a+b)>sqrt(с)); Простейшим логическим выражением является отношение. Результатом вычисления логического выражения будет логическая константа 1 (true) или 0 (false): >> sin(3)<0.5 ans =      1 Приоритет операций в логических выражениях устанавливается с помощью круглых скобок и старшинства операций внутри них, а именно: сначала вычисляются арифметические выражения, затем выполняются операции отношения и в заключение — логические операции. Операции одного ранга выполняются слева направо. Символ операции — это символическое обозначение операции с операндами или операндом (объектами, с которыми выполняется операция). Функция операции — это эквивалентное обозначение символа операции в виде функции MATLAB. Большинство символов операций дублируется эквивалентными функциями, однако некоторые операции обозначаются только символом, другие — только функцией. Основные символы и дублирующие их функции операции, сгруппированные по назначению, представлены в табл. 1.5—1.7.   Их полный список выводится по команде: help ops Таблица 1.5. Символы и функции арифметических операций Символ Функция Операция + plus(X,Y) Сложение матричное и поэлементное - minus(X,Y) Вычитание матричное и поэлементное * mtimes(X,Y) Матричное умножение .* times(X,Y) Поэлементное умножение ^ mpower(X,c) Матричное возведение в целую степень .^ power(X,c) Поэлементное возведение в степень \ mldivide(X,Y) Левое матричное деление / mrdivide(X,Y) Правое матричное деление .\ ldivide(X,Y) Левое поэлементное деление ./ rdivide(X,Y) Правое поэлементное деление Таблица 1.6. Символы и функции операций отношения Символ Функция Операция == eq(X,Y) Равно ~= ne(X,Y) Не равно <  lt(X,Y) Меньше >  gt(X,Y) Больше <= le(X,Y) Меньше либо равно >= ge(X,Y) Больше либо равно Таблица 1.7. Символы и функции логических операций Символ Функция Операция & and(X,Y) И (AND) — истина (true — логическая константа 1), если оба аргумента — истина | or(X,Y) ИЛИ (OR) — истина, если хотя бы один аргумент —  истина ~ not(X) НЕ (NOT) — ложь (false — логическая константа 0), если аргумент — истина, и наоборот В табл. 1.5—1.7 переменные X и Y — числовые матрицы, а c — скаляр. • Тема 2. Операции с матрицами Общая информация о разделе В MATLAB любая переменная по умолчанию считается матрицей. Тип матрицы определяется типом ее элементов. В этой работе по умолчанию под матрицей будем подразумевать числовую матрицу. Матрица задается своим именем и размером. Имя матрицы выбирается так же, как и имя простой переменной, а размер указывается произведением m ´ n, где m, n — число строк и столбцов соответственно. Нижняя граница индексов матрицы равна единице. Хранение матриц в оперативной памяти организовано по столбцам. Вектор (вектор-строка) представлен матрицей размером 1 · n, вектор-столбец — матрицей размером n · 1, а скаляр — матрицей размером 1 · 1. Ввод матриц рассматривался в теме 1. Вектор, формирующий регулярную сетку, вводят в виде:   <начальное значение>:[<шаг>:]<конечное значение> Шаг, равный единице, можно не указывать, условным признаком чего служат квадратные скобки. Например: >> y=0:pi/4:pi y =          0    0.7854    1.5708    2.3562    3.1416 >> x=0:9 x =      0     1     2     3     4     5     6     7     8     9 Элементы матрицы могут быть представлены численными константами, простыми переменными, арифметическими выражениями и, в свою очередь, матрицами, например: >> A=[5.3 sin(pi/4) 3+4*i] A =    5.3000             0.7071             3.0000 + 4.0000i >> a=[1 2;3 4],  b=[4 5;6 7] a =      1     2      3     4 b =      4     5      6     7 >> B=[a b] B =      1     2     4     5      3     4     6     7 Обращение к элементу матрицы происходит по ее имени с указанием индексов строки и столбца в круглых скобках: >> B(2,4) ans =      7 По обращению B(i) матрица B воспринимается как вектор, элементы которого сформированы по столбцам: >> B(5) ans =      4 Размер матрицы — число строк m и столбцов n — определяется с помощью функции: size(x) Длина вектора определяется с помощью функции: length(x) Матрица нулевой размерности — пустая матрица — обозначается как A=[]: >> A=[]; size(A) ans =      0     0 Имя пустой матрицы сохраняется в Workspace и в дальнейшем может использоваться для формирования матрицы любого размера. 2.1. Функции генерации типовых матриц В MATLAB можно генерировать большое разнообразие типовых матриц с помощью встроенных функций, список которых может быть выведен по команде: help elmat Некоторые из них приведены в табл. 2.1.  Таблица 2.1. Функции генерирования типовых матриц Функция Типовая матрица zeros(M,N) Нулевая матрица M×N ones(M,N) Матрица единиц M×N eye(N) Единичная матрица порядка N rand(M,N) Матрица M×N случайных чисел размера в диапазоне от 0 до 1, распределенных по равномерному закону randn(M,N) Матрица M×N случайных чисел, распределенных по нормальному закону с математическим ожиданием, равным 0, и дисперсией, равной 1 diag(V) Вектор из диагональных элементов квадратной матрицы V  Диагональная матрица — все элементы равны нулю, кроме диагональных, равных вектору  toeplitz(r) Матрица Теплица —квадратная матрица с одинаковыми элементами на диагоналях, равными соответствующим элементам первого столбца r 2.2. Преобразование матриц К операциям преобразования матриц относятся: • выделение из матрицы вектора-столбца: A(:,N) где N — номер столбца; • выделение из матрицы вектора-строки: A(M,:) где M — номер строки; • выделение подматрицы с указанием граничных индексов: A(M1:M2,N1:N2) где: M1:M2 — номера строк с M1 по M2 включительно; N1:N2 — номера столбцов с N1 по N2 включительно; • выделение подматрицы с указанием начальных индексов: A(M1:end;N1:end) где: M1:end — строки с M1 до последней включительно; N1:end — столбцы с N1 до последнего включительно; • растягивание матрицы в вектор-столбец: A(:) • горизонтальная конкатенация (объединение) подматриц (по столбцам): A=[A1,A2,A3,...] где A1,A2,A3,... — объединяемые подматрицы с одинаковым числом строк; • вертикальная конкатенация подматриц (по строкам): A=[A1;A2;A3;...] где A1;A2;A3;... — объединяемые подматрицы с одинаковым числом столбцов; • копирование матрицы, выполняемое с помощью функции: repmat(A,m,n) где: A — исходная матрица как элемент новой матрицы; m, n — число копий матрицы A по строкам и столбцам соответственно; • копирование квадратных матриц, выполняемое с помощью функции: repmat(A,n) где: A — исходная квадратная матрица как элемент новой квадратной матрицы; n — число копий матрицы A по строкам и столбцам. 2.3. Поэлементные операции с матрицами К поэлементным операциям с матрицами относятся арифметические операции и вычисление элементарных функций, аргументы которых — матрицы. Признаком поэлементных арифметических операций является точка перед символом операции: >> A=[1 2 3;2 -1 5;1 -1 -1],  B=[-1 -2 -3;-4 -5 -6;-7 -8 -9]  A =      1     2     3      2    -1     5      1    -1    -1 B =     -1    -2    -3     -4    -5    -6     -7    -8    -9 >> A.*B ans =     -1    -4    -9     -8     5   -30     -7     8     9 2.3. Поэлементные операции с матрицами К поэлементным операциям с матрицами относятся арифметические операции и вычисление элементарных функций, аргументы которых — матрицы. Признаком поэлементных арифметических операций является точка перед символом операции: >> A=[1 2 3;2 -1 5;1 -1 -1],  B=[-1 -2 -3;-4 -5 -6;-7 -8 -9]  A =      1     2     3      2    -1     5      1    -1    -1 B =     -1    -2    -3     -4    -5    -6     -7    -8    -9 >> A.*B ans =     -1    -4    -9     -8     5   -30     -7     8     9 2.4.1. Арифметические операции с матрицами К арифметическим операциям с матрицами относятся: • сложение и вычитание матриц одинакового размера; Суммой (разностью) матриц A и B размером m · n называется матрица C того же размера с элементами, равными сумме (разности) соответствующих элементов матриц A и B. Для операций сложения и вычитания матриц справедливы обычные законы арифметики: A + B = B + A; A – B = –B + A. Пример сложения матриц: >> A=[1 2 3;2 -1 5;1 -1 -1];  B=[-1 -2 -3;-4 -5 -6;-7 -8 -9]; >> C=A+B C =      0     0     0     -2    -6    -1     -6    -9   -10 • умножение матрицы на скаляр (число), эквивалентное операции поэлементного умножения на скаляр; • умножение матрицы на матрицу; Операция умножения возможна только в том случае, если число столбцов матрицы A равно числу строк матрицы B. Произведением матрицы A размером m · n на матрицу B размером n · p называется матрица C размером m · p, элемент i-й строки и k-го столбца которой равен сумме произведений соответственных элементов i-й строки матрицы A и k-го столбца матрицы B: В общем случае умножение матриц не коммутативно: AB ≠ BA. Пример умножения матриц: >> D=[1 2 5 7;3 8 0 3] D =      1     2     5     7      3     8     0     3 >> size(D) ans =      2     4 >> F=[1 2 0;3 8 5;0 3 4;9 7 1] F =      1     2     0      3     8     5      0     3     4      9     7     1 >> size(F) ans =      4     3 >> D*F ans =     70    82    37     54    91    43 • возведение квадратной матрицы в целую степень q, эквивалентное умножению матрицы саму на себя q раз: >> A=[1 2;4 5] A =      1     2      4     5 >> B=A^3 B =     57    78    156   213 2.4.2. Транспонирование и эрмитово сопряжение матриц Транспонирование матрицы — это операция замены каждой строки столбцом с тем же номером. Эрмитово сопряжение матрицы — это операция транспонирования матрицы с одновременной заменой ее элементов на комплексно сопряженные. Операции транспонирования и эрмитова сопряжения выполняются с помощью одного и того же символа " ' " (апостроф). Результат зависит от исходной матрицы — является она вещественной или комплексной. В первом случае получим транспонированную, а во втором — эрмитово сопряженную матрицу: >> A=[1 2 3;4 5 6;7 8 9] A =      1     2     3      4     5     6      7     8     9 >> A' ans =      1     4     7      2     5     8      3     6     9 >> C=[3+2i 4-5i;7-5i 1+i;2+2i 1-8i] C =    3.0000 + 2.0000i   4.0000 - 5.0000i    7.0000 - 5.0000i   1.0000 + 1.0000i    2.0000 + 2.0000i   1.0000 - 8.0000i >> C' ans =    3.0000 - 2.0000i   7.0000 + 5.0000i   2.0000 - 2.0000i    4.0000 + 5.0000i   1.0000 - 1.0000i   1.0000 + 8.0000i Транспонирование комплексной матрицы выполняется с помощью символа поэлементного транспонирования: >> C.' ans =    3.0000 + 2.0000i   7.0000 - 5.0000i   2.0000 + 2.0000i    4.0000 - 5.0000i   1.0000 + 1.0000i   1.0000 - 8.0000i Матрицу с комплексно сопряженными элементами можно получить с помощью функции conj: >> conj(C) ans =    3.0000 - 2.0000i   4.0000 + 5.0000i    7.0000 + 5.0000i   1.0000 - 1.0000i    2.0000 - 2.0000i   1.0000 + 8.0000i 2.4.3. Обращение матриц Матрица B называется обратной к матрице A, если произведение этих матриц дает единичную матрицу I: AB = BA = I. Матрица, обратная к матрице A, обозначается как A–1. Операция обращения возможна только для квадратных матриц с определителем, не равным нулю. Обратная матрица вычисляется с помощью функции: inv(A) а определитель матрицы — с помощью функции: det(A) Например: >> A=[1 2;4 5] A =      1     2      4     5 >> inv(A) ans =    -1.6667    0.6667     1.3333   -0.3333 >> det(A) ans =     -3 2.4.4. Матричное деление В списке символов арифметических операций содержатся два символа матричного деления с квадратными матрицами A и B порядка n: • левое матричное деление — A\B, эквивалентное алгебраической операции A–1B, т. е. inv(A)*B; • правое матричное деление — A/B, эквивалентное алгебраической операции AB–1, т. е. A*inv(B). Тема 3. Типы массивов Общая информация о разделе В MATLAB тип массива (тип данных) определяется типом его элементов. По умолчанию мы имели дело с матрицами, элементы которых представлены константами в форме с плавающей точкой (ПТ) с двойной точностью. Такие массивы относятся к типу double. Типы числовых и нечисловых массивов представлены в табл. 3.1. Таблица 3.1. Типы массивов в MATLAB Символическое обозначение типа массива Тип массива Функция преобразования типа   Числовой:   double вещественный двойной точности double(X) single вещественный одинарной точности single(X) int8 целый 8-битовый со знаком int8(X) uint8 целый 8-битовый без знака uint8(X) int16 целый 16-битовый со знаком int16(X) uint16 целый 16-битовый без знака uint16(X) int32 целый 32-битовый со знаком int32(X) uint32 целый 32-битовый без знака uint32(X) int64 целый 64-битовый со знаком int64(X) uint64 целый 64-битовый без знака uint64(X) logical Логический logical(X) character (char) Символьный num2str(X) structure (struct) Структура (массив записей) — cell Массив ячеек — 3.1. Матрицы числового и логического типов Преобразование матриц числового типа double в матрицы других числовых типов выполняется с помощью специальных встроенных функций (см. табл. 3.1). При обработке матриц числового целого типа необходимо иметь в виду, что с ними запрещено выполнение арифметических операций, в том числе вычисление большинства встроенных функций, но разрешено выполнение операций отношения и логических операций: >> T = [159.7 125.7 -125.7]; >> A = int8(T); A =   127  126 -126 >> B = uint8(T) B =   160  126    0 >> C = [A> a=['Alla ' 'Woman ' 'Russian'] a = Alla Woman Russian • элементы столбца должны содержать одинаковое число символов, при этом пробел считается символом: >> a=['Alla   ';'Woman  ';'Russian'] a = Alla   Woman  Russian Автоматическое добавление пробелов в элементах столбца с выравниванием по левому краю выполняется с помощью функции: char('',''...) где , ... — элементы столбца с произвольным количеством символов. Одна функция char описывает один столбец матрицы: >> a = char('Alla','Woman','Russian') a = Alla   Woman  Russian Матрицу символьного типа удобно формировать по столбцам, используя для каждого из них свою функцию char и предусматривая необходимое количество пробелов для разделения столбцов: >> x = [char('a','aa','aaa') char(' bb',' bbb',' b') ... char(' cc',' ccc',' c')] x = a   bb  cc aa  bbb ccc aaa b   c Преобразование в матрицу символьного типа выполняется с помощью функции num2str(x): >> x = [5 7;-1 9] x =      5     7     -1     9 >> y = num2str(x) y = 5  7 -1  9 Здесь x — матрица типа double, а y — матрица символьного типа: >> [size(x); size(y)] ans =      2     2      2     5 3.3. Структуры (массивы записей) Структура (массив записей — struct array) — это разновидность нечислового массива, предназначенного для описания M объектов N параметрами. Для описания структуры потребуется ввести ряд новых терминов. Поле (field) — имя параметра. Значение  поля — значение параметра. Число полей равно количеству параметров N. Запись — список полей,  одинаковый для всех M объектов. Значение записи — список полей с их значениями для одного объекта. Число записей равно количеству объектов M. Структура (массив записей) — это упорядоченная совокупность значений записей, объединенная одним именем. Имя структуры выбирается так же, как имя простой переменной, а размер равен числу записей M. Значение каждой i-й записи формируется отдельно по каждому n-му полю: <имя массива>().<имя n-го поля> = <значение n-го поля> Таким образом, для формирования M значений записей со списком из N полей, потребуется M · N операторов присваивания. Сформируем структуру personal для описания трех объектов (M = 3) — трех членов кафедры — четырьмя параметрами (N = 4). Запись включает в себя следующие поля: surname — фамилия — скаляр символьного типа; data — дата рождения (число, месяц, год)  — вектор численного типа; position — должность — скаляр символьного типа; phd — наличие ученой степени — скаляр логического типа. Сформируем значения структуры personal по каждому полю: >> personal(1).surname = 'Иванов'; >> personal(2).surname = 'Петров'; >> personal(3).surname = 'Сидоров'; >> personal(1).data = [1 2 1949]; >> personal(2).data = [5 7 1975]; >> personal(3).data = [5 8 1956]; >> personal(1).position = 'профессор'; >> personal(2).position = 'доцент'; >> personal(3).position = 'зав.лаб.'; >> personal(1).phd = true; >> personal(2).phd = true; >> personal(3).phd = false; Список полей выводится по имени структуры: >> personal personal = 1x3 struct array with fields:     surname     data     position     phd Значение i-й записи выводится по имени структуры с указанием индекса в круглых скобках. Например, значение 2-й записи: >> personal(2) ans =      surname: 'Петров'         data: [5 7 1975]     position: 'доцент'          phd: 1 Значение поля в i-й записи выводится по имени структуры с указанием индекса в круглых скобках и имени поля. Например, значение поля surname первой записи: >> personal(1).surname ans = Иванов Значения поля во всех записях выводятся по имени структуры с указанием имени поля. Например, поля surname: >> personal.surname ans = Иванов ans = Петров ans = Сидорова Удаление поля выполняется с помощью функции: <имя массива> = rmfield(<имя массива>,'<имя поля>') Например, с поле data: >> personal = rmfield(personal,'data') personal = 1x3 struct array with fields:     surname     position     phd При этом следует иметь в виду, что знак присваивания обязателен. Строка >> rmfield(personal,'data') приведёт к тому, что переменной ans будет присвоено значение структуры без поля data, однако в исходной структуре personal поле останется. 3.4. Массивы ячеек Массив ячеек (cell array) — это наиболее сложный тип массива, элементами которого являются ячейки, представляющее собой массивы любой размерности, любого размера и типа. Элементы массива ячеек указываются в фигурных скобках. Сформируем квадратную матрицу ячеек 3×3: >> A{1,1} = pi; >> A{1,2} = [1 2 3;4 5 6]; >> A{1,3} = char('abs','angle'); >> A{2,1} = [ones(5,1)]'; >> A{2,2} = zeros(3,1); >> A{2,3} = 'Alla'; >> A{3,1} = 7 ; >> A{3,2} = rand(5,1); >> A{3,3} = personal; где personal — имя структуры, сформированной в разд. 3.3. Массив ячеек может быть введён как обычная матрица, только вместо квадратных скобок используются фигурные: >> B = {pi, personal; sin(0.5*pi) [1 2 3]}; Вывод элементов массива ячеек выполняется по его имени с указанием индексов: >> A{1,2} ans =      1     2     3      4     5     6 >> A{3,3} ans = 1x3 struct array with fields:     surname     age     position     pd С элементами массива ячеек можно выполнять операции, разрешенные для данного типа массива и с учетом согласования их размерностей и размеров, например: >> B = sum(A{1,2})+A{1,1} B =     8.1416   10.1416   12.1416 Графическое представление матрицы ячеек создается с помощью функции: cellplot(A,'legend') 3.5. Определение типа массива Для определения типа массива служит функция: class(<имя массива>) Например, для массива A, сформированного в разд. 3.4: >> class(A) ans = cell Тема 5. Режим программирования: script-файлы и function-файлы Общая информация о разделе Режим программирования предназначен для разработки программ пользователя в среде MATLAB. Все программы пользователя, создаваемые в MATLAB, сохраняются на диске и имеют расширение m, поэтому их называют M-файлами. Различают две разновидности M-файлов: • script-файл (файл-сценарий); • function-файл (файл-функция). В M-файлах, независимо от их вида, должны соблюдаться следующие правила языка MATLAB: • переменные не объявляются и не описываются; • не используются метки; • отсутствует оператор безусловного перехода типа "go to" (т. к. нет меток); • не фиксируется (оператором или служебным словом) конец программы. 5.1. Создание и хранение M-файлов Для создания M-файла и его сохранения в папке пользователя необходимо выполнить следующую последовательность действий: 1. В окне MATLAB выбрать в главном меню пункт File | New (Файл | Новый) и определить тип создаваемого M-файла. 2. В раскрывшемся окне Editor (Редактор) набрать текст M-файла построчно. 3. Для сохранения M-файла выбрать в главном меню команду File | Save as (Сохранить как). 4. В раскрывшемся окне Save as выбрать требуемую папку, присвоить имя новому M-файлу (без расширения) и нажать кнопку Save (Сохранить). При открытом окне редактора после внесения изменений в M-файл необходимо его сохранить перед следующим запуском. Признаком несохраненного файла является символ " * " (звездочка) при его имени в окне редактора. Создание новой папки выполняется с помощью контекстного меню в окне Current Folder. Сохранение пути к требуемой папке выполняется по команде контекстного меню Add Path | Selected Folders (Добавить путь | Выбранные папки) или команде главного меню File | Set Path (Файл | Установить путь). Сохранение пути к папке позволять в текущей сессии запускать М-файл, не  открывая данную папку. При запуске M-файлов из текущей папки, путь к ней можно не сохранять. 5.2. Script-файлы Script-файлом называют создаваемый пользователем M-файл, представляющий собой основную (управляющую) программу. Термины "script-файл" и "программа" употребляют в тождественном смысле. Программа состоит из операторов, записываемых построчно. По правилам хорошего стиля программирования рекомендуется: • в начале программы ставить необязательный оператор-заголовок: script • после этого, во избежание конфликта переменных в Workspace и для очистки экрана, можно поставить команды clc и clear. Имя script-файла выбирается по тем же правилам, что и имя переменной. Пример простейшего script-файла S1: script clc % Диапазон значений аргумента x = 0:0.1:7; % Вычисление значений синусоиды y y = sin(x); % Вычисление значений косинусоиды z z = cos(x); Обращение к script-файлу в режиме прямых вычислений (или в другом М-файле) осуществляется по его имени: >> S1 После этого выполняются действия согласно программе. Все переменные script-файла являются глобальными, т. е. они сохранятся в Workspace и доступны для использования в любых приложениях. 5.3. Function-файлы Function-файлом называют создаваемый пользователем M-файл, представляющий собой внешнюю функцию (в отличие от встроенных функций MATLAB). Термины "function-файл" и "внешняя функция" употребляют в тождественном смысле. Описание function-файла начинается с оператора-заголовка function. Формат описания при нескольких выходных параметрах имеет вид: function [Y1,Y2,...] = <имя функции>(X1,X2,...) где: <имя функции> — имя function-файла, выбираемое подобно имени переменной; X1, X2,… — список  формальных входных параметров; Y1, Y2,… — список формальных выходных параметров. При одном выходном параметре имеем короткий формат описания: function Y = <имя функции>(X1,X2,...) После заголовка следует тело функции — записанная построчно на языке MATLAB программа определения выходных параметров Y1, Y2,… по входным — X1, X2,…. Пример function-файла F1: function [z,p] = F1(x,y) % Вычисление суммы кубов z z = x.^3+y.^3; % Вычисление квадратного корня p p = sqrt(abs(z)); Пример function-файла F2 с одним выходным параметром: function z = F2(x,y) % Вычисление суммы кубов z z = x.^3+y.^3; Обращение к внешней функции подобно обращению к стандартной функции MATLAB. При нескольких выходных параметрах: [Y1факт,Y2факт,...] = <имя функции>(X1факт,X2факт,...) где: X1факт, X2факт,… — список фактических входных параметров; Y1факт, Y2факт,… — список фактических выходных параметров. Фактические значения входных параметров X1факт, X2факт,…, должны быть определены перед обращением к внешней функции. Варианты обращения к function-файлу F1: >> [d,c] = F1(2,3); >> a = 2; b = 3; >> [d,c] = F1(a,b); При одном выходном параметре допускается короткий формат обращения: <имя функции>(X1факт,X2факт,...) Варианты обращения к function-файлу F2: >> a = 2; b = 3; >> d = F2(a,b)+sin(7+F2(5,7)); Разделение параметров function-файлов на формальные и фактические обусловлено тем, что формальные параметры являются локальными, т. е. они (вместе с внутренними переменными function-файла) загружаются в Workspace на время вычисления внешней функции и удаляются из Workspace по завершении вычислений. Фактические же параметры сохраняются в Workspace. 5.4. Оформление и вывод листинга M-файлов При оформлении М-файлов рекомендуется соблюдать следующие правила: • включать комментарии, поясняющие назначение переменных, выполняемые действия и т. п.; • во избежание выводов нежелательных промежуточных результатов ставить точку с запятой. Вывод листинга M-файла в окне Command Window выполняется по команде: type <имя M-файла> 5.5. Вывод данных Вывод данных в окно Command Window во время выполнения программы организуется с помощью функции disp, например: >> disp(['x     ' 'a     ' 'b']) x     a     b Для вывода значения численной переменной одновременно с текстом удобно воспользоваться функцией num2str: >> i = 5; >> disp(['  Коэффициент ',num2str(i),'-го ВАРИАНТА']) Коэффициент 5-го ВАРИАНТА 5.6. Пауза и досрочное прерывание программы Приостановить процесс выполнения программы на неопределенное (до нажатия любой клавиши) время можно по команде: pause Досрочное прерывание процесса выполнения программы в результате проверки тех или иных условий выполняется по команде return Рекомендуется предусмотреть вывод сообщения о причине досрочного прерывания. Для принудительного снятия script-файла с выполнения следует на клавиатуре нажать комбинацию клавиш  + . Тема 6. Режим программирования: организация разветвлений и циклов Для организации разветвлений и циклов в М-файлах используются операторы языка MATLAB, рассматриваемые в следующих разделах.  6.1. Операторы организации разветвлений Имеется две основные разновидности разветвлений, реализуемые двумя операторами MATLAB: 1. Разветвление по условию выполняется с помощью оператора if. Формат оператора if с несколькими условиями имеет вид: if <условие1>      <фрагмент1> elseif <условие2>          <фрагмент2> ... elseif <условиеN-1>          <фрагментN-1> ... else      <фрагментN> end Действие оператора: если значение <условия1> "истинно", то управление передается <фрагменту1>, если значение <условия2> "истинно", то управление передается <фрагменту2> и т. д. вплоть до <условияN-1>; если значения всех условий "ложно", то управление передается <фрагментуN>; после этого оно передается части программы, следующей за end. Все условия и фрагменты, кроме первых, не являются обязательными. Пример использования оператора: if i>j    a(i,j) = 1; elseif i==j    a(i,j) = -1; else    a(i,j) = 0; end 2. Разветвление в зависимости от значения выражения (арифметического, символьного или логического) выполняется с помощью оператора switch следующего формата: switch <выражение>     case <значение1>            <фрагмент1>     case <значение2>            <фрагмент2>     ...     otherwise            <фрагментN> end Действие оператора: в зависимости от значения <выражения> управление передается соответствующему <фрагменту>; если значение выражения не равно ни одному из указанных, то управление передается <фрагментуN> (который может отсутствовать); после этого управление передается части программы, следующей за end. Например: function y=switchEx(a,b) x = [pi/6 pi/8 pi/16]; switch (a+b)     case 0          y = sin(x);     case 1          y = cos(x);     otherwise          y = tan(x) end 6.2. Операторы организации циклов Имеются две основные разновидности циклов, реализуемые двумя операторами MATLAB: 1. Арифметический цикл с заранее известным (фиксированным) числом повторений организуется с помощью оператора for одного из следующих форматов: • с простой переменной цикла: for <переменная> = <нач.значение>:[<шаг>:]<кон.значение>       <тело цикла> end где: <переменная> — имя простой переменной цикла; <нач.значение>, <кон.значение>, <шаг> — соответственно начальное и конечное значения переменной цикла и шаг ее изменения; если шаг равен 1, то его можно не указывать; <тело цикла> — повторяющийся фрагмент программы. Действие оператора: при изменении значений <переменной> от <нач.значения> до <кон.значения> с заданным <шагом> повторяется <тело цикла>, каждый раз с новым значением <переменной>; после этого управление передается части программы, следующей за end. Например (полужирным шрифтом выделены элементы, вычисляемые в цикле): x = [2 3 5]; for i = 1:3 x(i) = i^2 end x =      1     3     5 x =      1     4     5 x =      1     4     9 • с переменной цикла — вектором: Например: for <переменная> = <вектор>     <тело цикла> end где <вектор> — вектор, как правило, числовой. Действие оператора: при изменении значений <переменной>, которой последовательно присваиваются значения элементов <вектора>, повторяется <тело цикла>, каждый раз с новым значением <переменной>; после этого управление передается части программы, следующей за end. Например: a = [-1 0 15]; for i = a x = i+a end x =     -2    -1    14 x =     -1     0    15 x =     14    15    30 • с переменной цикла — матрицей: for <переменная> = <матрица>     <тело цикла> end где <матрица> — матрица, как правило, числовая. Действие оператора: при изменении значений <переменной>, которой последовательно присваиваются значения столбцов <матрицы>, повторяется <тело цикла>, каждый раз с новым значением <переменной>; после этого управление передается части программы, следующей за end. Например: a = [1 2 3;4 5 6;7 8 9]; for i = a x = i' end x =      1     4     7 x =      2     5     8 x =      3     6     9 2. Итерационный цикл с заранее неизвестным (не фиксированным) числом повторений организуется с помощью оператора while следующего формата: while <условие>         <тело цикла> end где <условие> — логическое выражение, хотя бы одна из переменных которого встречается в <теле цикла>. Действие оператора: <тело цикла> повторяется до тех пор, пока <условие> "истинно", после чего управление передается части программы, следующей за end. Пример использования оператора while для вычисления суммы геометрической прогрессии (s) с точностью до ε = 10–4 (e) с выводом после выхода из цикла значения суммы и погрешности вычисления (вектор [s e]): n = 0; s0 = 0; e = 100; while e>1e-4 s = s0+(-0.5).^n; e = abs(s-s0); s0 = s; n = n+1; end [s e] ans =     0.6667    0.0001 Принудительный выход из цикла реализуется оператором: break после которого управление передается части программы, следующей за end.
«Система MATLAB» 👇
Готовые курсовые работы и рефераты
Купить от 250 ₽
Решение задач от ИИ за 2 минуты
Решить задачу
Найди решение своей задачи среди 1 000 000 ответов
Найти

Тебе могут подойти лекции

Смотреть все 588 лекций
Все самое важное и интересное в Telegram

Все сервисы Справочника в твоем телефоне! Просто напиши Боту, что ты ищешь и он быстро найдет нужную статью, лекцию или пособие для тебя!

Перейти в Telegram Bot