Эта страница содержит два примера решения нежестких обыкновенных дифференциальных уравнений с помощью ode45
. MATLAB® имеет несколько решателей для нежестких ОДУ.
ode45
ode23
ode78
ode89
ode113
Для большинства нежестких проблем, ode45
выполняет лучше всего. Однако ode23
рекомендуется для проблем, которые разрешают немного более грубый ошибочный допуск или в присутствии умеренной жесткости. Аналогично, ode113
может быть более эффективным, чем ode45
для проблем с более строгими ошибочными допусками или когда функция ОДУ является в вычислительном отношении дорогой, чтобы оценить. ode78
и ode89
старшие решатели, которые выделяются с долгими интегрированиями, где точность крайне важна для устойчивости.
Если нежесткие решатели занимают много времени, чтобы решить задачу или последовательно приводить интегрирование к сбою, то проблема может быть жесткой. Смотрите Решают Жесткие ОДУ для получения дополнительной информации.
Уравнение Ван дер Поля является ОДУ второго порядка
где скалярный параметр. Перепишите это уравнение как систему ОДУ первого порядка путем создания замены. Получившаяся система ОДУ первого порядка
Система ОДУ должна быть закодирована в файл функции, который может использовать решатель ОДУ. Общая функциональная подпись функции ОДУ
dydt = odefun(t,y)
Таким образом, функция должна принять оба t
и y
как входные параметры, даже если это не использует t
для любых расчетов.
Файл функции vdp1.m
кодирует использование уравнения Ван дер Поля. Переменные и представлены y(1)
и y(2)
, и двухэлементный вектор-столбец dydt
содержит выражения для и.
function dydt = vdp1(t,y) %VDP1 Evaluate the van der Pol ODEs for mu = 1 % % See also ODE113, ODE23, ODE45. % Jacek Kierzenka and Lawrence F. Shampine % Copyright 1984-2014 The MathWorks, Inc. dydt = [y(2); (1-y(1)^2)*y(2)-y(1)];
Решите ОДУ с помощью ode45
функция на временном интервале [0 20]
с начальными значениями [2 0]
. Выход является вектор-столбцом моментов времени t
и массив решения y
. Каждая строка в y
соответствует времени, возвращенному в соответствующей строке t
. Первый столбец y
соответствует, и второй столбец к.
[t,y] = ode45(@vdp1,[0 20],[2; 0]);
Постройте решения для и против t
.
plot(t,y(:,1),'-o',t,y(:,2),'-o') title('Solution of van der Pol Equation (\mu = 1) using ODE45'); xlabel('Time t'); ylabel('Solution y'); legend('y_1','y_2')
vdpode
функция решает ту же задачу, но это принимает пользовательское заданное значение для. Уравнения Ван дер Поля становятся жесткими как увеличения. Например, со значением необходимо использовать жесткий решатель, такой как ode15s
решить систему.
Уравнения Эйлера для твердого тела без внешних сил являются стандартной тестовой задачей для решателей ОДУ, предназначенных для нежестких проблем.
Уравнения
Файл функции rigidode
задает и решает эту систему уравнений первого порядка по временному интервалу [0 12]
, использование вектора из начальных условий [0; 1; 1]
соответствие начальным значениям, и. Локальная функция f(t,y)
кодирует систему уравнений.
rigidode
вызовы ode45
без выходных аргументов, таким образом, решатель использует выходную функцию по умолчанию odeplot
автоматически построить точки решения после каждого шага.
function rigidode %RIGIDODE Euler equations of a rigid body without external forces. % A standard test problem for non-stiff solvers proposed by Krogh. The % analytical solutions are Jacobian elliptic functions, accessible in % MATLAB. The interval here is about 1.5 periods; it is that for which % solutions are plotted on p. 243 of Shampine and Gordon. % % L. F. Shampine and M. K. Gordon, Computer Solution of Ordinary % Differential Equations, W.H. Freeman & Co., 1975. % % See also ODE45, ODE23, ODE113, FUNCTION_HANDLE. % Mark W. Reichelt and Lawrence F. Shampine, 3-23-94, 4-19-94 % Copyright 1984-2014 The MathWorks, Inc. tspan = [0 12]; y0 = [0; 1; 1]; % solve the problem using ODE45 figure; ode45(@f,tspan,y0); % -------------------------------------------------------------------------- function dydt = f(t,y) dydt = [ y(2)*y(3) -y(1)*y(3) -0.51*y(1)*y(2) ];
Решите нежесткие уравнения Эйлера путем вызова rigidode
функция.
rigidode title('Solution of Rigid Body w/o External Forces using ODE45') legend('y_1','y_2','y_3','Location','Best')
ode45
| ode23
| ode78
| ode89
| ode113