Scilab 中 ODE 的奇怪行为:方程 dy/dx=A 未正确求解
Odd behavior of ODE in Scilab: equation dy/dx=A is not solved properly
我仍在学习 Scilab (5.5.2),所以我正在编写和 运行 测试代码以熟悉该软件。
为了测试数值微分方程求解器,我从方程 dy/dx = A 开始,其解为 y = Ax+ c(线方程).
这是我写的代码:
// Function y = A*x+1
function ydot=fn(x, A)
ydot=A
endfunction
A=2;
//Initial conditions
x0=0;
y0=A*x0+1;
//Numerical Solution
x=[0:5];
y= ode(y0,x0,x,fn);
//Analytical solution
y2 = A*x+1;
clf(); plot(x, y); plot(x, y2, '-k');
//End
这些是意想不到的结果:
y = 1. 2.7182824 7.3890581 20.085545 54.598182
148.41327
y2 = 1. 3. 5. 7. 9. 11.
看来 y = e^x。谁能解释一下哪里出了问题,或者我做错了什么?
仅重命名变量不会改变 ODE 求解器在内部使用它们的方式。由于该求解器需要一个带有参数 time,state
的函数,它将以这种方式解释提供的函数。
改回变量名,你编程的相当于
function ydot=fn(t,y)
ydot = y
endfunction
确实有指数函数作为解
从manual可以看出,包含参数的方式是将函数作为列表传递,
The f argument can also be a list with the following structure: lst=list(realf,u1,u2,...un)
where realf
is a Scilab function with syntax: ydot = f(t,y,u1,u2,...,un)
function ydot=fn(t,y,A)
ydot = A
endfunction
y= ode(y0,x0,x,list(fn,A));
我仍在学习 Scilab (5.5.2),所以我正在编写和 运行 测试代码以熟悉该软件。
为了测试数值微分方程求解器,我从方程 dy/dx = A 开始,其解为 y = Ax+ c(线方程).
这是我写的代码:
// Function y = A*x+1
function ydot=fn(x, A)
ydot=A
endfunction
A=2;
//Initial conditions
x0=0;
y0=A*x0+1;
//Numerical Solution
x=[0:5];
y= ode(y0,x0,x,fn);
//Analytical solution
y2 = A*x+1;
clf(); plot(x, y); plot(x, y2, '-k');
//End
这些是意想不到的结果:
y = 1. 2.7182824 7.3890581 20.085545 54.598182
148.41327y2 = 1. 3. 5. 7. 9. 11.
看来 y = e^x。谁能解释一下哪里出了问题,或者我做错了什么?
仅重命名变量不会改变 ODE 求解器在内部使用它们的方式。由于该求解器需要一个带有参数 time,state
的函数,它将以这种方式解释提供的函数。
改回变量名,你编程的相当于
function ydot=fn(t,y)
ydot = y
endfunction
确实有指数函数作为解
从manual可以看出,包含参数的方式是将函数作为列表传递,
The f argument can also be a list with the following structure:
lst=list(realf,u1,u2,...un)
whererealf
is a Scilab function with syntax:ydot = f(t,y,u1,u2,...,un)
function ydot=fn(t,y,A)
ydot = A
endfunction
y= ode(y0,x0,x,list(fn,A));