Ich habe zwei Arrays mit 64-Bit-Ganzzahlen (eine für die x- und eine für die y-Werte) Ich möchte mit einer geraden Linie beginnend vom Ursprung passen. Sie haben beide Länge num
.Lineare Anpassung mit GNU Scientific Library in C
Ich habe eine vorherige Parsing der beiden Arrays, so dass sie beginnen, wenn sie beide Null sind, so dass ich eine der beiden Arrays verschieben, entsprechend dem Wert von result
entweder durch pos1
oder durch pos2
.
Nun, wie ich schon sagte, die Arrays sind 64-Bit-Integer-Größe, so dass ich sie als Double Cast. Aber wenn ich den folgenden Code anrufe, stürzt das Programm ab. c1
, cov11
und sumsq
sind außen als Doppelzeiger definiert.
if(result > 0)
gsl_fit_mul((double *) array1 + pos2, 1,(double *) array2, 1, (num - pos2 - 1) * sizeof(uint64_t), c1, cov11, sumsq);
else
gsl_fit_mul((double *) array1, 1, (double *) array2 + pos1, 1, (num - pos2 - 1) * sizeof(uint64_t), c1, cov11, sumsq);
Ich versuchte the documentation zu lesen, aber es ist actully nicht so klar, und ich denke, das Problem zu dem Arrays im Aufruf ist.
Vielen Dank im Voraus.
EDIT: Ich änderte Ansatz. Ich schrieb diese Funktion
void findFit(uint64_t *array1, uint64_t *array2, uint64_t num, double c1){
double *array1_parallel = malloc(num * sizeof(double)), *array2_parallel = malloc(num * sizeof(double));
for(uint64_t i = 0; i < num; i++){
array1_parallel[i] = (double) array1[i];
array2_parallel[i] = (double) array2[i];
}
double *cov11, *sumsq;
gsl_fit_mul(array1_parallel, 1, array2_parallel, 1, num, &c1, cov11, sumsq);
free(array2_parallel);
free(array1_parallel);
return;
}
es vorbei an den bereits verschoben und analysiert Arrays, aber es ist immer noch nicht funktioniert ...
Sie können nicht ein ganzes Array nur durch den Zeiger werfen. Sie müssen jedes Element umwandeln. Sie benötigen also ein paralleles Array von Doppelpunkten und füllen sie mit den int-Werten. Einer nach dem anderen. In einer Schleife. – joop
Danke für die schnelle Antwort. Wenn die Integer-Arrays die Dimension 'num * sizeof (uint64_t)' haben, sollte ich 'num * sizeof (double)' für das parallele Array zuweisen? – Enzo
Ja, das ist im Grunde die Idee. Gleiche Anzahl von Elementen. (aber Größen von Elementen * können * abweichen. (irrelevant)) – joop