Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Matlab / Matlab / Matlab - Lazarev.pdf
Скачиваний:
133
Добавлен:
18.05.2015
Размер:
5.67 Mб
Скачать

2.1. Функции функций

93

2. Программирование в среде MatLAB

Работа в режиме калькулятора в среде MatLAB, несмотря на довольно значительные возможности, во многих отношениях неудобна. Невозможно повторить предшествующие вычисления и действия при новых значениях исходных данных без повторного набора предшествующих операторов. Нельзя возвратиться назад и повторить некоторые действия, или по некоторому условию перейти к выполнению другой последовательности операторов. И вообще, если количество операторов значительно, становится проблемой отладить правильную их работу из-за неминуемых ошибок при наборе команд. Поэтому сложные, с прерываниями, сложными переходами по определенным условиям, с часто повторяемыми однотипными действиями вычисления, которые, вдобавок, необходимо проводить неоднократно при измененных исходных данных, требуют их специального оформления в виде записанных на диске файлов, т. е. в виде программ. Преимущество программ в том, что, так как они зафиксированы в виде записанных файлов, становится возможным многократное обращение к одним и тем же операторам и к программе в целом. Это позволяет упростить процесс отладки программы, сделать процесс вычислений более наглядным и прозрачным, а благодаря этому резко уменьшить возможность появления ошибок при разработке программ. Кроме того, в программах возникает возможность автоматизировать также и процесс изменения значений первоначальных параметров в диалоговом режиме.

2.1. Функции функций

Некоторые важные универсальные процедуры в MatLAB используют в качестве переменного параметра имя функции, с которой они оперируют, и поэтому требуют при обращении к ним указания имени М-файла, в котором записан текст некоторой другой процедуры (функции). Такие процедуры называют функциями функций.

Чтобы воспользоваться такой функцией от функции, необходимо, чтобы пользователь предварительно создал М-файл, в котором вычислялось бы значение нужной функции по известному значению ее аргумента.

Перечислим некоторые из стандартных функций от функций, предусмотренных в MatLAB.

Вычисление интеграла методом квадратур осуществляется процедурой

[ I, cnt ] = quad(‘<имя функции>’, a,b).

Здесь a и b - нижняя и верхняя граница изменения аргумента функции; I - полученное значение интеграла; cnt - количество обращений к вычислению функции, представленной М-файлом с названием, указанным в <имя функции>. Функция quad использует квадратурные формулы Ньютона-Котеса четвертого порядка.

Аналогичная процедура quad8 использует более точные формулы 8-го порядка.

2.1. Функции функций

94

Интегрирование обыкновенных дифференциальных уравнений осуществ-

ляют функции ode23 и ode45. Они могут применяться как для численного решения (интегрирования) простых дифференциальных уравнений, так и для моделирования сложных динамических систем, т. е. систем, поведение которых можно описать совокупностью обыкновенных дифференциальных уравнений.

Известно, что любая система обыкновенных дифференциальных уравнений (ОДУ) может быть представлена как система уравнений 1-го порядка в форме Коши:

ddty = f ( y,t ) ,

где y - вектор переменных состояния (фазовых переменных системы); t - аргумент (обычно - время); f - нелинейная вектор-функция переменных состояния y и аргумента t.

Обращение к процедурам численного интегрирования ОДУ имеет вид: [t, y] = ode23 (‘<имя функции>’, tspan, y0, options)

[t, y] = ode45 (‘<имя функции>’, tspan, y0, options),

где используемые параметры имеют такой смысл: <имя функции> - строка символов, представляющая собой имя М-файла, в котором вычисляется вектор-функция f(y,t), т. е. правые части системы ОДУ; y0 - вектор начальных значений переменных состояния; t - массив рассчитанных значений аргумента, отвечающих шагам интегрирования; y - матрица проинтегрированных значений фазовых переменных, в которой каждый столбец соотвествует одной из переменных состояния, а строка содержит значения переменных состояния, отвечающие соответствующему шагу интегрирования; tspan - вектор-строка [t0 tfinal], содержащая два значения: t0 - начальное и tfinal - конечное значение аргумента; ortions - строка из параметров, которые определяют значения допустимой относительной и абсолютной погрешности интегрирования.

Параметр ortions можно не указывать. Тогда, по умолчанию, допустимая относительная погрешность интегрирования принимается равной 1 103 , абсо-

лютная (по любой из переменных состояния) - 1 106 . Если же эти значения не устраивают пользователя, нужно перед обращением к процедуре численного интегрирования установить новые значения допустимых погрешностей с помощью процедуры odeset таким образом:

options = odeset ('RelTol',1e-4,'AbsTol',[1e-4 1e-4 1e-5]).

Параметр RelTol определяет относительную погрешность численного интегрирования по всем фазовым переменным одновременно, а AbsTol является вектором-строкой, состоящим из абсолютных допустимых погрешностей численного интегрирования по каждой из фазовых переменных.

Функция ode23 осуществляет интегрирование численным методом РунгеКутта 2-го порядка, а с помощью метода 3-го порядка контролирует относительные и абсолютные погрешности интегрирования на каждом шаге и изменяет величину шага интегрирования так, чтобы обеспечить заданные границы погрешностей интегрирования.

2.1. Функции функций

95

Для функции ode45 основным методом интегрирования является метод Рун- ге-Кутта 4-го порядка, а величина шага контролируется методом 5-го порядка.

Вычисление минимумов и корней функции осуществляется такими функ-

циями MatLAB:

fmin - отыскание минимума функции одного аргумента; fmins - отыскание минимума функции нескольких аргументов; fzero - отыскание нулей (корней) функции одного аргумента. Обращение к первой из них в общем случае имеет такой вид:

Xmin = fmin (‘<имя функции>’, X1, X2).

Результатом этого обращения будет значение Xmin аргумента функции, которое отвечает локальному минимуму в интервале X1<X<X2 функции, заданной М-файлом с указанным именем.

В качестве примера рассмотрим отыскание значения числа π как значения локального минимума функции y = cos(x) на отрезке [3, 4]:

» Xmin = fmin('cos',3,4)

Xmin = 3. 1416e+000

Обращение ко второй процедуре должно иметь форму: Xmin = fmins (‘<имя функции>’, X0),

при этом Х является вектором аргументов, а Х0 означает начальное (исходное) значение этого вектора, в окрестности которого отыскивается ближайший локальный минимум функции, заданной М-файлом с указанным именем. Функция fmins находит вектор аргументов Хmin, отвечающий найденному локальному минимуму.

Обращение к функции fzero должно иметь вид:

z = fzero (‘<имя функции>’, x0, tol, trace).

Здесь обозначен: x0 - начальное значение аргумента, в окрестности которого отыскивается действительный корень функции, значение которой вычисляется в М-файле с заданным именем; tol - заданная относительная погрешность вычисления корня; trace - знак необходимости выводить на экран промежуточные результаты; z - значение искомого корня.

Построение графиков функции одной переменной может быть осуществ-

лена с помощью процедуры fplot. Отличие ее от процедуры plot в том, что для построения графика функции нет необходимости в предшествующем вычислении значений функции и аргумента. Обращение к ней имеет вид:

fplot (‘<имя функции>’, [<интервал>], n),

где <интервал> - это вектор-строка из двух чисел, которые задают, соответственно, нижнюю и верхнюю границы изменения аргумента; <имя функции> - имя М-файла с текстом процедуры вычисления значения желаемой функции по

Соседние файлы в папке Matlab