【问题标题】:ode45 Not Enough Initial Conditionsode45 初始条件不足
【发布时间】:2014-03-04 00:03:57
【问题描述】:

我使用matlabFunction 定义了一个函数。这是代码:

matlabFunction([a16;-((1+x16^2)/(2*x16))*a16],'vars',{x16,[a16]},'file','DE_19') 

这似乎奏效了。但是,当我尝试使用ode45 求解matlabFunction 定义的微分方程时,出现错误。代码如下:

[x,y] = ode45(@(x16,Y) DE_19(x16,Y),[1,11],[2,7,5]);

我得到的错误是

   Error using odearguments (line 93)
@(X16,Y)DE_19(X16,Y) returns a vector
of length 6, but the length of
initial conditions vector is 3. The
vector returned by
@(X16,Y)DE_19(X16,Y) and the initial
conditions vector must have the same
number of elements.

Error in ode45 (line 114)
[neq, tspan, ntspan, next, t0,
tfinal, tdir, y0, f0, odeArgs,
odeFcn, ...

所以,我尝试将初始条件从 [2,7,5] 更改为 [2,7,5,8,9,4]。当我这样做时,我得到了相同的消息,但不是说返回的向量长度为​​ 6,并且我的初始条件向量的长度为 3,而是说返回的向量长度为​​ 12,并且长度我的初始条件向量是 6。

为什么要这样做?这似乎很奇怪,返回的向量的长度会随着我改变初始条件向量的长度而变化。

【问题讨论】:

    标签: matlab ode differential-equations


    【解决方案1】:

    你看过DE_19.m的内容吗?您应该在调用matlabFunction 之前提供您使用的代码,但这里有一个可能与您使用的类似的可运行版本:

    syms a16 x16;
    DE_19 = matlabFunction([a16;-((1+x16^2)/(2*x16))*a16],'vars',{x16,[a16]})
    

    这会返回:

    DE_19 = 
    
        @(x16,a16)[a16;(a16.*(x16.^2+1.0).*(-1.0./2.0))./x16]
    

    如您所见,如果您传入一个标量状态(第二个参数 a16 是状态,第一个参数 x16 是自变量 - 对于所有 ODE 求解器都是如此:t然后y),输出总是两个元素。事实上,输出总是输入状态的两倍。也许应该切换a16x16?查看matlabFunction 的帮助和文档,因为它们提供了一个可以做到这一点的示例。

    顺便说一句,没有真正需要创建文件。您可以像这样使用matlabFunction 返回的匿名函数(您需要弄清楚哪个变量是哪个以及缺少什么才能使其正常工作):

    DE_19 = matlabFunction([...],'vars',{...})
    [x,y] = ode45(DE_19,[1,11],[2,7,5]);
    

    【讨论】:

      猜你喜欢
      • 2017-05-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-21
      • 2011-02-14
      • 1970-01-01
      • 2019-07-05
      • 2017-05-03
      相关资源
      最近更新 更多