CeNedra83
Messages postés96Date d'inscriptionlundi 20 novembre 2000StatutMembreDernière intervention11 juillet 2006
-
28 mars 2006 à 10:26
patriarch24
Messages postés25Date d'inscriptionsamedi 12 avril 2003StatutMembreDernière intervention28 mars 2006
-
28 mars 2006 à 15:53
je code en C++ en je ne comprend pas un truc:
ma fonction marchait très bien et maintenant elle se met à planter une fois sur 2 pour cause d'allocation de pointeurs je pense.
j'ai alors tout enlevé et déclaré mes pointeurs autrement et j'obtiens ceci:
void polyReg(double *x, double *y, int sizexy, double *a, int order_poly)
{
//realize polynomial interpolation.
//x : array of all points x coordinates.
//y : array of all points y coordinates.
//sizexy : size of x and y arrays.
//a : polynomial coeff returned.
//order_poly : order of polynom wanted.
//-----"Moindres Carrés" Method-----
int ord = order_poly + 1;
int n = sizexy;
double** A = new double*[ord];
for (int i=0 ; i<ord ; i++)
A[i] = new double[ord];
////à voir la dimension de S
double *S = new double[2*order_poly +1];
double *W = new double[ord];
double *sol = new double[ord];
//double** A = (double **)calloc( ord , sizeof(double *));
//for(int i=0; i<ord; i++) A[i] = (double *)calloc( ord , sizeof(double));
////à voir la dimension de S
//double *S = (double *)malloc( (2*order_poly +1 ) * sizeof(double));
//double *W = (double *)calloc(ord, sizeof(double));
//double *sol = (double *)calloc(ord, sizeof(double));
//tableaux x et y OK
/*
//-----computing the Sk-----
for(int k=0; k<= (2*order_poly) ; k++)
{
S[k]=0;
for(int i=1; i< n+1; i++)
{
S[k] = S[k] + pow(x[i-1],k);
}//for i
}//for k
//-----computing the Wk-----
for(int k=0; k< order_poly+1; k++)
{
W[k]=0;
for(int i=1; i<n+1; i++)
{
W[k] = W[k] + y[i-1] * pow(x[i-1],k);
}//for i
}//for k
//---computing matrix coefficients---
for(int i =1; i<= ord ; i++)
{
for(int j =1; j<= ord ; j++)
{
if(i==1 && j==1)
A[i-1][j-1] = n;
else
A[i-1][j-1] = S[i+j]; //à voir pour le -2????
}//for j
}//for i
patriarch24
Messages postés25Date d'inscriptionsamedi 12 avril 2003StatutMembreDernière intervention28 mars 2006 28 mars 2006 à 15:53
Déjà, commence par éviter d'utiliser "free" et delete en même temps : en C++, c'est new et delete.
Au vu de ton code, tu dois avoir des erreurs de segmentation... il est monstrueux ! Tu détruit un objet, et tu utilise la zone mémoire ensuite : delete []S et plus bas : S[k] -> pas étonnant qu'il y ait des problèmes. Repense complétement ton code, réfléchit bien à ce que tu fais, et ne détruit pas les objets trop vite !