- •А.К. Ефремов интегрированная
- •Рекомендовано редсоветом мгту им. Н.Э. Баумана
- •Isbn 5-7038-2301-3 мгту им. Н.Э. Баумана, 2003
- •1. Интерфейс системЫ matlab
- •1.1. Программная группа matlab
- •1.2. Командное окно matlab
- •1.2.1. Главное меню
- •1.2.2. Панель инструментов
- •1.3. Настройка параметров рабочего пространства
- •1.4. Справочная система matlab
- •2. Работа в режиме прямых вычислений
- •3. Базовые объекты системы matlab
- •3.1. Способы формирования матриц и векторов
- •3.2. Матричные операции и функции
- •3.3. Решение линейных уравнений
- •3.4. Вычисление корней полиномов
- •3.5. Обработка данных
- •4. Графические средства системы matlab
- •4.1. Графические объекты на плоскости
- •4.1.1. Функция plot
- •4.1.2. Функции fplot и ezplot
- •4.1.3. Другие графические функции
- •4.1.5. Обработка данных
- •4.2. Построение трехмерных поверхностей и тел
- •4.2.1. Основные графические функции
- •4.2.2. Дополнительные возможности
- •5. Основы программирования в среде matlab
- •5.1. Общие положения
- •5.2. Примеры простых программ
- •Xlabel('sin(X)') % Надпись по оси х
- •Xlabel('X') % Надпись по оси абсцисс
- •5.3. Программа с использованием внешней функции
- •5.4. Дополнительные программы
- •5.4.1. Дифференцирование функций
- •Xlabel('Число элементов массивов')
- •Xlabel('Число элементов массивов')
- •5.4.2. Функции eval, feval
- •Xlabel(‘t’), ylabel(‘y, dy/dt’)
- •Xlabel(‘y’), ylabel(‘dy/dt’)
- •6. Символьные вычисления
- •6.1. Определение символьной переменной
- •6.2. Основные функции
- •6.3. Математический анализ
- •6.3.1. Функция limit – предел функции одной переменной
- •6.3.2. Функция diff – дифференцирование функции одной переменной
- •6.3.3. Функция int – интегрирование функции одной переменной
- •6.3.4. Функция symsum – суммирование членов рядов
- •6.3.5. Функция taylor – разложение функции в ряд Тэйлора
- •6.4. Символьное решение уравнений
- •6.4.1. Решение отдельных уравнений
- •6.4.2. Решение систем уравнений
- •6.4.3. Решение дифференциальных уравнений
- •7. Пакет моделирования динамических систем simulink
- •7.1. Рабочая среда Simulink
- •7.2. Представление динамической системы в виде структурной схемы
- •7.3. Основные приемы работы в среде Simulink
- •7.4. Модель с ветвлением соединений
- •7. 5. Интегрирование дифференциального уравнения
- •Список литературы
- •Оглавление
- •Приложение
- •Разделы справочной системы
- •Программирования и отладки программ
- •Графические средства matlab
- •Символьные вычисления (symbolic math toolbox)
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. Оба файла непосредственно доступны системе MATLAB, поскольку путь к пользовательской папке системе известен. Возможен вызов справки (» help name), а также запуск программы на исполнение: » name.
Отметим, что комментарии обычно вносят в текст программ после их отладки.
Если необходимо в процессе выполнения программы одновременно видеть и ее текст, нужно установить флажок Echo On (File-Preferences-General).
Упражнение. Вычислить значения интеграла для всех вариантов подынтегральной функции; проварьировать точность вычислений и вывести графики подынтегральных функций. Ввести во внешнюю функцию дополнительные подынтегральные выражения.