Programme


        Valeur de N :



Courbe du modèle Black et Scholes pour différentes valeurs de N

(où par exemple sol.N.50 représente la solution quand N=50)

 

Courbe du modèle Black et Scholes pour différentes valeurs de N
(où par exemple sol.N.50 représente la solution quand N=50)


        D'après le graphique, plus on augmente N, plus les courbes se rapprochent les unes des autres.  En effet plus N est grand, plus le maillage est serré (c'est a dire h est petit) donc on a une meilleure approximation.
        Pour notre programme nous prendrons N=800, elle donne apparemment une bonne approximation sans pour autant avoir un maillage très serré.



Valeur de L :

Courbe du modèle Black et Scholes pour différentes valeurs de L
(où par exemple sol.L.2K représente la solution quand L=2K)


 

Courbe du modèle Black et Scholes pour différentes valeurs de L
(où par exemple sol.L.2K représente la solution quand L=2K)

        Nous rappelons que L représente la limite du domaine de calcul et que K est le prix que l'on payera l'action le jour de l'échéance de l'option. Donc logiquement la valeur de L doit être plus grande que la valeur de K.( Ce que nous indique également le graphique pour la valeur L=0,5K.) On voit graphiquement que L=2K est la meilleure. Donc dans notre programme nous prendrons L=2K.


  Programme en Fortran77:         

            program blackscholes
            parameter (N=800)
          real u(N), X(N), u1(N)

c                Commande pour demmander la valeur de sigma
            write(6,*)'donner sigma'
          read (5,*)
         

c            Definir les X
         
r=0.02
c            sigma=0.05

            XK=35
          XL=2*XK
          dX=(XL)/(N-1)
          T=2
.
           
            do
i=1,N
                    X(i)=(i-1)*dX
                    u(i)=max(0., X(i)-XK)
          enddo

            dt=-dX**2/(sigma**2*XL**2 + r*XL*dX)
          temps=T
          do KT=1,1000000

                        dt=-min(abs(dt),temps)
                   temps=temps+dt
                   do i=2,N-1

                                P=sigma**2*X(i)**2/2*(u(i+1) - 2*u(i) + u(i-1))/dX**2
                                u1(i)=u(i) + dt*(- r*X(i)*(u(i+1) - u(i-1))/(2*dX)-P + r*u(i))
                   enddo

c              condition limite
                        u1(1)=0
c                            u1(N)=u1(N-1)+dX
                    u1(N)= - XK*exp (r*(temps - KT)) + XL

c                          pour l'itération suivante
                        do i=1,N
                             u(i)=u1(i)
                   enddo

                   if (temps .le.0) goto 1    
            enddo

1          continue
            print *,temps
             do i=1,N   
                   write
(1,*) X(i), u(i), max(0.,x(i)-XK)

               enddo
           
stop 'fin'
            end