decic

Вычисление допустимых начальных условий для ode15i

Описание

пример

[y0_new,yp0_new] = decic(odefun,t0,y0,fixed_y0,yp0,fixed_yp0) использование y0 и yp0 как предполагает для начальных условий полностью неявной функции odefun, содержит компоненты, заданные fixed_y0 и fixed_yp0 как зафиксировано, затем вычисляет значения для нефиксированных компонентов. Результатом является полный набор сопоставимых начальных условий. Новые значения yo_new и yp0_new удовлетворите odefun(t0,y0_new,yp0_new) = 0 и подходят, чтобы использоваться в качестве начальных условий с ode15i.

[y0_new,yp0_new] = decic(odefun,t0,y0,fixed_y0,yp0,fixed_yp0,options) также использует структуру опций options задавать значения для AbsTol и RelTol. Создайте структуру опций с помощью odeset.

[y0_new,yp0_new,resnrm] = decic(___) возвращает норму odefun(t0,y0_new,yp0_new) как resnrm. Если норма кажется незаконно большой, то используйте options уменьшить допуск относительной погрешности RelTol, который имеет значение по умолчанию 1e-3.

Примеры

свернуть все

Рассмотрите неявную систему уравнений

0=2y1-y20=y1+y2

Эти уравнения являются достаточно прямыми, что просто прочитать сопоставимые начальные условия для переменных. Например, если вы фиксируете y1=1затем y2=-1 согласно второму уравнению и y1=-1/2 согласно первому уравнению. Начиная с этих значений y1, y1, и y2 удовлетворите уравнениям, они сопоставимы.

Подтвердите эти значения при помощи decic вычислить сопоставимые начальные условия для уравнений, фиксируя значение y1=1. Используйте предположения y0 = [1 0] и yp0 = [0 0], которые не удовлетворяют уравнениям и таким образом противоречивы.

odefun = @(t,y,yp) [2*yp(1)-y(2); y(1)+y(2)];
t0 = 0;
y0 = [1 0];
yp0 = [0 0];
[y0,yp0] = decic(odefun,t0,y0,[1 0],yp0,[])
y0 = 2×1

     1
    -1

yp0 = 2×1

   -0.5000
         0

Вычислите сопоставимые начальные условия и решите неявный ОДУ с ode15i.

Уравнение Вайссингера

ty2(y)3-y3(y)2+t(t2+1)y-t2y=0.

Поскольку уравнение находится в типовой форме f(t,y,y)=0, можно использовать ode15i функция, чтобы решить неявное дифференциальное уравнение.

Уравнение кода

Закодировать уравнение в форме, подходящей для ode15i, необходимо записать функцию с входными параметрами для t, y, и y это возвращает остаточное значение уравнения. Функциональный @weissinger кодирует это уравнение. Просмотрите файл функции.

type weissinger
function res = weissinger(t,y,yp)
%WEISSINGER  Evaluate the residual of the Weissinger implicit ODE
%
%   See also ODE15I.

%   Jacek Kierzenka and Lawrence F. Shampine
%   Copyright 1984-2014 The MathWorks, Inc.

res = t*y^2 * yp^3 - y^3 * yp^2 + t*(t^2 + 1)*yp - t^2 * y;

Вычислите сопоставимые начальные условия

ode15i решатель требует сопоставимых начальных условий, то есть, начальные условия, предоставленные решателю, должны удовлетворить

f(t0,y,y)=0.

Поскольку возможно предоставить противоречивые начальные условия и ode15i не проверяет на непротиворечивость, рекомендуется, чтобы вы использовали функцию помощника decic вычислить такие условия. decic содержит некоторые заданные зафиксированные переменные и вычисляет сопоставимые начальные значения для незакрепленных переменных.

В этом случае зафиксируйте начальное значение y(t0)=32 и позвольте decic вычислите сопоставимое начальное значение для производной y(t0), запуск с исходного предположения y(t0)=0.

t0 = 1;
y0 = sqrt(3/2);
yp0 = 0;
[y0,yp0] = decic(@weissinger,t0,y0,1,yp0,0)
y0 = 1.2247
yp0 = 0.8165

Решите уравнение

Используйте сопоставимые начальные условия, возвращенные decic с ode15i решать ОДУ по временному интервалу [1 10].

[t,y] = ode15i(@weissinger,[1 10],y0,yp0);

Постройте результаты

Точное решение этого ОДУ

y(t)=t2+12.

Постройте числовое решение y вычисленный ode15i против аналитического решения ytrue.

ytrue = sqrt(t.^2 + 0.5);
plot(t,y,'*',t,ytrue,'-o')
legend('ode15i', 'exact')

Входные параметры

свернуть все

Функции, чтобы решить, определенный функцией указатель, который задает функции, которые будут интегрированы. odefun представляет систему неявных дифференциальных уравнений, что вы хотите решить использование ode15i.

Функциональный f = odefun(t,y,yp), для скалярного t и вектор-столбцы y и yp, должен возвратить вектор-столбец f из типа данных single или double это соответствует f(t,y,y')odefun должен принять все три входных параметра, tY, и yp даже если один из аргументов не используется в функции.

Например, чтобы решить y'y=0, используйте эту функцию.

function f = odefun(t,y,yp)
f = yp - y;

Для системы уравнений, выхода odefun вектор. Каждое уравнение становится элементом в векторе решения. Например, чтобы решить

y'1y2=0y'2+1=0 ,

используйте эту функцию.

function dy = odefun(t,y,yp)
dy = zeros(2,1);
dy(1) = yp(1)-y(2);
dy(2) = yp(2)+1;

Для получения информации о том, как предоставить дополнительные параметры функциональному odefun, смотрите Функции Параметризации.

Пример: @myFcn

Типы данных: function_handle

Начальное время, заданное как скаляр. decic использует начальное время, чтобы вычислить сопоставимые начальные условия, которые удовлетворяют odefun(t0,y0_new,yp0_new) = 0.

Типы данных: single | double

Исходные предположения для y- компоненты, заданные как вектор. Каждый элемент в y0 задает начальное условие для одной зависимой переменной yn в системе уравнений, заданной odefun.

Типы данных: single | double

y- компоненты, чтобы содержать зафиксированный, заданный как вектор 1 с и 0s, или как [].

  • Установите fixed_y0(i) = 1 если никакое изменение не разрешено в предположении для y0(i).

  • Установите fixed_y0 = [] если какая-либо запись может быть изменена.

Вы не можете зафиксировать больше, чем length(yp0) компоненты. В зависимости от определенной проблемы не всегда возможно зафиксировать определенные компоненты y0 или yp0. Это - лучшая практика не зафиксировать больше компонентов, чем необходимо.

Исходные предположения для y'- компоненты, заданные как вектор. Каждый элемент в yp0 задает начальное условие для одной дифференцируемой зависимой переменной y'n в системе уравнений, заданной odefun.

Типы данных: single | double

y'- компоненты, чтобы содержать зафиксированный, заданный как вектор 1 с и 0s, или как [].

  • Установите fixed_yp0(i) = 1 если никакое изменение не разрешено в предположении для yp0(i).

  • Установите fixed_yp0 = [] если какая-либо запись может быть изменена.

Вы не можете зафиксировать больше, чем length(yp0) компоненты. В зависимости от определенной проблемы не всегда возможно зафиксировать определенные компоненты y0 или yp0. Это - лучшая практика не зафиксировать больше компонентов, чем необходимо.

Структура опций, заданная как массив структур. Используйте odeset функция, чтобы создать или изменить структуру опций. Соответствующие опции для использования с decic функцией является RelTol и AbsTol, то, которые управляют порогами ошибок, использовалось для расчета начальных условий.

Пример: options = odeset('RelTol',1e-5)

Типы данных: struct

Выходные аргументы

свернуть все

Сопоставимые начальные условия для y0, возвращенный как вектор. Если значение resnrm мал, затем yo_new и yp0_new удовлетворите odefun(t0,y0_new,yp0_new) = 0 и подходят, чтобы использоваться в качестве начальных условий с ode15i.

Сопоставимые начальные условия для yp0, возвращенный как вектор. Если значение resnrm мал, затем yo_new и yp0_new удовлетворите odefun(t0,y0_new,yp0_new) = 0 и подходят, чтобы использоваться в качестве начальных условий с ode15i.

Норма невязки, возвращенной как вектор. resnrm норма odefun(t0,y0_new,yp0_new).

  • Маленькое значение resnrm указывает на тот decic успешно вычисленные сопоставимые начальные условия, которые удовлетворяют odefun(t0,y0_new,yp0_new) = 0.

  • Если значение resnrm является большим, попытайтесь настроить пороги ошибок RelTol и AbsTol использование options входной параметр.

Советы

  • ihb1dae и iburgersode файлы в качестве примера используют decic вычислить сопоставимые начальные условия прежде, чем решить с ode15i. Введите edit ihb1dae или edit iburgersode просмотреть код.

  • Можно дополнительно использовать decic вычислить сопоставимые начальные условия для ДАУ, решенных ode15s или ode23t. Для этого выполните эти шаги.

    1. Перепишите систему уравнений в полностью неявной форме f(t,y,y') = 0.

    2. Вызовите decic вычислить сопоставимые начальные условия для уравнений.

    3. Задайте y0_new как начальное условие в вызове решателя, и задают yp_new как значение InitialSlope опция odeset.

Смотрите также

| |

Представлено до R2006a