Добавил:
ivanov666
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Применение MATLAB для решения аналитических задач моделирования. Учебное пособие
.pdf
Функции
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 объединяет числа в вектор-строку, который представляет собой
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
