Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Применение MATLAB для решения аналитических задач моделирования. Учебное пособие

.pdf
Скачиваний:
0
Добавлен:
08.09.2026
Размер:
2 Мб
Скачать
☆
Функции
31
Анонимная функция может быть определена тремя способами:
1. непосредственно в командной строке MATLAB;
2. в функции;
3. в сценарии (скрипте).
Это говорит о том, что в среде Matlab можно запускать простые
функции, не создавая для них отдельный файл.
Синтаксис для создания анонимной функции можно найти из вы-
ражения:
f = name(arguments)expression.
В этом примере мы напишем анонимную функцию с именем composition для расчета произведения двух чисел. Функция принимает на вход два числа и возвращает в результате первое число, умноженное на второе число.
Создайте файл скрипта и введите в него следующий код:
>> composition = @(x, y) x.*y;
result1 = composition (2, 3)
result2 = composition (10, 0.5)
В результате на экран будет выведен следующий результат:
result1 = 6
result2 = 5
Основные функции и подфункции
Любая функция, кроме анонимной, должна быть определена в фай­ле. Каждый файл функции содержит требуемую основную функцию, ко­торая появляется первой, и любое количество необязательных подфунк­ций, которые следуют за ней и используются основной функцией.
Первичные функции можно вызывать из-за пределов определяю­щего их файла либо из командной строки, либо из других функций, но подфункции нельзя вызывать из командной строки или других функций вне файла функций.
Подфункции видны только основной функции и другим подфунк­циям в файле функций, который их определяет.
Давайте напишем функцию root, которая вычисляет корни квадрат­ного уравнения. Функция будет принимать следующие входные данные:
Применение Matlab для решения аналитических задач моделирования
32
квадратичный коэффициент, линейный коэффициент и постоянный член. Это позволит вернуть корни.
Файл root.m включает основную функцию root и вспомогательный
disk, который вычисляет дискриминант.
Создайте файл функции root.m и введите в него следующий код
(рис. 18).
Рис. 18. Нахождение дискриминанта
Приведенную выше функцию можно вызвать из командной строки
и получить результат, приведенный в табл. 11.
Таблица 11
Результат вызова функции
Функция
Результат
root(5,2, – 7)
ans = –1,41
Вложенные функции
Вы можете определять функции в теле других функций. Это так
называемые вложенные функции. Вложенная функция содержит любой или все компоненты любой другой функции.
Вложенная функция имеет следующий синтаксис:
Функции
33
>>function a = X(p1, p2)
...
B(p2)
function b = Y(p3)
...
end
...
end
Давайте перепишем квадратичную функцию из предыдущего при­мера, но на этот раз дисковая функция будет вложенной функцией.
Создайте файл функции quadratic.m и введите в него следующий код (рис. 19):
Рис. 19. Код функции quadratic
Вышеуказанную функцию можно вызвать из командной строки как quadratic (2,4, – 4). После выполнения оператора, MATLAB вернет резуль­тат ans = 0.73205.
Частные функции
Частная функция – это основная функция, которая видна только ограниченному кругу других функций. Если вы не хотите показывать реа­лизацию функции (функций), вы можете создать их как частные функции.
Частные функции находятся в подпапках со специальным названи­ем private. Они видны только функциям в родительской папке.
Перепишем квадратичную функцию. Однако на этот раз дисковая функция, вычисляющая дискриминант, будет частичной функцией.
Создайте подпапку с именем private в вашем рабочем каталоге. Со­храните в нем следующий функциональный файл summ.m:
Применение Matlab для решения аналитических задач моделирования
34
function s = summ(a,b,c) %function calculates the summ s =a+b+c; end % end of sub-function
Создайте функцию quadratic1.m в вашем рабочем каталоге и введи-
те в код, представленный на рис. 20.
Рис. 20. Вызов функции quadratic 1
Вышеуказанную функцию можно также вызвать из командной
строки, введя quadratic1(2, 4, –4). В результате на экран будет выведен следующий результат: ans = 0.73205.
Глобальные переменные
Глобальные переменные должны быть объявлены во всех функци-
ях. Если вы хотите получить доступ к этому базовому рабочему простран­ству, объявите переменную в командной строке.
Глобальное объявление должно быть произведено до начала ис-
пользования переменной по назначению. Используйте заглавные буквы для своих объявления глобальных переменных, чтобы отличить их от дру­гих вариантов использования. Переменные в файлах сценариев являются глобальными, а переменные в файлах функций – локальными.
Часто использование глобальных переменных в программных мо­дулях может привести к побочным эффектам. Использование локальных переменных исключает эту возможность и отвечает требованиям струк­турного программирования. Давайте создадим файл функции с именем medium.m и напишем в нем следующий код:
Функции
35
function avg = average(nums) global TOTAL avg = sum(nums)/TOTAL; end
Создайте скриптовый файл и введите следующий код: global TOTAL;
TOTAL = 5; n = [10 , 15, 20, 25, 19]; av = average(n)
Определите, какую задачу решает данная программа. Напишите
скрипты для нахождения минимального и максимального значений.
Лабораторная работа № 4.
Работа с локальными и глобальными функциями
1. Создайте функцию для расчета корней квадратного уравнения
(в общем виде). В качестве вложенной функции добавьте функцию расче­та дискриминанта. Проверьте работу функции для двух примеров.
В роли частной функции добавьте функцию проверки на возмож-
ность применения теоремы Виета.
2. Создайте функцию для расчета корней кубического уравнения в
общем виде. Проверьте на двух примерах.
Применение Matlab для решения аналитических задач моделирования
36
РАБОТА С МАТРИЦАМИ
Матрицы в системе Matlab используются для хранения данных в виде массивов. В среде MATLAB термин «матрица» относится к пере­менной, содержащей действительные или комплексные числа, располо­женные в двумерной сетке. Массив, в более общем смысле, представляет собой вектор, матрицу или сетку чисел более высокой размерности.
Все массивы в MATLAB прямоугольные, в том смысле, что векторы компонента по любому измерению имеют одинаковую длину. Математиче­ские операции над матрицами являются предметом линейной алгебры.
Создание матриц
Индексирование в матрице является средством выбора подмноже­ства элементов из матрицы. В MATLAB есть несколько стилей индекса­ции, которые не только мощны и гибки, но также удобочитаемы и выра­зительны. Индексирование является ключом к эффективности MATLAB при отображении идей, ориентированных на матрицу, в понятных компь­ютерных программах.
Индексация также тесно связана с другим термином, который часто слышат пользователи MATLAB: векторизация. Векторизация означает использование языковых конструкций MATLAB для устранения про­граммных циклов, что обычно приводит к тому, что программы работают быстрее и читабельнее. Из многих возможных методов векторизации мно­гие полагаются на методы индексации MATLAB, пять из которых описа­ны в этой статье.
MATLAB имеет много функций, которые создают различные виды матриц. Автоматические подсказки облегчают процесс ввода команд. Пример подсказки при вводе команды для построения треугольника Пас­каля приведен на рис. 21 и в табл. 12.
Рис. 21. Треугольник Паскаля
Работа с матрицами
37
Таблица 12
Команды для создания матриц
Команда
Результат выполнения
Симметрическая матрица с записями на основе треугольника Паскаля:
>> m = pascal(4)
m = 1 1 1 1
1 2 3 4 1 3 6 10 1 4 10 20
Несимметричная матрица магического квадрата с равными суммами по стро-
ке и столбцу
>>m=magic(4)
m = 16 2 3 13
5 11 10 8 9 7 6 12 4 14 15 1
Прямоугольная матрица 3х2, заполненная рандомными целыми числами. Пер-
вый входной параметр randi описывает область возможных целочисленных
значений, а два других параметра определяют количество строк и столбцов в
матрице
>> m = randi(5,2,2)
m = 5 1
5 5
Вектор-столбец представляет собой матрицу размером m на 1,
вектор-строка представляет собой матрицу размером 1 на n, а скаляр представляет собой матрицу размером 1 на 1. Чтобы определить матри­цу вручную, используйте квадратные скобки [] для обозначения начала и конца массива. Используйте точку с запятой в скобках; отметить ко­нец строки. В случае скаляра (матрица 1 на 1) круглые скобки не требу­ются. Например, эти операторы создают вектор-столбец, вектор-строку и скаляр (табл. 13):
Таблица 13
Создание векторов и матриц
Команда
Результат выполнения
u = [2; 1; 0]
u = 2
1 0
v = [1 0 –1]
v = 1 0 –1
s = 5
s = 5
Применение Matlab для решения аналитических задач моделирования
38
Над матрицами можно производить различные математические операции, например, сложение (+), умножение (*), вычитание (–), возве­дение в степень (^) и т.д. Для большинства операций важно помнить о совпадении размеров матриц.
Основные знаки арифметических операций над матрицами, исполь­зуемых в Matlab, приведены в табл. 14.
Таблица 14
Арифметические операции
Знак
Назначение
Знак
Назначение
+
Сложение,
–
вычитание,
*
матричное умноже­ние,
.*
поэлементное умножение, /
матричное деление,
./
поэлементное деление,
\
обратное деление,
.\
обратное поэлементное деление,
^
возведение в степень,
.^
поэлементное возведение в степень,
'
транспонирование,
.'
поэлементное транспонирование
Для успешного выполнения приведенных выше операций в MatLab, матрицы должны соответствовать определённым требованиям. Так, например, ввод + означает сложение или унарный плюс. При выполнении сложения матрицы должны иметь одинаковые размеры. При этом к мат­рице любого размера можно прибавлять скаляр.
Знак – обозначает вычитание или унарный минус. При вычитании матрицы должны иметь одинаковые размеры. Из матрицы любого размера можно вычитать скаляр.
Знак * изображает матричное умножение. Сомножители должны иметь правильные размеры.
Деление матриц A/B эквивалентно A*inv(B), где inv – функция для вычисления обратной матрицы. Левое деление A\B эквивалентно inv(A)*B. Если A – квадратная матрица nxn, а B – вектор-столбец из n элементов или матрица из нескольких столбцов по n элементов, тогда результатом опера­ции A\B является решение системы линейных уравнений A*X = B.
В выражении C^p p должно быть скаляром. Если p целое, тогда C перемножается p раз. Если p отрицательное, то от C берется обратная
Работа с матрицами
39
матрица. Если p вещественное, тогда сначала вычисляются собственные значения и собственные вектора матрицы C [V, D] = eig(C), где V – мат­рица, содержащая в столбцах собственные вектора матрицы C, а D – диа­гональная матрица с собственными значениями C на диагонали.
Результат возведения в степень вычисляется как C^p=V*D.^p/V. Транспонирование матриц ( ' ), в случае, если матрица комплекс-
ная, выполняется наряду с комплексным сопряжением.
Поэлементное умножение y=x.*z; означает, что y(i, j) = x(i, j)*z(i, j). Матрицы x, z и y должны иметь одинаковые размеры. Поэлементное де­ление y = x./z; означает, что y(i,j) = x(i,j)/z(i,j). Матрицы x и z должны быть одинаковых размеров.
.^ y = x.^z; означает, что y(i,j) = x(i, j)^z(i, j). Матрицы x и z должны быть одинаковых размеров.
.' r = y.'; означает, что r(i,j) = 1/y(i, j).
.\ C = A.\B; означает, что C(i,j) = B(i, j)/A(i, j).
В табл. 15 приведены основные операции над матрицами в про­грамме MATLAB.
Таблица 15
Операции над матрицами
Операция
Назначение
DIAG
формирование или извлечение диагоналей матрицы
TRIL
формирование нижнетреугольной матрицы (массива)
TRIU
формирование верхнетреугольной матрицы (массива)
FLIPLR
поворот матрицы относительно вертикальной оси
FLIPUD
поворот матрицы относительно горизонтальной оси
ROT90
поворот матрицы на 90 градусов
RESHAPE
преобразование размеров матрицы
Также в программе MatLab можно создавать матрицы специально­го вида.
Ввод zeros(x,y) заполняет прямоугольной матрицы x*y нулями. Команда diag формирует диагональную матрицу из вектора путем распо­ложения элементов по диагонали.
Функции inv и pinv используются для нахождения обратной матри­цы (для квадратных матриц) и псевдообратной матрицы соответственно.
Применение Matlab для решения аналитических задач моделирования
40
Операции сложения и вычитания матриц и массивов выполняются
поэлементно:
>>X = A + B >>Y = X – A
Сложение и вычитание требуют, чтобы обе матрицы имели совме-
стимые размерности. Если размерности несовместимы, выводится ошибка:
>>X = A + C Error using + Matrix dimensions must agree.
Вектор-строка и вектор-столбец той же длины могут быть пере-
множены в любом порядке. Результатом будет скаляр (скалярное произве-
дение) или матрица (векторное произведение)
>> u = [3; 1; 4]; v = [2 0 –1]; x = v*u x = 2 >>X = u*v X = 6 0 – 3 2 0 – 1 8 0 – 4
Массивы
Все переменные MATLAB являются массивами. Это означает, что каждая числовая переменная может содержать несколько чисел. Вы мо­жете использовать массивы для хранения связанных данных в одной пе­ременной.
Массив из нескольких элементов можно задать следующим обра­зом:
Х = [2 3].
Также в квадратных скобках можно выполнять вычисления.
Когда вы разделяете числа пробелами, как показано выше, MATLAB объединяет числа в вектор-строку, который представляет собой
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]