ode45报错“输入参数不足”

文章描述了在使用Matlab的ode45函数求解微分方程时遇到的‘输入参数不足’错误,问题根源在于质量矩阵的设置。当质量矩阵依赖于状态变量时,传递给ode45的参数数量需与massFcn函数的参数匹配。若massFcn需要三个输入参数,但只传递了两个,会导致错误。解决方案是确保传递正确的参数数量给massFcn。
摘要由CSDN通过智能技术生成

运行包含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,便不会存在质量矩阵入参数量不对的问题。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值