求解病态系统的Rosenbrock算法实现

本文介绍了Rosenbrock算法,一种用于求解病态(刚性)系统的数值方法,它结合了半隐式Range-Kutta算法的优势,避免迭代过程,适合实时计算。通过Matlab和C语言的实现示例,展示了如何解决导弹偏航通道动力学方程问题。
摘要由CSDN通过智能技术生成
 

  求解病态系统的Rosenbrock算法实现

            EmilMatthew (EmilMatthew@126.com)       06/07/ 30

[  类别  ]算法实现   

[推荐指数]★★★

[  摘要  ]本文主要介绍了一种求解病态系统较为有效的半稳式Range-Kuta算法Rosenbrock的基本原理及其实现。

[ 关键词 ]半隐式Range-Kuta算法,Rosenbrock算法

 

The Implementation of Rosenbrock Algorithm------

A method for solving stiff system

[Classify] Algorithm Implementation  

[  Level ] ★★★

[Abstract] In this article, I mainly introduce the benchmark idea of a Semi Implicit Range-Kuta algorithm, which named as Rosenbrock algorithm, and also with its implementation. 

[Key Words]Semi Implicit Range-Kuta, Rosenbrock Algorithm

 

                                           

[0引言]

    常微分方程组(Ordinary Differential Equations)的数值解法理论,在工程及数值实现上有着非常重要的应用,其中有一类常微分方程组,其系统呈现病态特性(或称刚性,此类系统常称作stiff system,简介参附录1),对普通的数值求解算法的步长设定要求较高,往往需要设定非常小的步长才能得出满意结果。在一些需要时实计算的领域,如控制系统等,是不允许在求解的时间上有过多耗费的,这就要求使用能在较短时间内就可得出计算结果的数值算法。

 

[1算法介绍]

   由于求解普通常微分方程组的Range-Kuta算法具有求解精度高,适用范围广的特点,因此,针对病态系统的数值算法构造有许多也是基于Range-Kuta算法展开的。计算数学工作者发现,如将Range-Kuta算法表达成隐式的形式(参附录2),并对其进行求解,则可以在较短的步数内求得病态系统的状态变量值。

但是,如果直接对隐式Range-Kuta方程进行求解,将面临着耗时、迭代易发散的不良特性。因此,真正有效的求解病态系统的数值算法,有很大一部分基于对隐式Range-Kuta方程展开的。这里要介绍的Rosenbrock半隐式Range-Kuta算法,既保持了半隐式Range-Kutta公式的A稳定性,又避免了迭代,是对刚性系统进行实时仿真的较为有效的算法。该算法还有另外一个特性,那就是步长可以根据精度要求进行调节(参[1]p557),从而能在极少的步数下就得到指定时刻系统的状态值的数值解,且满足精度要求。但对于时实仿真来说,固定步长的Rosenbrock算法会更合适,因为时实仿真需要得到各个时刻的精确的系统状态值,若采用变步长,则会遗漏不少需要的观察时刻的系统状态值。

Rosenbrock算法并不复杂,它的描述如下:

  

  

[2算法实现]

       这里给出的算例如下:

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值