MATLAB 6 的参考网站

2004/06/28 - 2 条留言

这年头,软件不断升级。MATLAB已经发布了R14(7.0)版本。

因为打击盗版的力度不断深入,再加上Mathworks本身也提高了MATLAB的防盗技术,我想这个7.0的版本恐怕短时间不会有盗版出现。所以,很多人还是坚持使用6.0或者6.5的版本。

可是Mathworks的官方网站提供的MATLAB的最新帮助文档支持已经随着升级到了7.0版本。很多命令以及示例程序不再对旧版本适用,也就不再具有参考意义。

下面的网站提供了几个旧版本的在线参考文档,读者可以对症下药。

http://northstar-www.dartmouth.edu/doc/

向ODE的函数中传递参数

2004/06/24 - 29 条留言

在用odesolver(ode45, ode15s, …)来解微分方程的时候,最基本的用法是:

[t, y] = odesolver(odefun, tspan, y0);

这里的odefun是待求的微分方程。那么odefun中一般会含有多个系统参数,通常要通过改变参数来观察系统动态的变化。那么如何在调用odesolver的时候传递参数呢?

以前,我都是用全局变量的写法,将参数在主函数和子函数中分别都定义为global,这样做有一个弱点:针对系统不同,参数的表达与数量有变化的时候,程序通常要做变化,通用性不强。那么最好是在调用的时候进行传递,方法如下:

实际上很简单,就是将一切其他的参数都写在括号中就可以了!但是要注意的是:odesolver的第四个参数一定是options,也就是对微分方程添加补充功能的参数(类型为structure,要用odeset来定义),那么其他系统参数就只能从第五个参数写起。也就是说,第四个参数不可以为空,一定要定义某种option加进去,或者用使用空白矩阵(placeholder)。这样调用的时候格式就是:

[t, y] = odesolver(odefun, tspan, y0, options, parameter1, parameter2);

或者

[t, y] = odesolver(odefun, tspan, y0, [], parameter1, parameter2);

然后定义微分方程的时候也要有参数的地方:

function dydt = odefun(t, y, parameter1, parameter2)
dydt = [ eqn-1; eqn-2; …];

就OK了。