24#include <ql/pricingengines/blackformula.hpp>
25#include <ql/instruments/payoffs.hpp>
26#include <ql/pricingengines/vanilla/hestonexpansionengine.hpp>
28#if defined(QL_PATCH_MSVC)
29#pragma warning(disable: 4180)
40 const ext::shared_ptr<HestonModel>& model,
52 "not an European option");
55 ext::shared_ptr<PlainVanillaPayoff> payoff =
56 ext::dynamic_pointer_cast<PlainVanillaPayoff>(
arguments_.payoff);
57 QL_REQUIRE(payoff,
"non plain vanilla payoff given");
59 const ext::shared_ptr<HestonProcess>& process =
model_->process();
61 const Real riskFreeDiscount = process->riskFreeRate()->discount(
63 const Real dividendDiscount = process->dividendYield()->discount(
66 const Real spotPrice = process->s0()->value();
67 QL_REQUIRE(spotPrice > 0.0,
"negative or null underlying given");
69 const Real strikePrice = payoff->strike();
74 const Real forward = spotPrice*dividendDiscount/riskFreeDiscount;
99 QL_FAIL(
"unknown expansion formula");
102 riskFreeDiscount, 0);
108 ekt = exp(kappa*term);
112 coeffs[0] =
z0(term, kappa, theta, sigma, v0, rho);
113 coeffs[1] =
z1(term, kappa, theta, sigma, v0, rho);
114 coeffs[2] =
z2(term, kappa, theta, sigma, v0, rho);
117 static Real fastpow(
Real x,
int y) {
122 const Real forward)
const {
123 Real x = log(strike/forward);
125 return std::max(1e-8,vol);
130 return (4*pow(delta,2)*kappa*(-theta - 4*
ekt*(theta + kappa*t*(theta - y)) +
131 e2kt*((5 - 2*kappa*t)*theta - 2*y) + 2*y)*
132 ((1 +
ekt*(-1 + kappa*t))*theta + (-1 +
ekt)*y) +
133 128*
ekt*pow(kappa,3)*
134 pow((1 +
ekt*(-1 + kappa*t))*theta + (-1 +
ekt)*y,2) +
135 32*delta*
ekt*pow(kappa,2)*rho*
136 ((1 +
ekt*(-1 + kappa*t))*theta + (-1 +
ekt)*y)*
137 ((2 + kappa*t +
ekt*(-2 + kappa*t))*theta +
138 (-1 +
ekt - kappa*t)*y) +
139 pow(delta,2)*
ekt*pow(rho,2)*
140 (-theta + kappa*t*theta + (theta - y)/
ekt + y)*
141 pow((2 + kappa*t +
ekt*(-2 + kappa*t))*theta +
142 (-1 +
ekt - kappa*t)*y,2) +
143 (48*pow(delta,2)*
e2kt*pow(kappa,2)*pow(rho,2)*
144 pow((2 + kappa*t +
ekt*(-2 + kappa*t))*theta +
145 (-1 +
ekt - kappa*t)*y,2))/
146 ((1 +
ekt*(-1 + kappa*t))*theta + (-1 +
ekt)*y) -
147 pow(delta,2)*pow(rho,2)*((1 +
ekt*(-1 + kappa*t))*theta +
148 (-1 +
ekt)*y)*pow((2 + kappa*t +
ekt*(-2 + kappa*t))*
149 theta + (-1 +
ekt - kappa*t)*y,2) +
150 2*pow(delta,2)*kappa*((1 +
ekt*(-1 + kappa*t))*theta +
151 (-1 +
ekt)*y)*(theta - 2*y +
152 e2kt*(-5*theta + 2*kappa*t*theta + 2*y +
153 8*pow(rho,2)*((-3 + kappa*t)*theta + y)) +
154 4*
ekt*(theta + kappa*t*theta - kappa*t*y +
155 pow(rho,2)*((6 + kappa*t*(4 + kappa*t))*theta - (2 + kappa*t*(2 + kappa*t))*y))) -
156 (8*pow(delta,2)*pow(kappa,2)*((1 +
ekt*(-1 + kappa*t))*theta +
157 (-1 +
ekt)*y)*(theta - 2*y +
158 e2kt*(-5*theta + 2*kappa*t*theta + 2*y +
159 8*pow(rho,2)*((-3 + kappa*t)*theta + y)) +
160 4*
ekt*(theta + kappa*t*theta - kappa*t*y +
161 pow(rho,2)*((6 + kappa*t*(4 + kappa*t))*theta - (2 + kappa*t*(2 + kappa*t))*y))))
162 /(-theta + kappa*t*theta + (theta - y)/
ekt + y))/
163 (128.*
e3kt*pow(kappa,5)*pow(t,2)*
164 pow((-theta + kappa*t*theta + (theta - y)/
ekt + y)/(kappa*t),1.5));
169 return (delta*rho*(-(delta*fastpow(-1 +
ekt,2)*rho*(4*theta - y)*y) +
170 2*
ekt*fastpow(kappa,3)*fastpow(t,2)*theta*
171 ((2 + 2*
ekt + delta*rho*t)*theta - (2 + delta*rho*t)*y) -
172 2*(-1 +
ekt)*kappa*(2*theta - y)*
173 ((-1 +
ekt)*(-2 + delta*rho*t)*theta +
174 (-2 + 2*
ekt + delta*rho*t)*y) +
175 fastpow(kappa,2)*t*((-1 +
ekt)*
176 (-4 + delta*rho*t +
ekt*(-12 + delta*rho*t))*fastpow(theta,2) +
177 2*(-4 + 4*
e2kt + delta*rho*t + 3*delta*
ekt*rho*t)*theta*
178 y - (-4 + delta*rho*t + 2*
ekt*(2 + delta*rho*t))*fastpow(y,2))))/
179 (8.*fastpow(kappa,2)*t*sqrt((-theta + kappa*t*theta + (theta - y)/
ekt + y)/
180 (kappa*t))*fastpow((1 +
ekt*(-1 + kappa*t))*theta + (-1 +
ekt)*y,
186 return (fastpow(delta,2)*sqrt((-theta + kappa*t*theta + (theta - y)/
ekt + y)/(kappa*t))*
187 (-12*fastpow(rho,2)*fastpow((2 + kappa*t +
ekt*(-2 + kappa*t))*theta +
188 (-1 +
ekt - kappa*t)*y,2) +
189 (-theta + kappa*t*theta + (theta - y)/
ekt + y)*
191 (-5*theta + 2*kappa*t*theta + 2*y + 8*fastpow(rho,2)*((-3 + kappa*t)*theta + y)) +
192 4*
ekt*(theta + kappa*t*theta - kappa*t*y +
193 fastpow(rho,2)*((6 + kappa*t*(4 + kappa*t))*theta - (2 + kappa*t*(2 + kappa*t))*y))))
194 )/(16.*
e2kt*fastpow(-theta + kappa*t*theta + (theta - y)/
ekt + y,
201 Real v0Sqrt = sqrt(v0);
202 Real rhoBarSquare = 1 - rho * rho;
203 Real sigma00 = v0Sqrt;
204 Real sigma01 = v0Sqrt * (rho * sigma / (4 * v0));
205 Real sigma02 = v0Sqrt * ((1 - 5 * rho * rho / 2) / 24 * sigma * sigma/ (v0 * v0));
206 Real a00 = -sigma * sigma / 12 * (1 - rho * rho / 4) + v0 * rho * sigma / 4 + kappa / 2 * (theta - v0);
207 Real a01 = rho * sigma / (24 * v0) * (sigma * sigma * rhoBarSquare - 2 * kappa * (theta + v0) + v0 * rho * sigma);
208 Real a02 = (176 * sigma * sigma - 480 * kappa * theta - 712 * rho * rho * sigma * sigma + 521 * rho * rho * rho * rho * sigma * sigma + 40 * sigma * rho * rho * rho * v0 + 1040 * kappa * theta * rho * rho - 80 * v0 * kappa * rho * rho) * sigma * sigma / (v0 * v0 * 7680);
209 coeffs[0] = sigma00*sigma00+a00*term;
210 coeffs[1] = sigma00*sigma01*2+a01*term;
211 coeffs[2] = sigma00*sigma02*2+sigma01*sigma01+a02*term;
212 coeffs[3] = sigma01*sigma02*2;
213 coeffs[4] = sigma02*sigma02;
217 const Real forward)
const {
218 Real x = log(strike/forward);
220 var = std::max(1e-8,var);
226 return (96*pow(delta,2)*
ekt*pow(kappa,3)*
227 (-theta - 4*
ekt*(theta + kappa*t*(theta - y)) +
228 e2kt*((5 - 2*kappa*t)*theta - 2*y) + 2*y)*
229 ((1 +
ekt*(-1 + kappa*t))*theta + (-1 +
ekt)*y) +
230 3072*
e2kt*pow(kappa,5)*
231 pow((1 +
ekt*(-1 + kappa*t))*theta + (-1 +
ekt)*y,2) +
232 96*pow(delta,3)*
ekt*pow(kappa,2)*rho*
233 ((1 +
ekt*(-1 + kappa*t))*theta + (-1 +
ekt)*y)*
234 (-2*theta - kappa*t*theta - 2*
ekt*(2 + kappa*t)*
235 (2*theta + kappa*t*(theta - y)) +
e2kt*((10 - 3*kappa*t)*theta - 3*y) +
236 3*y + 2*kappa*t*y) + 768*delta*
e2kt*pow(kappa,4)*rho*
237 ((1 +
ekt*(-1 + kappa*t))*theta + (-1 +
ekt)*y)*
238 ((2 + kappa*t +
ekt*(-2 + kappa*t))*theta +
239 (-1 +
ekt - kappa*t)*y) +
240 6*pow(delta,3)*kappa*rho*(-theta - 4*
ekt*(theta + kappa*t*(theta - y)) +
241 e2kt*((5 - 2*kappa*t)*theta - 2*y) + 2*y)*
242 ((1 +
ekt*(-1 + kappa*t))*theta + (-1 +
ekt)*y)*
243 ((2 + kappa*t +
ekt*(-2 + kappa*t))*theta +
244 (-1 +
ekt - kappa*t)*y) +
245 24*pow(delta,2)*
e2kt*pow(kappa,2)*pow(rho,2)*
246 (-theta + kappa*t*theta + (theta - y)/
ekt + y)*
247 pow((2 + kappa*t +
ekt*(-2 + kappa*t))*theta +
248 (-1 +
ekt - kappa*t)*y,2) +
249 (1152*pow(delta,2)*
e3kt*pow(kappa,4)*pow(rho,2)*
250 pow((2 + kappa*t +
ekt*(-2 + kappa*t))*theta +
251 (-1 +
ekt - kappa*t)*y,2))/
252 ((1 +
ekt*(-1 + kappa*t))*theta + (-1 +
ekt)*y) -
253 24*pow(delta,2)*
ekt*pow(kappa,2)*pow(rho,2)*
254 ((1 +
ekt*(-1 + kappa*t))*theta + (-1 +
ekt)*y)*
255 pow((2 + kappa*t +
ekt*(-2 + kappa*t))*theta +
256 (-1 +
ekt - kappa*t)*y,2) +
257 80*pow(delta,3)*
ekt*kappa*pow(rho,3)*
258 pow((2 + kappa*t +
ekt*(-2 + kappa*t))*theta +
259 (-1 +
ekt - kappa*t)*y,3) +
260 pow(delta,3)*
ekt*pow(rho,3)*
261 (-theta + kappa*t*theta + (theta - y)/
ekt + y)*
262 pow((2 + kappa*t +
ekt*(-2 + kappa*t))*theta +
263 (-1 +
ekt - kappa*t)*y,3) -
264 (1440*pow(delta,3)*
e3kt*pow(kappa,3)*pow(rho,3)*
265 pow((2 + kappa*t +
ekt*(-2 + kappa*t))*theta +
266 (-1 +
ekt - kappa*t)*y,3))/
267 pow((1 +
ekt*(-1 + kappa*t))*theta + (-1 +
ekt)*y,2) -
268 (528*pow(delta,3)*
e2kt*pow(kappa,2)*pow(rho,3)*
269 pow((2 + kappa*t +
ekt*(-2 + kappa*t))*theta +
270 (-1 +
ekt - kappa*t)*y,3))/
271 ((1 +
ekt*(-1 + kappa*t))*theta + (-1 +
ekt)*y) -
272 3*pow(delta,3)*pow(rho,3)*((1 +
ekt*(-1 + kappa*t))*theta +
273 (-1 +
ekt)*y)*pow((2 + kappa*t +
ekt*(-2 + kappa*t))*
274 theta + (-1 +
ekt - kappa*t)*y,3) +
275 384*pow(delta,3)*
e2kt*pow(kappa,3)*rho*
276 ((2 + kappa*t + 2*
ekt*pow(2 + kappa*t,2) +
277 e2kt*(-10 + 3*kappa*t))*theta +
278 (-3 + 3*
e2kt - 2*kappa*t - 2*
ekt*kappa*t*(2 + kappa*t))*y) -
279 (576*pow(delta,3)*
e2kt*pow(kappa,3)*rho*
280 ((2 + kappa*t +
ekt*(-2 + kappa*t))*theta +
281 (-1 +
ekt - kappa*t)*y)*
282 ((1 +
e2kt*(-5 + 2*kappa*t + 4*pow(rho,2)*(-3 + kappa*t)) +
283 2*
ekt*(2 + 2*kappa*t +
284 pow(rho,2)*(6 + 4*kappa*t + pow(kappa,2)*pow(t,2))))*theta +
285 2*(-1 +
e2kt*(1 + 2*pow(rho,2)) -
287 pow(rho,2)*(2 + 2*kappa*t + pow(kappa,2)*pow(t,2))))*y))/
288 ((1 +
ekt*(-1 + kappa*t))*theta + (-1 +
ekt)*y) +
289 pow(delta,3)*rho*((1 +
ekt*(-1 + kappa*t))*theta +
290 (-1 +
ekt)*y)*((2 + kappa*t +
ekt*(-2 + kappa*t))*theta +
291 (-1 +
ekt - kappa*t)*y)*
292 (theta*(12*
ekt*pow(kappa,3)*pow(rho,2)*pow(t,2) +
293 8*pow(-1 +
ekt,2)*pow(rho,2)*theta -
295 (3 + 8*pow(rho,2)*t*theta +
ekt*(15 + 8*pow(rho,2)*(9 + t*theta)))
296 + 2*pow(kappa,2)*t*(pow(rho,2)*t*theta +
297 2*
ekt*(3 + pow(rho,2)*(12 + t*theta)) +
298 e2kt*(3 + pow(rho,2)*(12 + t*theta)))) -
299 2*(6*
ekt*pow(kappa,3)*pow(rho,2)*pow(t,2) +
300 4*pow(-1 +
ekt,2)*pow(rho,2)*theta +
301 2*pow(kappa,2)*t*(pow(rho,2)*t*theta +
302 ekt*(3 + pow(rho,2)*(6 + t*theta))) -
304 (3 + 6*pow(rho,2)*t*theta +
ekt*(3 + 2*pow(rho,2)*(6 + t*theta))))*
305 y + 2*pow(rho,2)*pow(1 -
ekt + kappa*t,2)*pow(y,2)) -
306 (40*pow(delta,3)*kappa*rho*((1 +
ekt*(-1 + kappa*t))*theta +
307 (-1 +
ekt)*y)*((2 + kappa*t +
ekt*(-2 + kappa*t))*theta +
308 (-1 +
ekt - kappa*t)*y)*
309 (theta*(12*
ekt*pow(kappa,3)*pow(rho,2)*pow(t,2) +
310 8*pow(-1 +
ekt,2)*pow(rho,2)*theta -
312 (3 + 8*pow(rho,2)*t*theta +
313 ekt*(15 + 8*pow(rho,2)*(9 + t*theta))) +
314 2*pow(kappa,2)*t*(pow(rho,2)*t*theta +
315 2*
ekt*(3 + pow(rho,2)*(12 + t*theta)) +
316 e2kt*(3 + pow(rho,2)*(12 + t*theta)))) -
317 2*(6*
ekt*pow(kappa,3)*pow(rho,2)*pow(t,2) +
318 4*pow(-1 +
ekt,2)*pow(rho,2)*theta +
319 2*pow(kappa,2)*t*(pow(rho,2)*t*theta +
320 ekt*(3 + pow(rho,2)*(6 + t*theta))) -
322 (3 + 6*pow(rho,2)*t*theta +
ekt*(3 + 2*pow(rho,2)*(6 + t*theta)))
323 )*y + 2*pow(rho,2)*pow(1 -
ekt + kappa*t,2)*pow(y,2)))/
324 (-theta + kappa*t*theta + (theta - y)/
ekt + y) -
325 12*pow(delta,3)*kappa*rho*((1 +
ekt*(-1 + kappa*t))*theta +
326 (-1 +
ekt)*y)*(2*theta + kappa*t*theta - y - kappa*t*y +
327 ekt*((-2 + kappa*t)*theta + y))*
329 (-5*theta + 2*kappa*t*theta + 2*y + 4*pow(rho,2)*((-3 + kappa*t)*theta + y)) +
330 2*
ekt*(2*(theta + kappa*t*(theta - y)) +
331 pow(rho,2)*((6 + kappa*t*(4 + kappa*t))*theta - (2 + kappa*t*(2 + kappa*t))*y))) +
332 (288*pow(delta,3)*pow(kappa,2)*rho*
333 ((1 +
ekt*(-1 + kappa*t))*theta + (-1 +
ekt)*y)*
334 (2*theta + kappa*t*theta - y - kappa*t*y +
ekt*((-2 + kappa*t)*theta + y))*
336 (-5*theta + 2*kappa*t*theta + 2*y + 4*pow(rho,2)*((-3 + kappa*t)*theta + y)) +
337 2*
ekt*(2*(theta + kappa*t*(theta - y)) +
338 pow(rho,2)*((6 + kappa*t*(4 + kappa*t))*theta - (2 + kappa*t*(2 + kappa*t))*y))))
339 /(-theta + kappa*t*theta + (theta - y)/
ekt + y) +
340 48*pow(delta,2)*
ekt*pow(kappa,3)*
341 ((1 +
ekt*(-1 + kappa*t))*theta + (-1 +
ekt)*y)*
343 (-5*theta + 2*kappa*t*theta + 2*y + 8*pow(rho,2)*((-3 + kappa*t)*theta + y)) +
344 4*
ekt*(theta + kappa*t*theta - kappa*t*y +
345 pow(rho,2)*((6 + kappa*t*(4 + kappa*t))*theta - (2 + kappa*t*(2 + kappa*t))*y))) -
346 (192*pow(delta,2)*
ekt*pow(kappa,4)*
347 ((1 +
ekt*(-1 + kappa*t))*theta + (-1 +
ekt)*y)*
349 (-5*theta + 2*kappa*t*theta + 2*y + 8*pow(rho,2)*((-3 + kappa*t)*theta + y)) +
350 4*
ekt*(theta + kappa*t*theta - kappa*t*y +
351 pow(rho,2)*((6 + kappa*t*(4 + kappa*t))*theta - (2 + kappa*t*(2 + kappa*t))*y))))
352 /(-theta + kappa*t*theta + (theta - y)/
ekt + y) +
353 3*pow(delta,3)*kappa*rho*((1 +
ekt*(-1 + kappa*t))*theta +
354 (-1 +
ekt)*y)*((2 + kappa*t +
ekt*(-2 + kappa*t))*theta +
355 (-1 +
ekt - kappa*t)*y)*
357 (-5*theta + 2*kappa*t*theta + 2*y + 8*pow(rho,2)*((-3 + kappa*t)*theta + y)) +
358 4*
ekt*(theta + kappa*t*theta - kappa*t*y +
359 pow(rho,2)*((6 + kappa*t*(4 + kappa*t))*theta - (2 + kappa*t*(2 + kappa*t))*y))) -
360 (12*pow(delta,3)*pow(kappa,2)*rho*
361 ((1 +
ekt*(-1 + kappa*t))*theta + (-1 +
ekt)*y)*
362 ((2 + kappa*t +
ekt*(-2 + kappa*t))*theta +
363 (-1 +
ekt - kappa*t)*y)*
365 (-5*theta + 2*kappa*t*theta + 2*y + 8*pow(rho,2)*((-3 + kappa*t)*theta + y)) +
366 4*
ekt*(theta + kappa*t*theta - kappa*t*y +
367 pow(rho,2)*((6 + kappa*t*(4 + kappa*t))*theta - (2 + kappa*t*(2 + kappa*t))*y))))
368 /(-theta + kappa*t*theta + (theta - y)/
ekt + y) +
369 4*pow(delta,3)*kappa*rho*((1 +
ekt*(-1 + kappa*t))*theta +
370 (-1 +
ekt)*y)*(3*(theta - 2*y)*((2 + kappa*t)*theta - (1 + kappa*t)*y) +
371 3*
ekt*(6*pow(theta,2) + theta*y - 2*pow(y,2) +
372 kappa*(13*t*pow(theta,2) + theta*(8 - 18*t*y) + 4*y*(-3 + t*y)) +
373 4*pow(kappa,2)*t*(theta + t*pow(theta,2) - 2*t*theta*y + y*(-2 + t*y))) +
374 3*
e3kt*(10*pow(theta,2) +
375 2*pow(kappa,2)*t*theta*(6 + 8*pow(rho,2) + t*theta) - 9*theta*y + 2*pow(y,2) +
376 kappa*(-9*t*pow(theta,2) + 4*(3 + 4*pow(rho,2))*y +
377 theta*(-40 - 64*pow(rho,2) + 4*t*y))) +
378 e2kt*(-54*pow(theta,2) +
379 8*pow(kappa,4)*pow(rho,2)*pow(t,3)*(theta - y) + 39*theta*y - 6*pow(y,2) +
380 24*pow(kappa,3)*pow(t,2)*(theta + 2*pow(rho,2)*theta - (1 + pow(rho,2))*y) +
381 6*pow(kappa,2)*t*(3*t*pow(theta,2) - 8*(1 + pow(rho,2))*y +
382 theta*(16 + 24*pow(rho,2) - 3*t*y)) -
383 3*kappa*(5*t*pow(theta,2) + 2*y*(8*pow(rho,2) + 3*t*y) -
384 theta*(32 + 64*pow(rho,2) + 17*t*y)))) -
385 (48*pow(delta,3)*pow(kappa,2)*rho*
386 ((1 +
ekt*(-1 + kappa*t))*theta + (-1 +
ekt)*y)*
387 (3*(theta - 2*y)*((2 + kappa*t)*theta - (1 + kappa*t)*y) +
388 3*
ekt*(6*pow(theta,2) + theta*y - 2*pow(y,2) +
389 kappa*(13*t*pow(theta,2) + theta*(8 - 18*t*y) + 4*y*(-3 + t*y)) +
390 4*pow(kappa,2)*t*(theta + t*pow(theta,2) - 2*t*theta*y + y*(-2 + t*y))) +
391 3*
e3kt*(10*pow(theta,2) +
392 2*pow(kappa,2)*t*theta*(6 + 8*pow(rho,2) + t*theta) - 9*theta*y +
393 2*pow(y,2) + kappa*(-9*t*pow(theta,2) + 4*(3 + 4*pow(rho,2))*y +
394 theta*(-40 - 64*pow(rho,2) + 4*t*y))) +
395 e2kt*(-54*pow(theta,2) +
396 8*pow(kappa,4)*pow(rho,2)*pow(t,3)*(theta - y) + 39*theta*y - 6*pow(y,2) +
397 24*pow(kappa,3)*pow(t,2)*
398 (theta + 2*pow(rho,2)*theta - (1 + pow(rho,2))*y) +
399 6*pow(kappa,2)*t*(3*t*pow(theta,2) - 8*(1 + pow(rho,2))*y +
400 theta*(16 + 24*pow(rho,2) - 3*t*y)) -
401 3*kappa*(5*t*pow(theta,2) + 2*y*(8*pow(rho,2) + 3*t*y) -
402 theta*(32 + 64*pow(rho,2) + 17*t*y)))))/
403 (-theta + kappa*t*theta + (theta - y)/
ekt + y) +
404 (240*pow(delta,3)*
e2kt*pow(kappa,2)*rho*
405 ((2 + kappa*t +
ekt*(-2 + kappa*t))*theta +
406 (-1 +
ekt - kappa*t)*y)*
407 (12*
ekt*pow(kappa,3)*pow(rho,2)*pow(t,2)*(theta - y) +
408 2*pow(-1 +
ekt,2)*pow(rho,2)*pow(-2*theta + y,2) -
410 (8*(1 +
ekt)*pow(rho,2)*t*pow(theta,2) +
411 2*y*(-3 - 3*
ekt*(1 + 4*pow(rho,2)) + 2*pow(rho,2)*t*y) +
412 theta*(3 - 12*pow(rho,2)*t*y +
ekt*(15 + pow(rho,2)*(72 - 4*t*y)))
413 ) + 2*pow(kappa,2)*t*(
e2kt*theta*
414 (3 + pow(rho,2)*(12 + t*theta)) + pow(rho,2)*t*pow(theta - y,2) +
415 2*
ekt*(pow(rho,2)*t*pow(theta,2) - 3*(y + 2*pow(rho,2)*y) +
416 theta*(3 + pow(rho,2)*(12 - t*y))))))/
417 ((1 +
ekt*(-1 + kappa*t))*theta + (-1 +
ekt)*y))/
418 (3072.*
e4kt*pow(kappa,7)*pow(t,2)*
419 pow((-theta + kappa*t*theta + (theta - y)/
ekt + y)/(kappa*t),1.5));
424 return (delta*(768*
e2kt*pow(kappa,4)*rho*
425 ((2 + kappa*t +
ekt*(-2 + kappa*t))*theta +
426 (-1 +
ekt - kappa*t)*y) -
427 (576*delta*
e2kt*pow(kappa,3)*pow(rho,2)*
428 pow((2 + kappa*t +
ekt*(-2 + kappa*t))*theta +
429 (-1 +
ekt - kappa*t)*y,2))/
430 ((1 +
ekt*(-1 + kappa*t))*theta + (-1 +
ekt)*y) -
431 10*pow(delta,2)*pow(rho,3)*pow((2 + kappa*t +
ekt*(-2 + kappa*t))*
432 theta + (-1 +
ekt - kappa*t)*y,3) +
433 (6*pow(delta,2)*kappa*pow(rho,3)*
434 pow((2 + kappa*t +
ekt*(-2 + kappa*t))*theta +
435 (-1 +
ekt - kappa*t)*y,3))/
436 (-theta + kappa*t*theta + (theta - y)/
ekt + y) -
437 (3360*pow(delta,2)*
e3kt*pow(kappa,3)*pow(rho,3)*
438 pow((2 + kappa*t +
ekt*(-2 + kappa*t))*theta +
439 (-1 +
ekt - kappa*t)*y,3))/
440 pow((1 +
ekt*(-1 + kappa*t))*theta + (-1 +
ekt)*y,3) -
441 (288*pow(delta,2)*
e2kt*pow(kappa,2)*pow(rho,3)*
442 pow((2 + kappa*t +
ekt*(-2 + kappa*t))*theta +
443 (-1 +
ekt - kappa*t)*y,3))/
444 pow((1 +
ekt*(-1 + kappa*t))*theta + (-1 +
ekt)*y,2) +
445 (234*pow(delta,2)*
ekt*kappa*pow(rho,3)*
446 pow((2 + kappa*t +
ekt*(-2 + kappa*t))*theta +
447 (-1 +
ekt - kappa*t)*y,3))/
448 ((1 +
ekt*(-1 + kappa*t))*theta + (-1 +
ekt)*y) -
449 96*delta*
ekt*pow(kappa,3)*
450 ((1 + 4*
ekt*(1 + kappa*t) +
e2kt*(-5 + 2*kappa*t))*theta +
451 2*(-1 +
e2kt - 2*
ekt*kappa*t)*y) -
452 12*pow(delta,2)*kappa*rho*((2 + kappa*t +
ekt*(-2 + kappa*t))*theta +
453 (-1 +
ekt - kappa*t)*y)*
454 ((1 + 4*
ekt*(1 + kappa*t) +
e2kt*(-5 + 2*kappa*t))*theta +
455 2*(-1 +
e2kt - 2*
ekt*kappa*t)*y) -
456 192*pow(delta,2)*
ekt*pow(kappa,2)*rho*
457 ((2 + kappa*t + 2*
ekt*pow(2 + kappa*t,2) +
458 e2kt*(-10 + 3*kappa*t))*theta +
459 (-3 + 3*
e2kt - 2*kappa*t - 2*
ekt*kappa*t*(2 + kappa*t))*y)
460 - (12*pow(delta,2)*
ekt*pow(kappa,2)*rho*
461 ((2 + kappa*t +
ekt*(-2 + kappa*t))*theta +
462 (-1 +
ekt - kappa*t)*y)*
463 ((1 +
e2kt*(-5 + 2*kappa*t + 8*pow(rho,2)*(-3 + kappa*t)) +
465 pow(rho,2)*(6 + 4*kappa*t + pow(kappa,2)*pow(t,2))))*theta +
466 2*(-1 +
e2kt*(1 + 4*pow(rho,2)) -
468 pow(rho,2)*(2 + 2*kappa*t + pow(kappa,2)*pow(t,2))))*y))/
469 ((1 +
ekt*(-1 + kappa*t))*theta + (-1 +
ekt)*y) +
470 (576*pow(delta,2)*
ekt*pow(kappa,2)*rho*
471 ((2 + kappa*t +
ekt*(-2 + kappa*t))*theta +
472 (-1 +
ekt - kappa*t)*y)*
473 ((1 +
e2kt*(-5 + 2*kappa*t + 4*pow(rho,2)*(-3 + kappa*t)) +
474 2*
ekt*(2 + 2*kappa*t +
475 pow(rho,2)*(6 + 4*kappa*t + pow(kappa,2)*pow(t,2))))*theta +
476 2*(-1 +
e2kt*(1 + 2*pow(rho,2)) -
478 pow(rho,2)*(2 + 2*kappa*t + pow(kappa,2)*pow(t,2))))*y))/
479 ((1 +
ekt*(-1 + kappa*t))*theta + (-1 +
ekt)*y) +
480 (5*pow(delta,2)*rho*((1 +
ekt*(-1 + kappa*t))*theta +
482 ((2 + kappa*t +
ekt*(-2 + kappa*t))*theta +
483 (-1 +
ekt - kappa*t)*y)*
484 (theta*(12*
ekt*pow(kappa,3)*pow(rho,2)*pow(t,2) +
485 8*pow(-1 +
ekt,2)*pow(rho,2)*theta -
487 (3 + 8*pow(rho,2)*t*theta +
488 ekt*(15 + 8*pow(rho,2)*(9 + t*theta))) +
489 2*pow(kappa,2)*t*(pow(rho,2)*t*theta +
490 2*
ekt*(3 + pow(rho,2)*(12 + t*theta)) +
491 e2kt*(3 + pow(rho,2)*(12 + t*theta)))) -
492 2*(6*
ekt*pow(kappa,3)*pow(rho,2)*pow(t,2) +
493 4*pow(-1 +
ekt,2)*pow(rho,2)*theta +
494 2*pow(kappa,2)*t*(pow(rho,2)*t*theta +
495 ekt*(3 + pow(rho,2)*(6 + t*theta))) -
497 (3 + 6*pow(rho,2)*t*theta +
498 ekt*(3 + 2*pow(rho,2)*(6 + t*theta))))*y +
499 2*pow(rho,2)*pow(1 -
ekt + kappa*t,2)*pow(y,2)))/
500 (
ekt*(-theta + kappa*t*theta + (theta - y)/
ekt + y)) -
501 (48*pow(delta,2)*kappa*rho*((1 +
ekt*(-1 + kappa*t))*theta +
503 (2*theta + kappa*t*theta - y - kappa*t*y +
504 ekt*((-2 + kappa*t)*theta + y))*
506 (-5*theta + 2*kappa*t*theta + 2*y + 4*pow(rho,2)*((-3 + kappa*t)*theta + y)) +
507 2*
ekt*(2*(theta + kappa*t*(theta - y)) +
508 pow(rho,2)*((6 + kappa*t*(4 + kappa*t))*theta - (2 + kappa*t*(2 + kappa*t))*y))
509 ))/(
ekt*(-theta + kappa*t*theta + (theta - y)/
ekt + y)) +
510 (96*delta*pow(kappa,3)*((1 +
ekt*(-1 + kappa*t))*theta +
513 (-5*theta + 2*kappa*t*theta + 2*y + 8*pow(rho,2)*((-3 + kappa*t)*theta + y)) +
514 4*
ekt*(theta + kappa*t*theta - kappa*t*y +
515 pow(rho,2)*((6 + kappa*t*(4 + kappa*t))*theta - (2 + kappa*t*(2 + kappa*t))*y))
516 ))/(-theta + kappa*t*theta + (theta - y)/
ekt + y) +
517 (9*pow(delta,2)*kappa*rho*((1 +
ekt*(-1 + kappa*t))*theta +
519 ((2 + kappa*t +
ekt*(-2 + kappa*t))*theta +
520 (-1 +
ekt - kappa*t)*y)*
522 (-5*theta + 2*kappa*t*theta + 2*y + 8*pow(rho,2)*((-3 + kappa*t)*theta + y)) +
523 4*
ekt*(theta + kappa*t*theta - kappa*t*y +
524 pow(rho,2)*((6 + kappa*t*(4 + kappa*t))*theta - (2 + kappa*t*(2 + kappa*t))*y))
525 ))/(
ekt*(-theta + kappa*t*theta + (theta - y)/
ekt + y)) -
526 (48*pow(delta,2)*
ekt*pow(kappa,2)*rho*
527 (3*(theta - 2*y)*((2 + kappa*t)*theta - (1 + kappa*t)*y) +
528 3*
ekt*(6*pow(theta,2) + theta*y - 2*pow(y,2) +
529 kappa*(13*t*pow(theta,2) + theta*(8 - 18*t*y) + 4*y*(-3 + t*y)) +
530 4*pow(kappa,2)*t*(theta + t*pow(theta,2) - 2*t*theta*y + y*(-2 + t*y))) +
531 3*
e3kt*(10*pow(theta,2) +
532 2*pow(kappa,2)*t*theta*(6 + 8*pow(rho,2) + t*theta) - 9*theta*y +
533 2*pow(y,2) + kappa*(-9*t*pow(theta,2) + 4*(3 + 4*pow(rho,2))*y +
534 theta*(-40 - 64*pow(rho,2) + 4*t*y))) +
535 e2kt*(-54*pow(theta,2) +
536 8*pow(kappa,4)*pow(rho,2)*pow(t,3)*(theta - y) + 39*theta*y -
537 6*pow(y,2) + 24*pow(kappa,3)*pow(t,2)*
538 (theta + 2*pow(rho,2)*theta - (1 + pow(rho,2))*y) +
539 6*pow(kappa,2)*t*(3*t*pow(theta,2) - 8*(1 + pow(rho,2))*y +
540 theta*(16 + 24*pow(rho,2) - 3*t*y)) -
541 3*kappa*(5*t*pow(theta,2) + 2*y*(8*pow(rho,2) + 3*t*y) -
542 theta*(32 + 64*pow(rho,2) + 17*t*y)))))/
543 ((1 +
ekt*(-1 + kappa*t))*theta + (-1 +
ekt)*y) +
544 (12*pow(delta,2)*kappa*rho*((1 +
ekt*(-1 + kappa*t))*theta +
546 (3*(theta - 2*y)*((2 + kappa*t)*theta - (1 + kappa*t)*y) +
547 3*
ekt*(6*pow(theta,2) + theta*y - 2*pow(y,2) +
548 kappa*(13*t*pow(theta,2) + theta*(8 - 18*t*y) + 4*y*(-3 + t*y)) +
549 4*pow(kappa,2)*t*(theta + t*pow(theta,2) - 2*t*theta*y + y*(-2 + t*y))) +
550 3*
e3kt*(10*pow(theta,2) +
551 2*pow(kappa,2)*t*theta*(6 + 8*pow(rho,2) + t*theta) - 9*theta*y +
552 2*pow(y,2) + kappa*(-9*t*pow(theta,2) + 4*(3 + 4*pow(rho,2))*y +
553 theta*(-40 - 64*pow(rho,2) + 4*t*y))) +
554 e2kt*(-54*pow(theta,2) +
555 8*pow(kappa,4)*pow(rho,2)*pow(t,3)*(theta - y) + 39*theta*y -
556 6*pow(y,2) + 24*pow(kappa,3)*pow(t,2)*
557 (theta + 2*pow(rho,2)*theta - (1 + pow(rho,2))*y) +
558 6*pow(kappa,2)*t*(3*t*pow(theta,2) - 8*(1 + pow(rho,2))*y +
559 theta*(16 + 24*pow(rho,2) - 3*t*y)) -
560 3*kappa*(5*t*pow(theta,2) + 2*y*(8*pow(rho,2) + 3*t*y) -
561 theta*(32 + 64*pow(rho,2) + 17*t*y)))))/
562 (
ekt*(-theta + kappa*t*theta + (theta - y)/
ekt + y)) +
563 (240*pow(delta,2)*
e2kt*pow(kappa,2)*rho*
564 ((2 + kappa*t +
ekt*(-2 + kappa*t))*theta +
565 (-1 +
ekt - kappa*t)*y)*
566 (12*
ekt*pow(kappa,3)*pow(rho,2)*pow(t,2)*(theta - y) +
567 2*pow(-1 +
ekt,2)*pow(rho,2)*pow(-2*theta + y,2) -
569 (8*(1 +
ekt)*pow(rho,2)*t*pow(theta,2) +
570 2*y*(-3 - 3*
ekt*(1 + 4*pow(rho,2)) + 2*pow(rho,2)*t*y) +
571 theta*(3 - 12*pow(rho,2)*t*y +
572 ekt*(15 + pow(rho,2)*(72 - 4*t*y)))) +
573 2*pow(kappa,2)*t*(
e2kt*theta*(3 + pow(rho,2)*(12 + t*theta)) +
574 pow(rho,2)*t*pow(theta - y,2) +
575 2*
ekt*(pow(rho,2)*t*pow(theta,2) - 3*(y + 2*pow(rho,2)*y) +
576 theta*(3 + pow(rho,2)*(12 - t*y))))))/
577 pow((1 +
ekt*(-1 + kappa*t))*theta + (-1 +
ekt)*y,2) -
578 (120*pow(delta,2)*
ekt*kappa*rho*
579 ((2 + kappa*t +
ekt*(-2 + kappa*t))*theta +
580 (-1 +
ekt - kappa*t)*y)*
581 (12*
ekt*pow(kappa,3)*pow(rho,2)*pow(t,2)*(theta - y) +
582 2*pow(-1 +
ekt,2)*pow(rho,2)*pow(-2*theta + y,2) -
584 (8*(1 +
ekt)*pow(rho,2)*t*pow(theta,2) +
585 2*y*(-3 - 3*
ekt*(1 + 4*pow(rho,2)) + 2*pow(rho,2)*t*y) +
586 theta*(3 - 12*pow(rho,2)*t*y +
587 ekt*(15 + pow(rho,2)*(72 - 4*t*y)))) +
588 2*pow(kappa,2)*t*(
e2kt*theta*(3 + pow(rho,2)*(12 + t*theta)) +
589 pow(rho,2)*t*pow(theta - y,2) +
590 2*
ekt*(pow(rho,2)*t*pow(theta,2) - 3*(y + 2*pow(rho,2)*y) +
591 theta*(3 + pow(rho,2)*(12 - t*y))))))/
592 ((1 +
ekt*(-1 + kappa*t))*theta + (-1 +
ekt)*y)))/
593 (1536.*
e3kt*pow(kappa,6)*pow(t,2)*
594 pow((-theta + kappa*t*theta + (theta - y)/
ekt + y)/(kappa*t),1.5));
599 return (pow(delta,2)*(8*
e3kt*pow(kappa,5)*pow(rho,2)*pow(t,4)*(2 + delta*rho*t)*
600 pow(theta,2)*(theta - y) - delta*pow(-1 +
ekt,3)*rho*
601 (2*(-1 +
ekt*(-5 + 24*pow(rho,2)))*pow(theta,3) +
602 (7 +
ekt*(3 + 56*pow(rho,2)))*pow(theta,2)*y -
603 3*(1 +
ekt*(-3 + 8*pow(rho,2)))*theta*pow(y,2) +
604 2*(-1 +
ekt*(-1 + 2*pow(rho,2)))*pow(y,3)) -
605 pow(-1 +
ekt,2)*kappa*
606 ((-4 + delta*rho*t - 8*
ekt*
607 (2 - 12*pow(rho,2) - 4*delta*rho*t + 25*delta*pow(rho,3)*t) +
608 e2kt*(20 - 96*pow(rho,2) + 3*delta*rho*t + 56*delta*pow(rho,3)*t)
609 )*pow(theta,3) - 2*(-8 + 2*delta*rho*t +
610 e2kt*(24 - 80*pow(rho,2) - 9*delta*rho*t +
611 24*delta*pow(rho,3)*t) -
612 4*
ekt*(4 - 20*pow(rho,2) - 10*delta*rho*t + 39*delta*pow(rho,3)*t)
613 )*pow(theta,2)*y + (5*(-4 + delta*rho*t) +
614 ekt*(-16 + 80*pow(rho,2) + 57*delta*rho*t -
615 140*delta*pow(rho,3)*t) +
616 2*
e2kt*(18 - 40*pow(rho,2) - 3*delta*rho*t +
617 6*delta*pow(rho,3)*t))*theta*pow(y,2) +
618 2*(4 +
e2kt*(-4 + 8*pow(rho,2)) - delta*rho*t +
619 ekt*rho*(-8*rho - 7*delta*t + 14*delta*pow(rho,2)*t))*pow(y,3)) +
620 ekt*(-1 +
ekt)*pow(kappa,2)*t*
621 ((-24 + 128*pow(rho,2) + 9*delta*rho*t - 144*delta*pow(rho,3)*t -
622 4*
ekt*(6 - 8*pow(rho,2) - 9*delta*rho*t + 6*delta*pow(rho,3)*t) +
623 e2kt*(48 - 160*pow(rho,2) - 9*delta*rho*t +
624 24*delta*pow(rho,3)*t))*pow(theta,3) -
625 (-72 + 320*pow(rho,2) + 27*delta*rho*t - 360*delta*pow(rho,3)*t -
626 ekt*rho*(160*rho - 81*delta*t + 348*delta*pow(rho,2)*t) +
627 2*
e2kt*(36 - 80*pow(rho,2) - 3*delta*rho*t +
628 6*delta*pow(rho,3)*t))*pow(theta,2)*y -
629 2*(32 - 128*pow(rho,2) + 12*
e2kt*(-1 + 2*pow(rho,2)) -
630 15*delta*rho*t + 144*delta*pow(rho,3)*t +
631 2*
ekt*(-10 + 52*pow(rho,2) - 13*delta*rho*t +
632 58*delta*pow(rho,3)*t))*theta*pow(y,2) +
633 4*(4 - 16*pow(rho,2) - 3*delta*rho*t + 18*delta*pow(rho,3)*t +
634 ekt*(-4 + 16*pow(rho,2) - 2*delta*rho*t + 11*delta*pow(rho,3)*t))*
635 pow(y,3)) - 4*
e2kt*pow(kappa,4)*pow(t,3)*theta*
636 (2*
e2kt*(-1 + 2*pow(rho,2))*pow(theta,2) +
637 pow(rho,2)*(4 + 13*delta*rho*t)*pow(theta - y,2) +
638 ekt*((-4 + 16*pow(rho,2) - 2*delta*rho*t + 9*delta*pow(rho,3)*t)*
639 pow(theta,2) + (4 - 32*pow(rho,2) + 2*delta*rho*t - 19*delta*pow(rho,3)*t)*
640 theta*y + 4*pow(rho,2)*(2 + delta*rho*t)*pow(y,2))) -
641 2*
ekt*pow(kappa,3)*pow(t,2)*
642 (-4*pow(rho,2)*(-4 + 3*delta*rho*t)*pow(theta - y,3) +
644 ((18 - 40*pow(rho,2) - delta*rho*t + 2*delta*pow(rho,3)*t)*theta +
645 12*(-1 + 2*pow(rho,2))*y) +
646 2*
ekt*((-9 + 36*pow(rho,2) + 19*delta*pow(rho,3)*t)*pow(theta,3) +
647 2*(9 - 30*pow(rho,2) + 7*delta*pow(rho,3)*t)*pow(theta,2)*y +
648 (-8 + 20*pow(rho,2) + delta*rho*t - 46*delta*pow(rho,3)*t)*theta*pow(y,2) +
649 pow(rho,2)*(4 + 13*delta*rho*t)*pow(y,3)) +
650 e2kt*(8*theta*y*(-3*theta + 2*y) +
651 delta*rho*t*theta*(7*pow(theta,2) - 23*theta*y + 8*pow(y,2)) -
652 8*pow(rho,2)*(6*pow(theta,3) - 18*pow(theta,2)*y + 11*theta*pow(y,2) -
653 pow(y,3)) + 4*delta*pow(rho,3)*t*
654 (-13*pow(theta,3) + 31*pow(theta,2)*y - 14*theta*pow(y,2) + pow(y,3))))))/
655 (64.*pow(kappa,2)*t*sqrt((-theta + kappa*t*theta + (theta - y)/
ekt + y)/
656 (kappa*t))*pow((1 +
ekt*(-1 + kappa*t))*theta + (-1 +
ekt)*y,
662 return (pow(delta,3)*
ekt*rho*((-15*(2 + kappa*t) +
663 3*
e4kt*(50 - 79*kappa*t + 35*pow(kappa,2)*pow(t,2) -
664 6*pow(kappa,3)*pow(t,3) +
665 8*pow(rho,2)*(-18 + 15*kappa*t - 6*pow(kappa,2)*pow(t,2) +
666 pow(kappa,3)*pow(t,3))) +
667 ekt*(-3*(20 + 86*kappa*t + 29*pow(kappa,2)*pow(t,2)) +
668 pow(rho,2)*(432 + 936*kappa*t + 552*pow(kappa,2)*pow(t,2) +
669 92*pow(kappa,3)*pow(t,3))) +
670 e2kt*(360 + 324*kappa*t - 261*pow(kappa,2)*pow(t,2) -
671 48*pow(kappa,3)*pow(t,3) -
672 4*pow(rho,2)*(324 + 378*kappa*t - 12*pow(kappa,2)*pow(t,2) -
673 2*pow(kappa,3)*pow(t,3) + 23*pow(kappa,4)*pow(t,4))) +
674 e3kt*(3*(-140 + 62*kappa*t + 81*pow(kappa,2)*pow(t,2) -
675 38*pow(kappa,3)*pow(t,3) + 8*pow(kappa,4)*pow(t,4)) +
676 4*pow(rho,2)*(324 + 54*kappa*t - 114*pow(kappa,2)*pow(t,2) +
677 77*pow(kappa,3)*pow(t,3) - 19*pow(kappa,4)*pow(t,4) +
678 2*pow(kappa,5)*pow(t,5))))*pow(theta,3) +
679 (15*(7 + 4*kappa*t) + 3*
e4kt*
680 (-79 + 70*kappa*t - 18*pow(kappa,2)*pow(t,2) +
681 24*pow(rho,2)*(5 - 4*kappa*t + pow(kappa,2)*pow(t,2))) -
682 3*
ekt*(26 - 200*kappa*t - 87*pow(kappa,2)*pow(t,2) +
683 4*pow(rho,2)*(30 + 142*kappa*t + 115*pow(kappa,2)*pow(t,2) +
684 23*pow(kappa,3)*pow(t,3))) +
685 2*
e2kt*(3*(-66 - 195*kappa*t + 63*pow(kappa,2)*pow(t,2) +
686 16*pow(kappa,3)*pow(t,3)) +
687 4*pow(rho,2)*(135 + 390*kappa*t - 9*pow(kappa,2)*pow(t,2) -
688 48*pow(kappa,3)*pow(t,3) + 23*pow(kappa,4)*pow(t,4))) +
689 e3kt*(606 + 300*kappa*t - 585*pow(kappa,2)*pow(t,2) +
690 210*pow(kappa,3)*pow(t,3) - 24*pow(kappa,4)*pow(t,4) -
691 4*pow(rho,2)*(270 + 282*kappa*t - 345*pow(kappa,2)*pow(t,2) +
692 153*pow(kappa,3)*pow(t,3) - 29*pow(kappa,4)*pow(t,4) +
693 2*pow(kappa,5)*pow(t,5))))*pow(theta,2)*y +
694 (-93 - 75*kappa*t + 3*
e4kt*
695 (35 - 18*kappa*t + 24*pow(rho,2)*(-2 + kappa*t)) +
696 3*
ekt*(58 - 123*kappa*t - 86*pow(kappa,2)*pow(t,2) +
697 4*pow(rho,2)*(12 + 80*kappa*t + 92*pow(kappa,2)*pow(t,2) +
698 23*pow(kappa,3)*pow(t,3))) +
699 e3kt*(-3*(74 + 137*kappa*t - 100*pow(kappa,2)*pow(t,2) +
700 16*pow(kappa,3)*pow(t,3)) -
701 16*pow(rho,2)*(-27 - 51*kappa*t + 45*pow(kappa,2)*pow(t,2) -
702 12*pow(kappa,3)*pow(t,3) + pow(kappa,4)*pow(t,4))) +
703 e2kt*(36 + 909*kappa*t - 42*pow(kappa,2)*pow(t,2) -
704 60*pow(kappa,3)*pow(t,3) -
705 4*pow(rho,2)*(108 + 462*kappa*t + 96*pow(kappa,2)*pow(t,2) -
706 117*pow(kappa,3)*pow(t,3) + 23*pow(kappa,4)*pow(t,4))))*theta*pow(y,2)
707 + 2*(9 + 3*
e4kt*(-3 + 4*pow(rho,2)) + 15*kappa*t +
708 e2kt*(-3*kappa*t*(33 + 10*kappa*t) +
709 pow(rho,2)*(36 + 192*kappa*t + 96*pow(kappa,2)*pow(t,2) -
710 46*pow(kappa,3)*pow(t,3))) +
711 e3kt*(18 + 57*kappa*t - 12*pow(kappa,2)*pow(t,2) -
712 2*pow(rho,2)*(18 + 48*kappa*t - 21*pow(kappa,2)*pow(t,2) +
713 2*pow(kappa,3)*pow(t,3))) +
714 ekt*(3*(-6 + 9*kappa*t + 14*pow(kappa,2)*pow(t,2)) -
715 2*pow(rho,2)*(6 + 48*kappa*t + 69*pow(kappa,2)*pow(t,2) +
716 23*pow(kappa,3)*pow(t,3))))*pow(y,3)))/
717 (96.*kappa*t*sqrt((-theta + kappa*t*theta + (theta - y)/
ekt + y)/(kappa*t))*
718 pow((1 +
ekt*(-1 + kappa*t))*theta + (-1 +
ekt)*y,5));
723 ekt = exp(kappa*term);
727 coeffs[0] =
z0(term, kappa, theta, sigma, v0, rho);
728 coeffs[1] =
z1(term, kappa, theta, sigma, v0, rho);
729 coeffs[2] =
z2(term, kappa, theta, sigma, v0, rho);
730 coeffs[3] =
z3(term, kappa, theta, sigma, v0, rho);
734 const Real forward)
const {
735 Real x = log(strike/forward);
737 return std::max(1e-8,vol);
FordeHestonExpansion(Real kappa, Real theta, Real sigma, Real v0, Real rho, Real term)
Real impliedVolatility(Real strike, Real forward) const override
Base class for some pricing engine on a particular model.
Handle< HestonModel > model_
HestonExpansionEngine(const ext::shared_ptr< HestonModel > &model, HestonExpansionFormula formula)
const HestonExpansionFormula formula_
void calculate() const override
Heston model for the stochastic volatility of an asset.
Real z0(Real t, Real kappa, Real theta, Real delta, Real y, Real rho) const
LPP2HestonExpansion(Real kappa, Real theta, Real sigma, Real v0, Real rho, Real term)
Real impliedVolatility(Real strike, Real forward) const override
Real z2(Real t, Real kappa, Real theta, Real delta, Real y, Real rho) const
Real z1(Real t, Real kappa, Real theta, Real delta, Real y, Real rho) const
Real z3(Real t, Real kappa, Real theta, Real delta, Real y, Real rho) const
LPP3HestonExpansion(Real kappa, Real theta, Real sigma, Real v0, Real rho, Real term)
Real z0(Real t, Real kappa, Real theta, Real delta, Real y, Real rho) const
Real impliedVolatility(Real strike, Real forward) const override
Real z2(Real t, Real kappa, Real theta, Real delta, Real y, Real rho) const
Real z1(Real t, Real kappa, Real theta, Real delta, Real y, Real rho) const
Vanilla option (no discrete dividends, no barriers) on a single asset.
Real blackFormula(Option::Type optionType, Real strike, Real forward, Real stdDev, Real discount, Real displacement)