Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
MATLAB.doc
Скачиваний:
202
Добавлен:
13.11.2018
Размер:
1.36 Mб
Скачать

5.3. Программа с использованием внешней функции

Составим программу, предназначенную для вычисления определенного интеграла при трех различных подынтегральных выражениях:

; ; .

Используем встроенную функцию quad и создадим внешнюю функцию для ввода подынтегрального выражения. В теле основной программы предусмотрим ввод номера подынтегрального выражения и пределов интегрирования, а также вы­вод результата вычислений.

Для создания внешней М-функции с помощью команды File–New–M-file вызываем окно встроенного редактора и набираем текст функции. Имя функции должно быть уникальным, т.е. не совпадать с именами функций системы MATLAB, выбираем имя func 4:

% Внешняя функция для ввода подынтегрального выражения

function yy=func(x);

global bb nn

if nn==1, yy=sin(pi*x); end

if nn==2, yy=sqrt(2*x+1); end % x>=-0.5

if nn==3, yy=exp(-bb*x); end

В этой программе yy – локальная (внутренняя) переменная; объявлены две глобальные переменные: bb (параметр экспоненты) и nn (номер подынтегрального выражения). В основной программе (script-файл) необходимо предусмотреть выбор номера и, если , ввести числовое значение параметра b, который будет передан во внешнюю функцию. Механизм вычисления рассмотрим ниже. В тексте функции использован условный оператор, тело которого заключено между служебными словами if и end; в данном случае проверяется значение номера подынтегрального выражения (оператор отношения ==). Сохраняем созданную внешнюю функцию как обычный М-файл в поль­­­зовательской папке.

Другой вариант функции, с использованием «переключателя» switch (аналог оператора языка Паскаль case name of…end):

% Внешняя функция для ввода подынтегрального выражения

function yy=func(x);

global bb nn

switch nn

case{1}, yy=sin(pi*x);

case{2}, yy=sqrt(2*x+1);

case{3}, yy=exp(-bb*x);

end

Если вводится значение переменной, не предусмотренное ранее, можно включить альтернативный оператор otherwise (т.е. «иначе» – аналог else):

switch var

case{…}

case{…}

otherwise

end

Напишем текст вызывающей программы. Вновь вводим команду File–New–M-file и набираем текст программы (сохраняем как М-файл quadra1.m):

% Вычисление определенного интеграла

global bb nn;

nn=input('Номер функции ==> ');

if nn==3

bb=input('Параметр экспоненты ==> ')

end;

disp('Пределы интегрирования:');

a=input(' Нижний ==> ');

b=input(' Верхний ==> ');

s=quad('func',a,b);

disp('Результат:'); disp(s);

При вычислении интеграла используется встроенная функция quad, которая реализует правило Симпсона. Расширенные варианты:

quad(‘Имя функции’,a,b,tol), quad(‘Имя функции’,a,b,tol,trace),

где tol – заданная относительная погрешность вычислений (по умолчанию ); если параметр , MATLAB строит точечный график подынтегральной функции. Вариант этой функции quad8 вычисляет интеграл с помощью квадратурных формул Ньютона-Котеса 8-го порядка.

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

Приведем еще вариант программы, исключающий этот недостаток, с использованием цикла while (сохраняем как файл quadra2.m):

global bb nn;

nn=1;

while nn

nn=input('nn => ');

if nn==3

bb=input('Параметр экспоненты => ');

end

if nn~=0

disp('Пределы интегрирования:');

a=input(' Нижний => ');

b=input(' Верхний => ');

disp('Результат:'), disp(quad8('func',a,b))

end

end

Здесь введено начальное значение (оно может быть любым, кроме ), чтобы цикл мог быть выполнен хотя бы раз; цикл может повторяться неог­раниченное число раз, пока (т.е. true; в обозначениях MATLAB ~=0) – это необходимо, например, при неоднократном обращении к одной и той же подынтегральной функции, если вычисления проводятся при разных пределах ин­тегрирования.

Таким образом, создано две программы: script-файл (quadra1.m или quadra2.m) и внешняя функция (расширение) func.m. Оба файла непосредственно доступны системе MAT­LAB, поскольку путь к пользовательской папке системе известен. Возможен вызов справки (» help name), а также запуск программы на исполнение: » name.

Отметим, что комментарии обычно вносят в текст программ после их отладки.

Если необходимо в процессе выполнения программы одновременно видеть и ее текст, нужно установить флажок Echo On (File-Preferences-General).

Упражнение. Вычислить значения интеграла для всех вариантов подынтегральной функции; проварьировать точность вычислений и вывести графики подынтегральных функций. Ввести во внешнюю функцию дополнительные подынтегральные выражения.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]