ode45没有足够的初始条件

时间:2014-03-03 14:11:14

标签: matlab ode differential-equations

我使用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。

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

1 个答案:

答案 0 :(得分:2)

你看过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]);