2015-08-01 2 views
1

Я пытаюсь построить результаты для цикла следующим образом:Plotting результаты цикла For Loop в R

marketPrice = 100 
strikePrice = 125 

tau = 1 

dividendYield = .03 
interestRate = .02 

sigma = .25 

lowerMarketBound = 100 
upperMarketBound = 150 

stepIncrement = 5 

callPrice = NULL 
putPrice = NULL 

plot(marketPrice, callPrice) 

for (marketPrice in seq(from=lowerMarketBound, to=upperMarketBound, 
by=stepIncrement)){ 

d1 = ((log(marketPrice/strikePrice)) + ((interestRate + 
    (sigma**2/2)) * f_tau))/(sigma * sqrt(tau)) 
d2 = d1 - (sigma * sqrt(tau)) 

print(marketPrice) 

callPrice = marketPrice * pnorm(d1) - pnorm(d2) * strikePrice * 
    exp(1)^(-interestRate * tau) 
putPrice = strikePrice * exp(1)^(-interestRate * tau) * pnorm(-d2) -  
    marketPrice * pnorm(-d1) 

print (callPrice) 
print (putPrice) 
plot(marketPrice, callPrice) 
} 

Последняя строка кода вызывает plot(). Я ожидал увидеть график переменной marketPrice против переменной callPrice. Вместо этого я вижу график только LASTmarketPrice и callPrice петли (в данном случае 150 и 31.46 соответственно).

Есть ли способ построить все результаты для цикла?

+0

возможно дубликат [Заговор приращением в R, а не сброс] (http://stackoverflow.com/questions/15627681/plotting-incrementally-in-r-and-not-resetting) – Jota

+0

Посмотреть '? Точек 'для функции. Почему вы «печатаете» значения на каждой итерации? – Hugh

ответ

1

Вы можете сохранить значения в матрице во время цикла и построить целую серию в конце.

tau = 1 

dividendYield = .03 
interestRate = .02 

sigma = .25 

lowerMarketBound = 100 
upperMarketBound = 150 
stepIncrement = 5 
marketPrice = seq(from=lowerMarketBound, to=upperMarketBound, 
        by=stepIncrement) 
strikePrice = 125 



callPrice = rep(0,length(marketPrice)) 
putPrice = NULL 

for (i in 1:length(marketPrice)){ 

    d1 = ((log(marketPrice[i]/strikePrice) + (interestRate + (sigma**2/2)) * tau)/(sigma * sqrt(tau))) 
    d2 = d1 - (sigma * sqrt(tau)) 

    print(marketPrice[i]) 

    callPrice[i] = marketPrice[i] * pnorm(d1) - pnorm(d2) * strikePrice * exp(1)^(-interestRate * tau) 
    putPrice = strikePrice * exp(1)^(-interestRate * tau) * pnorm(-d2) - marketPrice[i] * pnorm(-d1) 

    print (callPrice[i]) 
    print (putPrice) 
} 

plot(marketPrice, callPrice) 
+0

Это решение работает отлично. Спасибо. – equanimity

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