
- •Тема 5. Программная реализация математических моделей
- •5.1 Краткая характеристика matlab
- •Формирование массивов в системе matlab
- •Некоторые специальные символы
- •Элементарные математические функции
- •Некоторые графические функции
- •Интерактивный доступ к справочной информации и документации
- •Примеры: a) Найти функции линейной алгебры. Открываем последовательность окон:
- •5.2 Задачи линейной алгебры, вычисление функций и построение графиков
- •5.3. Решение нелинейных алгебраических уравнений и аппроксимация функций
- •Аппроксимация функции
- •5.4 Решение обыкновенных дифференциальных уравнений и вычисление интегралов
- •Вычисление интегралов
- •Контрольные вопросы
5.4 Решение обыкновенных дифференциальных уравнений и вычисление интегралов
В системе MATLAB с помощью стандартных функций легко решаются обыкновенные дифференциальные уравнения (задача Коши) и вычисляются определенные интегралы.
Пример 11. Решить дифференциальное уравнение, используя стандартную функцию ode45:
(5.3)
в интервале x = 0 до 30 при y(0) = 2 для a = 0,24.
Предварительно представим уравнение (5.3) системой уравнений:
(5.4)
при начальных значениях: y1(0) = 0; y2(0) = 2, чтобы исключить из правой части (5.3) независимую переменную x.
Решение задачи.
function ex_eqdif
global alfa
alfa=0.24
[t,y]=ode45(@dif1,[0 30],[0 2]);
plot(t,y);
function dy=dif1(t,y)
% pravie chasti difderensial. uravneniy
global alfa
dy=zeros(2,1);
dy(1)=1;
dy(2)=cos(y(1))-sin(y(1))-alfa*y(2);
PS: Фунция dif1(t,y) определяет правые части уравнений (5.4). Между неизвестными в уравнениях (5.4) и переменными программы имеется соответствие: x = y(1), y = y(2).
ode45 (@имя функции, [интервал интегрирования], [начальные условия]) - функция служит для решения обыкновенных нежестких дифференциальных уравнений методом Runge-Kutta 4-го порядка.
zeros(m,n)
- функция формирует массив нулей размера
(где m
– число уравнений, n=1).
global – оператор объявляет глобальные переменные. Если вместо переменной alfa в правые части подставить число, то глобальную переменную вводить не надо.
Пример 12. Решить систему уравнений Лотка-Волтерра, используя функцию ode23:
(5.5)
при х =0 до 10 и начальных условиях: y1(0) = 1; y2(0) = 1. Параметры = 0.01 и = 0.02 задать как глобальные величины. Построить графики функций y1(x), y2(x)).
Решение задачи.
function Lotka_Volterra
global alpha beta
alpha=0.01; beta=0.02;
[t,y]=ode23(@lotka,[0 10],[1;1]);
plot(t,y); %Построение графиков y1(t) и y2(t)
function dy=lotka(t,y)
global alpha beta
dy=zeros(2,1);
dy(1)=y(1)-alpha*y(1)*y(2);
dy(2)=-y(2)+beta*y(1)*y(2);
PS: Фунция lotka(t,y) определяет правые части уравнений (5.5). Между неизвестными в уравнениях (5.5) и переменными программы имеется соответствие: y1 = y(1), y2 = y(2).
ode23 (@имя функции, [интервал интегрирования], [начальные условия]) - функция служит для решения обыкновенных нежестких дифференциальных уравнений методом Runge-Kutta низкого порядка.
Вычисление интегралов
Пример 13. Вычислить интеграл:
(5.6)
по методу Симпсона (стандартная функция quad) и построить график подинтегральной функции в интервале х = [02] с шагом 0,1.
Решение задачи:
function int1
x=0:0.02:2;
y=1./(x.^3-2*x-5);
plot(x,y); %Построение графика y(x)
Q = quad(@myfun,0,2)
function y = myfun(x)
y = 1./(x.^3-2*x-5);
PS: Подинтегральная функция вычисляется в фунции myfun(x) при различных значениях х. Значение интеграла получаем в переменной Q.
quad(@имя_подинтегральной_функции, a, b) - численное вычисление интеграла по адаптивному методу Симпсона, где: a и b – пределы интегрирования.
Пример 14. Вычислить интеграл:
(5.7)
по методу Симпсона (стандартная функция quad) при y = 10 o (преобразовать градусы в радианы). Для величины y в программе использовать глобальную переменную.
Решение задачи.
function int2
global teta
teta=pi/6;
Q = quad(@myfun,0,pi/2);
function y = myfun(x)
global teta
y=1./sqrt(1-(sin(teta)*sin(x)).^2);
PS: Величине y в программе соответствует глобальная переменная teta. Значение интеграла получаем в переменной Q.