begin process at 2012 05 28 11:42:23
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Au secours

 > 

aide sur un algorithme en dec-C++


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

aide sur un algorithme en dec-C++

jeudi 27 novembre 2003 à 04:02:51 | aide sur un algorithme en dec-C++

viagra

je souhaiterais être aidé sur un algorithme sur lequel j'éprouve des problemes. en effet lorsque je compile aussi bien au niveau de dev-c++ et MSYS, la compilation se passe avec succes. cependant lorsque je lance l'exécutable , un message d'erreur s'affiche. j'ai beau chercher je ne trouve pas d'explications. si vous voulez bien m'aider. voici-joint l'algorithme.


#include <stdio.h>
#include <stdlib.h>
#include <gsl/gsl_math.h>
#include <time.h>
#include <gsl/gsl_rng.h>
#include <gsl/gsl_sf_trig.h>

double norminv(double);
gsl_rng * Q;

int main() {
FILE *longstaff = NULL;
const gsl_rng_type * T; // T pointe sur le type de générateur GSL à choisir

double **tab,**ITM, **vchapeau, **indice,**S, **cashflow;
double strike, dt, r, sigma, echeance, somme, somme2, sommeXY, sommeY,S0,ASJ;
double beta1, beta2,exponentielle,volatilite,t1,PutA;
double ntraj,temps,prix,RM,S1,S2,Z,detention;
int nbexercice,op,f,b,c,d,e,i,j,a,K,iterateur;




gsl_rng_env_setup(); // Environnement GSL "Random Number Generation"
T = gsl_rng_default; // T désigne le type de générateur GSL choisi
Q = gsl_rng_alloc(T); // Q pointe maintenant sur le générateur GSL

S0 = 40;
r = 0.0488;
iterateur = 4;
ntraj = 100000;

longstaff = fopen("longstaff.txt", "w");

for( op = 1; op <= 2; op++){
nbexercice = 5 + (op - 1) * 20;
for( f = 1; f <= 2; f++){
sigma = 0.2 * f;
for(b = 1; b <= 3; b++){
strike = 35 + (b - 1) * 5;
for(c = 1; c <= 2;c++){
echeance = 1 / 12 + (c - 1) * 0.5;
dt = echeance / nbexercice;
exponentielle = (r - sigma * sigma / 2) * dt;
volatilite = sigma * sqrt(dt);
temps = 0;
prix = 0;
RM = 0;
for(d = 1; d <= 5; d++){
t1 = clock();
S = (double **)malloc((ntraj - 1)*sizeof(double));
for(e = 1; e <= (ntraj - 1); e++){
S[e] = (double *)malloc((nbexercice - 1)*sizeof(double));
}
cashflow = (double **)malloc((ntraj - 1)*sizeof(double));
for(e = 1; e <= (ntraj - 1); e++){
cashflow[e] = (double *)malloc(1*sizeof(double));
}
ITM = (double **)malloc(0*sizeof(double));
ITM[0] = (double *)malloc((nbexercice - 1)*sizeof(double));

// calcul de l'actif sous-jacent aux différentes périodes d'exercice
for(i = 1; i <= (ntraj / 2); i++){
S1 = S0;
S2 = S0;
for( j = 1; j <= nbexercice; j++){
Z = gsl_rng_uniform(Q);
Z = norminv(Z);
S1 = S1 * exp(exponentielle + volatilite * Z);
S2 = S2 * exp(exponentielle - volatilite * Z);
if (S1 < strike) ITM[0][j - 1] = ITM[0][j - 1] + 1;
if (S2 < strike) ITM[0][j - 1] = ITM[0][j - 1] + 1;
S[(i - 1)* 2][j - 1] = S1;
S[(i - 1)* 2 + 1][j - 1] = S2;
}
}

// initialisation des vecteurs temps et cash-flow
for(i = 1; i <= ntraj; i++){
cashflow[i - 1][0] = nbexercice;
if(strike - S[i - 1][nbexercice - 1] > 0) cashflow[i - 1][1] = strike - S[i - 1][nbexercice - 1];
else cashflow[i - 1][1] = 0;
}
// on débute a l'avant derniere date
for(j = nbexercice; j <= 1 ;j--){
if ((ITM[0][nbexercice - (j + 1)]) > 0 ){
indice = (double **)malloc(((ITM[0][nbexercice - (j + 1)]) - 1)*sizeof(double));
for(e = 1; e <= ((ITM[0][nbexercice - (j + 1)]) - 1); e++){
indice[e] = (double *)malloc(0*sizeof(double));
}
K = 0;
sommeXY =0;
somme2 = 0;
sommeY = 0;
somme = 0;

//regression linéaire
for(i = 1; i <= ntraj; i++){
if (S[i - 1][nbexercice - (j + 1)] < strike){
indice[K][0] = i - 1;
ASJ = S[i - 1][nbexercice - (j + 1)];
detention = cashflow[i - 1][1] * exp( - r * dt * (cashflow[i - 1][0] - (nbexercice - (j + 1))));
sommeXY = sommeXY + ASJ * detention;
somme2 = somme2 + ASJ * ASJ;
sommeY = sommeY + detention;
somme = somme + ASJ;
K = K + 1;
}
}
beta2 = sommeXY / somme2;
beta1 = sommeY / K - beta2 * somme / K;
vchapeau = (double **)malloc((ITM[0][nbexercice - (j + 1)] - 1)*sizeof(double));
for(e = 0; e <= (ITM[0][nbexercice - (j + 1)] - 1); e++)
vchapeau[e] = (double *)malloc(0*sizeof(double));
// calcul des cash-flow
for(a = K; a <= 0; a--){
vchapeau[a][0] = beta1 + beta2 * S[(int) indice[a][0]][nbexercice - (j + 1)];
if ((strike - (S[(int)indice[a][0]][0]) - (nbexercice - (j + 1))) > 0 && (strike - (S[(int) indice[a][0]][0]) - (nbexercice - (j + 1))) > vchapeau[a][0] ){
cashflow[(int) indice[a][0]][0] = nbexercice - j;
cashflow[(int) indice[a][0]][1] = strike - S[(int) indice[a][0]][nbexercice - ( j + 1)];
}
}
}
}
somme = 0;
somme2 = 0;
// actualisation des cash-flow
for(i = 1; i <= ntraj; i++){
PutA = cashflow[i - 1][1] * exp ( - r * dt * cashflow[i - 1][0]);
somme = somme + PutA;
somme2 = somme2 + PutA * PutA;
}
prix = prix + somme / ntraj;
RM = RM + sqrt((somme2 / (ntraj - 1) - (somme * somme / ntraj) / ( ntraj - 1)) / (ntraj)); //variance
t1 = clock() - t1;
temps = temps + t1;
}
//temps = temps / 5;
prix = prix / 5;
RM = RM / 5;
fprintf(longstaff, "PRIX = %f RM = %f\n ", prix,RM);

}
}
}
}
}

double norminv(double u) {

double A0,A1,A2,A3,A4;
double B0,B1,B2,B3,B4;
double x,y;
double v;

A0 =-0.322232431088;
A1 =-1;
A2 =-0.342242088547;
A3 =-0.0204231210245;
A4 =-0.0000453642210148;

B0 = 0.099348462606;
B1 = 0.588581570495;
B2 = 0.531103462366;
B3 = 0.10353775285;
B4 = 0.0038560700634;

v = u;

if (v > 0.5) v = 1 - u;

y = sqrt(-log(v*v));
x = y + (A0 + y*(A1 + y*(A2 + y*(A3 + y*A4))))/(B0 + y*(B1 + y*(B2 + y*(B3 + y*B4))));

if (u < 0.5) return -x;
else return x;
}

jeudi 27 novembre 2003 à 09:00:48 | Re : aide sur un algorithme en dec-C++

garslouche

Quelle erreur as-tu exactement ?
Dslé je ne peux pas compiler ton prog, je n'ai pas GSL.
Mais à vue de nez, je dirais que ton utilisation des pointeurs m'a l'air douteuse...

On ne force pas une curiosité, on l'éveille.
.................................................Daniel Pennac
jeudi 27 novembre 2003 à 14:36:21 | Re : aide sur un algorithme en dec-C++

viagra

j'ai lu ton message, en fait mon probleme se pose au niveau de mes pointeurs sur tableau. essaie de voir si la structure utilisée est bonne.
Merci.


Cette discussion est classée dans : int, include, double, gsl, nbexercice


Répondre à ce message

Sujets en rapport avec ce message

Lire des chiffres avec les virgules [ par Stiko ] salut, j'ai fait un petit programme pour ouvrire un fichier texte qui contient seument des chifres séparées par des points virgules.ce programme lit l Problème avec type double / paramètre [ par DmX0rZ ] Bonjour,j'ai un problème qui me semble vraiment évident mais pour une raison inconnue, je ne comprens pas le comportement du programme... voilà, le pa Besoin d'aide en programmation C++ [ par yassinefugi ] Bonjour tous le monde; j'essaye de faire un programme mathématique en langage C++ qui sert à résoudre les équations différentielles , mais j'ai rencon calcul en parallèle [ par Adel85 ] Bonjour, J'utilise openmp pour effectuer un calcul en parallèle. J'ai comparé les résultats obtenu avec et sans parallélisme et ça colle pas. Bref, je [C] générer caractères aléatoires [ par Zestyr ] Bonjour, Je voudrais créer une fonction qui génère des caractères aléatoires avec un délai de 1ms max, si c'est possible moins ! Voila mon code [cod Sauvegarde d'une struct complexe vers fichier possible ? [ par nomisch ] Salut ! Dans le cadre d'un de mes projets en c++, j'ai besoin de sauvegarder la structure [b]Particle[/b] afin de pouvoir la recharger lors du redéma je n'arrive pas a affiche mon program [ par saidsarr ] quand je l'exécute il n'affiche pas le message de saisi de matrice et quand je tape une touche je sorte du programme si qu'elle peu m'aider a résoudr erreur de pointeur [ par africanwinners ] Bonsoir j'ai concu un programme c qui permet de lire un fichier,de supprimer les doublons (les doubles) mais il y a des problèmes lors de la lecture d Conversion d'un double en un tableau d'entier [ par ArzadSharlaan ] Bonjour à tous, Je cherche à convertir une varaible de type double en un tableau d'entier afin de pouvoir l'écrire dans une mémoire de type EEPROM sa condition type char [ par Adict ] Bonjour voila j'ai un problème :p j'aime faire de petit programme pour m'entrainer et faire des challenges mais la je bloque [^^mad5] en gros j'aime


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,312 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales