使用matlabFunction定义微分方程

时间:2014-03-02 23:21:25

标签: matlab function error-handling

我正在尝试通过首先将其置于正常状态来解决微分方程enter image description here,如果我做得正确,则应该是dx / dt = a8 1/3 x - 1/3 b8,其中a8是二阶导数,b8是三阶导数。这是我的代码的一部分:

matlabFunction( [a8 +x8/3 - b8/3; a8; b8],'vars',{t,[b8;a8;x8]},'file','DE_11')

以下是我得到的错误:

Error using sym/cat>checkDimensions (line 75)
CAT arguments dimensions are not consistent.

Error in sym/cat>catMany (line 38)
[resz, ranges] = checkDimensions(sz,dim);

Error in sym/cat (line 27)
    ySym = catMany(dim, strs);

Error in sym/vertcat (line 19)
    ySym = cat(1,args{:});

老实说,我不知道这些消息暗示着什么。我希望有人可以帮我解密这些错误信息,并告诉我哪里出错了。在解决了这些问题之后,我的意图是使用ode45来解决微分方程。

谢谢你,我为自己的无知道歉。

编辑:好的,在漫无目的地尝试各种各样的事情之后,我能够让它“工作”。以下是我将其更改为:

matlabFunction([b8;a8;a8 - b8/3 - x8/3], 'vars',{t8,x8,[b8,a8]},'file','DE_11')

然而,我并不确定为什么会这样,或者甚至是正确的输入。有人可能会告诉我它为什么有效吗?我知道这个[b8; a8; a8 - b8 / 3 - x8 / 3]代表一个包含我未知函数的列向量,但我并不完全理解这部分{t8,x8,[b8,a8]}。我知道我们正在定义变量,但为什么我们使用大括号,为什么有些括在方括号中,而其他则不是?

1 个答案:

答案 0 :(得分:2)

错误是由

引起的
[a8 +x8/3 - b8/3; a8; b8]

因为这会尝试创建一个尺寸不一致的矩阵,因为第一个空格会分隔第一行中的列条目。在运营商的任何一方都不使用空格或空格来解决这个问题......

[a8 + x8/3 - b8/3; a8; b8] or [a8+x8/3-b8/3; a8; b8]

应按预期工作。

请参阅http://www.mathworks.co.uk/help/matlab/matlab_prog/symbol-reference.html#bsgigzp-52