В Excel VBA я создал код для моделирования некоторых цен, основанный на каком-либо параметре, но один из параметров дает совершенно разные результаты моделирования, когда он исходит из массива, а не из переменной, которую я не могу понять (значения «Медь» становится слишком отрицательной в нескольких прогонах при использовании массива).
Версия с использованием массива:
'Calculate Price Matrix
For j = 1 To Years
'For each Commodity
For i = 1 To N
'Generate Correlated Brownian Motions
For k = 1 To i
dW(i) = dW(i) + A(i, k) * 0.5
Next k
'Calculate Price for year
S(i) = Exp(-Lambda(i)) * S(i) + (1 - Exp(-Lambda(i))) * Mu(i) + Sigma(i) * Sqr((1 - Exp(-2 * Lambda(i))) / (2 * Lambda(i))) * dW(i)
'Populate Price in Model
Sheets("Prices").Cells(i + 1, j + 2).Value = S(i)
Next i
Next j
Версия с использованием double:
'Calculate Price Matrix
For j = 1 To Years
'For each Commodity
For i = 1 To N
'Generate Correlated Brownian Motions
dW = 0.5
'Calculate Price for year
S(i) = Exp(-Lambda(i)) * S(i) + (1 - Exp(-Lambda(i))) * Mu(i) + Sigma(i) * Sqr((1 - Exp(-2 * Lambda(i))) / (2 * Lambda(i))) * dW
'Populate Price in Model
Sheets("Prices").Cells(i + 1, j + 2).Value = S(i)
Next i
Next j
При A(1,1)=1
выполнение двух кодов должно дать одинаковый результат для S(1)...
, но это не так. Я даже пытался изменить dW(i) = dW(i) + A(i, k) * 0.5
просто на dW(i) = 0.5
. Но результаты все еще различаются. Что может вызвать эту проблему?
Надеюсь, у кого-то была такая же проблема раньше. Это какое-то ограничение в MS Excel?