Как я квадратный корень функции в VBA - PullRequest
0 голосов
/ 05 ноября 2018

Я работаю над имитационной моделью MonteCarlo, и часть ее состоит в том, чтобы вычислить следующую формулу:

X = Sqr (1-p) Y + Sqr (p) Z,

Где:

  1. Y и Z - полученные случайным образом значения, основанные (специфические и систематические факторы, соответственно) на стандартном нормальном (инв.) Распределении, рассчитываемые как:

    Application.WorksheetFunction.NormInv (Rnd(), mean, sd)
    
  2. p представляет коэффициент корреляции.

Моя цель состоит в получении квадратного корня из вызванной формулы, однако, когда я пытаюсь выполнить следующее (вставляя первую Sqr), она не работает и выдает ошибку:

Matrix (n, sims) = (R * Sqr(Application.WorksheetFunction.NormInv(Rnd(), mean, sd))) + (Sqr(1 - R) * RandomS(s, x))

где:

R : коэффициент корреляции

RandomS (s, x) : сгенерированная матрица со значениями Z.

Я не хочу вдаваться в подробности о фоне и других переменных, поскольку единственная проблема, которую я получаю, - это квадратный корень уравнения.

Я получаю сообщение об ошибке:

Ошибка времени выполнения '5':

Недопустимый вызов процедуры или аргумент

Когда я нажимаю отладку, это приводит меня к формуле, поэтому в синтаксисе должно быть что-то не так.

Можете ли вы помочь с прямым квадратом формулы?

Спасибо!

Андрей

1 Ответ

0 голосов
/ 05 ноября 2018

Квадратный корень просто Sqr.

Отлично работает в Excel VBA, например:

MsgBox Sqr(144)

... возвращает 12.

Только не путайте его с синтаксисом функции рабочего листа с SQRT.


Если у вас все еще есть проблема с вашей формулой, tit должен быть с чем-то отличным от функции Square Root, и я бы посоветовал вам проверить значения вашей переменной и убедиться, что они правильно объявлены (желательно с Option Explicit вверху модуля).

Также убедитесь, что вы передаете Sqr a положительное число.


Документация: Sqr Функция


Я не математик, но по вашей формуле:

X = Sqr(1-p)Y + Sqr(p)Z,

... вы указали, как вычисляются Y и Z, поэтому рассчитайте их отдельно для простоты:

Dim X as Double, Y as Double, Z as Double
Y = Application.WorksheetFunction.NormInv (Rnd(), mean, sd)
Z = Application.WorksheetFunction.NormInv (Rnd(), mean, sd)

Предполагая, что запятая не должна быть в формуле, и не имея представления, что такое p, ваш окончательный код для вычисления X:

X = Sqr(1-p) * Y + Sqr(p) * Z

...