exponenta event banner

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

Figure contains an axes. The axes contains 2 objects of type line. These objects represent ode15i, exact.

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

свернуть все

Решаемые функции, определяемые как дескриптор функции, определяющий интегрированные функции. 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- компоненты для хранения фиксированными, заданными как вектор из 1s и 0s, или как [].

  • Набор fixed_y0(i) = 1 если в предположении не допускается никаких изменений для y0(i).

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

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

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

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

y'- компоненты для хранения фиксированными, заданными как вектор из 1s и 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