nubnab Posté(e) le 8 mars 2008 Partager Posté(e) le 8 mars 2008 bonjour je sollicite votre aide pour ecrire 2 fonctions sous matlab: j'aimerais aussi sans trop vous en demandez, de m'expliquer les solutions obtenus. 1. ecrire une fonction [r]=Rhoj(A) qui donne le rayon spectrale* de la matrice J associée à la méthode itérative de Jacobi(On pourra utiliser la fonction de Matlab eigs) (*c'est le module de la plus grande valeur propre de J) Rappel de la méthode de Jacobi Pour une matrice A dont les éléments diagonaux sont nuls, on effectue la decomposition A=D - (E+F), avec D la matrice diagonale associée à A, E l'opposée de la matrice triangulaire strictement inferieure à A, et F l'opposée de la matrice triangulaire strictement superieure associée à A. on pose alors J= D-¹(E+F)=I- D-¹A (D-¹:matrice inverse de D) resoudre le systeme lineaire AX=b par la méthode de Jacobi, c'est trouver lalimite de la suite Xk definie par, Xo arbitraire et Xk+1=JXk + D-¹b la matrice J se calculant de façon rapide et exacte à l'aide de A et D 2eme fonction ecrire une methode [X,err,it,prec]=[Jacobi(A,b,itm,tol) qui resout le systeme lineaire AX=b par la methode de Jacobi les arguments d'entrée et de sortie sont: input A matrice carré de taille n,n b matice de taille n,p itm ||AX - b ||/||b|| recherché (les deux en normes 2) output X matrice n,p solution err 0 si inversion reussie 1 si nb iteration depassé 2 si rayon spectrale trop grand it nombre d'iterations effectuées prec ||AX - b ||/||b|| obtenue (les deux en normes 2) merci pour votre aide Lien vers le commentaire Partager sur d’autres sites More sharing options...
lorinc Posté(e) le 9 mars 2008 Partager Posté(e) le 9 mars 2008 Tu peux aussi demander au prof de t'expliquer la correction du TP, après tout, c'est son taff... J'ai quand même une question : vous êtes tous dans le même cours de Matlab, ou bien vous vous êtes donnés le mot ? C'est le quatrième topic en une semaine qui contient un copié/collé d'un TP de Matlab. PCI n'est pas cyberpapy. Ce forum d'entre-aide est là pour filer des coups de main entre personnes qui ont des problèmes, pas pour gratter une correction de TP. (désolé si ça donne l'impression que tu prends pour tout le monde) Regarde un peu la tronche de ce que tu postes : un copié/collé de TP, même pas un essai de réponse, nichts, niet, nada. On a l'impression que tu attends qu'on te file un scripte tout chaud à imprimmer et à filer au prof, c'est dingue quand même. En plus, "sans trop nous en demander", si y a pas les explications, c'est pas grave tant que le résultat est là... Tu pourrais au moins nous mettre le résultat de ton boulot, et dire un truc du style "à tel endroit, ça marche pas : il fait ça au lieu de faire ça, et je comprends pas pourquoi". Là, je serais ravi de t'aider. Mais franchement, faire le TP à ta place, non, quoi. J'ai l'impression de voir mes étudiants. Je donne l'énoncé : rien. Je l'explique en détail, en en montrant les subtilités : rien. Je donne l'architecture du programme, les entetes des fonctions avec la description de ce qu'elles font : rien. Encéphalogramme plat. Je vais pas coder à leur place non plus, y a un moment où il faut se sortir les doigts du cul, bordel ! La vie, c'est quelque chose qu'on est seul à pouvoir se créer, on ne peut pas faire des copier/coller... Allez, désolé pour le coup de gueule. Lien vers le commentaire Partager sur d’autres sites More sharing options...
nubnab Posté(e) le 9 mars 2008 Auteur Partager Posté(e) le 9 mars 2008 salut monsieur iorinc! 1) ce n'est pas un Ctrl c / Ctrl v mais simplement 2 questions d'un tres long tp avec parties theorique(ie des maths) et plusieurs fonctions a ecrire donc ce que j'ai posté represente environ 8% du TP 2) je ne vien pas gratter les reponses ici, puisque tu es si intelligent, tu ne penses pas que je pourrais recupperer une correction toute faite sans me compliquer la vie a poster un long message, par exemple celle de mon voisin en classe et remixer le programme sans que le prof le remarque? mais non j'ai essayer de chercher. il ya au moin un truc avec laquelle je suis d'accord avec toi c'est que j'aurais du au moin ecrire ce que j'ai pu faire pour la 1ere fonction j'ai reussi a ecrire que ça: D=diag(diag(A)); E=-tril(A,-1); F=-triu(A,+1); B_j=inv(D)*(E+F); rho_j(A)=max(abs(eig(B_j)); parcontre l'autre je ny arrive pas du tout voila voila Lien vers le commentaire Partager sur d’autres sites More sharing options...
Sentinel Posté(e) le 9 mars 2008 Partager Posté(e) le 9 mars 2008 A titre informatif, je surveille ce sujet afin que cela ne dégénère pas. Merci de bien vouloir expliquer en quoi le programme que tu as écrit ne fonctionne pas, afin que les personnes ici puissent saisir le problème et t'aider à trouver une solution. Lien vers le commentaire Partager sur d’autres sites More sharing options...
lorinc Posté(e) le 10 mars 2008 Partager Posté(e) le 10 mars 2008 pour le premier, ça semble ok, il ne reste plus qu'à le mettre sous forme de fonction matlab (avec function r=truc(A) etc...) Pour la deuxième, d'abord tu génères une matrice X(n,p) en random (La méthode de Jacobi marche quelque soit X - on pourrait ne mettre que des 1 mais le hasard fait souvent bien les choses), ensuite check esle rayon spectral de b, s'il est supérieur à 1, tu mets 2 dans err et tu quittes. Sinon, tu fais une boucle : tant que it < itm ou tol > prec prevX = X; % sauvegarde du X précédant pour l'erreur X = JX + D-¹b; % nouveau X it = it +1; % itérations prec = norm(AX - b)/norm(b); % précision err = X - prevX; % erreur end voilà Lien vers le commentaire Partager sur d’autres sites More sharing options...
tsubasaleguedin Posté(e) le 11 mars 2008 Partager Posté(e) le 11 mars 2008 pour le premier, ça semble ok, il ne reste plus qu'à le mettre sous forme de fonction matlab (avec function r=truc(A) etc...)Pour la deuxième, d'abord tu génères une matrice X(n,p) en random (La méthode de Jacobi marche quelque soit X - on pourrait ne mettre que des 1 mais le hasard fait souvent bien les choses), ensuite check esle rayon spectral de b, s'il est supérieur à 1, tu mets 2 dans err et tu quittes. Sinon, tu fais une boucle : tant que it > itm ou tol > prec prevX = X; % sauvegarde du X précédant pour l'erreur X = JX + D-¹b; % nouveau X it = it +1; % itérations prec = norm(AX - b)/norm(b); % précision err = X - prevX; % erreur end voilà lorinc est un dieu ! Lien vers le commentaire Partager sur d’autres sites More sharing options...
nubnab Posté(e) le 11 mars 2008 Auteur Partager Posté(e) le 11 mars 2008 Bonjour tout le monde merci pour ton aide iorinc dans le premier programme j'avais oublier de verifier aussi que les elements diagonaux de la matrice A etaient differents de 0 n=size(A); for i=1:n if A(i,i) ~=0; etc... le deuxieme aussi etait aussi faisable apres une bonne comprehension de la methode en question Lien vers le commentaire Partager sur d’autres sites More sharing options...
Sentinel Posté(e) le 12 mars 2008 Partager Posté(e) le 12 mars 2008 Halala, Lorinc est notre dieu des maths bizarres... (rayon spectral, nanmého, c'est pas starwars ici ) Alors si tout est résolu, on met [ resolu ] dans le titre siouplaît ! Lien vers le commentaire Partager sur d’autres sites More sharing options...
Messages recommandés
Archivé
Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.