Особенности создания м-файлов

      Комментарии к записи Особенности создания м-файлов отключены

Задание № 3

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

Цель занятия: научиться создавать М-файлы, простейшие файл-функции (процедуры).

1. Теоретическая часть

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

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

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

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

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

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

[ I, cnt ] = quad(‘’, a,b).

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

Функция quad использует квадратурные формулы Ньютона-Котеса четвертого порядка.

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

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

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

где 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?10?3, абсолютная (по любой из переменных состояния) — 1?10?6 . Если же эти значения не устраивают пользователя, нужно перед обращением к процедуре численного интегрирования установить новые значения допустимых погрешностей с помощью процедуры odeset таким образом:

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

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

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

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

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

fmin — отыскание минимума функции одного аргумента;

fmins — отыскание минимума функции нескольких аргументов;

fzero — отыскание нулей (корней) функции одного аргумента.

Обращение к первой из них в общем случае имеет такой вид:

Xmin = fmin (‘’, X1, X2).

Результатом этого обращения будет значение Xmin аргумента функции, которое отвечает локальному минимуму в интервале X1

В качестве примера рассмотрим отыскание значения числа ? как значения локального минимума функции 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), где- это вектор-строка из двух чисел, которые задают, соответственно, нижнюю и верхнюю границы изменения аргумента;- имя М-файла с текстом процедуры вычисления значения желаемой функции по заданному значению ее аргумента; n — желательное число частей разбиения указанного интервала. Если последнюю величину не задать, по умолчанию интервал разбивается на 25 частей. Несмотря на то, что количество частей n задано, число значений вектора х может быть значительно большим за счет того, что функция fplot проводит вычисления с дополнительным ограничением, чтобы приращение угла наклона графика функции на каждом шаге не превышало 10 градусов. Если же оно оказалось большим, осуществляется дробление шага изменения аргумента, но не более чем в 20 раз. Последние два числа (10 и 20) могут быть изменены пользователем, для этого при обращении следует добавить эти новые значения в заголовок процедуры в указанном порядке.

Если обратиться к этойпроцедуре так:

[x, Y] = fplot (‘’, [], n),

то график указанной функции не отображается на экране (в графическом окне).

Вместо этого вычисляется вектор х аргументов и вектор (или матрица) Y соответствующих значений указанной функции. Чтобы при обращении последнего вида построить график, необходимо сделать это в дальнейшем с помощью процедуры plot(x, Y).

Создание М-файлов

Особенности создания М-файлов

Создание программы в среде MatLAB осуществляется с помощью либо собственного встроенного, либо стороннего текстового редактора, который автоматически вызовется, если его предварительно установить с помощью команды Preferences меню File командного окна MatLAB. Например, это может быть редактор Notepade среды Windows. Окно предварительно установленного редактора появляется на экране, если перед этим вызвана команда M-file из меню New или выбрано название одного из существующих М-файлов при вызове команды Open M-file из меню File командного окна. В первом случае окно текстового редактора будет пустым, во втором — в нем будет содержаться текст вызванного М-файла. В обоих случаях окно текстового редактора готово для ввода нового текста или корректировки существующего.

Программы на языке MatLAB имеют две разновидности — так называемые Script-файлы (файлы-сценарии, или управляющие программы) и файлы-функции (процедуры). Обе разновидности должны иметь расширение имени файла .m, т. е. их нельзя различить по типу файла. С помощью Script-файлов оформляют основные программы, управляющие от начала до конца организацией всего вычислительного процесса, и отдельные части основных программ (они могут быть записаны в виде отдельных Script-файлов). Как файл-функции оформляются отдельные процедуры и функции (т. е. такие части программы, которые рассчитаны на неоднократное использование Script-файлами или другими процедурами при измененных значениях исходных параметров и не могут быть выполнены без предварительного задания значений переменных, которые называют входными).

Главным внешним отличием текстов этих двух видов файлов является то, что файл-функции имеют первую строку вида

function= (),

где обозначен ПКВ — Перечень Конечных Величин, ПВВ — Перечень Входных Величин. Script-файлы такой строки не имеют.

Принципиальное же отличие состоит в совсем различном восприятии системой имен переменных в этих двух видах файлов.

В файл-функциях все имена переменных внутри файла, а также имена переменных, указанные в заголовке (ПКВ и ПВВ), воспринимаются как локальные, т.е. все значения этих переменных после завершения работы процедуры исчезают, и область оперативной памяти ПК, которая была отведена под запись значений этих переменных, освобождается для записи в нее значений других переменных.

В Script-файлах все используемые переменные образуют так называемое рабочее пространство (Work Space). Значение и содержание их сохраняются не только на протяжении времени работы программы, но и на протяжении всего сеанса работы с системой, а, значит, и при переходе от выполнения одного Script-файла к другому. Иначе говоря, рабочее пространство является единым для всех Script-файлов, вызываемых в текущем сеансе работы с системой. Благодаря этому любой длинный Script-файл можно разбить на несколько фрагментов, оформить каждый из них в виде отдельного Script-файла, а в главном Script-файле вместо соответствующего фрагмента записать оператор вызова Script-файла, представляющего этот фрагмент. Этим обеспечивается компактное и наглядное представление даже довольно сложной программы.

За исключением указанных отличий, файл-функции и Script-файлы оформляются одинаково.

Статьи к прочтению:

М-файлы. Работа в редакторе М-файлов. Часть 1. Урок 49


Похожие статьи:

  • Особенности прерываний типа исключения.

    Маскируемые и немаскируемые внешние прерывания Существуют два специальных внешних сигнала среди входных сигналов процессора, при помощи которых можно…

  • Создание и удаление таблицы

    Типы операционных систем Для каждой модели компьютера разрабатываются индивидуальные операционные системы. Более того, для одной и той же модели, как…