主要内容

decic

计算一致的初始条件ode15i

描述

例子

y0_newyp0_new] = decic(odefunt0y0fixed_y0yp0fixed_yp0使用y0而且yp0作为对全隐函数初始条件的猜测odefun,保存指定的组件fixed_y0而且fixed_yp0作为固定的,然后计算非固定组件的值。结果是一组完全一致的初始条件。新的价值观yo_new而且yp0_new满足Odefun (t0,y0_new,yp0_new) = 0和适用于作为的初始条件ode15i

y0_newyp0_new] = decic(odefunt0y0fixed_y0yp0fixed_yp0选项还使用了选项结构选项为指定值AbsTol而且RelTol.使用创建选项结构odeset

y0_newyp0_newresnrm] = decic(___返回的范数odefun (t0 y0_new yp0_new)作为resnrm.如果标准看起来过大,那么就使用选项降低相对容错RelTol,默认值为1 e - 3

例子

全部折叠

考虑一下隐式方程组

0 2 y 1 - y 2 0 y 1 + y 2

这些方程非常简单,因此很容易读出变量的一致初始条件。例如,如果你修复 y 1 1 ,然后 y 2 - 1 根据第二个方程和 y 1 - 1 / 2 根据第一个方程。因为这些值 y 1 y 1 , y 2 满足方程,它们是一致的。

通过使用确认这些值decic为方程计算一致的初始条件,固定值 y 1 1 .使用猜测Y0 = [10 0]而且Yp0 = [0 0],不满足方程,因此是不一致的。

Odefun = @(t,y,yp) [2*yp(1)-y(2);(1) + y (2)];T0 = 0;Y0 = [10 0];Yp0 = [0 0];[y0,yp0] = decic(odefun,t0,y0,[10 0],yp0,[])
y0 =2×11
yp0 =2×1-0.5000 0

计算一致的初始条件并求解隐式ODEode15i

魏辛格方程是

2 y 3. - y 3. y 2 + t t 2 + 1 y - t 2 y 0

因为方程是一般形式 f t y y 0 ,你可以使用ode15i函数来解隐式微分方程。

代码方程

用适合的形式编码方程ode15i时,您需要编写一个带有输入的函数 t y , y 这返回了方程的残值。这个函数@weissinger编码这个方程。查看函数文件。

类型weissinger
function res = weissinger(t,y,yp) % weissinger计算weissinger隐式ODE的残差% %参见ODE15I。The MathWorks, Inc. res = t*y^2 *yp ^3 - y^3 *yp ^2 + t*(t^2 + 1)*yp - t^2 *y;

计算一致的初始条件

ode15i解算器需要一致的初始条件,即提供给求解器的初始条件必须满足

f t 0 y y 0

由于有可能提供不一致的初始条件,并且ode15i不进行一致性检查,建议您使用辅助功能decic计算这些条件。decic将某些指定变量保持固定,并为不固定的变量计算一致的初始值。

在这种情况下,固定初始值 y t 0 3. 2 ,让decic为导数计算一致的初始值 y t 0 ,从最初的猜测开始 y t 0 0

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

解决方程

使用返回的一致初始条件decicode15i来求解时间区间上的ODE 1 10

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

阴谋的结果

ODE的精确解是

y t t 2 + 1 2

绘制数值解y计算ode15i相对于解析解ytrue

Ytrue =√(t。^2 + 0.5);情节(t y‘*’t ytrue“o”)传说(“ode15i”“准确”

图中包含一个轴对象。axis对象包含2个line类型的对象。这些对象表示ode15i。

输入参数

全部折叠

要解决的函数,指定为定义要集成的函数的函数句柄。odefun表示要求解的隐式微分方程组ode15i

这个函数F = odefun(t,y,yp),对于标量t和列向量y而且yp,必须返回一个列向量f数据类型的这对应于 f t y y odefun必须接受所有三个输入参数,ty,yp即使函数中没有使用其中一个参数。

例如,解 y y 0 ,使用此函数。

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

对于方程组,的输出odefun是一个向量。每个方程都成为解向量中的一个元素。例如,解

y 1 y 2 0 y 2 + 1 0

使用该函数。

函数dy = odefun(t,y,yp) dy = 0 (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

数据类型:|

初步猜测y-components,指定为vector。中的每个元素y0为一个因变量指定初始条件 y n 在这个方程组中odefun

数据类型:|

y-保持固定的组件,指定为1和0的向量,或为[]

  • Fixed_y0 (i) = 1如果不允许对的猜测发生变化y0(我)

  • Fixed_y0 = []如果有任何条目可以更改。

你不能修复超过长度(yp0)组件。的某些组件并不总是可以修复的,这取决于具体的问题y0yp0.最好不要修复超过必要数量的组件。

初步猜测y '-components,指定为vector。中的每个元素yp0为一个微分因变量指定初始条件 y n 在这个方程组中odefun

数据类型:|

y '-保持固定的组件,指定为1和0的向量,或为[]

  • Fixed_yp0 (i) = 1如果不允许对的猜测发生变化yp0(我)

  • Fixed_yp0 = []如果有任何条目可以更改。

你不能修复超过长度(yp0)组件。的某些组件并不总是可以修复的,这取决于具体的问题y0yp0.最好不要修复超过必要数量的组件。

选项结构,指定为结构数组。使用odeset函数创建或修改选项结构。的相关选项decic函数RelTol而且AbsTol,控制用于计算初始条件的误差阈值。

例子:options = odeset('RelTol',1e-5)

数据类型:结构体

输出参数

全部折叠

的一致初始条件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使用选项输入。

提示

  • ihb1dae而且iburgersode示例文件使用decic在求解之前计算一致的初始条件ode15i.类型编辑ihb1dae编辑iburgersode查看代码。

  • 你还可以使用decic计算求解的dae的一致初始条件ode15sode23t.要做到这一点,请遵循以下步骤。

    1. 用完全隐式的形式重写方程组F (t,y,y') = 0

    2. 调用decic为方程计算一致的初始条件。

    3. 指定y0_new作为求解器调用中的初始条件,并指定yp_new的值InitialSlope选择odeset

版本历史

R2006a之前介绍

另请参阅

||