2015-04-29 2 views
2

Насколько я понимаю, есть ошибка с размерами в строке dr = (r-v * v/2) * dT. Но я мало знаю о Матлабе. Помогите исправить это, пожалуйста. Код маленький и простой. Может быть, кто-то найдет время, чтобы посмотретьИсправить код matlab с ошибкой

function [optionPrice] = upAndOutCallOption(S,r,v,x,b,T,dT) 
    t = 0; 
    dr=[]; 
    pert=[]; 
    while (t < T) & (S < b) 
     t = t + dT; 
     dr = (r - v.*v./2).*dT; 
     pert = v.*sqrt(dT).*randn(); 
     S = S.*exp(dr + pert); 
    end 
    if S<b 
     % Within barrier, so price as for a European option. 
     optionPrice = exp(-r.*T).* max(0, S - x); 
    else 
     % Hit the barrier, so the option is withdrawn. 
     optionPrice = 0; 
    end 
    end 

вызов из другой функции такого рода: for k=1:amountOfOptions [optionPrices(k)] = upAndOutCallOption(stockPrice(k)*o,riskFreeRate(k)*o,... volatility(k)*o, strike(k)*o, barrier(k)*o, timeToExpiry(k)*o, sampleRate(k)*o); result(k) = mean(optionPrices(k)); end

Поэтому никаких трудностей.

+2

добро пожаловать в SO. мы не будем отлаживать код для вас. пожалуйста, укажите ** наименьшие ** возможные примеры, которые воспроизводят вашу ошибку. – Shai

+1

В Matlab легко выводить результат выражения, просто отбрасывая ';' в конце, поэтому добавление 'r',' v', 'dT' в отдельные строки прямо перед тем, как ошибочная строка, о которой вы говорили, может помочь вам , –

+2

@ pawel.boczarski лучше учиться [как отлаживать скрипт Matlab] (http://www.mathworks.com/help/matlab/matlab_prog/debugging-process-and-features.html). – Shai

ответ

0

Хорошо, что вы знаете, проблема в пределах dr = (r - v.*v./2).*dT;. Сама команда имеет множество возможных проблем, которые также связанные с dimensions:

  1. Здесь вы делаете поэлементное умножение (из-за .*) с матрицами, что требует (в случае вашей команды), что r имеет такое же количество строк и столбцов как v (поскольку из-за элементарного размера v.*v/2 имеет тот же размер, что и v).

  2. Кроме того, нет необходимости выполнять элементное разделение со скалярным числом, это означает, что нет необходимости иметь ./2 в Matlab.

  3. И, наконец, поскольку это умножение по элементам снова, матрица (r - v.*v./2) также должна иметь такое же количество строк и столбцов, что и матрица dT.

Для получения более подробной информации о матричных операциях Matlab отметьте here.

Смежные вопросы