Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


55076 / 76738 ←次へ | 前へ→

【26442】Re:誰か助けて下さい
回答  Mook  - 05/7/5(火) 19:52 -

引用なし
パスワード
   こちらのページも参考になるかと思います。
http://www2.cc.niigata-u.ac.jp/~takeuchi/tbasic/Intro2Basic/Simpson.html

自分でやる気になっているようなので、邪魔かもしれませんがサンプルの提示です。

Option Explicit

Sub simpTest()
  Dim fx As Variant
  fx = Array(655,705,780,830,870,890,870,800,725,670,640,620,610)
  MsgBox "∫f(x)dx[0<x<120] ≒" & Simpson(fx, 0#, 120#)
End Sub

Function Simpson(fx As Variant, a#, b#)
'∫f(x)dx≒d(f(0)+f(2m)+2(f(2)+...+f(2m-2))+4(f(1)+...+f(2m-1)))/3
  Dim ∫Fx#
  Dim M%   'M = 2m
  Dim d%
  Dim i%

  M = UBound(fx) - LBound(fx)
  If M Mod 2 <> 0 Or M <= 0 Then
    Simpson = "!INPUT FUNCTION INVARID"
    Exit Function
  End If
  
  If a >= b Then
    Simpson = "!DEFINITION RANGE INVARID"
    Exit Function
  End If

  d = ((b - a) / M)
  ∫Fx = fx(LBound(fx)) + fx(UBound(fx))
  For i = LBound(fx) + 1 To UBound(fx) - 1
    If i Mod 2 = 0 Then
      ∫Fx = ∫Fx + 2 * fx(i)
    Else
      ∫Fx = ∫Fx + 4 * fx(i)
    End If
  Next
  Simpson = ∫Fx * d / 3#
End Function

今回は関数の形が今一つ汎用性がありませんが、一般の関数でも動くようにいろいろと工夫すると、プログラムがよく理解できると思います。
お試しください。
0 hits

【26337】誰か助けて下さい CURL 05/7/1(金) 18:49 質問
【26355】Re:誰か助けて下さい りん 05/7/2(土) 13:22 発言
【26411】Re:誰か助けて下さい CURL 05/7/4(月) 18:18 お礼
【26442】Re:誰か助けて下さい Mook 05/7/5(火) 19:52 回答

55076 / 76738 ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free