« 上一篇: matlab中的微分方程--------1 下一篇: How do I find graphics object handles?-----From Mathworks' technotes »
山城棒棒儿军 @ 2004-04-27 23:58

第5节 如何解决时变(Time-Dependent)ODEs?
下面是一个带有一个时变项的常规微分方程利用MATLAB ODE求解器求解的例子。时变项可以通过一个带有已知采样时间的数据集或者是一个简单的函数定义。如果时变项通过数据集定义,则这个数据集和它的采样时间可以作为ODE 求解器的附加参数传递给函数。如果时变项是通过函数定义,则这个函数在导数函数需要的时候被调用。
本例中用到的微分方程是带有一个正弦驱动项的阻尼波动(Damped Wave)方程。
 y’’(t)- beta * y’(t)+ omega^2 * y(t)= A* sin ( w0 * t – theta )
MATLAB要求微分方程能够表示成如下的一阶微分方程形式:
                         y’(t)= B * y(t)+ f(t)
其中,y 是一个状态向量,B是一个矩阵。应用前面一节讲的技术,将这个微分方程的MATLAB里面的定义成如下:
 xdot(2)= beta * x(2)- omega^2 * x (1)  + A * sin(w0 * t - theta);
 xdot(1)= x(2);
其中,xdot=dx /dt,x(1)= y,x(2)=dy /dt。
在本例中,beta,omega,A,w0与theta需要进行定义。他们作为附件参数传递给MATLAB ODE 求解器。

例1:时变项是一个函数
建立如下的微分方程函数:

% FUN1.M: 时变微分方程例子
function  xdot = fun1 ( t , x , beta , omega , A , w0 , theta )
% 时变项是 A * sin ( w0 * t – theta )
xdot ( 2 ) =  beta * x (2 ) - omega ^2 * x (1) + A * sin ( w0 * t – theta ) ;  %原tech-note%% 写错了, 害的我居然检查了很久才发现,符号写错了^_^
xdot ( 1 ) = x ( 2 ) ;
xdot = xdot ( : );
% 使得xdot是一列
% fun1.m 结束


在MATLAB中采用如下代码调用这个函数:
beta = .1 ;
omega = 2 ;
A = .1 ;
w0 = 1.3 ;
theta = pi /4 ;
X0 = [ 0 1]’;
t0 = 0 ;
tf = 20 ;
options = [];
[ t , y] = ode23 ( @fun1, [t0 , tf ], X0, options, beta, omega, A, w0, theta );
plot ( t , y );


例2:时变项是一个数据集
如下的例子需要用到interp1 命令。 建立如下的微分方程函数:

% FUN2.M 带有数据集合的时变微分方程的例子
function  xdot = fun2 ( t, x, beta, omega, T, P )
pt = interp1 ( T, P, t );
xdot (2 ) = beta * x (2 ) – omega^2 * x (1) + pt ;
xdot (1 ) = x (2 );
xdot = xdot ( : );  % 使得xdot是一列
% fun2.m 结束

在MATLAB中采用如下的形式调用这个函数:
beta = .1 ;
omega = 2 ;
A = .1 ;
w0 = 1.3 ;
theta = pi /4 ;
X0 = [ 0 1]’;
t0 = 0 ;
tf = 20 ;
T = t0 – eps : .1 : tf + theta +eps ;
P = A.* sin(w0 .*T –theta );
[ t, y ] = ode23 ( @ fun2 , [ t0, tf ], X0, [ ], theta, omega, T, P );
plot ( t, y (:,1));
hold on;
plot(t,y(:,2),'g');

因为对interp1的调用,可能使得第二个例子比第一个例子运行时间长。
第6节 如何采用定时步长(Fixed Time Step)?
MATLAB配备的常规微分方程求解器函数采用了各种方法。ODE23是基于龙格-库塔(Runge-Kutta)(2,3)积分方法,ODE45是基于龙格-库塔(4,5)积分方法。ODE113是变阶Adams-Bashforth-Mouulton PESE求解器。各种求解器和他们采用的方法详细列表请参阅MATLAB在线文档。
MATLAB通过采取迈一步,估计在这步的误差,检查其值是大于还是小于容差,然后相应地调整步长。这些积分方法是不利于采用定步长的。采用定步长算法,在当你的信号频率大于求解器的频率的时候,你就可能丢失掉一些点,因而是危险的。采用变步长算法可以确保在低频的时候采用大的步长,而在高频的时候采用小的步长。MATLAB中的ODE求解器优化了变步长算法,采用变步长的时候能够运行更快,而且显而易见的是得到的结果是更加精确的。现在在MATLAB Central站点,一些定时步长的函数可以直接利用。这些求解器有:
ODE1              一阶Euler 方法
ODE2              二阶Euler方法
ODE3              三阶龙格-库塔法
ODE4              四阶龙格-库塔法
ODE5              五阶龙格-库塔法
这些求解器可以采用如下的与否使用:
y = ODE4( odefun,tspan,y0 );
积分在tspan所规定是时间间隔值到的时候一步一步进行处理。时间值必须是按升序或者降序的方式排列。注意步长(tspan的连续元素间的距离)并不要求必须是均匀的。如果步长是均匀的,你或许可以采用 LINSPACE创建。例如:
tspan = linspace(t0, tf, nsteps); %t0 = 0; tf = 10, nsteps=100;

第7节  如何利用随机微分方程(SDEs)?
随机微分方程是指带有随机元素的微分方程,一个典型的随机微分方程可以写成如下形式:
           dX = lambda * X dt + mu * X dW;

其中,X是我们感兴趣的量,t是时间,W是一个随机变量或随机过程,lambda与mu是问题的常数参数。
一个求解SDEs的详细介绍可以在这篇文章中找到: Desmond J Higham,“An Algorithmic Introduction to Numerical Simulation of Stochastic Differential Equations”,SIAM review,Vol.43,No.3。文章中在举例说明文章的观点的时候,给出了许多MATLAB中的例子。
你可以从上面的文章中得到例子列表,同时,有关在经金融领域里面的例子,可以在下面的URL中找到:
     http://www.maths.strath.ac.uk/~aas96106/algfiles.html

最新评论


青子

2005-01-25 22:46

谢谢!



盛云

2006-12-29 20:39

我想请问一下,你对于求解随机微分方程有没有一个比较全面的解释,还有,请问有没有你在这里写的那篇“Desmond J Higham”写的文章啊?如果有能不能发给我一下,感谢!


2008-05-12 16:12

function cxsj()
D=input('缸径D=');
S=input('汽缸行程S=');
n=input('转速=');
epsilon=input('压缩比=');
Ze=input('进气门个数=');
Za=input('排气门个数=');
Po=input('大气压力=');
To=input('大气温度=');
L=input('连杆长度=');
r=input('曲柄半径=');

 for phi=0:1:720
    if phi<180
     Ma = S.*pi.*(D/2)^2.*28.97;   %空气质量
     vf=S.*pi.*D^2./4
    Va = pi^2.*D^2.*S./(8.*180).*(sin(pi.*phi./180)+r./(2.*L).*sin(pi.*2.*phi./180)./(1-(r./L*sin(pi.*phi./180)^0.5)));   %汽缸容积变化率
     
         [x,y] = ode45(@xxx,[0 180],1);


评论 / 个人网页 / 扔小纸条
* 昵称

已经注册过? 请登录

新用户请先注册 以便能显示头像及追踪评论回复

Email
网址
* 评论
表情
 


 

分类小组论坛
杂谈 , 娱乐、八卦 , 文学、艺术 , 体育 , 旅游、同城 , 象牙塔 , 情感 , 时尚、生活 , 星座 , 科技

请注意遵守中华人民共和国法律法规, 如威胁到本站生存, 将依法向有关部门报告, 同时本站的相关记录可能成为对您不利的证据.

相关法律法规
全国人大常委会关于维护互联网安全的决定
中华人民共和国计算机信息系统安全保护条例
中华人民共和国计算机信息网络国际联网管理暂行规定
计算机信息网络国际联网安全保护管理办法
计算机信息系统国际联网保密管理规定