1

我正在尝试自己学习 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我将不胜感激!

4

2 回答 2

2

您需要做的是使用匿名函数在函数调用中传递数据:

[t y] = ode23(@(t,y)funn(t,y,4),tspan,x0,options)
于 2012-05-14T21:17:40.263 回答
1

我认为问题与ode23. 问题似乎在于您没有varargin在函数定义中列出funn. 它应该是:

function xdot = funn(t,x,mu,varargin)

这种方式funn接受 3 个或更多参数,并且您不应收到错误“输入参数过多”。

于 2012-05-14T21:00:39.497 回答