exponenta event banner

Дифференциальные уравнения

В этом примере показано, как использовать MATLAB ® для формулирования и решения нескольких различных типов дифференциальных уравнений. MATLAB предлагает несколько численных алгоритмов для решения широкого спектра дифференциальных уравнений:

  • Проблемы с начальным значением

  • Проблемы с граничными значениями

  • Дифференциальные уравнения задержки

  • Дифференциальные уравнения в частных производных

Проблема с начальным значением

vanderpoldemo - функция, определяющая уравнение ван дер Пол

d2ydt2-( 1-y2) dydt + y = 0.

type vanderpoldemo
function 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 одним из таких примеров является решатель. Уравнение решается в области [0,20] с начальными условиями y (0) = 2 и dydt 't = 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')

Figure contains an axes. The axes with title van der Pol Equation, \mu = 1 contains an object of type line.

При больших значениях λ проблема становится жесткой. Эта метка предназначена для проблем, которые противостоят попыткам быть оцененными обычными методами. Вместо этого для быстрой интеграции необходимы специальные числовые методы. ode15s, ode23s, ode23t, и ode23tb функции могут эффективно решать сложные задачи.

Это решение уравнения van der Pol для λ = 1000 используетode15s с теми же начальными условиями. Вы должны растянуть временной интервал до [0,3000], чтобы иметь возможность видеть периодическое движение решения.

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')

Figure contains an axes. The axes with title van der Pol Equation, \mu = 1000 contains an object of type line.

Проблемы с граничными значениями

bvp4c и bvp5c решение краевых задач для обыкновенных дифференциальных уравнений.

Примерная функция twoode имеет дифференциальное уравнение, записанное как система двух ОДУ первого порядка. Дифференциальное уравнение

d2ydt2 + | y | = 0.

type twoode
function 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 имеет граничные условия для задачи: y (0) = 0 и y (4) = -2.

type twobc
function 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] и постоянные догадки о y (x) = 1 и y '(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

Figure contains an axes. The axes contains an object of type line.

Эта конкретная краевая задача имеет ровно два решения. Можно получить другое решение, изменив начальные догадки на y (x) = -1 и y '(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

Figure contains an axes. The axes contains 2 objects of type line. These objects represent Solution 1, Solution 2.

Дифференциальные уравнения задержки

dde23, ddesd, и ddensd решить дифференциальные уравнения задержки с различными задержками. Примеры ddex1, ddex2, ddex3, ddex4, и ddex5 создайте мини-учебное пособие по использованию этих решателей.

ddex1 Пример показывает, как решить систему дифференциальных уравнений

y1 '(t) = y1 (t-1) y2' (t) = y1 (t-1) + y2 (t-0,2) y3 '(t) = y2 (t).

Эти уравнения можно представить с помощью анонимной функции

ddex1fun = @(t,y,Z) [Z(1,1); Z(1,1)+Z(2,2); y(2)];

История проблемы (для t≤0) постоянна:

y1 (t) = 1y2 (t) = 1y3 (t) = 1.

Историю можно представить в виде вектора.

ddex1hist = ones(3,1);

Двухэлементный вектор представляет задержки в системе уравнений.

lags = [1 0.2];

Передайте функцию, задержки, историю решения и интервал интегрирования [0,5] решателю в качестве входных данных. Решатель создает непрерывное решение на всем интервале интегрирования, которое подходит для печати.

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');

Figure contains an axes. The axes with title An example of Wille and Baker DDE with Constant Delays contains 3 objects of type line. These objects represent y_1, y_2, y_3.

Дифференциальные уравнения в частных производных

pdepe решает дифференциальные уравнения в частных производных в одной переменной пространства и времени. Примеры pdex1, pdex2, pdex3, pdex4, и pdex5 сформировать мини-учебное пособие по использованию pdepe.

В этом примере проблема использует функции pdex1pde, pdex1ic, и pdex1bc.

pdex1pde определяет дифференциальное уравнение

π2∂u∂t=∂∂x (∂u∂x).

type pdex1pde
function [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 устанавливает начальное условие

u (x, 0) = sināx.

type pdex1ic
function 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 устанавливает граничные условия

u (0, t) = 0,

πe-t+∂∂xu (1, t) = 0.

type pdex1bc
function [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');

Figure contains an axes. The axes contains an object of type surface.

См. также

| |

Связанные темы