|
▼ジュン さん:
こんばんは。
>例えば,Tn=Σ(i=1⇒n)Wi×Tn-i という数値計算をexcelで行いたいとき,
>初期条件として,
>T0=0
>Wi:i=1〜nのときの値(既知)
>が与えられたときのTnの値を求めたいのですが,
>
>1.T1を求めるとき,T1=W1×T0
>2.T2を求めるとき,T2=W1×T1+W2×T0
>3.Tnを求めるとき,Tn=W1×Tn-1+W2×Tn-2+・・・
>となっていきますよね。nの値が小さければ問題ないのですが,
>nが100以上とかになると,Wi×Tn-1をうまく表現することができません。
>どういう式をたてればよいでしょうか
VBAで良いんですよね?
W1〜Wnは、アクティブシートのセルA1〜Anに想定値を乱数で発生させた例です。
'================================================================
Sub test()
Dim n As Long
n = 100 '←この値を変更して確認してみて下さい
With Range("a1:a" & n)
.Formula = "=int(rand()*" & n & ")+1"
.Value = .Value
End With
MsgBox tn(n, 2)
End Sub
'=============================================================
Function tn(n As Long, t0 As Long) As Double
'Tn=Σ(i=1⇒n)Wi×Tn-iを計算する
'input : n 求めたい数列値、t0--初期値
'output: tn 結果
Dim idx As Long
Dim jdx As Long
ReDim ans(n) As Double
ans(0) = t0
For idx = 1 To n
ans(idx) = 0
For jdx = idx - 1 To 0 Step -1
ans(idx) = ans(idx) + Range("a" & (idx - jdx)).Value * ans(jdx)
Next
Next
tn = ans(UBound(ans()))
End Function
ただ、値がかなり大きくなるので有効桁数をオーバーしてしまいますね!!
まずは、nに小さい数字を指定して確認してみて下さい。
|
|