在 ode45 中传递参数

Passing arguments in ode45

我想在 ode45 函数中传递一个简单的参数。我的函数如下:

function dxdt = state( t,x,vgth,vgval)
p=1;
k=10^0.7;
window1=1-((2*x)-1).^(2*p);
dxdt=k*(vgval-vgth+1.2)*window1;  
end

主要脚本是:

clear all
step=0.01;
t = 0:step:10;
f=2*0.157;
vg = 5*sin(2*f*t);
x0=0.01;
vgth=1.9;
[t,x] = ode45(@(t,x) state1 (t,x,vgth,vg(t)), t, x0);
plot(t,x)

这里当我在参数传递中排除参数 vg(t) 时,整个工作正常。但它不适用于参数中的 vg(t)

将评论汇总为答案:

function dxdt = state( t,x,vgth,vgval)
    p=1;
    k=10^0.7;
    window1=1-((2*x)-1).^(2*p);
    dxdt=k*(vgval-vgth+1.2)*window1;  
end

function vgval = vg(t)
    f=2*0.157;
    vgval = 5*sin(2*f*t);  
end 

step=0.01;
t = 0:step:10;
x0=0.01;
vgth=1.9;
[t,x] = ode45(@(t,x) state(t,x,vgth,vg(t)), t, x0);

这应该会按预期工作。