Matlab intro.
Répondre à la discussion
Affichage des résultats 1 à 2 sur 2

Matlab intro.



  1. #1
    Curuxa

    Matlab intro.


    ------

    Bonjour à tous,
    Dans le cadre d’une introduction à Matlab, on nous a proposé d’implémenter l’élimination de Gauss pour des systèmes carrés de type Ax=b.
    J’ai donc écrit un petit algorithme à priori pas trop faux mais qui finalement fait n’importe quoi sur les 2/3 des systèmes qu’on lui propose…Si quelqu’un pouvait m’aider à voir la faute dans le code ce serait vraiment sympa car je suis à cours d’inspiration.
    Code:
     
    %On nous propose de tester avec :
    %A=[1 3 4 5 7; 2 3 7 10 11; -3 4 66 -5 7; -4 1 2 6 3; 56 78 1 1 1]
    %b=[8 11 12 12  12]  ça ne fonctionne pas.
    %Mais avec : A=[ 1 2 1 1; 0 1 2 1; 1 0 1 2; 2 1 0 1] et b=[0 0 1 0] ça
    %fonctionne.
    function [x] = elimgauss(A,b)
        n=length(A(1,:));
        for k=1:1:n-1  % Le pas.
        % Opérations sur la sous-matrice de dimension n-k et modification de b.
        for j=k+1:n
            for i=k+1:n
                if A(k,k)~=0
                    b(i)=b(i)-(A(i,k)/A(k,k))*b(k);
                    A(i,j)=A(i,j)-(A(i,k)/A(k,k))*A(k,j);
                else disp('Erreur pivot nul.')
                    return;
                end
            end
        end
        %Affectation des zéros.
        A(k+1:n,1:k)=0;
        end
        %Régression.
        x(n)=b(n)/A(n,n);
            for i=n:-1:1
                S=0;
                for j=i+1:n;
                    S=S+A(i,j)*x(j);
                end;
                x(i)=(b(i)-S)/A(i,i);
            end
        
      end
    Merci à ceux qui liront !

    -----

  2. #2
    Curuxa

    Re : Matlab intro.

    Bon, je m’en suis finalement sorti…Merci quand même et désolé d’avoir sollicité vos forces mais j’m’arrachais les cheveux.
    En gros c’est la boucle qui modifie les termes de A qui ne doit pas modifier dans un même mouvement les termes de b, ceux-ci doivent être modifiés àpd des termes gardés en mémoire.
    Code:
    for j=k+1:n
            if A(k,k)~=0
                b(j)=b(j)-(A(j,k)/A(k,k))*b(k);
                for i=k+1:n
                A(i,j)=A(i,j)-(A(i,k)/A(k,k))*A(k,j);
                end
            else disp('Erreur pivot nul.')
                return;
            end
         end

    Bonne soirée !
    Dernière modification par Jack ; 15/11/2014 à 00h24.

Discussions similaires

  1. [Exercice] intro TP
    Par invite2ae36c1d dans le forum Biologie
    Réponses: 7
    Dernier message: 20/01/2011, 08h04
  2. Intro de tpe : )
    Par invite50841fd5 dans le forum TPE / TIPE et autres travaux
    Réponses: 4
    Dernier message: 05/04/2010, 10h46
  3. Intro TPE
    Par invite208989a4 dans le forum TPE / TIPE et autres travaux
    Réponses: 0
    Dernier message: 14/01/2007, 15h06
  4. Problème intro Tpe
    Par invite7ee4949d dans le forum TPE / TIPE et autres travaux
    Réponses: 2
    Dernier message: 05/12/2006, 10h36
  5. Intro sur la Théorie M
    Par glevesque dans le forum Physique
    Réponses: 6
    Dernier message: 12/11/2004, 03h09