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

Учебно_Технологический_Практикум_УТС.Б_4

.pdf
Скачиваний:
28
Добавлен:
09.02.2015
Размер:
500.07 Кб
Скачать

КФ МГТУ им. Н.Э. Баумана Факультет ЭИУК Учебно-технологический практикум

Лабораторные работы для

направления подготовки бакалавров

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])