IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MATLAB Discussion :

matlab les fonctions [Débutant]


Sujet :

MATLAB

  1. #1
    Nouveau membre du Club
    Inscrit en
    Janvier 2005
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 53
    Points : 34
    Points
    34
    Par défaut matlab les fonctions
    bonjour
    voila j'ai écris deux programme
    je calcul la solution d'un système de 4 équations avec 4 variables avec deux méthodes
    1ere méthode celle de cramer dont le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    function d=determinant(a,b,n)
    e=a;
    s=b;
    for i=1:4
        e(i,n)=s(i);
    end
    d=det(e);
    end
    function v=cramer(a,b)
    if det(a)~=0
     for i=1:4
         m(i)=determinant(a,b,i)/det(a);
     end
     else
          erreur('division par zero');
    end
     v=m;
     end
    2ème méthode methode de gauss pivot dont le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    function v=methpiv(a,b)
    if a(1,1)=0
        for i=2:4
    		if a(i,1)~=0
    			for j=1:4
    				va=a(i,j);
    				a(i,j)=a(1,j);
    				a(1,j)=va
    end
    i=5;
    end
    end
    end
    
    e=zeros(4);
    r=a;
    f=b;
    for i=1:4
        e(1,i)=r(1,i);
    end
    for i=1:4
        e(2,i)=r(2,i)-(r(2,1)/r(1,1))*r(1,i);
        e(3,i)=r(3,i)-(r(3,1)/r(1,1))*r(1,i);
        e(4,i)=r(4,i)-(r(4,1)/r(1,1))*r(1,i);
    end
    f(2)=f(2)-(r(2,1)/r(1,1)*f(1));
    f(3)=f(3)-(r(3,1)/r(1,1)*f(1));
    f(4)=f(4)-(r(4,1)/r(1,1)*f(1));
    h=zeros(4);
    for i=1:2
        for j=1:4
            h(i,j)=e(i,j);
        end
    end
    for i=2:4
        h(3,i)=e(3,i)-(e(3,2)/e(2,2))*e(2,i);
        h(4,i)=e(4,i)-(e(4,2)/e(2,2))*e(2,i);
    end
    g(1)=f(1);
    g(2)=f(2);
    g(3)=f(3)-(e(3,2)/e(2,2))*f(2);
    g(4)=f(4)-(e(4,2)/e(2,2))*f(2);
    s=zeros(4);
    for i=1:3
        for j=1:4
            s(i,j)=h(i,j);
        end
    end
    for i=3:4
        s(4,i)=h(4,i)-(h(4,3)/h(3,3))*h(3,i);
    end
    p(1)=g(1);
    p(2)=g(2);
    p(3)=g(3);
    p(4)=g(4)-(h(4,3)/h(3,3))*g(3);
    v(4)=p(4)/s(4,4);
    v(3)=(p(3)-s(3,4)*v(4))/s(3,3);
    v(2)=(p(2)-s(2,3)*v(3)-s(2,4)*v(4))/s(2,2);
    v(1)=(p(1)-s(1,2)*v(2)-s(1,3)*v(3)-s(1,4)*v(4))/s(1,1);
    end
    voila je vais ajouter le fait que l'utilisateur s'il entre 1 le système se résous par la méthode de cramer ,2 se résous par la méthode gauss
    j'ai pensé a ajouter une variable dans les arguments de chaque fonction mais comment faire
    je voudrais que vous me vérifier si le code en rouge qui vérifie si le pivot est nul et cherche le pivot non nul dans la premiere colonne puis échange avec cette ligne est juste ou non

    merci d'avance

  2. #2
    Modérateur

    Homme Profil pro
    Ingénieur en calculs scientifiques
    Inscrit en
    Août 2007
    Messages
    4 639
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Ingénieur en calculs scientifiques

    Informations forums :
    Inscription : Août 2007
    Messages : 4 639
    Points : 7 614
    Points
    7 614
    Par défaut
    Bonjour,

    Pour le choix, je ne comprends pas bien : tu as deux fonctions différentes, donc il suffit de faire un test sur l'entrée de l'utilisateur et d'appeler la bonne fonction?

    Pour ton code en rouge, il est juste, mais tu peux l'améliorer :
    tout d'abord, lorsque tu trouves un terme non nul, pour arrêter la boucle for il faut éviter de modifier la variable d'incrémentation. Pour cela, tu peux utiliser un break (cela permet de mettre fin à la boucle for) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    if a(1,1)=0
        for i=2:4
            if a(i,1)~=0
                for j=1:4
                    va=a(i,j);
                    a(i,j)=a(1,j);
                    a(1,j)=va
                end
                break
            end
        end
    end
    La recherche du premier terme non nul et la permutation des lignes peut aussi être simplifié :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    if a(1,1)=0
        i = find(a(:,1),1);
        if ~isempty(i)
            a([1 i],:) = a([i 1],:);
        end
    end
    J'ai mis un test car je ne sais pas si le cas ou la première colonne a des éléments tous nuls peut arriver.

    De la même façon, la plupart des boucles de ton code peuvent être supprimées en prenant en compte le fait que matlab fait très bien des opérations sur les tableaux.
    Ex :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for i=1:4
        e(i,n)=s(i);
    end
    s'écrit :
    Pour une bonne utilisation des balises code c'est ici!
    Petit guide du voyageur MATLABien : Le forum La faq Les tutoriels Les sources


    La nature est un livre écrit en langage mathématique. Galilée.

  3. #3
    Nouveau membre du Club
    Inscrit en
    Janvier 2005
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 53
    Points : 34
    Points
    34
    Par défaut
    bonsoir
    est ce que je peux faire ça
    pour la fonction utilisant la méthode cramer
    pour la fonction utilisant la méthode pivot
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    function v=methpiv(a,b)
    la fonction pour le choix de l'utilisateur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    function x=systemeL(a,b,n)
    if n==1
        e=cramer(a,b);
    end
    if n==2
        e=methodepivote(a,b);
    end
    x=e;
    end
    svp ou je dois mettre break
    merci

  4. #4
    Modérateur

    Homme Profil pro
    Ingénieur en calculs scientifiques
    Inscrit en
    Août 2007
    Messages
    4 639
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Ingénieur en calculs scientifiques

    Informations forums :
    Inscription : Août 2007
    Messages : 4 639
    Points : 7 614
    Points
    7 614
    Par défaut
    Oui, par exemple, tu peux faire ainsi.

    J'avais copié le mauvais code dans mon précédent post, je l'ai édité en rajoutant le break.
    Pour une bonne utilisation des balises code c'est ici!
    Petit guide du voyageur MATLABien : Le forum La faq Les tutoriels Les sources


    La nature est un livre écrit en langage mathématique. Galilée.

  5. #5
    Nouveau membre du Club
    Inscrit en
    Janvier 2005
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 53
    Points : 34
    Points
    34
    Par défaut
    merci beaucoup magelan

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 0
    Dernier message: 09/12/2014, 16h48
  2. Où placer les fonctions matlab du file exchange
    Par takfa2008 dans le forum MATLAB
    Réponses: 3
    Dernier message: 07/04/2013, 21h44
  3. les fonctions sous matlab‎
    Par hanou88 dans le forum Images
    Réponses: 1
    Dernier message: 12/03/2011, 13h04
  4. [Compiler] Appeler les fonctions MATLAB à partir de c++
    Par wafaa2009 dans le forum MATLAB
    Réponses: 6
    Dernier message: 02/06/2009, 13h55
  5. comment integré les fonction de matlabe en c++ builder
    Par kachaloarmin dans le forum C++Builder
    Réponses: 2
    Dernier message: 09/05/2008, 22h09

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo