正确使用 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()
。
我有一个微分方程
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()
。