Matlabe ODE45错误如何存储变量

时间:2017-03-05 18:40:14

标签: matlab ode

我正在解决的问题: enter image description here

equations

我为变量提供了初始条件,但它们不是微分方程。可以将它们添加到我的DE的载体中吗?

(最新)错误消息是:FUN1_ORIG返回长度为14的向量,但初始条件向量的长度为21. [它们必须具有相同数量的元素]。

在每个步骤/增量之后,我可以在哪里放置if语句来检查条件?

1 个答案:

答案 0 :(得分:0)

以下方法适合我。我可以从您的代码中理解的是,在评估funfile时,您需要一些临时值,这些值在计算后无法生存。除了最好将不需要的临时内容存储在一个单独的位置之外,您可以在计算之前展开y向量,然后在完成后对其进行修剪。

function yprime = testf(t,y)
global MR
global y2

y(21) = 0;
%We have 14 differential equations, using these indices
%yprime=[A,B,D,E,F,G,H,I,J,K,L,M,N,O]
%        1 2 3 4 5 6 7 8 9 1011121314
.... (some 50 lines untouched)

%Z
y(20)=y(17)*(3/2);

%Y
y(21)=(106+(15/y(20))*(y(10)+y(11)+y(12)+2*(y(13)+y(14))))...
    /(1-(y(5)+y(6)+y(13)+y(14)+3*y(7))/y(20));

y2 = y(15:21);
yprime=transpose(yprime);
end

在脚本中,仍然定义yprime=zeros(14,1);并定义一个全局变量来存储扩展数据。

yprime=zeros(14,1);
global y2
y2 = zeros(7,1);
yprime(1)=1;%A_0

由于您在分配中涉及虚数,因此预计会出现复数。这不是编程问题。