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 :

Erreur sur Fsolve (levenberg-marquardt algorithm)


Sujet :

MATLAB

  1. #1
    Membre à l'essai
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Février 2013
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Bâtiment

    Informations forums :
    Inscription : Février 2013
    Messages : 34
    Points : 10
    Points
    10
    Par défaut Erreur sur Fsolve (levenberg-marquardt algorithm)
    Bonjour,
    J'utilise l'algorithme 'levenberg-marquardt' pour la résolution d'un système d'équations non-linéaires...
    J'ai déjà pu avoir de bons résultats avec le même programme, mais à partir d'un certain moment j'ai ce message:
    No solution found.
    
    fsolve stopped because the problem appears to be locally singular.
    
    <stopping criteria details>
    
    
    fsolve stopped because the regularization parameter, 5.000000e+016, exceeds 1e16.
    Voici la commande que j'utilise pour Fsolve:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     
    a= fsolve(@myfun,a0,optimset('Display','iter','TolFun',1e-25,'MaxFunEvals',10000000,'MaxIter',10000000,'Algorithm',{'levenberg-marquardt',.005}, 'TolX',1e-25, 'TolFun',1e-25));
    C'est quoi ce paramètre de régulation? et comment changer sa valeur de manière à ne plus avoir cette erreur?

    Merci à l'avance.

  2. #2
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 302
    Points : 52 882
    Points
    52 882
    Par défaut
    Montre nous le code de myfun
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  3. #3
    Membre à l'essai
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Février 2013
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Bâtiment

    Informations forums :
    Inscription : Février 2013
    Messages : 34
    Points : 10
    Points
    10
    Par défaut
    Le voilà...

    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
     
     
    function f = myfun(a)
    %UNTITLED Summary of this function goes here
    %   Detailed explanation goes here
     
    load('M');
    load('K');
    load('B');
     
     
    p=9;
     
    Amp=0.05;
     
    X(1)=Amp;
    X(2)=a(2);
    X(3)=a(3);
    X(4)=a(4);
    X(5)=a(5);
    X(6)=a(6);
    X(7)=a(7);
    X(8)=a(8);
    X(9)=a(9);
     
     
     
     
     
     
    Provisoire=zeros(p,p,p,p);
     
    for i=1:p
        for j=1:p
            for k=1:p
                for l=1:p
                    Provisoire(i,j,k,l)=X(k)*X(l)*B(i,j,k,l);
                end
            end
        end
    end
     
    S1=sum(Provisoire,4);
    BA=sum(S1,3);
     
     
    Cool1= (X*K*X')+ (X*BA*X');
    Cool2= X*M*X';
    Omeganonlin2=Cool1/Cool2;
     
     
     
    SYSTEM=(2*K*X')+(3*BA*X')-(2*Omeganonlin2*M*X');
     
    SYSTEM(1)=[];
     
    f=SYSTEM;
     
    end

  4. #4
    Membre éclairé
    Homme Profil pro
    Doctorant automatique
    Inscrit en
    Janvier 2012
    Messages
    446
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Doctorant automatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2012
    Messages : 446
    Points : 719
    Points
    719
    Par défaut
    Salut,

    Désolé, mais là, je sèche... Il me semble que tu as un problème de précision... Il t'affirme que tu dépasses les 10^16 avec un paramètre de "régularisation". Je ne sais pas à quoi il correspond, mais du coup, en regardant la précision que tu cherches, tu demandes du 10^-25 : je ne sais pas si matlab est capable d'aller jusque là. Essaye avec une précision moins exigeante peut-être ?

    Sinon, go potasser la doc

    Bon courage

    A+
    Je ne réponds pas aux MP techniques. Le forum est là pour ça.
    La raison est simple : il est ennuyeux de répondre à une seule personne, alors que la réponse peut servir à tout le monde.
    Conclusion : n'hésitez pas à utiliser le forum pour poser vos questions.
    Matlab 2005 - ver.7.1.0.183 (R14) Service Pack 3

  5. #5
    Modérateur
    Avatar de le fab
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    1 882
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 882
    Points : 3 432
    Points
    3 432
    Par défaut
    tout comme tachmou, essaye des options moins exigeantes (1e-25 !!)

    essayes également d'autres valeurs de λ (0.005) dans ton algo de levenberg-marquardt car a priori vu ton message d'erreur le problème se situe là :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Trust region radius became too small (trust-region-dogleg algorithm) or
     regularization parameter became too large (levenberg-marquardt algorithm).
    ou essayes l'autres algo (trust-region-reflective)

Discussions similaires

  1. Réponses: 0
    Dernier message: 28/05/2015, 03h00
  2. Réponses: 0
    Dernier message: 27/04/2014, 13h53
  3. Algorithme de Levenberg Marquardt
    Par TopCao dans le forum C++
    Réponses: 28
    Dernier message: 13/01/2010, 16h06
  4. [VBS] Erreur sur "AddWindowsPrinterConnection"
    Par Admin dans le forum VBScript
    Réponses: 5
    Dernier message: 27/03/2004, 16h15
  5. Erreur sur le TNSListener après installation de 9iAS
    Par Patmane dans le forum Installation
    Réponses: 4
    Dernier message: 04/02/2004, 11h16

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