Ejemplo n.º 1
0
void buildMatrix(SpMatrix &M1, SpMatrix &M2, SpMatrix &FF, double sigma, double r, double lambda, double alpha, int N, double dx, double dt){
        
        double diff=sigma*sigma/2;
        double trasp=r-sigma*sigma/2-alpha;
        double reaz=-lambda;
       
        
        SpMatrix DD(N-1,N-1);
        SpMatrix DF(N-1,N-1);
        
        // Assemblaggio
        for (int i=0; i<N-1; ++i) {
                DD.insert(i,i)=2/dx;
                FF.insert(i,i)=2*dx/3;
        }
        for (int i=0; i<N-2; ++i) {
                DD.insert(i+1,i)=-1/dx;
                FF.insert(i+1,i)=dx/6;
                DF.insert(i+1,i)=-0.5;
        }
        for (int i=0; i<N-2; ++i) {
                DD.insert(i,i+1)=-1/dx;
                FF.insert(i,i+1)=dx/6;
                DF.insert(i,i+1)=0.5;
        }
        
        cout<<dt<<"\t"<<diff<<"\t"<<trasp<<"\t"<<reaz<<"\n";
        
        M1=FF/dt+0.5*(diff*DD-trasp*DF-reaz*FF);
        M2=FF/dt-0.5*(diff*DD-trasp*DF-reaz*FF);
        
        return;
}