odeFunction

转换符号表达式功能手柄ODE求解

描述

F= odeFunction(EXPR瓦尔符号代数表达式的系统转换为MATLAB®功能句柄。此功能句柄可以被用作输入到数值MATLAB ODE求解器,除了ode15i。这个论点瓦尔指定系统的状态变量。

F= odeFunction(EXPR瓦尔P1,... ...,PN指定系统的象征性的参数P1,... ...,PN

F= odeFunction(___名称,值使用由一个或多个指定的附加选项名称,值对参数。

例子

全部收缩

转换符号微分代数方程的系统为适合于MATLAB ODE求解器的功能句柄。然后通过使用解决系统ode15s求解。

创建下面的二阶微分代数方程。

SYMS Y(T);等式= DIFF(Y(t)的,T,2)==(1-γ(t)的^ 2)*的diff(Y(T),T) -  Y(T);

reduceDifferentialOrder改写等式为两个一阶微分方程的系统。这里,瓦尔是该系统的状态变量的矢量。新变量的Dy(t)的表示的一阶导数Y(t)的关于Ť

[等式,乏] = reduceDifferentialOrder(等式,Y(t))的
方程= DIFF(DYT(T),T)+ Y(t)的+ DYT(T)*(Y(t)的^ 2  -  1)DYT(T) -  DIFF(Y(T),T)瓦尔= Y(吨)DYT(t)的

对于设置初始条件Y(t)的和它的衍生物的Dy(t)的20分别。

initConditions = [2 0];

查找质量矩阵中号系统和方程的右侧的F

[M,F] = massMatrixForm(方程,乏)
M = [0,1] [-1,0] F =  -  Y(t)的 -  DYT(T)*(Y(t)的^ 2  -  1)-Dyt(t)的

中号F指的是形式 中号 Ť X Ť X ˙ Ť = F Ť X Ť 。为了简化进一步的计算,改写系统的形式 X ˙ Ť = F Ť X Ť

˚F= M \˚F
F = DYT(T) -  DYT(T)* Y(t)的^ 2  -  Y(t)的+ DYT(t)的

兑换F到MATLAB功能手柄使用odeFunction。新的函数处理输入到MATLAB ODE求解ode15s

odefun = odeFunction(F,乏);ode15s(odefun,[0 10],initConditions)

转换同时包含状态变量和符号参数为适合于MATLAB ODE求解器的功能句柄符号差分方程的系统。

创建微分代数方程的系统。在这里,象征性的功能X1(t)的X2(t)的表示该系统的状态变量。该系统还包含常量符号参数一个b和参数函数R(T)。这些参数并不代表状态变量。指定方程和状态变量为两个符号载体:方程式符号方程的矢量和变量为符号函数调用的向量。

syms x1(t) x2(t) a b r(t) eqs = [diff(x1(t),t) == a*x1(t) + b*x2(t)^2,... x1(t)^2 + x2(t)^2 == r(t)^2]; vars = [x1(t) x2(t)];

查找质量矩阵中号和右侧的矢量F这个系统。中号F指的是形式 中号 Ť X Ť X ˙ Ť = F Ť X Ť

[M,F] = massMatrixForm(方程,乏)
M = [1,0] [0,0] F = B * X2(t)的^ 2 + A * X1(t)的R(T)^ 2  -  X 1(t)的^ 2  -  X2(t)的2 ^

odeFunction以从MATLAB函数处理中号F。功能手柄F包含符号参数。

M = odeFunction(M,乏)F = odeFunction(F,乏,A,B,R(t))的
M = function_handle与值:@(T,IN2)重塑([1.0,0.0,0.0,0.0],[2,2])F =与值function_handle:@(吨,IN2,参数1,参数2,参数3)[参数1*英寸2(1,:)+ ... param2的*英寸2(2:)^ 2;参数3 ^ 2-英寸2(1,:)。^ 2-英寸2(2:)^ 2]。

指定的参数值。

A = -0.6;B = -0.1;R = @(t)的COS(T)/(1 + T ^ 2);

创建精简功能手柄F

F = @(T,Y)F(T,Y,A,B,R(T));

指定DAE系统一致的初始条件。

T0 = 0;Y0 = [-r(T0)* SIN(0.1);R(T0)* COS(0.1)];YP0 = [A * Y0(1)+ b *的Y0(2)^ 2;1.234];

创建一个包含质量矩阵选项集中号该系统和载体的YP0为衍生物的初始条件。

选择= odeset( '质量',M 'InitialSlope',YP0);

现在,使用ode15s解决方程系统。

ode15s(F,[T 0,1],Y0,优化)

通过使用写入生成的函数处理的文件文件选项。当写入文件,odeFunction优化使用中间变量命名为代码T0T1。...通过指定包含注释的文件注释选项。

限定微分方程的系统。查找质量矩阵中号而右侧F

SYMS X(t)Y(t)的等式= [DIFF(X(t),T)+ 2 *差异(Y(T),T)== 0.1 * Y(T),...... X(t) -Y(t)的== COS(T)-0.2 * T *的sin(x(t))的];瓦尔= [X(t)Y(T)];[M,F] = massMatrixForm(方程,乏);

写的MATLAB代码中号F该文件myfileMmyfileFodeFunction覆盖现有文件。包括注释版本:1.1在文件中,您可以打开和编辑输出文件。

M = odeFunction(M,乏, '文件', 'myfileM', '注释', '版本:1.1');
功能EXPR = myfileM(T,IN2)%MYFILEM%EXPR = MYFILEM(T,IN2)%是由符号数学工具箱版本7.3生成此功能。%01-JAN-2017 00:00:00%版本:1.1 EXPR =重塑([1.0,0.0,2.0,0.0],[2,2]);
F = odeFunction(F,乏, '文件', 'myfileF', '注释', '版本:1.1');
功能EXPR = myfileF(T,IN2)%MYFILEF%EXPR = MYFILEF(T,IN2)%是由符号数学工具箱版本7.3生成此功能。%01-JAN-2017 00:00:00%版本:1.1×=英寸2(1,:);Y =英寸2(2,:);EXPR = [Y *(1.0./1.0e1);-x+y+cos(t)-t.*sin(x).*(1.0./5.0)。];

指定一致的初始值X(t)的Y(t)的和它们的一阶导数。

xy0 = [2;1];%X(t)和y(t)的xyp0 = [0;0.05 * xy0(2)];X(t)和y%的衍生物(t)的

创建一个包含质量矩阵选项集中号, 初始条件xyp0以及数值公差数值搜索。

选择= odeset( '质量',M 'RELTOL',10 ^( -  6),... 'AbsTol',10 ^( -  6), 'InitialSlope',xyp0);

通过使用解决的方程系统ode15s

ode15s(F,[7:0],xy0,优化)

使用名称 - 值对参数“疏”,真转换稀疏符号矩阵时MATLAB函数手柄。

创建微分代数方程的系统。在这里,象征性的功能X1(t)的X2(t)的表示该系统的状态变量。指定方程和状态变量为两个符号载体:方程式符号方程的矢量和变量为符号函数调用的向量。

SYMS X1(t)的X2(t)的一个= -0.6;B = -0.1;R = @(t)的COS(T)/(1 + T ^ 2);方程= [DIFF(X1(t)的,吨)==一个* X1(T)+ B * X2(t)的^ 2,... X1(t)的^ 2 + X2(t)的^ 2 == R(吨)^ 2];瓦尔= [X1(t)的X2(吨)];

查找质量矩阵中号和右侧的矢量F这个系统。中号F指的是形式 中号 Ť X Ť X ˙ Ť = F Ť X Ť

[M,F] = massMatrixForm(方程,乏)
M = [1,0] [0,0] F =  - (3 * X1(t))的/ 5  -  X2(t)的^十分之二COS(T)^ 2 /(T ^ 2 + 1)^ 2-  X1(t)的^ 2  -  X2(t)的2 ^

生成MATLAB函数处理中号F。因为大部分的质量矩阵的元素的中号是零,使用转换时的说法中号

M = odeFunction(M,乏, '稀疏',真)F = odeFunction(F,乏)
M = function_handle与值:@(T,IN2)稀疏([1],[1],[1.0],2,2)F =与值function_handle:@(T,IN2)[英寸2(1,:)。*( -  3.0./5.0)-in2(2,:)^ 2./1.0e+1; ... COS(T)^ 2 * 1.0 ./(T ^ 2 + 1.0)^。2-英寸2(1,:)^ 2-IN2。(2,:)^ 2]。

指定DAE系统一致的初始条件。

T0 = 0;Y0 = [-r(T0)* SIN(0.1);R(T0)* COS(0.1)];YP0 = [A * Y0(1)+ b *的Y0(2)^ 2;1.234];

创建一个包含质量矩阵选项集中号该系统和载体的YP0为衍生物的初始条件。

选择= odeset( '质量',M 'InitialSlope',YP0);

求解方程的使用系统ode15s

ode15s(F,[T 0,1],Y0,优化)

输入参数

全部收缩

代数表达式,指定为符号表达式的一个矢量的系统。

状态变量,指定为象征性的函数或函数调用,如向量X(t)的

例:[X(t),Y(t)的]要么[X(t); Y(t)的]

该系统的参数,指定为符号变量,函数或函数调用,如F(T)。您也可以指定系统作为载体或象征性的变量,函数或函数调用的矩阵参数。如果EXPR含有比在指定的变量其他符号参数瓦尔,你必须指定这些附加参数P1,... ...,PN

名称 - 值对参数

指定可选的用逗号分隔的对名称,值参数。名称是参数的名称和是对应的值。名称必须出现引号内。您可以按照任何顺序指定多个名称和值对参数名1,值1,...,NameN,值N

例:odeFunction(表达式,乏, '文件', 'MYFILE')

注释包括在文件头中,指定为字符向量,特征向量的单元阵列,或串矢量。

含有生成的文件的路径的代码,指定为字符向量。所生成的文件接受类型的参数,并且可以在不符号数学工具箱使用™。如果该值为空,odeFunction产生一个匿名函数。如果特征向量没有结束.M,功能追加.M

默认,odeFunction文件参数生成包含优化的代码的文件。优化的装置的中间变量是自动生成的,以简化或加快的代码。MATLAB生成中间变量作为小写字母Ť随后自动生成的数,例如T32。要禁用代码优化,使用优化论据。

旗防止写入功能的文件代码的优化,指定为要么真正

默认,odeFunction文件参数生成包含优化的代码的文件。优化的装置的中间变量是自动生成的,以简化或加快的代码。MATLAB生成中间变量作为小写字母Ť随后自动生成的数,例如T32

odeFunction没有文件参数(或通过一个空字符向量指定的文件路径)创建了一个函数句柄。在这种情况下,代码没有优化。如果试图通过设定强制执行代码优化优化真正, 然后odeFunction抛出一个错误。

标志,稀疏和密集矩阵生成之间切换,指定为真正要么。当您指定“疏”,真中,生成的函数表示由稀疏数字矩阵符号矩阵。用“疏”,真当您转换包含许多零个元素符号矩阵。通常情况下,在稀疏矩阵操作比在密集矩阵相同的操作更有效率。看到稀疏矩阵

输出参数

全部收缩

功能手柄,可以作为输入参数传递给所有的数值MATLAB ODE求解器,除了ode15i,返回作为MATLAB功能句柄。

odeFunction返回合适的函数句柄ODE求解器如ODE45ode15sode23t, 和别的。唯一的ODE求解器,不接受此功能句柄是全隐微分方程求解器,ode15i。等式的系统转换成适合功能手柄ode15i, 用daeFunction

介绍了在R2015a