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 :

Problème fonction LU de matlab


Sujet :

MATLAB

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de thtghgh
    Homme Profil pro
    Inscrit en
    Mai 2009
    Messages
    221
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2009
    Messages : 221
    Par défaut Problème fonction LU de matlab
    Bonjour!

    J'utilise la fonction lu de matlab afin d'obtenir les matrices L et U pour résoudre un système linéaire!

    On m'a appris en cours que ces matrices la étaient triangulaire supérieure (pour U) et triangulaire inférieure avec des 1 sur la diagonale (pour L), seulement, quand je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    clear all
    clc
    A=[2 4 8 ;
       1 1 4;
       3 6 7 ] 
     
    b=[6;
    5;
    4];
     
    [L,U]=lu(A)
    Matlab me renvoi les matrices suivantes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    L =
     
        0.6667         0     1.0000
        0.3333    1.0000         0
        1.0000         0           0
     
     
    U =
     
        3.0000    6.0000     7.0000
             0     -1.0000      1.6667
             0         0         3.3333
    L n'est pas du tout triangulaire inférieure et ca m'empeche d'aller plus loin dans mes calculs!

    Pouvez vous m'aider?

  2. #2
    Membre Expert
    Homme Profil pro
    Inscrit en
    Mai 2008
    Messages
    2 040
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 040
    Par défaut
    Bonjour.
    Essaie plutôt :



  3. #3
    Membre confirmé Avatar de thtghgh
    Homme Profil pro
    Inscrit en
    Mai 2009
    Messages
    221
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2009
    Messages : 221
    Par défaut
    En fait, je veux créer ma propre fonction lu et j'ai écris ce 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
    n=size(A,2);
    L=zeros(n,n);
    U=zeros(n,n);
     
    res=zeros(n,1);
    res2=zeros(n,1);
    res3=zeros(n,1);
     
    for k=1:n
     
        L(k,k)=1;
        for j=1:k-1
            res(j,1)=res(j,1)+L(k,j)*U(j,k);
        end
        U(k,k)=A(k,k)-res(k,1);
     
        for  i=k+1:n
            for j=1:k-1
            res2(j,1)=res2(j,1)+L(i,j)*U(j,k);
        	end
            L(i,k)=(A(i,k)-res2(k,1))/U(k,k);
        end
     
     
       for i=k+1:n
           for j=1:k-1
               res3(j,1)=res3(j,1)+L(k,j)*U(j,i);
           end
           U(k,i)=A(k,i)-res3(k,1);
       end
    end
    Je le teste avec cette matrice A :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    A=[-16 6 1 0 ;
        3 10 1 1 ;
        1 1 18 2 ;
        0 1 2 -14 ]
    Mais quand je fais L*U j'obtiens presque A et je ne vois pas d'ou viennent les erreurs dans mes calculs...

    Voici le résultat de L*U :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
      -16.0000    6.0000    1.0000         0
                 3.0000    8.8750    0.8125    1.0000
                1.0000    0.6250   18.0375    2.1000
                   0    1.0000    2.1000  -13.6778


    Quelq'un pourrait m'aider?

  4. #4
    Expert confirmé
    Avatar de Caro-Line
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    9 458
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 9 458
    Par défaut
    Essaye de voir ce que donne le calcul pas à pas.
    Il y a fort à parier que ce soit tout simplement des erreurs d'arrondi.

    A rapprocher peut-être de :
    Pourquoi 0.3-0.2-0.1 est-il différent de 0 ?

  5. #5
    Membre confirmé Avatar de thtghgh
    Homme Profil pro
    Inscrit en
    Mai 2009
    Messages
    221
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2009
    Messages : 221
    Par défaut
    Merci, mais la matlab n'effectue que des opérations élémentaires (multiplication, addition...), il ne devrait pas y avoir d'erreur d'arrondi

  6. #6
    Expert confirmé
    Avatar de Caro-Line
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    9 458
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 9 458
    Par défaut
    Même avec des opérations élémentaires on peut avoir des erreurs comme le montre le lien de la que je t'ai fourni.

    Enfin sinon peux-tu nous montrer l'algorithme que tu as utilisé (ça doit faire plus de 15 ans que je n'ai pas fait de décomposition LU mais transformer l'algorithme en langage MATLAB je devrais y arriver )

    Et pourquoi ne veux-tu pas utiliser la fonction toute faite de MATLAB ?

  7. #7
    Membre confirmé Avatar de thtghgh
    Homme Profil pro
    Inscrit en
    Mai 2009
    Messages
    221
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2009
    Messages : 221
    Par défaut
    Car en fait, après avoir créer ma fonction de décomposition LU, je l'utilise pour résoudre des sytèmes linéaires creux avec des méthodes précises (skyline, bande etc...)

    Et la fonction lu de matlab renvoie des matrice qui ne sont pas toujours triangulaires donc ca m'embete!

Discussions similaires

  1. Problème : Fonctions et commande Execute
    Par bubi dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 15/11/2005, 11h01
  2. Problème fonction SDL
    Par seeme dans le forum SDL
    Réponses: 2
    Dernier message: 06/11/2005, 20h22
  3. Problème fonction PL/SQL
    Par SSJ17Vegeta dans le forum PL/SQL
    Réponses: 2
    Dernier message: 29/10/2005, 21h14
  4. Problème fonction et trigger sous 7.2
    Par anoukhan dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 22/06/2005, 22h53
  5. Réponses: 2
    Dernier message: 20/08/2004, 17h10

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