Составим программу, предназначенную для вычисления определенного интеграла при трех различных подынтегральных выражениях:
; ; .
Используем встроенную функцию 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, которая реализует правило Симпсона. Расширенные варианты:
где tol – заданная относительная погрешность вычислений (по умолчанию ); если параметр , MATLAB строит точечный график подынтегральной функции. Вариант этой функции quad8вычисляет интеграл с помощью квадратурных формул Ньютона-Котеса 8-го порядка.
Недостатком составленной программы является то, что при изменении подынтегрального выражения или пределов интегрирования ее необходимо запускать заново.
Приведем еще вариант программы, исключающий этот недостаток, с использованием цикла while(сохраняем как файл quadra2.m):