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

Методическое пособие (Лаб.1-2)

.pdf
Скачиваний:
12
Добавлен:
02.04.2015
Размер:
724.42 Кб
Скачать

>>demoTrFun(x); % вызовем тестовую функцию, чтобы показать передачу по значению

>>x % покажем, что действительно была передана копия переменной x (x не должна изменится)

x =

0

Анонимные функции

В MATLAB существует еще один вид функций, так называемые анонимные функции. Эти функции не имеют файла определения, а лишь ассоциированы с переменной имеющей тип function_handle. Обращение к анонимным функциям (АФ) производится с помощью данных переменных.

Создадим АФ, вычисляющую квадрат числа:

>> sqr = @(x) x.^2;

Теперь квадрат 5 можно вычислить следующим образом

>> sqr(5) ans =

25

Ограничением для функций является то, что при определении тела АФ может быть использовано только одно выражение. Внутри АФ могут вызываться другие функции, в том числе и другие анонимные. Нельзя использовать управляющие конструкции условия и цикла.

При написании тела функции могут использоваться переменные уже существующие в рабочем пространстве. Значения данных переменных будут сохранены в определении АФ и использоваться независимо от своих глобальных определений. Даже если вы удалите переменные после того, как определили АФ, значения данных переменных будут использованы при выполнении функции.

>>a = -1.3; b = .2; c = 30;

>>parabola = @(x) a*x.^2 + b*x + c;

>>clear a b c

>>x = 1;

>>y = parabola(1)

y =

31.5000

Если есть необходимость изменить значения используемых переменных, то придется

21

создать АФ заново.

>>a = -1.3; b = .2; c = 30;

>>parabola = @(x) a*x.^2 + b*x + c;

>>a = -3.9; b = 52; c = 0;

>>parabola = @(x) a*x.^2 + b*x + c; % Создание АФ с новыми значениями a, b, c

>>x = 1;

>>y = parabola(1)

y =

48.1000

Документирование функций

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

function [alpha, beta] = swap (alpha, beta)

%Функция меняет значения аргументов

%alpha -- 1е число

%beta -- 2е число

x = alpha; alpha = beta; beta = x; end

Для этой функции выполнение команды

>> help swap

даст следующий результат.

Функция меняет значения аргументов alpha -- 1е число

beta -- 2е число

Строка, идущая сразу за строкой определения функции называется H1 строкой помощи. Именно она будет отображаться первой при выполнении команды help и предоставлять обобщающую информацию о функции. Очень важно сделать эту строку как можно более описательной, т. к. она используется для поиска функции по ключевым словам функцией lookfor, и окном Function Browser (вызывается по «Shift+F1») для поиска функций.

Далее идут строки, документирующие параметры функции. Вообще хорошим тоном составления документации программы считается:

описывать возвращаемое значение;

22

описывать особенности выполнения данной программы;

оставлять информацию об авторе функции, как с ним связаться;

оставлять прочую полезную информацию.

Отладка

Отладкой называется этап разработки компьютерной программы, на котором выявляются и устраняются неточности в ее работе. Чаще всего возникают ошибки двух типов: синтаксические и лексические. Лексические ошибки связаны с неправильным написанием имени функции/переменной/скрипта. Синтаксические ошибки заключаются в неправильном использовании какой-либо конструкции MATLAB.

Отладка программы происходит с использованием особого инструмента -- отладчика (debuger). В MATLAB очень удобно работать с отладчиком через графический интерфейс.

Рисунок 6. Работа с отладчиком Чтобы начать отладку вам необходимо запустить программу на выполнение. Для

запуска программы можно использовать кнопку «Run» во вкладке меню «Editor». При запуске программы произойдет ее автоматическое сохранение, если вы внесли какие-то изменения в программу. Файл с текстом программы должен быть предварительно сохранен на диске для того, чтобы иметь возможность запускать и отлаживать программу.

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

Точки останова помещаются на определенную строку кода щелчком мыши по пространству справа от номера строки.

23

Рисунок 7. Точки останова

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

выполнять до следующей точки останова, если такая есть, а если нет — то отладчик продолжит свою работу до самого окончания программы;

выполнять программу пошагово;

выполнять до позиции курсора.

Команды управления отладкой находятся в секции «debug».

Рисунок 8. Команды отладчика Каждая команда может быть доступна по горячим клавишам:

Таблица 3. Горячие клавиши режим отладки

Команда

Клавиша

 

 

Запуск программы (продолжить выполнение)

F5

 

 

Вычислить выделенное выражение и вывести

F9

результат в командное окно

 

 

 

Выполнить одну команду (шаг)

F10

 

 

Шаг с заходом

F11

 

 

Шаг с выходом

F11

Стоит дать пояснение к пошаговому (построчному) выполнению программы. Шагом

24

является выполнение инструкции(ий) находящих на текущей строке, обозримой отладчиком. Текущая строка обозначается зеленой стрелкой слева от поля редактирования программы.

Рисунок 9. Обозримая строка отладчика

Обычный шаг (F10) подразумевает выполнение всех инструкций находящихся на данной строке кода и переход к следующей строке. Шаг с заходом (F11) будет переводить фокус отладчика внутрь выполняемой инструкции. Это означает, что если инструкция содержит вызов какой-либо функции, то отладчик перейдет на пошаговое выполнение вызываемой функции. Шаг с выходом подразумевает выполнение всех инструкций текущей функции и возврат к вызывающему коду.

Во время отладки вы можете выполнять команды интерпретатора MATLAB, например, чтобы проверить значения промежуточных вычислений.

Текст ошибок, возникающих во время выполнения функции будет выводиться в командное окно.

Задание на лабораторную работу

Выбрать две функции со следующими номерами:

1.Nf 1=Nвар mod 15+1

2.Nf 2=Nвар mod 15+4

где mod операция взятие остатка от деления (деление по модулю), а Nвар — номер вашего варианта.

Для соответствующей функции с номером Nf 1 создать функцию в m-файле, а для функции Nf 2 анонимную функцию (объявить в скрипте, см. следующий пункт).

Написать два скрипта, которые построят графики для созданных функций. Границы графиков определить самостоятельно.

Варианты заданий

25

Номер функции

 

 

 

 

функция

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1

y=sin (2 x )2 cos(5 x )+2

2

y= sin(x )2+ cos(−3 x)2 + 2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

x

 

 

 

 

 

 

 

 

 

3

y=−5cos( x2 )+ x−2 sin(x) x

 

 

 

 

tg(2 x ) sin(

x

)

 

4

y=

2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

x2+ 1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

5

y=6 sin ( x

+1)+cos (

x2

−3 x )

 

 

 

 

 

 

 

 

2

 

 

 

 

 

 

 

 

 

10

 

 

6

y=

x3 +4 x−10

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

7 x2−4 x +1

7

 

 

 

 

 

 

 

 

x2 + 4 x+2

y=

 

 

5

 

 

 

 

 

 

 

 

 

 

 

 

 

2 x3−9 x +2

 

 

 

 

8

 

 

 

 

 

 

 

 

 

x4

−10 x2 +4

y=

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

−6 x3 −2 x +2

 

 

 

 

 

9

y=

 

 

x2−4 x + 4

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

3 x2 −4 x +4

10

y=

 

x2+ 4 x — 10

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2 x3−4 x

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

x

 

 

 

 

 

 

 

 

 

11

y=

e

4

 

+ sin(x +1) x

 

 

x

12

y=2 e−( x−3)2 +2 e−( x−6 )2

13

y=−x e−(x−4)2 +x e−(x−9)2

14

y=ln(

x

x sin (x)+e−( x−4)2 )

 

 

4

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ln(

x

)x +10

 

 

 

 

 

 

 

 

 

 

 

 

 

15

y=

 

 

 

 

5

 

 

 

 

 

 

 

 

 

 

 

 

2

 

1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ln(

x

) x +

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

5

 

 

 

 

 

 

 

 

 

 

 

26