Matlabe ODE45错误如何存储变量

Matlabe ODE45错误如何存储变量,matlab,ode,Matlab,Ode,我正在求解的方程: 我已经为变量提供了初始条件,但它们不是微分方程。可以把它们添加到我的DE向量中吗 (最新)错误消息是:FUN1_ORIG返回长度为14的向量,但初始条件向量的长度为21。[它们必须具有相同数量的元素] 在哪里可以放置if语句来检查每一步/增量后的条件?以下方法对我适用。我从您的代码中可以理解的是,在计算funfile时,您需要一些临时值,这些值在计算后不应存在。除了最好将不需要的临时内容存储在单独的位置之外,还可以在计算之前展开y向量,然后在完成后对其进行修剪 funct

我正在求解的方程:

我已经为变量提供了初始条件,但它们不是微分方程。可以把它们添加到我的DE向量中吗

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


在哪里可以放置if语句来检查每一步/增量后的条件?

以下方法对我适用。我从您的代码中可以理解的是,在计算
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=0(14,1)
并定义一个全局变量来存储扩展的数据

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

由于赋值中涉及虚数,因此应使用复数。这不是编程问题

在函数的第一行中,您正在访问
y(15)
,而
y
只有14个元素。否则我应该如何定义/存储它们?我可以添加这个矩阵z来存储它们吗?函数[yprime,z]=funfile(t,y),在您初始化的脚本中
yprime=zero(14,1)
作为函数的第二个输入。但是,在函数的第一行中,需要
yprime(16)
。如果你的意思是所有的初始值都是零,那么你可以将
yprime
初始化为一个更大的向量。它们只是变量,不是导数,所以我不想这样做。当我需要计算和检索C1、C2、Pa、Mw、Mn、Y、ZSo时,您已经创建了一个依赖循环
y(1)
取决于
y(15)
这取决于
y(9)
这取决于
y(1)
。实际上,它们不是“不需要的临时东西”。我也需要绘制它们。我让它运行了,但我有复杂的数字,我假设我只需要真实的部分。然而,有一个数字我不能计算“不是一个数字”,因为它不能积分足够长的时间,所以我需要使用一个刚性积分器,但ODE15s拒绝了,因为“我有一个奇异的或严重缩放的矩阵”。