CALCUL DES RACINES D'UNE FONCTION DU SECOND DEGRÉ DANS LES RÉELS ET LES COMPLEXE
cs_djl
Messages postés3011Date d'inscriptionjeudi 26 septembre 2002StatutMembreDernière intervention27 novembre 2004
-
6 mars 2004 à 09:26
mehdizsoft
Messages postés1Date d'inscriptionmardi 23 mars 2004StatutMembreDernière intervention18 avril 2007
-
18 avril 2007 à 20:18
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.
mehdizsoft
Messages postés1Date d'inscriptionmardi 23 mars 2004StatutMembreDernière intervention18 avril 2007 18 avril 2007 à 20:18
J'ai un autre probleme ,avec un autre programme !
voila le programme en Pascal :
program TP3;
var a,b :real ;
i,j :integer ;
begin
a:= 1;
while (((a+1)-a)-1=0) do
begin
a:=a*2;
{writeln(a);}
i:=i+1;
end;
writeln('a=', a,' i=', i);
{-------------------------}
b:=1;
while (((a+b)-a)-b) <> 0 do
begin
b:=b+1;
j:=j+1;
end;
writeln('b=', b, ' j=', j);
end.
J'ai remarqué d'apres cet l'affichage que la valeur de « a »
se multiplie par « 2 » à chaque fois .
arrivé à la ligne « 36 » il ya un changement au niveau de la valeur de « a »
donc la multiplication n'est pas exacte , elle perd de la précision :
« 6.8719476736E+10 x 2 » différent de « 1.3743895347E+11 »
voila !
Je ne comprends pas pk la 1ere boucle s'arrete et pk la 2eme boucle ne s'execute qu'une seule fois !
Si kélkin a une idée ,kil m'explique :( :)
Merci beaucoup.
cs_lemagicien
Messages postés95Date d'inscriptionsamedi 29 décembre 2001StatutMembreDernière intervention10 novembre 2004 7 mars 2004 à 21:47
Oui je viens de lire un truc la dessus, en effet c lourd a calculer en plus
cs_Kirua
Messages postés3006Date d'inscriptiondimanche 14 avril 2002StatutMembreDernière intervention31 décembre 2008 7 mars 2004 à 21:14
avec la méthode de newton tu dois déjà avoir une idée d'où se trouvent les racines, pour avoir une bonne approximation affine de départ, sinon l'erreur devient énorme et tu tombes complètement à côté. une idée pr trouver une première approximation c'est de générer des points sur un intervalle, mais c'est insatisfaisant comme méthode :-/
cs_lemagicien
Messages postés95Date d'inscriptionsamedi 29 décembre 2001StatutMembreDernière intervention10 novembre 2004 7 mars 2004 à 21:04
bien sur pas exacte mais aprochées
cs_lemagicien
Messages postés95Date d'inscriptionsamedi 29 décembre 2001StatutMembreDernière intervention10 novembre 2004 7 mars 2004 à 20:57
Normalement c'est possible.
Si je me souviens bien c'est avec la méthode de Newton.
vecchio56
Messages postés6535Date d'inscriptionlundi 16 décembre 2002StatutMembreDernière intervention22 août 201014 7 mars 2004 à 20:44
c'est sur que s'il peut trouver les solutions exactes de polynomes de degré supérieur à 4 ce serait super, sachant que c'est impossible
MetalDwarf
Messages postés241Date d'inscriptionmardi 29 octobre 2002StatutMembreDernière intervention23 janvier 2006 7 mars 2004 à 18:13
C est sur que calculer les racines d un trinome du second degre est un grand classique mais ca commence un peu a faire deja vu... Sinon renvoyer une structure peut etre interessant, mais pour qui?
Tu devrais essayer de mettre en oeuvre des solutions pour des equations de degres superieurs, la ce serait vraiment interessant...
cs_lemagicien
Messages postés95Date d'inscriptionsamedi 29 décembre 2001StatutMembreDernière intervention10 novembre 2004 7 mars 2004 à 14:48
Merci je vais regarder les 2 solutions que vous me proposez.
cs_Kirua
Messages postés3006Date d'inscriptiondimanche 14 avril 2002StatutMembreDernière intervention31 décembre 2008 7 mars 2004 à 13:29
apres tu passe un Resultat en parametre et tu recupere le type avec type_resultat genre :
swicth(res.type_resultat)
{
case 0 : // 2 racine
case 1 : // racine double
...
}
cs_lemagicien
Messages postés95Date d'inscriptionsamedi 29 décembre 2001StatutMembreDernière intervention10 novembre 2004 6 mars 2004 à 12:19
Oui on pourait refaire la fonction qui retourne la valeur de la racine mais le probleme est qu il faut gérer le fait qu'il peut y avoir 2 racines.
Ce qui deviens plus compliqué tout de suite.
Il faut prendre en compte également de retourner le type de racines,
racine réel ou racine complexe.
Si tu as une idée pour faire ca simplement je suis preneur.
Pour ma part la seul solution que je vois c'est de passer un tableau en paramettre et de stocker les valeurs dedant puis seulement d'afficher.
cs_djl
Messages postés3011Date d'inscriptionjeudi 26 septembre 2002StatutMembreDernière intervention27 novembre 20047 6 mars 2004 à 09:26
juste une chose, si la fonction (ou plutot procedure) s'occupe elle meme de l'affichage, alors elle est pas variment reutilisable
18 avril 2007 à 20:18
voila le programme en Pascal :
program TP3;
var a,b :real ;
i,j :integer ;
begin
a:= 1;
while (((a+1)-a)-1=0) do
begin
a:=a*2;
{writeln(a);}
i:=i+1;
end;
writeln('a=', a,' i=', i);
{-------------------------}
b:=1;
while (((a+b)-a)-b) <> 0 do
begin
b:=b+1;
j:=j+1;
end;
writeln('b=', b, ' j=', j);
end.
et voila l'affichage :
a= 1.0995116278E+12 i=40
b= 2.0000000000E+00 j=1
et voila un résultat plus détaillé :
2.0000000000E+00
4.0000000000E+00
8.0000000000E+00
1.6000000000E+01
3.2000000000E+01
6.4000000000E+01
1.2800000000E+02
2.5600000000E+02
5.1200000000E+02
1.0240000000E+03
2.0480000000E+03
4.0960000000E+03
8.1920000000E+03
1.6384000000E+04
3.2768000000E+04
6.5536000000E+04
1.3107200000E+05
2.6214400000E+05
5.2428800000E+05
1.0485760000E+06
2.0971520000E+06
4.1943040000E+06
8.3886080000E+06
1.6777216000E+07
3.3554432000E+07
6.7108864000E+07
1.3421772800E+08
2.6843545600E+08
5.3687091200E+08
1.0737418240E+09
2.1474836480E+09
4.2949672960E+09
8.5899345920E+09
1.7179869184E+10
3.4359738368E+10
6.8719476736E+10
1.3743895347E+11
2.7487790694E+11
5.4975581389E+11
1.0995116278E+12
a= 1.0995116278E+12 i=40
b= 2.0000000000E+00 j=1
J'ai remarqué d'apres cet l'affichage que la valeur de « a »
se multiplie par « 2 » à chaque fois .
arrivé à la ligne « 36 » il ya un changement au niveau de la valeur de « a »
donc la multiplication n'est pas exacte , elle perd de la précision :
« 6.8719476736E+10 x 2 » différent de « 1.3743895347E+11 »
voila !
Je ne comprends pas pk la 1ere boucle s'arrete et pk la 2eme boucle ne s'execute qu'une seule fois !
Si kélkin a une idée ,kil m'explique :( :)
Merci beaucoup.
7 mars 2004 à 21:47
7 mars 2004 à 21:14
7 mars 2004 à 21:04
7 mars 2004 à 20:57
Si je me souviens bien c'est avec la méthode de Newton.
7 mars 2004 à 20:44
7 mars 2004 à 18:13
Tu devrais essayer de mettre en oeuvre des solutions pour des equations de degres superieurs, la ce serait vraiment interessant...
7 mars 2004 à 14:48
7 mars 2004 à 13:29
//types possibles
enum TypeSolution
{
Reelle = 1,
Complexe,
Vide
};
struct Solution
{
TypeSolution TypeSol1, TypeSol2;
double FSol1, FSol2;
complex CSol1, CSol2;
};
comme ça c'est du tt beau C++, et plus de typedef et tu évites des const ou des #define: tu as un tt beau énum ;-)
6 mars 2004 à 13:11
6 mars 2004 à 12:56
genre (en c)
typedef struct
{
float racine_double;
float racine_1,racine_2;
...
int type_resultat;
} Resultat;
apres tu passe un Resultat en parametre et tu recupere le type avec type_resultat genre :
swicth(res.type_resultat)
{
case 0 : // 2 racine
case 1 : // racine double
...
}
6 mars 2004 à 12:19
Ce qui deviens plus compliqué tout de suite.
Il faut prendre en compte également de retourner le type de racines,
racine réel ou racine complexe.
Si tu as une idée pour faire ca simplement je suis preneur.
Pour ma part la seul solution que je vois c'est de passer un tableau en paramettre et de stocker les valeurs dedant puis seulement d'afficher.
6 mars 2004 à 09:26