decic

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

Синтаксис

[y0_new,yp0_new] = decic(odefun,t0,y0,fixed_y0,yp0,fixed_yp0)
[y0_new,yp0_new] = decic(odefun,t0,y0,fixed_y0,yp0,fixed_yp0,options)
[y0_new,yp0_new,resnrm] = decic(___)

Описание

пример

[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.

Примеры

свернуть все

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

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

Подтвердите эти значения при помощи decic, чтобы вычислить сопоставимые начальные условия для уравнений, фиксируя значение. Используйте предположения 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

Используйте decic, чтобы вычислить сопоставимые начальные условия для Weissinger неявное ОДУ. decic содержит, зафиксировал начальное значение для y (t0) и вычисляет сопоставимое начальное значение для y' (t0). Функция weissinger оценивает невязку неявного ОДУ.

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

Используйте результат, возвращенный decic с ode15i, чтобы решить ОДУ. Постройте график числового решения, y, против аналитического решения, ytrue.

[t,y] = ode15i(@weissinger,[1 10],y0,yp0);
ytrue = sqrt(t.^2 + 0.5);
plot(t,y,t,ytrue,'o')

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

свернуть все

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

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

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

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

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

y '1−y2=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, которые управляют порогами ошибок, используемыми, чтобы вычислить начальные условия.

Пример: опции = 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

Была ли эта тема полезной?