运行包含ode45
的文件,传递两个参数(gamma,lambda)时报错“输入参数不足”
报错的行如下
[t,x]=ode45(@RH,tspan,x0,options,gamma,lambda);
起初只关注函数RH,对照核对每一个参数后,输入输出参数数量无误,但是疏忽了option
函数的入参,打开报错的点发现,问题出在质量矩阵处
options=odeset('Mass',@M,'MStateDep','none');
打开odemass.m
Mstdep = odeget(options,'MStateDependence','weak','fast');
switch lower(Mstdep)
case 'none'
massType = 2;
case 'weak'
massType = 3;
case 'strong'
massType = 4;
我的质量矩阵为
M
(
t
)
M(t)
M(t),属于case’none’,由函数文件masstype=2
接下来在odemass.m
的55-60行
if massType > 2 % state-dependent
massM = feval(massFcn,t0,y0,massArgs{:});
else % time-dependent only
massM = feval(massFcn,t0,massArgs{:});
end
end
程序会执行else后的语句
feval(F,a,b)
函数的功能是执行F函数,其中a,b是F的输入参数
massArgs
中包含所传入的参数,当传入2个参数(gamma、lambda)时,massArgs{:}
中有两项,此时 massfcn
实际上有三个输入参数。
需要注意的是massfcn是自己定义的质量矩阵,所以写这个函数的时候要注意输入参数的个数。
当 ode45
中只有一个需要传递的参数时(如下只有gamma)
[t,x]=ode45(@RH,tspan,x0,options,gamma);
massArgs
中只有一个cell,便不会存在质量矩阵入参数量不对的问题。