Répondre à la discussion
Affichage des résultats 1 à 20 sur 20

Résoudre une équation non linéaire à une inconnue




  1. #1
    pa24

    Résoudre une équation non linéaire à une inconnue

    Bonjour,

    j'ai besoin de résoudre une équation très longue à une inconnue (x) qui a la forme suivante :

    x - f(x)=0 avec f(x) une expression particulièrement longue et fastidieuse (différents quotients etc…) et non linéaire en x (comme elle serait trop lourde à développer, je l'ai entrée directement dans Matlab, et je ne sais pas exactement de quel degré elle est).

    Comme je n'ai ni une équation linéaire, ni un polynôme sous forme réduite (pour lesquels je sais qu'il existe des codes spéciaux), voilà le code que j'ai utilisé : (je me suis basée sur ce lien).

    J'ai donc appliqué :

    syms x;
    eqn= x-f(x)==0;
    S= solve(eqn,x);

    J'obtiens le message d'erreur suivant : "??? Error using ==> char
    Conversion to char from logical is not possible.

    Error in ==> solve>getEqns at 165
    vc = char(v);

    Error in ==> solve at 67
    [eqns,vars] = getEqns(varargin{:});" qui renvoie vers le code de la fonction "solve".

    Quelqu'un pourrait-il m'expliquer ce que cela signifie et comment je peux y remédier ? J'ai utilisé le même code avec une équation très simple pour vérifier que cela ne venait pas de la complexité de mon équation, et j'obtiens toujours le même message d'erreur.

    Mille mercis !!

    -----


  2. Publicité
  3. #2
    Arzhur

    Re : Résoudre une équation non linéaire à une inconnue

    Bonjour,

    tu as quelle version de matlab ? L'exemple fourni semble être valide uniquement pour certaines version.

  4. #3
    pa24

    Re : Résoudre une équation non linéaire à une inconnue

    Bonjour,

    j'ai Matlab 2009 pour Mac OS X.


  5. #4
    Arzhur

    Re : Résoudre une équation non linéaire à une inconnue

    Le lien que tu mentionnes est lié à la version 2014 de matlab....regarde dans l'aide fourni avec ta version comment utiliser le méthode solve, on dirait que la syntaxe n'est pas la même : utilisation du "=" à la place de "==" et mettre l'equation entre quote

  6. #5
    pa24

    Re : Résoudre une équation non linéaire à une inconnue

    En effet, je n'avais pas fait attention à cela, merci bien !

    Maintenant ça tourne, mais j'ai le message suivant : "Warning: Explicit solution could not be found".

    As-tu une idée de ce que je peux faire ?

  7. A voir en vidéo sur Futura
  8. #6
    pa24

    Re : Résoudre une équation non linéaire à une inconnue

    J'imagine que c'est parce que ma variable ne peut pas être isolée dans l'équation, mais puisque j'ai défini préalablement les valeurs de tous les paramètres qui apparaissent dans l'équation, ça devrait être possible de résoudre mon équation implicitement non ?

  9. #7
    Arzhur

    Re : Résoudre une équation non linéaire à une inconnue

    ça devrait être possible de résoudre mon équation implicitement non ?
    Alors ça....j'en sais sacrement rien....déjà es-tu sur que ton équation à des solutions ?

    Amha, si on développe des techniques de résolutions numérique c'est justement parce que des fois les solutions (implicites ou explicites) sont très dures à trouver.

  10. Publicité
  11. #8
    pa24

    Re : Résoudre une équation non linéaire à une inconnue

    Merci pour ta réponse !

    Non, je ne sais pas a priori si mon équation a des solutions.

    Je pensais que trouver une solution implicite voulait dire trouver une solution numériquement ? En fait, ça ne me pose pas de problème d'obtenir une solution numérique, car une solution formelle me semble impossible à trouver dans mon cas. Je pensais que justement Matlab, qui est un outil de calcul numérique, servait à cela et non pas à trouver des solutions explicites. Mais je suis vraiment débutante en la matière.

    Quelles techniques de résolution numérique me conseilles-tu ?

    Merci encore !

  12. #9
    Arzhur

    Re : Résoudre une équation non linéaire à une inconnue

    Je ne m'y connais pas assez pour te conseiller une méthode particulière, de plus je ne connais que les méthodes de bases : Dichotomie, Newton et Lagrange.

    A priori elles marchent bien, mais il faut quand même savoir à peu près où se trouve le zéro de la fonction pour les initialiser correctement et éviter qu'elles ne te donnent une solution "fausse" et/ou dans un temps indécent.


    Je te conseillerais plutôt de poser ta question sur la partie mathématique du forum si personne ne te donne de réponses ici.

  13. #10
    pa24

    Re : Résoudre une équation non linéaire à une inconnue

    Bonjour,

    j'ai vu que la commande "fzero" permettait de trouver numériquement la racine d'une équation non linéaire à une seule variable, ce qui est exactement ce que je veux.

    Cette méthode repose t-elle sur la méthode de la dichotomie, de Newton ou de Lagrange ou sur encore autre chose ?

    La variable solution de mon équation doit être comprise entre 0 et 1, donc j'ai pris comme valeur initiale 0.5. J'ai aussi essayé avec 0 et 1 comme valeurs initiales, et j'obtiens bien le même résultat.

    Ce qui m'étonne un peu, c'est que je n'obtiens qu'une seule solution, alors que j'aurais pensé qu'il y a des solutionscomplexes ou négatives. Est-ce qu'elles sont éliminées d'office parce que trop éloignées de 0.5 ?

    Par ailleurs, dans un deuxième temps, j'ai besoin de faire une boucle sur un des paramètres de la fonction g que j'étudie : je veux que Matlab me donne la solution numérique de mon équation x- g(x, a)=0 avec a un paramètre pour100 valeurs différentes de a.

    Je ne vois pas comment faire une boucle sur une fonction. Pour l'instant, j'ai le code suivant :

    syms x;
    f= @(x) x-g(x, a);
    v=fzero(f,0.5);

    Comment répéter 100 fois ce code pour i=1:100 et a(i) au lieu de a dans l'expression de f ?
    Je ne peux pas faire :

    syms x
    for i=1:100
    f(i)= @(x) x-g(x, a(i));
    v(i)=fzero(f(i),0.5);

    car f est une fonction, pas une matrice. Alors comment faire ?

    Merci beaucoup par avance !

  14. #11
    Arzhur

    Re : Résoudre une équation non linéaire à une inconnue

    Bonjour,

    Cette méthode repose t-elle sur la méthode de la dichotomie, de Newton ou de Lagrange ou sur encore autre chose ?
    Sur autre chose, les références de l'algo exact sont décries dans l'aide.

    Ce qui m'étonne un peu, c'est que je n'obtiens qu'une seule solution
    C'est normal, zfero ne cherche qu'une seule solution et ne la trouve que si il y a changement de signe

    (faut vraiment lire l'aide....y'a plein d'info dedans en fait)


    Si tu penses qu'il y a d'autres solutions....faut essayer de savoir a peu près ou elles sont pour "forcer" fzero à les trouver.
    Pour une solution complexe, je ne sais pas si fzero peut la trouver ( au pire tu peux essayer avec une fct simple)


    car f est une fonction, pas une matrice. Alors comment faire ?
    T'as essayé ? Avec de la chance Matlab va te faire une matrice de fonction ( ou pas)

    sinon utiliser f(i) me semble superflu, tu n'as pas besoin de stocker toutes les fonctions, il ne te faut que les solutions, non ?
    Dernière modification par Arzhur ; 03/12/2014 à 12h39.

  15. #12
    pa24

    Re : Résoudre une équation non linéaire à une inconnue

    Bonjour,

    merci beaucoup pour cette réponse.

    En effet, je n'ai pas besoin de stocker toutes les fonctions, c'est juste que je ne vois pas comment obtenir l'ensemble de mes solutions si je ne définis pas 100 fonctions différentes. Oui j'ai essayé de "forcer" Matlab à me faire une matrice de fonctions, mais j'obtiens un message d'erreur.

    A partir du code que je propose, saurais-tu comment obtenir les 100 v différents (un pour chaque valeur de a), sans définir une boucle sur les fonctions ?

    J'ai essayé la chose suivante :

    for i=1:100
    v=a(i);
    f= @(x) x-g(x, v);
    S=fzero(f,0.5,v);
    end

    Néanmoins, quand je fais cela, cela ne me stocke qu'une seule valeur pour v et ne me donne qu'une seule valeur pour S : la valeur en a(100) (le dernier point). Je vois bien que mon v n'est pas défini en fonction de i, ce qui doit poser problème, mais si je le définis en fonction de i, alors je dois aussi définir f en fonction de i.

    Merci bien !

  16. #13
    Arzhur

    Re : Résoudre une équation non linéaire à une inconnue

    Bonjour,


    Il faut que tu stockes ton résultat S dans un tableau/vecteur/liste (choisir le terme adapté à Matlab).

    Aussi je ne comprend pas a quoi sert ton v....c'est a(i) en fait.

  17. #14
    pa24

    Re : Résoudre une équation non linéaire à une inconnue

    Donc si je comprends bien, je dois faire :

    for i=1:100
    f= @(x) x-g(x, a(i));
    S(i)=fzero(f,0.5,v(i));
    end

    Ca a l'air de marcher. Dois-je bien mettre le v(i) après la valeur initiale ? Je ne vois pas ça dans l'aide.

    Je voudrais aussi faire le graphe de la fonction f sur l'intervalle[0;1] pour une valeur de a(i) en particulier. Peux-tu me conseiller une commande ? J'ai essayé plot(x,feval(f,x)) mais ça ne fonctionne pas.

    Merci encore pour ta réactivité et ta patience face à mes questions de débutante !

  18. #15
    Arzhur

    Re : Résoudre une équation non linéaire à une inconnue

    Ca a l'air de marcher. Dois-je bien mettre le v(i) après la valeur initiale ? Je ne vois pas ça dans l'aide.
    J'aurais dit non, surtout que je ne vois pas ou/comment est défini v(i)


    plot(x,feval(f,x)) mais ça ne fonctionne pas.
    Qu'est-ce qui ne fonctionne pas ? T'as un message d'erreur ?

    Pour ça je ne me serais pas embêté : je calcule les valeurs de f et les stocke dans un vecteur (c'est grosso modo ce que fait feval...mais je ne me suis jamais servi de cette fonction ). Puis j'utiliserais la fonction plot.

  19. #16
    pa24

    Re : Résoudre une équation non linéaire à une inconnue

    Oui en effet, ce n'est pas v(i) mais a(i) (faute de frappe). Par contre si j'enlève a(i) dans la commande fzero, Matlab comprend-il toujours sur quoi il doit me faire une boucle pour trouver les 100 solutions ? Ca me paraît bizarre.

    Pour feval, j'ai le message d'erreur suivant : "Error using ==> mtimes
    Inner matrix dimensions must agree." Ca a l'air de venir de la façon dont ma fonction est définie, mais quand j'enlève la commande feval, tout marche bien.

  20. #17
    pa24

    Re : Résoudre une équation non linéaire à une inconnue

    PS : quelle commande utilises-tu pour calculer les valeurs de la fonction à la place de feval ?

    Merci !

  21. #18
    pa24

    Re : Résoudre une équation non linéaire à une inconnue

    Citation Envoyé par pa24 Voir le message
    Oui en effet, ce n'est pas v(i) mais a(i) (faute de frappe). Par contre si j'enlève a(i) dans la commande fzero, Matlab comprend-il toujours sur quoi il doit me faire une boucle pour trouver les 100 solutions ? Ca me paraît bizarre.
    En fait, cela marche sans problème quand j'enlève le a(i).

  22. #19
    pa24

    Re : Résoudre une équation non linéaire à une inconnue

    Citation Envoyé par pa24 Voir le message
    PS : quelle commande utilises-tu pour calculer les valeurs de la fonction à la place de feval ?
    J'imagine que tu fais une boucle où tu lui demandes de calculer f(i) pour chaque i ?

  23. #20
    Arzhur

    Re : Résoudre une équation non linéaire à une inconnue

    J'imagine que tu fais une boucle où tu lui demandes de calculer f(i) pour chaque i ?
    Eventuellement oui, suivant la tête de ta fonction ce n'est pas forcement utile. A toi de voir.

Sur le même thème :

Discussions similaires

  1. Equation Différentielle, linéaire, non linéaire, explicite ?
    Par Polox17 dans le forum Mathématiques du supérieur
    Réponses: 4
    Dernier message: 01/11/2011, 16h55
  2. Résoudre cet equation à cinq inconnue
    Par bill-y dans le forum Mathématiques du supérieur
    Réponses: 0
    Dernier message: 13/02/2011, 20h09
  3. Système non linéaire à résoudre
    Par artif dans le forum Mathématiques du supérieur
    Réponses: 1
    Dernier message: 13/05/2008, 10h30
  4. Resoudre Equation diff. non linéaire 1er ordre
    Par fmath dans le forum Mathématiques du supérieur
    Réponses: 7
    Dernier message: 21/01/2006, 12h15
  5. resolution des equation differentielle lineaire et n-lineaire
    Par TToufik dans le forum Mathématiques du supérieur
    Réponses: 3
    Dernier message: 10/08/2004, 14h02