''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' 模块名:定步长四阶龙格_库塔_Runge_Kutta_法.bas
' 功 能:解一阶常微分方程组的初值问题。子过程 Runge_Kutta 由给定步长
h 和初始点上的值用四阶龙格-库塔法
' 求解给定的初值问题,调用它一次向前积分一步,一般用于求解某一小
区间中某几点的函数值; 子过程 Runge_KuttaDumb 是连续调用于过程
Runge_Kutta()计算出某一区间上的值,此时该区间长度可较大,但积分步长
都较小。一般来说,在精度要求不高时,可采用该方法
Option Explicit
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' 模块名:定步长四阶龙格_库塔_Runge_Kutta_法.bas
' 函数名:Runge_KuttaDumb(n,x1,x2,nstep,vstart(),xx(),y())
' 功 能:解一阶常微分方程组的初值问题。连续调用于过程 Runge_Kutta 计
算出某一区间上的值,此时该区间长度可较大,
' 但积分步长都较小。一般来说,在精度要求不高时,可采用该方法
' 参 数:n —— 整型变量,输入参数,方程个数
' x1 —— 实型变量,输入参数,自变量初值
' x2 —— 实型变量,输入参数,自变量终值
' nstep —— 整型变量,输入参数,区间[x1,x2]上要积分的步数
' xx() —— 一维实型数组,输出自变量值
' y() —— 二维实型数组,输出该常微分方程组初值问题的解
' vstart() —— 含 n 个元素的一维实型数组,输入参数,存放积分初值
' 返回值:
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Sub Runge_KuttaDumb(n As Integer, x1 As Double, x2 As Double,
nstep As Integer, _
vstart() As Double, xx() As Double, y() As
Double)
Dim i As Integer, k As Integer
Dim x As Double, h As Double
Dim v(10) As Double, dv(10) As Double
For i = 1 To n
v(i) = vstart(i)
y(i, 1) = v(i)
Next i
xx(1) = x1
x = x1
h = (x2 - x1) / CSng(nstep)
For k = 1 To nstep
Call Derivs(x, v(), dv())
Call Runge_Kutta(n, x, h, v(), dv(), v())
If x + h = x Then
评论0