Scilab笔记 之 常微分方程求解
去参加数学建模比赛的时候哈,折腾的要死。Linux下的几个常用的数学分析软件都用了一遍:
Maxima (Mathmatic的开源替代品,Lisp编写,我很赞这个软件),
Octave(Matlab的GNU替代品,语法最接近Matlab),
Scilab (又一个Matlab的开源替代品。和Octave的区别是前者使用GNU协议授权,Scilab是法国科学院的开源作品,而且Scilab的文档和资料都要多不少,除了那个该死的tk GUI,还是很好用的。但是从功能上来说,至少在目前我认为,二者差不多),
Freefem (没有数学基础,这个玩意用不明白,解决偏微分方程(组)的)
Scilab解决常微分方程:
// ———- Simple one dimension ODE (Scilab function external)
// dy/dt=y^2-y sin(t)+cos(t), y(0)=0
function ydot=f(t,y),ydot=y^2-y*sin(t)+cos(t),endfunction
y0=0;t0=0;t=0:0.1:%pi;
y=ode(y0,t0,t,f)
plot(t,y)
C语言接口…
// ———- Simple one dimension ODE (C coded external)
ccode=['#include <math.h>'
'void myode(int *n,double *t,double *y,double *ydot)'
'{'
' ydot[0]=y[0]*y[0]-y[0]*sin(*t)+cos(*t);’
‘}’]
mputl(ccode,TMPDIR+’/myode.c’) //create the C file
ilib_for_link(‘myode’,’myode.o’,[],’c’,TMPDIR+’/Makefile’,TMPDIR+’/loader.sce’);//compile
exec(TMPDIR+’/loader.sce’) //incremental linking
y0=0;t0=0;t=0:0.1:%pi;
y=ode(y0,t0,t,’myode’);
唔,还有别的常微分solver函数可以使用的。参考scilab的documents的非线性求解(nonlinear)这一章。