First of many Rookie questions sorry: Finally broke free of Mathematica and
gone for real OO programing, and up 2 grand a year to boot !
Problem concerns the use of nls function mostly but I have used an example
from finance that is similar to my aim:
Using an fOptions PlainVanillaOptions function [slightly edited]:
GBSOption function(TypeFlag = c("c", "p"), S, X, Time, r, b,
sigma)
{
TypeFlag = TypeFlag[1]
d1 = ( log(S/X) + (b+sigma*sigma/2)*Time ) / (sigma*sqrt(Time))
d2 = d1 - sigma*sqrt(Time)
if (TypeFlag == "c")
result = S*exp((b-r)*Time)*CND(d1) - X*exp(-r*Time)*CND(d2)
if (TypeFlag == "p")
result = X*exp(-r*Time)*CND(-d2) - S*exp((b-r)*Time)*CND(-d1)
# Parameters:
param = list()
param$TypeFlag = TypeFlag
param$S = S
param$X = X
param$Time = Time
param$r = r
param$b = b
param$sigma = sigma
# Return Value:
result
}
Lets assume you wanted to solve for a volatility that gives nls across a
range of data you had [optiontype, underlying, strike, time, premium]
(forget the ³why would you²!)
I find that using the nls function in manner:
nls(premium ~ GBSOption(optiontype, underlying, strike, time, 0, 0,
x),data=testdata)
Is problematic
I would like the nls function to scroll through a list of different types of
optiontypes, c(³c²,²c²,²p²,...) for example.
I have little understanding how nls treats IF commands in general and how it
treats a list of non-numerical flags. Any help on this would great.
Apologies again for what I am sure is a simple question.
Glenn
[[alternative HTML version deleted]]