我正在尝试自己学习MatLab。我得到了关于解决ODE的大部分概念,但我对使用可选参数作为输入有点不确定。我创建了以下函数:
function xdot = funn(t,x,mu);
if nargin < 3 | isempty(mu)
mu = 1;
end
xdot = t +mu*x;
另外我已定义:
tspan = [0 2];
x0 = 0;
options = odeset('outputfcn','odeplot');
我不确定如何在使用mu
函数时更改变量ode23
。我知道这应该可以通过输入可选参数来实现,但我不能让它工作。如果我写的话说:
[t y] = ode23('funn',tspan,x0,options)
然后一切都正确计算,我们自动获得mu
= 1。
但如果我想改变这个,我该怎么办?我尝试编写以下内容来设置mu
= 4:
[t y] = ode23('funn',tspan,x0,options,4)
但接下来我得到以下内容:
??? Error using ==> funn
Too many input arguments.
Error in ==> odearguments at 98
f0 = feval(ode,t0,y0,args{:}); % ODE15I sets args{1} to yp0.
Error in ==> ode23 at 171
[neq, tspan, ntspan, next, t0, tfinal, tdir, y0, f0, odeArgs, odeFcn, ...
我根据我对教科书中的程序的理解来做到这一点,但显然我在这里做错了。如果有人可以解释我如何更改参数mu
,一般情况下,p1, p2, ...
如何使用可选参数ode23
,我会非常感激!
答案 0 :(得分:2)
您需要做的是使用anonymous函数在函数调用中传递数据:
[t y] = ode23(@(t,y)funn(t,y,4),tspan,x0,options)
答案 1 :(得分:1)
我认为问题与ode23
无关。问题似乎在于您未在varargin
的函数定义中列出funn
。它应该是:
function xdot = funn(t,x,mu,varargin)
这种方式funn
接受3个或更多个参数,你不应该得到错误“输入参数太多”。