Лекции.Орг


Поиск:




Категории:

Астрономия
Биология
География
Другие языки
Интернет
Информатика
История
Культура
Литература
Логика
Математика
Медицина
Механика
Охрана труда
Педагогика
Политика
Право
Психология
Религия
Риторика
Социология
Спорт
Строительство
Технология
Транспорт
Физика
Философия
Финансы
Химия
Экология
Экономика
Электроника

 

 

 

 


Программы-сценарии (скрипты) и функции




 

Программы-сценарии (скрипты) в MATLAB используют рабочую область программы, из которой они были вызваны, что можно использовать для передачи параметров скриптам. Например напишем скрипт, вычисляющий гипотенузу прямоугольного треугольника:

% скрипт, вычисляющий гипотенузу прямоугольного треугольника

% a, b - катеты прямоугольного треугольника

% с - вычисляемая гипотенуза

 

% промежуточные расчеты

x = a^2 + b^2;

 

% вычисляем гипотенузу

c = sqrt(x);

Пример использования данного скрипта:

>> a = 3;

>> b = 4;

>> hypScr

>> c

c =

>> x

x =

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

У данного подхода имеются следующие недостатки:

· необходимо заранее создать переменные с заранее заданными именами (a, b);

· после вычислений появится ненужная переменная x;

· все четыре переменные (a, b, c и x) могут использоваться в коде ранее и в них могут уже содержаться данные, которые нельзя терять, поэтому неосторожное использование скриптов может привести к возникновению ошибок.

Этих недостатков лишены функции:

function c = hypFun(a, b)

% функция, вычисляющая гипотенузу прямоугольного треугольника

% a, b - катеты прямоугольного треугольника, скаляры

% с - вычисляемая гипотенуза, скаляр

 

% промежуточные расчеты

x = a^2 + b^2;

 

% вычисляем гипотенузу

c = sqrt(x);

 

end

Пример использования данной функции:

>> a = 2; % некие важные данные, которые нужно сохранить

>> x = 3; % некие важные данные, которые нужно сохранить, со скриптом это не получится

>> c = hypFun(3,4)

c =

>> a

a =

>> x

x =

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

Передача параметров по значению

 

В MATLAB параметры всегда передаются по значению. Передача по значению означает, что вызывающая функция копирует в рабочую область функции непосредственное значение параметра. Изменение копии переменной, соответственно, оригинал не затрагивает.

Приведем пример. Функция demoTrFun:

function [ ] = demoTrFun(x)

% демонстрация передачи параметров по значению

 

% увеличим переменную x

x = x + 5;

 

end

Демонстрация использования данной функции:

>> x = 0; % создадим переменную x

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

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

x =

 

Проверка корректности входных переменных

 

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

function [ res ] = myGCD(a, b)

% вычисление наибольшего общего делителя чисел a и b

 

% проверка, что числа a и b не имеют дробных частей

if a ~= round(a) || b ~= round(b)

error('Входные аргументы должны быть целыми');

end

 

while a ~= b

if a > b

a = a - b;

else

b = b - a;

end

end

 

% сохранить результат в выходную переменную

res = a;

 

end

Пример использования этой функции:

>> myGCD(78, 66)

ans =

 

 

>> myGCD(32, 48.5)

Error using myGCD (line 6)

Входные аргументы должны быть целыми

 

 

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

 

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

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

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

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

>> sqr(5)

ans =

 

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

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

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

 

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

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

 

Сравнения таких объектов MATLAB, как скрипт, функция и анонимная функция, приведено в таблице 3.1.

 

 

Таблица 3.1. Сравнение программ-сценариев, функций и анонимных функций

  Объявление Вызов Рабочая область Где хранится
Программа-сценарий (скрипт) Построчное написание       name base Файл с расширением.m
Функция function []=name()   end []=name() function Файл с расширением.m
Анонимная функция name=@(x)f(x) a=name() function Переменная типа function_handle

 





Поделиться с друзьями:


Дата добавления: 2017-02-28; Мы поможем в написании ваших работ!; просмотров: 571 | Нарушение авторских прав


Поиск на сайте:

Лучшие изречения:

Так просто быть добрым - нужно только представить себя на месте другого человека прежде, чем начать его судить. © Марлен Дитрих
==> читать все изречения...

2510 - | 2261 -


© 2015-2025 lektsii.org - Контакты - Последнее добавление

Ген: 0.008 с.