我有一个微分方程
y'= - 0.1y + g(t),y(0)= 1,0 <= t <= 600,g(t)= 0,除了488.3和488.9之间,其值为2。
假设使用%ODEOPTIONS的默认选项,使用scilab的ode()函数进行模拟。
第一步是使用
DEFF()
定义我们的微分方程。然后我会用
ydiff = ODE(Y0,X0,X,F);
对于一个简单的微分方程,例如:
y'= x + 1 / y,y(0)= 0.1
我会表达为:
DEFF( 'yprim = F(X,Y)', 'yprim =(X + 1)/ Y');
但是在更复杂的情况下,例如我上面显示的情况,我们有两个函数f和g,我无法理解deff的用法。
deff()
的用法是
deff('[s1, s2, ...] = newfunction(e1, e2, ...)',text)
和text
是字符串的列矩阵,它的每一行都是函数块中的行:
function y=foo(x)
(Line 1)
(Line 2)
(Line 3)
endfunction
相当于
deff("y=foo(x)"; ["(Line 1)";"(Line 2)";"(Line 3)"]);
所以,在你的问题中,你可以这样做:
deff("y = g(t)", ["if (t > 488.2 & t < 488.9) then"; "y = 2"; "else"; "y = 0"; "end"]);
deff("yprime = fode(t,y)", ["yprime = -0.1*y + g(t)"]);
然后你可以像往常一样使用ode()
。