Sou iniciante na FE. Minha aplicação é a precificação de derivativos financeiros em que o espaço é tridimensional. Então, adicionando tempo, o problema tem seis dimensões.
Eu tentei olhar em volta (Fenics, escript, deal.II, ...), mas meu entendimento é que esses softwares são limitados a 3 + 1 (espaço 3d + tempo 1d). Isso está correto?
Minha linguagem de destino é Python ou C ++.
Descrição do meu problema
Gostaria de precificar um produto de investimento em que, todos os meses, o investidor tenha a liberdade de reinvestir ou não. Eu gostaria de fazê-lo com volatilidade estocástica, taxa de juros estocástica e mortalidade estocástica.
Os PDEs estocásticos são assim:
Onde é uma constante dependente do tempo associada ao preço das ações e μ S t SB S t Sν σ t σCττVτ=max{c∈Cτ:P(morte)E(rτf(S τ + 1 ))+P
dStdσtdrtdqt= μStdt+ σt--√dBSt= μσtdt + νσtdBσt= μrtdt + νrtdBrt= μqtdt + νqtdBqt(estoque)(volatilidade)(taxa de juro)(mortalidade)
μStSBSté um processo Levy independente que cria ruído no preço das ações . Da mesma forma para as outras quantidades: é uma quantidade dependente do tempo associada à volatilidade .
Let denota os investimentos admissíveis no momento . O problema de controle estocástico se parece com
As PDEs acima são contínuas, mas o valor do produto é resolvido apenas em horários predefinidos , digamos a cada mês.
SνσtσCττVτ= m a x { c ∈ Cτ: P( morte ) E( rτf( Sτ+ 1) ) + P( a l i v e ) E( rτVτ+ 1) } .
Vττ
Acho que Monte-Carlo sempre pode forçar com força o meu problema, mas é muito lento.
Forma determinística dos PDEs estocásticos
Para esta parte, assuma que o valor da opção
seja definido no tempo natural , não o -times, com o investimento no tempo .
Defina o operador diferencial
onde constante dependente do tempo
V:(t,St,σt,rt,qt,ct)↦(t,Vt),
tτctt {μ S t ,...}∂tVt+(GT+G S tLtLStLrtLσtLqt=∂r,S+∂r,σ+∂σ,S=σt∂S+rt∂S,S=∂r+∂r,r=∂σ+∂σ,σ=∂q+∂q,q
{μSt,…}são ignorados. O PDE determinista é, em seguida,
que pode adaptado ao problema de controlo óptimo sobre a -times .
τ∂tVt+(Lt+LSt+Lσt+Lrt+Lqt)Vt=0,
τ
Respostas:
Supondo que você queira resolver as equações de Black-Scholes ou uma variante em um portfólio de 5 ativos, você realmente terá 5 dimensões espaciais e uma dimensão temporal. Não conheço nenhum pacote do FEM que possa fazer isso de cabeça para baixo (acordo.Eu não posso fazer isso prontamente, mas veja abaixo), mas acho que lembro que algumas pessoas do grupo de Chris Schwab na ETH Zurich resolveram esse problema. problemas ao usar malhas esparsas. Você pode ter sorte olhando as publicações dele.
Existem outras equações que possuem dimensões extras. Um exemplo é a equação de transferência radiativa que possui 3 dimensões de espaço + 1 tempo + 2 angular + 1 de energia. A maneira como isso normalmente é resolvido é discretizar o espaço tridimensional como de costume, depois discretizar as dimensões angulares e de energia em malhas bidimensionais e bidimensionais separadas e, em cada ponto nodal da malha espacial, basta ter muitas variáveis (uma para cada cada nó da malha angular vezes o número de nós na malha de energia). Usamos esse esquema em implementações deal.II com êxito. Isso faz sentido para a equação de transferência radiativa e pode ser emulada para sua equação, mesmo que não seja natural lá.
fonte
O DUNE, o ambiente numérico distribuído e unificado http://www.dune-project.org , apresenta algumas grades estruturadas de dimensão arbitrária (SGrid e Yaspgrid), consulte os recursos do DUNE . Atualmente, existe um ramo que transforma o yaspgrid, uma das grades acima, em uma grade de produtos tensores, se isso for de interesse. Desde o release 2.0 (o atual é 2.2.1 e o 2.3 está chegando), temos elementos de referência para vários métodos de elementos finitos que suportam dimensões arbitrárias. Portanto, deve ser possível configurar discretizações de elementos finitos de dimensão arbitrária com, por exemplo, o módulo de desrectização dune-pdelab . Embora isso possa não ser testado com frequência.
Dito isto, ainda existe a maldição da dimensionalidade, como Wolfgang apontou.
Para mais informações, consulte as listas de discussão DUNE .
fonte
Ok, então parece que o que você tem é um conjunto de ODEs acoplados, pois, até onde posso dizer, existem apenas derivados com relação ao tempo e nenhum derivado com relação a qualquer outra coisa. Existem alguns pacotes disponíveis para resolver sistemas de ODEs de dimensão arbitrária (o Matlab tem coisas assim
ode45
). Para Python, veja esta pergunta para algumas sugestões. Finalmente, existe um código Fortran antigo no netlib que pode ser facilmente conectado com C ++ (facilidade de uso é outra questão). Provavelmente existem alternativas melhores por aí, já que já faz um tempo desde que eu olhei (outras pessoas devem gritar).fonte