Помощничек
Главная | Обратная связь


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

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



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

; ; .

Используем встроенную функцию 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(' Верхний => ');

 




Поиск по сайту:

©2015-2020 studopedya.ru Все права принадлежат авторам размещенных материалов.