Excel VBA質問箱 IV

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

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


9612 / 13646 ツリー ←次へ | 前へ→

【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 回答[未読]

【26337】誰か助けて下さい
質問  CURL  - 05/7/1(金) 18:49 -

引用なし
パスワード
   シンプソンの公式による数値積分のプログラムを習った後、EXCELのマクロでプログラムを作ってシンプソンの公式で言うIを次の値を使って求めろって言われたんですが訳が分からないんです(泣)シンプソン→I=h(y0+4*y1+y2+y2+4*y3+y4+…+yn)/3
時間t min   流量 m^3/min
0      655
10      705
20      780
30      830
40      870
50      890
60      870
70      800
80      725
90      670
100     640
110     620
120     610     

【26355】Re:誰か助けて下さい
発言  りん E-MAIL  - 05/7/2(土) 13:22 -

引用なし
パスワード
   CURL さん、こんにちわ。
>シンプソンの公式による数値積分のプログラムを習った後、EXCELのマクロでプログラム

Googleで、シンプソンの公式+VBで検索したらここがヒットしました。

http://www.vbalab.net/vbaqa/c-board.cgi?cmd=ntr;tree=7301;id=excel

【26411】Re:誰か助けて下さい
お礼  CURL  - 05/7/4(月) 18:18 -

引用なし
パスワード
   ▼りん さん:
>CURL さん、こんにちわ。
>>シンプソンの公式による数値積分のプログラムを習った後、EXCELのマクロでプログラム
>
>Googleで、シンプソンの公式+VBで検索したらここがヒットしました。
>
>http://www.vbalab.net/vbaqa/c-board.cgi?cmd=ntr;tree=7301;id=excel

>これをヒントに何とかやってみます。りんさんありがとうございます。

【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

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

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