MatLab中的ode23 - 使用可选参数作为输入

时间:2012-05-14 20:27:56

标签: matlab parameters arguments argument-passing ode

我正在尝试自己学习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,我会非常感激!

2 个答案:

答案 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个或更多个参数,你不应该得到错误“输入参数太多”。