波塞冬的信徒 发表于 2024-8-23 23:53:56

复化辛普逊

以前写过,不知道在哪个文件里面,飞哪去了,就是找不着了。
把这当个小网盘,以后想用,直接翻出来。



Public Function SimpInte(ByVal Var_xd As Double, ByVal Var_xu As Double, ByVal Var_num As Integer) As Double

'计算Sn=h/6*;
'i从0至n-1,j从1至n-1;
'Var_xd积分下限,Var_xu积分上限,Var_num 表示分段数,为偶数;
'========================================================================================

Dim Var_h As Double, Var_res1 As Double, Var_res2 As Double, Var_res3 As Double
Dim Var_temI As Integer, Var_xi As Double, Var_xii As Double
'定义变量
'Var_h=h,Var_temI临时循环整数变量;
'========================================================================================

Var_h = (Var_xu - Var_xd) / Var_num
'定义步长h
'========================================================================================

Var_res1 = 0
Var_res1 = Var_res1 + Fun_R(Var_xd) + Fun_R(Var_xu)
'计算Sn=f(a)+f(b)
'========================================================================================

Var_res2 = 0
Var_xi = Var_xd: Var_xii = 0

For Var_temI = 0 To Var_num - 1 Step 1

   Var_xii = Var_xi + Var_h
   Var_res2 = Var_res2 + 4 * Fun_R((Var_xi + Var_xii) / 2)
   Var_xi = Var_xii
   
Next Var_temI
'计算4*Σf(x+i/2);
'i从0至n-1
'========================================================================================

Var_res3 = 0
Var_xi = Var_xd + Var_h

For Var_temI = 1 To Var_num - 1 Step 1

   Var_res3 = Var_res3 + 2 * Fun_R(Var_xi)
   Var_xi = Var_xi + Var_h
   
Next Var_temI
'计算2*Σf(xj);
'j从1至n-1
'========================================================================================

SimpInte = Var_h / 6 * (Var_res1 + Var_res2 + Var_res3)
'计算Sn=h/6*;
'========================================================================================

End Function

页: [1]
查看完整版本: 复化辛普逊