RESOUDRE AX = B AVEC LA METHODE DE GAUSS

cs_psycho Messages postés 232 Date d'inscription samedi 11 mai 2002 Statut Membre Dernière intervention 27 octobre 2007 - 16 sept. 2004 à 00:22
plus_plus_fab Messages postés 232 Date d'inscription vendredi 9 janvier 2004 Statut Membre Dernière intervention 8 janvier 2005 - 23 sept. 2004 à 14:32
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/26189-resoudre-ax-b-avec-la-methode-de-gauss

plus_plus_fab Messages postés 232 Date d'inscription vendredi 9 janvier 2004 Statut Membre Dernière intervention 8 janvier 2005
23 sept. 2004 à 14:32
J'ai peut etre un début de réponse ...
Ton exécutable lié statiquement n'est pas aussi gros que ça, par rapport au mien, qui est compilé (sauf erreur) avec -O2 -ftracer -march=xxx. Je soupsonne donc le tien d'avoir été compilé en -Os, donc au détriment des performances. Ce n'est certainement pas un hasard, et ça m'incite à penser que les concepteurs ont fait ce choix uniquement parce que la liaison statique est la seule solution.

Quelle est la licence de ta librairie ? GPL normalement ?
Je ne suis pas juriste, mais il me semble que les concepteurs des programme qui lient statiquement cette librairie peuvent en faire ce qu'ils en veulent, meme faire des logiciels propriétaires.
Par contre, les logiciels qui lient dynamiquement cette librairie doivent etre eux aussi sous licence GPL. Donc si cette librairie partagée (.so ou .dll) existait sur ton système, un logiciel propriétaire, ou ton OS (non GPL si c'est w$), pourrait etre tenter de l'utiliser ... probleme de licence !
il existe une autre licence pour les librairies: la LGPL. Son intéret est de permettre à un logiciel sous licence quelconque, de lier dynamiquement une librairie LGPL. Mais la libstdc++ est sous GPL ...

Je crois bien ne pas etre tres loin de la vérité ... Si un spécialiste des licences GPL/LGPL passe par la, qu'il me corrige si je me trompe merci.
cs_Kirua Messages postés 3006 Date d'inscription dimanche 14 avril 2002 Statut Membre Dernière intervention 31 décembre 2008
23 sept. 2004 à 07:46
non, j'ai fait une recherche sur tout mon DD pour être sûr, pas de libstdc++.dll ni de .soni de rien d'autre.

et non, y avait pas d'option super spéciale, j'en suis sûr, j'ai installé dev au moins 5 fois en une journée il y a qq jours :p

ça m'énerve cette histoire :(
plus_plus_fab Messages postés 232 Date d'inscription vendredi 9 janvier 2004 Statut Membre Dernière intervention 8 janvier 2005
22 sept. 2004 à 22:43
libstdc++.la, c'est un fichier texte permettant de lier la librairie statique libstdc++.a.
Je ne vois par contre pas d'explication au fait que les librairies dynamiques soient absentes ... c'est un scandale !
A l'installation de dev-c++, y avait peut-etre une case à cocher dans le troisieme menu de la quatrième fenetre (au sous-sol) :-)

libstdc++.so, il n'existe pas non plus ? (extension habituelle sous Unix)
cs_Kirua Messages postés 3006 Date d'inscription dimanche 14 avril 2002 Statut Membre Dernière intervention 31 décembre 2008
22 sept. 2004 à 22:08
j'ai un libstdc++.a et un libstdc++.la, mais je trouve pas de .dll correspondant... armf, tu vois une explication à ça?

au fait, c'est quoi le .LA ?
plus_plus_fab Messages postés 232 Date d'inscription vendredi 9 janvier 2004 Statut Membre Dernière intervention 8 janvier 2005
22 sept. 2004 à 21:57
héhé !
peut etre que les librairies dynamiques ne sont pas installé ... le linker se rabatrait alors vers les librairies statiques (?). Cherche voir si tu trouve la librairie dynamique libstdc++. Le nom sous w$ ? heuu un libstdc++.dll ou quelquechose comme ça. la librairie statique devrait s'appeler libstdc++.a
cs_Kirua Messages postés 3006 Date d'inscription dimanche 14 avril 2002 Statut Membre Dernière intervention 31 décembre 2008
22 sept. 2004 à 20:57
exactement le même exécutable, avec -static :(
plus_plus_fab Messages postés 232 Date d'inscription vendredi 9 janvier 2004 Statut Membre Dernière intervention 8 janvier 2005
22 sept. 2004 à 20:54
l'edition de lien dynamique est faite par defaut, rien à ajouter normalement ...
essaye une edition de lien statique voir si ça te donne pas le meme executable des fois que ...
g++ -static helloword.cpp -o helloword
cs_Kirua Messages postés 3006 Date d'inscription dimanche 14 avril 2002 Statut Membre Dernière intervention 31 décembre 2008
22 sept. 2004 à 18:11
j'ai g++ 3.2, j'ai essayé de compiler avec tes options (-Os -fno-exceptions), et ça me fait 208 Ko avec -s (strip) au lieu de 211 (tjs avec strip).

suis sensé utiliser quelle option pr compiler en mode dynamique? (à noter: suis sous Dev-C++, un EDI pr Windows).
plus_plus_fab Messages postés 232 Date d'inscription vendredi 9 janvier 2004 Statut Membre Dernière intervention 8 janvier 2005
22 sept. 2004 à 17:47
je passais la par hasard, ...
et concernant la taille des executables que produit g++, je suis assez surpris.
en compilant un helloword (utilisant iostream), j'obtiens 8559ko, en compilant de la manière suivante :
g++ -Os -fno-exceptions helloword.cpp -o helloword
(g++ v-3.3.3 sous Linux 2.6.7)
par defaut g++ fait une edition de lien dynamique, donc iostream n'est pas inclu. l'édition de lien statique inclu iostream dans l'executable, du coup il est enorme (1Mo et quelques pour moi), mais autonome : pas besoin de libstdc++.so.
peut-etre que g++ sous dev-C++ fait une edition de lien statique par defaut, c'est à voir en tout cas. Mais meme en mettant les informations de debug, de profiling, je n'arrive pas à avoir un executable de 400ko !

Sinon, pour ces histoires de norme, on pas fini d'en rire de cette histoire de variable de boucle !!!
De toute façon, la critique d'un compilateur, c'est subjectif : il faut comparer la vitesse de compilation, la qualité de l'executable produit, la précision des messages d'erreurs. Et on ne peux pas optimiser ces trois criteres à la fois!
Il existe un autre critère : le respect de la norme. Tant pis si les autres critères en souffre, c'est le plus important, et g++ est le plus avancé (et de loin) dans ce domaine.

Et pour le vocabulaire, on parle d'un compilateur qui respecte la norme, et d'un code qui est conforme au standard ! Sinon, on comprend plus rien ...

pour finir, un compillateur C++ qui permet de comprendre ce que l'on fait, qui est bien documenté, très performant, et qui respecte (presque) le standard: g++.
cs_Kirua Messages postés 3006 Date d'inscription dimanche 14 avril 2002 Statut Membre Dernière intervention 31 décembre 2008
17 sept. 2004 à 18:30
c'est même pas du tout le même i ^^
keayoub Messages postés 14 Date d'inscription samedi 11 septembre 2004 Statut Membre Dernière intervention 17 septembre 2004
17 sept. 2004 à 16:28
Oui et bien désolé tt le monde d'avoir posé ce type de code mais malgré ca on a un peu trouvé d'autre chose
et comme on dit tjr
"la perfection est tjr le fruit d'un echec"

Pour le sujet de la declaration que je trouve trés bien exepliqué par Kirua c vrai que

for(int i=0;i<5;i++) {............}
et apres une ligne avec " int i = 5; "
c pas une erreur et c pas aussi une redéclaration car je c pas mais pour VC++ c'est sure que "i" est morte aprés la boucle "for" en plus le "i" de "int i=5" n'est pas vraiment le même "i"
cs_psycho Messages postés 232 Date d'inscription samedi 11 mai 2002 Statut Membre Dernière intervention 27 octobre 2007
17 sept. 2004 à 00:56
cosmobob> tu as du mal lire ou je me suis mal exprimé :
for(int i=0;i<5;i++){}-->correct

par contre, c apres, il n y a pas de variables nommée i qui est déclaré dans la fonction, il est donc normal que
for(int i=0;i<5;i++){}
A[i]=B[i][i];(c'est un exemple, mais dans le code, il y a ce genre de choses)
pose probleme a la compilation
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
16 sept. 2004 à 19:35
keayoub> tu peux tout faire dessus en quasi nimporte quel langage, fonce dessus tranquille, y a pas mieux.
cs_Kirua Messages postés 3006 Date d'inscription dimanche 14 avril 2002 Statut Membre Dernière intervention 31 décembre 2008
16 sept. 2004 à 19:26
ce qui est pelant avec BCB6, c'est que c'est un peu comme PHP: t'as beau faire des programmes super efficaces en peu de tps, t'es pas satisfait parce que t'as tjs ce sentiment d'avr seulement utilisé des outils pré-machés. j'ai arrêté BCB6 à cause de ça, c'était pas satisfaisant. bon, si tu cherches l'efficacité et pas la pédagogie, fonce bien entendu ^^.

le problème avec les for sous VC6, c'est ça:

for(int i = 0; i < ...; i++)
{
...
}

int i = 5; // erreur, redéclaration de i, alors que le standard dit bien que la variable i compteur de la boucle for doit "mourir" à la fin de la for, et que donc cette ligne-ci n'est PAS une redéclaration!
keayoub Messages postés 14 Date d'inscription samedi 11 septembre 2004 Statut Membre Dernière intervention 17 septembre 2004
16 sept. 2004 à 19:25
ah je viens d'installé 2003 et j pas encore testé a ton avis c bien
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
16 sept. 2004 à 18:55
VS 2003 c'est top.
keayoub Messages postés 14 Date d'inscription samedi 11 septembre 2004 Statut Membre Dernière intervention 17 septembre 2004
16 sept. 2004 à 18:43
oui c vrai cosmobob car moi for(int i=0;i.......
je trouve que c normal sous C++ et c deja trés utilisé

et pour kirua je veux parlé de borland C++ builder 6
mais je c pas que c trés chér

et pour la remarque de BruNews c vrai que le Vs et le plus utilisé rie na faire pour changer donc si klk connais un compilo plus puissant ki m'informe please
cosmobob Messages postés 700 Date d'inscription mardi 30 décembre 2003 Statut Membre Dernière intervention 27 janvier 2009 4
16 sept. 2004 à 17:56
psycho; si ton g++ plante en compilant le for (int i = 0; etc... c'est bizare, essaie de dl une version plus recente....
cosmobob Messages postés 700 Date d'inscription mardi 30 décembre 2003 Statut Membre Dernière intervention 27 janvier 2009 4
16 sept. 2004 à 17:52
for (int i = 0; i < 5; i++ ) { .. } est standard en C++ (testé a l'instant sous gcc), c'est en C que ca ne l'est pas.
keayoub Messages postés 14 Date d'inscription samedi 11 septembre 2004 Statut Membre Dernière intervention 17 septembre 2004
16 sept. 2004 à 16:42
et Pour Psyco moi aussi je ss pas fun des Merdes de M$.. mais j pas trop de solution car ds la boite ou je travail il travail avec ca et moi je ne fé que m'adapté mais entre moi je prefére C++ builder et mnt j compris ta remarque ok merci
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
16 sept. 2004 à 16:40
Reste donc sous VS car me semble etre le plus employe dans les entreprises.
cs_Kirua Messages postés 3006 Date d'inscription dimanche 14 avril 2002 Statut Membre Dernière intervention 31 décembre 2008
16 sept. 2004 à 16:37
tu veux parler de Turbo C++ alors?
parce que le RAD de Borland (Inprise mtnt) est franchement cher... à moins que tu ne prennes une version Personnal de Builder X, mais tu ne pourras pas distribuer tes programmes sauf erreur (par contre sous GPL peut-être... faudrait voir)
keayoub Messages postés 14 Date d'inscription samedi 11 septembre 2004 Statut Membre Dernière intervention 17 septembre 2004
16 sept. 2004 à 16:33
Bien vue Pamaury juste une chose si tu veux mieux expliqué ta notion sur les lib static de g++ ou il y a STL car j pas bien copris
pour VC++ c sure qu'il utilise des lib dynamique en plus tt ds le VC++ est dynamique et pour utiliser STL il suffit de faire l'appel c tt moi mnt je travail plus avec STL car cela aide beaucoup mais sous VC++

et juste une idée des autres commentaires si je pense changer de compilo alors je utilisé C++ builder de Borland
Pamaury Messages postés 341 Date d'inscription jeudi 3 avril 2003 Statut Membre Dernière intervention 17 juin 2008 3
16 sept. 2004 à 15:53
si je ne me trompe pas, la taille du code vient du fait que VC++ utilise des lib dynamic alors que g++ utilise des lib static donc toutes la STL est incluse ?

Sinon, pour les boucles je suis pas d'acoord, je pense que un code du style:
for(int i=0;i<N;i++)
{
}
ne nuit pas au code mais bon la différence n'est pas grande tant que il n'y a pas 50 boucles qui s'enchaînent(dans ce cas une variable vaut mieux que 50 !) .
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
16 sept. 2004 à 13:30
psycho> tout a fait d'accord qu'on ne devrait absolument plus ecrire ce genre de code depuis longtemps.
cs_psycho Messages postés 232 Date d'inscription samedi 11 mai 2002 Statut Membre Dernière intervention 27 octobre 2007
16 sept. 2004 à 12:36
il me semble que tu as raison brunews, mais concernant le code de keayoub, ca m etonnerait fort qu'ils soit au norme....

Quand a ta remarque kirua, tu as tout a fait raison, la taille est éxagéré, mais pour moi, les compilateurs GCC et G++ restent quand meme les meilleurs du moment.
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
16 sept. 2004 à 11:26
N'y avait-il pas du code produit AVANT que les normeurs n'etablissent des regles ? auquel cas fallait bien garder la compatibilite avec l'existant.
Depuis VS6 il y a eu 2 versions qui sont maintenant aux normes.
cs_Kirua Messages postés 3006 Date d'inscription dimanche 14 avril 2002 Statut Membre Dernière intervention 31 décembre 2008
16 sept. 2004 à 07:38
j'utilise Dev-C++ moi-même mais... autant VC++6 avait un gros problème de standard au niveau de la portée des compteurs de boucles, autant... les exe qui g++ produit sont d'une taille exceptionnellement exagérée!! un hello world qui utilise la std ça fait 400Ko! et avec -s ça en fait encore facile 220, c'est exagéré. VC produit bien plus petit que ça, et c'est dommage pr nous ^^
cs_psycho Messages postés 232 Date d'inscription samedi 11 mai 2002 Statut Membre Dernière intervention 27 octobre 2007
16 sept. 2004 à 01:48
suis désolé, mais un int ne mange rien de nos jours....par contre, la matrice 3dimensions, elle, elle bouffe. Sinon, pour en revenir a visual c++, le compilo est a chier. Il est pas au norme. En compilant ton code aved g++, g eu une dizaine d erreur, pour te dire...entre autre, n importe quel bon compilateur ne laisserai passer tes manques de déclarations concernant tes int i dans chauqe une de tes boucles....

c pour ca que je te suggere de changer de compilo...fo arreter de toucher a la merde que peut souvent produire M$...le pire c'est qu'il y a des acheteurs.....
keayoub Messages postés 14 Date d'inscription samedi 11 septembre 2004 Statut Membre Dernière intervention 17 septembre 2004
16 sept. 2004 à 01:17
et pour resumé les choses moi aussi

je te dis que moi j fé bcq de C et de C++ que tu peux imaginé et c pas mes sources les plus importt mais moi je teste juste comment les choses se passe ds ce site et pour l'avenir je v essai de depossé klk chose de plus importt

et juste une remarque pour ta remarque
sur for(int i=0;i<N;i++) cela te permet de pas trop boufé de la mémoire
keayoub Messages postés 14 Date d'inscription samedi 11 septembre 2004 Statut Membre Dernière intervention 17 septembre 2004
16 sept. 2004 à 01:08
bon bref comme tu as pu remarqué entre ce code et les autres que j déposé il y bcq de differnce car peut etre j oublié de mensionné que ce n'est pa le mien mais soit sure que je v transmettre tes remarques au propriétaire le plus vite possible est merci pour t remarque

juste pour le compilo moi j'aime bien le visual C++ que d'autre et je ss pas prét pour changer en plus j testé dev C++ mais j pas trop aimé et merci chaqun ca faon de voir les choses
cs_psycho Messages postés 232 Date d'inscription samedi 11 mai 2002 Statut Membre Dernière intervention 27 octobre 2007
16 sept. 2004 à 00:22
la encore, c'est loin d'etre au point....pourtant l'algorithme se retrouve vraiment tout seul.....donc, il est vraiment pas très dur à comprendre....

Donc, apparemment, il marche pour les matrices 2*2(bien que je ne sois pas sur, je n ai pas regardé le cas de matrice à conditionnement élevée...enfin bref). Ah, si tiens, le cas des matrices a determinant nul ne marche pas.....
Sinon, je comprend pas pourquoi tu testes si la diagonale est non nulle....puisque tant qu 'a faire, tu aurais mieux fais de coder la methode de gauss avec pivot(partiel ou total, elle marche assez bien toutes les deux, et gere les diagonales nulles)

Ensuite, il est a mes yeux urgent d 'apprendre a faire un code lisible.... pas de ligne sautée entre 2 fonctions, je n ai pas compris l'utilité (absolument inutile d'une matrice 3dimensions...puisque deux dimensions suffisent...

je te sugerrerait de lire un bon cours d analyse numérique avant de pondre un autre code de ce genre la prochaine fois. Je ne dis pas que c'est mal codé, mais que c'est très mal pensé, mais alors, très très mal...

Bon, dernier point, je sais pas ce que tu utilisent comme compilo, mais ca m etonnerait qu'il soit au norme. quand tu fais un bloc for(int i=0;i<N;i++){
...}
, ton int i n'est declaré que pour la boucle for, et non pas pour tout le reste de ta fonction. Abandonne cette méthode au plus vite, et passe par un bloc de déclaration de variables, ca t'aidera(et nous aidera) a relire le code.

Ensuite, pense(c'est impératif) a indenter correctement, a mettre en page ton code, parce que la, c un torchon a mes yeux...

Bref, pour résumer :
-arrete le c++, et revient au C, tu en as besoin, tu feras du C++ quand tu auras un peu plus consolidé certaines choses
-met en page ton code
-pense u peu mieux tes algos
-muni toi d un bon compilateur(GCC ou G++) et abandonne visual studio si c'est ce que tu utilisent(dev-C++ est pas mal)

voila, bonne continuation tout de meme