В этом примере показано, как использовать MATLAB ® для формулирования и решения нескольких различных типов дифференциальных уравнений. MATLAB предлагает несколько численных алгоритмов для решения широкого спектра дифференциальных уравнений:
Проблемы с начальным значением
Проблемы с граничными значениями
Дифференциальные уравнения задержки
Дифференциальные уравнения в частных производных
vanderpoldemo - функция, определяющая уравнение ван дер Пол
y = 0.
type vanderpoldemofunction dydt = vanderpoldemo(t,y,Mu) %VANDERPOLDEMO Defines the van der Pol equation for ODEDEMO. % Copyright 1984-2014 The MathWorks, Inc. dydt = [y(2); Mu*(1-y(1)^2)*y(2)-y(1)];
Уравнение записывается как система двух обыкновенных дифференциальных уравнений первого порядка (ОДУ). Эти уравнения вычисляются для различных значений параметра . Для более быстрой интеграции следует выбрать соответствующий решатель на основе значения .
Для 1 любой из решателей ODE MATLAB может эффективно решить уравнение ван дер Пол. ode45 одним из таких примеров является решатель. Уравнение решается в области с начальными условиями = 2 = 0 = 0.
tspan = [0 20]; y0 = [2; 0]; Mu = 1; ode = @(t,y) vanderpoldemo(t,y,Mu); [t,y] = ode45(ode, tspan, y0); % Plot solution plot(t,y(:,1)) xlabel('t') ylabel('solution y') title('van der Pol Equation, \mu = 1')

При больших значениях проблема становится жесткой. Эта метка предназначена для проблем, которые противостоят попыткам быть оцененными обычными методами. Вместо этого для быстрой интеграции необходимы специальные числовые методы. ode15s, ode23s, ode23t, и ode23tb функции могут эффективно решать сложные задачи.
Это решение уравнения van der Pol для 1000 используетode15s с теми же начальными условиями. Вы должны растянуть временной интервал до , чтобы иметь возможность видеть периодическое движение решения.
tspan = [0, 3000]; y0 = [2; 0]; Mu = 1000; ode = @(t,y) vanderpoldemo(t,y,Mu); [t,y] = ode15s(ode, tspan, y0); plot(t,y(:,1)) title('van der Pol Equation, \mu = 1000') axis([0 3000 -3 3]) xlabel('t') ylabel('solution y')

bvp4c и bvp5c решение краевых задач для обыкновенных дифференциальных уравнений.
Примерная функция twoode имеет дифференциальное уравнение, записанное как система двух ОДУ первого порядка. Дифференциальное уравнение
| = 0.
type twoodefunction dydx = twoode(x,y) %TWOODE Evaluate the differential equations for TWOBVP. % % See also TWOBC, TWOBVP. % Lawrence F. Shampine and Jacek Kierzenka % Copyright 1984-2014 The MathWorks, Inc. dydx = [ y(2); -abs(y(1)) ];
Функция twobc имеет граничные условия для задачи: = 0 ) = -2.
type twobcfunction res = twobc(ya,yb) %TWOBC Evaluate the residual in the boundary conditions for TWOBVP. % % See also TWOODE, TWOBVP. % Lawrence F. Shampine and Jacek Kierzenka % Copyright 1984-2014 The MathWorks, Inc. res = [ ya(1); yb(1) + 2 ];
Перед вызовом bvp4c, вы должны предоставить предположение для решения, которое вы хотите представить в сетке. Затем решатель адаптирует сетку при уточнении решения.
bvpinit функция собирает начальное предположение в форме, которую можно передать решателю bvp4c. Для сетки из [0 1 2 3 4] и постоянные догадки о = 1 x) = 0, вызовbvpinit является:
solinit = bvpinit([0 1 2 3 4],[1; 0]);
С помощью этого начального предположения, вы можете решить проблему с bvp4c. Оценка решения, возвращенного bvp4c в некоторых точках с использованием deval, а затем постройте график результирующих значений.
sol = bvp4c(@twoode, @twobc, solinit); xint = linspace(0, 4, 50); yint = deval(sol, xint); plot(xint, yint(1,:)); xlabel('x') ylabel('solution y') hold on

Эта конкретная краевая задача имеет ровно два решения. Можно получить другое решение, изменив начальные догадки на -1 x) = 0.
solinit = bvpinit([0 1 2 3 4],[-1; 0]); sol = bvp4c(@twoode,@twobc,solinit); xint = linspace(0,4,50); yint = deval(sol,xint); plot(xint,yint(1,:)); legend('Solution 1','Solution 2') hold off

dde23, ddesd, и ddensd решить дифференциальные уравнения задержки с различными задержками. Примеры ddex1, ddex2, ddex3, ddex4, и ddex5 создайте мини-учебное пособие по использованию этих решателей.
ddex1 Пример показывает, как решить систему дифференциальных уравнений
y3 '(t) = y2 (t).
Эти уравнения можно представить с помощью анонимной функции
ddex1fun = @(t,y,Z) [Z(1,1); Z(1,1)+Z(2,2); y(2)];
История проблемы (для ) постоянна:
(t) = 1.
Историю можно представить в виде вектора.
ddex1hist = ones(3,1);
Двухэлементный вектор представляет задержки в системе уравнений.
lags = [1 0.2];
Передайте функцию, задержки, историю решения и интервал интегрирования решателю в качестве входных данных. Решатель создает непрерывное решение на всем интервале интегрирования, которое подходит для печати.
sol = dde23(ddex1fun, lags, ddex1hist, [0 5]);
plot(sol.x,sol.y);
title({'An example of Wille and Baker', 'DDE with Constant Delays'});
xlabel('time t');
ylabel('solution y');
legend('y_1','y_2','y_3','Location','NorthWest');
pdepe решает дифференциальные уравнения в частных производных в одной переменной пространства и времени. Примеры pdex1, pdex2, pdex3, pdex4, и pdex5 сформировать мини-учебное пособие по использованию pdepe.
В этом примере проблема использует функции pdex1pde, pdex1ic, и pdex1bc.
pdex1pde определяет дифференциальное уравнение
).
type pdex1pdefunction [c,f,s] = pdex1pde(x,t,u,DuDx) %PDEX1PDE Evaluate the differential equations components for the PDEX1 problem. % % See also PDEPE, PDEX1. % Lawrence F. Shampine and Jacek Kierzenka % Copyright 1984-2014 The MathWorks, Inc. c = pi^2; f = DuDx; s = 0;
pdex1ic устанавливает начальное условие
sināx.
type pdex1icfunction u0 = pdex1ic(x) %PDEX1IC Evaluate the initial conditions for the problem coded in PDEX1. % % See also PDEPE, PDEX1. % Lawrence F. Shampine and Jacek Kierzenka % Copyright 1984-2014 The MathWorks, Inc. u0 = sin(pi*x);
pdex1bc устанавливает граничные условия
= 0,
= 0.
type pdex1bcfunction [pl,ql,pr,qr] = pdex1bc(xl,ul,xr,ur,t) %PDEX1BC Evaluate the boundary conditions for the problem coded in PDEX1. % % See also PDEPE, PDEX1. % Lawrence F. Shampine and Jacek Kierzenka % Copyright 1984-2014 The MathWorks, Inc. pl = ul; ql = 0; pr = pi * exp(-t); qr = 1;
pdepe требуется пространственная дискретизация x и вектор времени t (при котором требуется создать снимок решения). Решите проблему с помощью сетки из 20 узлов и запросите решение с пятью значениями t. Извлеките и постройте график первого компонента раствора.
x = linspace(0,1,20); t = [0 0.5 1 1.5 2]; sol = pdepe(0,@pdex1pde,@pdex1ic,@pdex1bc,x,t); u1 = sol(:,:,1); surf(x,t,u1); xlabel('x'); ylabel('t'); zlabel('u');
