正确使用 deff() 定义用于 ode 求解器的函数

Correctly use deff() to define a function for use in ode solver

我有一个微分方程

y'=-0.1y + g(t), y(0)=1, 0<=t<=600, g(t)=0 except between 488.3 & 488.9 where its value is 2.

这将使用 scilab 的 ode() 函数进行模拟,假定默认选项为 %ODEOPTIONS。

第一步是使用

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()