主要内容

odeFunction

符号表达式转换为函数处理解决的颂歌

描述

例子

f= odeFunction (expr,var)将MATLAB符号代数表达式的一个系统®函数处理。可以使用这个函数处理作为数值的输入MATLAB解决歌唱,除了ode15i。这个论点var指定系统的状态变量。

例子

f= odeFunction (expr,var,p1,…, pN)指定的符号系统的参数p1,…, pN

例子

f= odeFunction (___,名称,值)使用指定的一个或多个额外的选项名称,值对参数。

例子

全部折叠

象征性的微分代数方程组转换为函数处理适合MATLAB解决歌唱。然后解决系统使用ode15s解算器。

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

信谊y (t);eqn = diff (y (t), t, 2) = = (1 y (t) ^ 2) * diff (y (t), t) - y (t);

使用reduceDifferentialOrder重写方程作为一个系统的两个一阶微分方程。在这里,var是一个向量的状态变量的系统。新变量Dy (t)代表的一阶导数y (t)关于t

(方程式一样,var) = reduceDifferentialOrder (eqn, y (t))
方程式= diff (Dyt (t), t) + y (t) + Dyt (t) * (y (t) ^ 2 - 1) Dyt (t) - diff (y (t), t) var = y (t) Dyt (t)

设置初始条件y (t)和它的导数Dy (t)20分别。

initConditions = [2 0];

找到质量矩阵系统和两侧的方程F

[M F] = massMatrixForm(方程式一样,var)
M = [0, 1] (1,0) F = - y (t) Dyt (t) * (y (t) ^ 2 - 1) -Dyt (t)

F指的是形式 ( t , x ( t ) ) x ˙ ( t ) = F ( t , x ( t ) ) 。进一步简化计算,重写系统的形式 x ˙ ( t ) = f ( t , x ( t ) )

f = M \ f
f = Dyt (t) - Dyt (t) * (t) ^ 2 - y (t) + Dyt (t)

转换f通过使用MATLAB函数处理odeFunction。生成的函数处理输入MATLAB ODE求解器进行求解ode15s

odefun = odeFunction (f, var);ode15s ([0 10], odefun initConditions)

图包含一个坐标轴对象。坐标轴对象包含4线类型的对象。

转换一个系统包含状态变量和符号的符号微分方程参数的函数处理适合MATLAB解决歌唱。

创建微分代数方程组。在这里,符号功能x1 (t)x2 (t)表示系统的状态变量。该系统还包含常数具有象征意义的参数一个,b和函数的参数r (t)。这些参数并不代表状态变量。指定两个符号向量方程和状态变量:方程象征性的向量方程和变量的向量符号函数调用。

信谊x1 (t) x2 (t) b r (t)方程式= [diff (x1 (t), t) = = * x1 (t) + b * x2 (t) ^ 2,…x1 (t) ^ 2 + x2 (t) ^ 2 = = r (t) ^ 2);var = (x1 (t) x2 (t));

找到质量矩阵和右边的向量F对于这个系统。F指的是形式 ( t , x ( t ) ) x ˙ ( t ) = F ( t , x ( t ) )

[M F] = massMatrixForm(方程式一样,var)
M = (1,0) (0,0) F = b * x2 (t) ^ 2 + * x1 (t) r (t) ^ 2 - x1 (t) ^ 2 x2 (t) ^ 2

使用odeFunction生成MATLAB函数处理F。函数处理F包含象征意义的参数。

M = odeFunction (M, var) F = odeFunction (F, var, a、b r (t))
M = function_handle价值:@ (t, in2)重塑((1.0,0.0,0.0,0.0),(2,2))与价值:F = function_handle @ (t in2 param1、param2 param3) [param1。* in2 (1:) +…:param2。* in2 (2)。^ 2; param3。^ 2-in2 (1:)。^ 2-in2 (2:) ^ 2]。

指定参数值。

一个= -0.6;b = -0.1;r = @ (t) cost / (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 = [* y0 (1) + b * y0 (2) ^ 2;1.234);

创建一个选项设置包含质量矩阵的系统和向量yp0初始条件的衍生品。

选择= odeset(“质量”,M, InitialSlope, yp0);

现在,使用ode15s解决方程组。

ode15s (F [t0, 1], y0,选择)

图包含一个坐标轴对象。坐标轴对象包含4线类型的对象。

编写生成的函数处理文件使用文件选择。在编写文件时,odeFunction优化代码使用中间变量命名t0,t1、。…包括评论通过指定的文件评论选择。

定义微分方程组。找到质量矩阵和右边F

信谊x (t) y (t)方程式= [diff (x (t) t) + 2 * diff (y (t), t) = = 0.1 * y (t)……x (t) - y (t) = = cos (-0.2 t) * t * sin (x (t)));var = (x (t) y (t));[M F] = massMatrixForm(方程式一样,var);

编写的MATLAB代码F的文件myfileMmyfileFodeFunction覆盖现有的文件。包括发表评论版本:1.1的文件可以打开和编辑输出文件。

M = odeFunction (M, var,‘文件’,‘myfileM’,‘评论’,版本:1.1);
expr函数= myfileM (t, in2) % myfileM % expr = myfileM (t, in2) %这个函数生成的符号数学工具箱7.3版。% 01 - 1月- 2017就是%版本:1.1 expr =重塑((1.0,0.0,2.0,0.0),(2,2));
F = odeFunction (F, var,‘文件’,‘myfileF’,‘评论’,版本:1.1);
expr函数= myfileF (t, in2) % myfileF % expr = myfileF (t, in2) %这个函数生成的符号数学工具箱7.3版。% 01 - 1月- 2017就是%版本:1.1 x = in2 (1:);:y = in2 (2);expr = [y。* (1.0. / 1.0 e1); - 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 [0 7] xy0,选择)

图包含一个坐标轴对象。坐标轴对象包含4线类型的对象。

使用名称-值对的论点‘稀疏’,真的当将稀疏矩阵符号转换为MATLAB函数处理。

创建微分代数方程组。在这里,符号功能x1 (t)x2 (t)表示系统的状态变量。指定两个符号向量方程和状态变量:方程象征性的向量方程和变量的向量符号函数调用。

信谊x1 (t) x2 (t) = -0.6;b = -0.1;r = @ (t) cost / (1 + t ^ 2);方程式= [diff (x1 (t), t) = = * x1 (t) + b * x2 (t) ^ 2,…x1 (t) ^ 2 + x2 (t) ^ 2 = = r (t) ^ 2);var = (x1 (t) x2 (t));

找到质量矩阵和右边的向量F对于这个系统。F指的是形式 ( t , x ( t ) ) x ˙ ( t ) = F ( t , x ( t ) )

[M F] = massMatrixForm(方程式一样,var)
M = (1,0) (0,0) F = - (3 * x1 (t)) / 5 - x2 (t) ^ 2/10 cos (t) ^ 2 / (t ^ 2 + 1) ^ 2 - x1 (t) ^ 2 x2 (t) ^ 2

生成MATLAB函数处理F。因为大多数的质量矩阵的元素是零,使用稀疏的参数转换时

M = odeFunction (M, var,‘稀疏’,真的)F = odeFunction (F, var)
M = function_handle价值:@ (t, in2)稀疏([1],[1],[1.0],2,2)F = function_handle价值:@ (t, in2) [in2 (1:)。* (3.0. / 5.0) in2 (2:)。^ 2./1.0 e + 1,……cost。^ 2。* 1.0. / (t ^ 2 + 1.0)。^ 2-in2 (1:)。^ 2-in2 (2:) ^ 2]。

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

t0 = 0;y0 = (- r (t0) * sin (0.1);r (t0) * cos (0.1)];yp0 = [* y0 (1) + b * y0 (2) ^ 2;1.234);

创建一个选项设置包含质量矩阵的系统和向量yp0初始条件的衍生品。

选择= odeset(“质量”,M, InitialSlope, yp0);

解决方程组使用ode15s

ode15s (F [t0, 1], y0,选择)

图包含一个坐标轴对象。坐标轴对象包含4线类型的对象。

输入参数

全部折叠

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

状态变量,指定为一个向量的符号函数或函数调用,如x (t)

例子:[x (t), y (t))[x (t); y (t))

系统的参数,指定为符号变量,函数,或函数调用,如f (t)。您还可以指定参数的系统作为一个向量或矩阵符号变量,函数或函数调用。如果expr包含符号参数中指定的变量var,您必须指定这些额外的参数p1,…, pN

名称-值参数

指定可选的双参数作为Name1 = Value1,…,以=家,在那里的名字参数名称和吗价值相应的价值。名称-值参数必须出现在其他参数,但对的顺序无关紧要。

R2021a之前,用逗号来分隔每一个名称和值,并附上的名字在报价。

例子:odeFunction (expr一样,var,“文件”,“myfile”)

评论中包含文件头,指定为一个特征向量,单元阵列的特征向量,或字符串向量。

包含生成的代码的文件路径,指定为一个特征向量。生成的文件接受参数的类型,可以使用符号数学工具箱™。如果该值为空,odeFunction生成一个匿名函数。如果字符向量不结束。m,函数附加。m

默认情况下,odeFunction文件参数包含优化代码生成一个文件。优化意味着中间变量简化和加速代码的自动生成。MATLAB生成中间变量作为一个小写字母t例如,紧随其后的是一个自动生成的数字t32。禁用代码优化,使用优化论点。

国旗防止优化函数编写的代码文件,指定为真正的

默认情况下,odeFunction文件参数包含优化代码生成一个文件。优化意味着中间变量简化和加速代码的自动生成。MATLAB生成中间变量作为一个小写字母t例如,紧随其后的是一个自动生成的数字t32

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

国旗稀疏和稠密矩阵生成之间的切换,指定为真正的。当你指定‘稀疏’,真的,生成的函数符号矩阵的稀疏表示数值矩阵。使用‘稀疏’,真的当你转换符号矩阵包含许多零元素。通常,稀疏矩阵的操作的效率比相同的密度矩阵的操作。看到稀疏矩阵

输出参数

全部折叠

函数处理,可以作为输入参数数值MATLAB解决颂歌,除了ode15i,作为一个MATLAB函数返回处理。

odeFunction返回一个函数处理等解决适合ODE数值,ode15s,ode23t等等。唯一的ODE求解器,不接受这个函数处理是完全隐式的微分方程的解算器,ode15i。将方程组转换成一个函数处理适合ode15i,使用daeFunction

版本历史

介绍了R2015a