Neo4
15-12-2007, 20:00
Boas, estou a fazer um trabalho em que o objectivo é encontrar as raizes imaginarias de um polinomio utilizando o metodo de newton.
para tal é necessario iterar o mesmo processo varias vezes para varios pontos para ver quantas raizes sao encontradas, isso vai retornar muitas raizes, o meu objectivo é guardar num array so as raizes diferentes e desenvolvi isto:
cplx P0; float x, y;
int i,b=1;
cplx roots[20];
for(y=-1, x=-1; x<1 ; x=x+0.01, y=y+0.01){
P0.real=x; P0.imaginario=y;
P0 = newton(P0); printf("\nraizes: %lf e %lfi\n", P0.real, P0.imaginario);
for(i=0;i<b;i++){
if((roots[i].real == P0.real) && (roots[i].imaginario== P0.imaginario)) {break;}
else if(i==b-1){roots[i] = P0;
b++;
printf("raizes guardadas: %lf e %lfi, posicao:%d\n", roots[i].real, roots[i].imaginario, i);break;}
}
}
cplx foi uma struct defenida por mim que tem 2 inteiros um real e um imaginario;
os printf's estao so mesmo para ver o que corre mal
e o que acontece é que ele guarda logo no array as primeiras 20 iteraçoes do ciclo mesmo elas sendo iguais as que ja la estao!
para tal é necessario iterar o mesmo processo varias vezes para varios pontos para ver quantas raizes sao encontradas, isso vai retornar muitas raizes, o meu objectivo é guardar num array so as raizes diferentes e desenvolvi isto:
cplx P0; float x, y;
int i,b=1;
cplx roots[20];
for(y=-1, x=-1; x<1 ; x=x+0.01, y=y+0.01){
P0.real=x; P0.imaginario=y;
P0 = newton(P0); printf("\nraizes: %lf e %lfi\n", P0.real, P0.imaginario);
for(i=0;i<b;i++){
if((roots[i].real == P0.real) && (roots[i].imaginario== P0.imaginario)) {break;}
else if(i==b-1){roots[i] = P0;
b++;
printf("raizes guardadas: %lf e %lfi, posicao:%d\n", roots[i].real, roots[i].imaginario, i);break;}
}
}
cplx foi uma struct defenida por mim que tem 2 inteiros um real e um imaginario;
os printf's estao so mesmo para ver o que corre mal
e o que acontece é que ele guarda logo no array as primeiras 20 iteraçoes do ciclo mesmo elas sendo iguais as que ja la estao!