Учебно_Технологический_Практикум_УТС.Б_4
.pdfКФ МГТУ им. Н.Э. Баумана Факультет ЭИУК Учебно-технологический практикум
Лабораторные работы для
направления подготовки бакалавров
220400.62
Разработал: доц. каф. ЭИУ3 - КФ Адкин М.Ю.
Лабораторная работа № 4.
Тема работы:
ФУНКЦИИ MATLAB
Цель работы: знакомство студентов с функциями системы MATLAB для написания несложных программ вычислительного характера. Закрепление ранее пройденного материала по графической подсис-
теме MATLAB.
Приборы и оборудование:
¾Компьютер совместимый с IBM PC, 32-256 Мб. ОЗУ.
¾Операционная система WINDOWS *.
¾Математический пакет MATLAB Version 5.*, 6.*,7.*
Содержание работы:
Функции MATLAB
Области видимости переменных Локальные и глобальные переменные Понятие о подфункциях Понятие о процедурах
Построение графика М-функции. Функция fplot() Решение произвольных уравнений. Функция fzero
Минимизация функции одной переменной. Функция fminbnd Минимизация функции нескольких переменных. Функция fminsearch
Интегрирование функций. Функции quad,quad8,dblquad Подбор параметров и аппроксимация экспериментальных данных
Длительность работы : 10 академических часов.
Защита работы : Отчет в электронном виде. Собеседование с преподавателем по контрольным вопросам, выполнение индивидуальных заданий.
Функции MATLAB
В предыдущей лабораторной работе были рассмотрены скрипты – файлы сценариев системы MATLAB. Напомним, что это текстовые файлы с расширением .m, содержащие последовательность команд. Скрипты можно считать процедурами, так как они не возвращают в точку вызова никаких значений и не могут использоваться в выражениях. Функции, в отличие от скриптов, возвращают в точку вызова значение и могут быть элементами выражений.
Первая строка М-файла функции является строкой заголовка, в котором определяется список выходных и входных переменных, и имя функции:
function [< список выходных переменных>] = <имя функции>(<список входных переменных). Типичная М-функция включает следующие компоненты:
Строка заголовка функции
function [s] = summa(a,b)
Комментарий для справочной системы
MATLAB
%SUMMA – вычисление суммы двух слагаемых. %s=summa(a,b), где a,b – скаляры, векторы или %матрицы.
Тело функции
s=a+b;
return;% не обязательно
Пояснения:
-строка заголовка функции задает имя, количество и порядок следования входных и выходных аргументов;
-первая строка комментария определяет назначение функции. Она выводится на экран с помощью команд lookfor или help<имя каталога>; -комментарий выводится на экран вместе с первой строкой при использовании команды help<имя функции>;
-тело функции - это программный код, который реализует вычисления и присваивает значения выходным аргументам.
М-функции используются так же, как обычные встроенные функции системы MATLAB. Имя М-функции можно применять при записи арифметических выражений. Вызов функции выполняется автоматически по ее имени.
При обращении к функции MATLAB ищет файл с соответствующим именем, просматривая все пути доступа, определенные переменной
MATLABPATH. Когда файл найден, он проходит процедуру компиляции,
размещается в оперативной памяти и только после этого начинает выполняться. В этом также отличие функции от Script-файла, который выполняется только в режиме интерпретации. Для удаления откомпилированной функции из памяти используется команда clear <имя функции>.
ЗАМЕЧАНИЕ: Если при выполнении функции включен режим echo, то функция тоже будет выполняться в режиме интерпретации и на терминал будет выводиться результат выполнения каждого оператора.
Области видимости. Глобальные и локальные переменные
Переменные скриптов являются переменными рабочей области MATLAB. Они могут быть проконтролированы командой whos из командного окна MATLAB. Переменные функций это переменные рабочей области самой функции, которая не пересекается с рабочей областью MATLAB. Переменные функции не видны в рабочей области MATLAB:
Область видимости – это рабочая область соответствующих переменных. Только в своей области видимости переменные видны, доступны и могут быть изменены. Область видимости функции называют локальной, а переменные функции – локальными.
Для того, чтобы и скрипты и функции могли обмениваться данными, можно объявлять глобальные переменные. Глобальные переменные принадлежат единой для скриптов и функций рабочей области глобальных переменных. К глобальным переменным можно получить доступ из любых рабочих областей путем объявления в соответствующих объектах – функциях и скриптах, глобальных переменных.
Объявление глобальных переменных выполняется ключевым словом global:
global <список имен глобальных переменных>
ЗАМЕЧАНИЕ: Глобальные переменные не являются переменными
рабочей области MATLAB. Они переменные своей, глобальной рабочей области, которая может подключаться к скриптам и функциям. Глобальные переменные объявленные в рабочей области обладают свойствами переменных рабочей области и глобальных переменных одновременно.
Обычно каждая функция использует локальные переменные, которые изолированы от переменных других функций и рабочей области. Однако, если несколько функций и скрипты объявляют некоторую переменную глобальной, то в этом случае все модули используют одну и ту же ко-
пию этой переменной(!!!). Присваивание значения такой переменной возможно в любой из функций, где эта переменная объявлена глобальной.. Рекомендуется для имен глобальных переменных использовать осмысленные названия и заглавные буквы.
Подфункции m-файлов
М-файлы могут содержать тексты более чем одной функции. Первая функция в файле - это основная функция, вызываемая по имени М- файла. Другие функции внутри файла называются подфункциями. Каждая подфункция имеет свой собственный заголовок. Подфункции в файле следуют друг за другом непрерывно. Областью видимости для подфункций является М-файл - они видимы для основной функции и других подфункций этого же файла.
Параметры подфункций внутри одного и того же М-файла локальны по отношению к подфункциям. Подфункции не могут обращаться к одним и тем же переменным, если эти переменные не объявлены глобальными или не переданы им в качестве параметров.
Когда приходит вызов функции из М-файла, то MATLAB в первую очередь проверяет, не является ли эта функция подфункцией. Поскольку первой проверяется наличие подфункций, то можно в качестве имени подфунк-
ции использовать имена функций системы MATLAB.
Виды функций MATLAB
Функции MATLAB могут иметь различные комбинации наличия входных и выходных параметров. Функции, которые не имеют выходных параметров, называются процедурами. Основное назначение процедур – выполнение некоторых действий, не требующих формирования выходного значения, например, печать сообщения или изменение глобальной переменной. Процедуры могут иметь, а могут и не иметь входных параметров.
Входные параметры |
Выходные параметры |
Тип функции |
есть |
есть |
функция |
есть |
нет |
процедура |
нет |
есть |
функция |
нет |
нет |
процедура |
ПРИМЕР .
В качестве примера приведем тексты функций MATLAB tic и toc. Назначение функций – работа с таймером. Функция tic записывает в глобальную переменную TICTOC текущее значение таймера, а функция toc читает
значение TICTOC и выводит на терминал время, прошедшее с момента вызова функции tic.
Функция tic – процедура, не имеющая входных и выходных параметров.
Функция toc – функция, не имеющая входных параметров и имеющая один выходной параметр.
ЗАМЕЧАНИЕ: Пара функций tic, toc может определить время, затраченное на выполнение задания вычислительной машиной . Для этого в начале выполнения задания вызывается tic, а после окончания - вызывается toc. В системе MATLAB 6.*, 7.* функции tic и toc стали встроенными, и текст функций недоступен.
ЗАДАНИЕ 1
В качестве упражнения, постарайтесь разобраться с каждым оператором функции toc. Текст функции приведен выше.
Работа с М-функциями MATLAB
1. ПОСТРОЕНИЕ ГРАФИКА М-ФУНКЦИИ
Для построения графика М-функции можно использовать функцию fplot.
Синтаксис:
fplot(‘Имя_функции’,[ xlim,ylim ],’LineSpec’)
Здесь:
“Имя_функции” – строка символов, содержащая допустимое имя функции
– пользователя или встроенной.
xlim - вектор граничных значений по оси X; ylim - вектор граничных значений по оси Y;
’LineSpec’ – строка символов, содержащая спецификацию линии графика, как в функции plot.
В отличие от функции plot не требуется заранее формировать вектор значений аргумента функции.
ПРИМЕР |
|
|
|
|
|
|
2 |
|
|
|
|
|
|
1.5 |
|
|
|
|
|
|
1 |
|
|
|
|
|
|
0.5 |
|
|
|
|
|
|
0 |
|
|
|
|
|
|
-0.5 |
|
|
|
|
|
|
-1 |
|
|
|
|
|
|
-1.5 |
|
|
|
|
|
|
-2 |
1 |
2 |
3 |
4 |
5 |
6 |
0 |
2. РЕШЕНИЕ УРАВНЕНИЙ
Для решения уравнений может применяться функция fzero.
Синтаксис: x=fzero(‘Имя_функции’,x0,{Options})
Здесь:
“Имя_функции” – строка символов, содержащая допустимое имя функции
– пользователя или встроенной.
x0 - начальное приближение к корню функции;
{Options} – необязательные опции управления процессом поиска корней. Устанавливаются функцией optimset.
ПРИМЕР 5.
Требуется: Решить уравнение
sin(x) − x2 cos(x) = 0
Решение:
1. Пишем функцию правой части уравнения:
function [y]=fun(x) y=sin(x)-x.^2*cos(x);
исохраняем ее в файле fun.m.
2.Определяемся с интервалом поиска корней. Допустим, нам нужно найти корни уравнения в интервале [-5 5].
3.Ищем корни уравнения, задавая различные значения начального приближения в интервале поиска корней:
4. |
Строим график функции для контроля найденных корней: |
|
|||||||||
|
15 |
|
|
|
|
|
|
|
|
|
|
|
10 |
|
|
|
|
|
|
|
|
|
|
|
5 |
|
|
|
|
|
|
|
|
|
|
|
0 |
|
|
|
|
|
|
|
|
|
|
|
-5 |
|
|
|
|
|
|
|
|
|
|
|
-10 |
-4 |
-3 |
-2 |
-1 |
0 |
1 |
2 |
3 |
4 |
5 |
|
-5 |
3. МИНИМИЗАЦИЯ ФУНКЦИИ ОДНОЙ ПЕРЕМЕННОЙ
Функция fminbnd ищет локальный минимум в заданном интервале изменения аргумента.
Синтаксис: 1-я форма
x=fminbnd(‘Имя_функции’,x0,x1)
Здесь:
“Имя_функции” – строка символов, содержащая допустимое имя функции
– пользователя или встроенной. x0,x1 - интервал поиска минимума;
x – значение аргумента, при котором найден локальный минимум.
2-я форма
[x,y]=fminbnd(‘Имя_функции’,x0,x1)
Здесь:
x – значение аргумента, при котором найден локальный минимум. y – величина локального минимума.
4. МИНИМИЗАЦИЯ ФУНКЦИИ НЕСКОЛЬКИХ ПЕРЕМЕННЫХ
Для поиска локального минимума функции нескольких переменных предназначена функция fminsearch. Функция вычисляет локальный минимум по заданному начальному приближению.
Синтаксис: 1-я форма
X=fminsearch(‘Имя_функции’,X0)
Здесь:
“Имя_функции” – строка символов, содержащая допустимое имя функции пользователя.
X0 - вектор-строка координат начальной точки поиска минимума;
X – вектор-строка аргумента, при котором найден локальный минимум.
2-я форма
[X,y]= fminsearch (‘Имя_функции’,X0)
Здесь:
X – вектор-строка аргумента, при котором найден локальный минимум. y – величина локального минимума – скалярное значение.
ЗАМЕЧАНИЕ: Для нахождения локального максимума специальной функции нет. В этом случае следует искать минимум функции с обратным знаком.
ПРИМЕР. Требуется:
Найти минимум или максимум (экстремум) заданной функции нескольких переменных.
Функция:
y = x12 +(x2 −1)2
Решение:
1. Пишем функцию правой части уравнения:
function [y]=fun(X) x1=X(1);
x2=X(2); y=x1.^2+(x2^2-1).^2;
исохраняем ее в файле fun.m.
2.Определяемся с начальной точкой поиска [0 0].
3.Запускаем процедуру поиска: [x,y]=fminsearch(‘fun’,[0,0])