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 :

inverser une fonction


Sujet :

MATLAB

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2012
    Messages
    233
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2012
    Messages : 233
    Points : 92
    Points
    92
    Par défaut inverser une fonction
    Bonjour tout le monde,

    J'ai une fonction polynomiale dite "ep" de degré 9. Je cherche à l'inverser de la manière suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ep_inverse = finverse(ep);
    Cela fonctionne bien!

    Ensuite, je veux calculer une valeur en utilisant "ep_inverse" et la ca explose...

    Les erreurs sont les suivantes:
    ??? Error using ==> sym.sym>checkindex at 2729
    Index must be a positive integer or logical.

    Error in ==> sym.sym>privformatscalar at 2679
    checkindex(x);

    Error in ==> sym.sym>privformat at 2663
    s = privformatscalar(x);

    Error in ==> sym.sym>sym.subsref at 1379
    [inds{k},refs{k}] = privformat(inds{k});

    Error in ==> Polynomium_v5 at 151
    abs_point_cle_1 = ep_inverse(ord_point_cle_1);
    Est-ce que quelqu'un pourrait m'aider à résoudre ce problème svp?

    Merci d'avance!

  2. #2
    Modérateur
    Avatar de le fab
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    1 881
    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 881
    Points : 3 429
    Points
    3 429
    Par défaut
    il ne faut pas utiliser la syntaxe g(5) mais la fonction subs ou matlabFunction
    avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    >> syms x
    >> f = x^2 + 3*x +4
     
    f =
     
    x^2 + 3*x + 4
     
    >> g = finverse(f)
     
    g =
     
    (4*x - 7)^(1/2)/2 - 3/2
    tu peux faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    >> subs(g,x,5)
     
    ans =
     
        0.3028
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    >> x=5
     
    x =
     
         5
     
    >> subs(g)
     
    ans =
     
        0.3028
     
    >>
    ou encore

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    >> gg = matlabFunction(g)
     
    gg = 
     
        @(x)sqrt(x.*4.0-7.0).*(1.0./2.0)-3.0./2.0
     
    >> gg(5)
     
    ans =
     
        0.3028
    voir aussi sym2poly puis polyval

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2012
    Messages
    233
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2012
    Messages : 233
    Points : 92
    Points
    92
    Par défaut
    Bonjour et merci de ta réponse le fab!

    Malheureusement, je pense que j'ai un problème pour appliquer tes conseils. Avec la syntaxe suivante, j'ai des problèmes car abs_point_cle_1 et abs_point_cle_2 ne sont pas représentés dans un tableur dans mon explorateur de variable mais par un "petit cube"...


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
                    ord_point_cle_1 = (E1+E2)/2; 
                    ord_point_cle_2 = (E2+E3)/2;  
                    if degre_polyfit == 7
                        ep = p(1)*x^6 + p(2)*x^5 + p(3)*x^4 + p(4)*x^3 + p(5)*x^2 + p(6)*x^1 + p(7);
                    elseif degre_polyfit == 8
                        ep = p(1)*x^7 + p(2)*x^6 + p(3)*x^5 + p(4)*x^4 + p(5)*x^3 + p(6)*x^2 + p(7)*x^1 + p(8);
                    end
     
                    ep_inverse = finverse(ep); 
                    syms x; 
                    abs_point_cle_1 = subs(ep_inverse, x, ord_point_cle_1); 
                    abs_point_cle_2 = subs(ep_inverse, x, ord_point_cle_2); 
                    sol(1, 1) = abs_point_cle_1; 
                    sol(2, 1) = abs_point_cle_2;

  4. #4
    Modérateur
    Avatar de le fab
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    1 881
    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 881
    Points : 3 429
    Points
    3 429
    Par défaut
    le petit cube signifie qu'il s'agit d'un objet symbolique
    E1 et E2 sont des objets symboliques ?? et p ??
    car là c'est comme si tu avais une autre variable que x dans f

    sinon, plutôt que d'écrire f à la main (visiblement après un polyfit) utilise plutôt poly2sym

    tu devrais également à mon avis déclarer ton objet symbolique x avant de déclarer f puis d'inverser f. d'ailleurs je suis étonne que tu n'ai pas une erreur en déclarant f fonction de x avant d'avoir déclarer x via syms !!!
    tu n'aurais pas déjà déclarer x d'une autre façon ??

    si tu t'en sort pas, donnes moi un exemple complet (avec tes données)

    essayes ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    ord_point_cle_1 = (E1+E2)/2; 
    ord_point_cle_2 = (E2+E3)/2;  
     
    syms x; 
    ep = poly2sym(p,x)
     
    ep_inverse = finverse(ep); 
     
    abs_point_cle_1 = subs(ep_inverse, x, ord_point_cle_1); 
    abs_point_cle_2 = subs(ep_inverse, x, ord_point_cle_2); 
    sol(1, 1) = abs_point_cle_1; 
    sol(2, 1) = abs_point_cle_2;

Discussions similaires

  1. [Récursivité] Fonction inversant une chaîne
    Par katrena99 dans le forum Langage
    Réponses: 13
    Dernier message: 26/11/2018, 12h12
  2. Inverser une fonction (positionnement et repérage dans un quadrillage)
    Par diesel witch dans le forum Algorithmes et structures de données
    Réponses: 3
    Dernier message: 24/09/2014, 01h10
  3. inverser une fonction
    Par Abdelhalim_Télécom dans le forum Simulink
    Réponses: 10
    Dernier message: 05/10/2010, 00h46
  4. Opération inverse d'une fonction
    Par fadiese_1 dans le forum Delphi
    Réponses: 6
    Dernier message: 26/12/2006, 19h53
  5. Difficulté à "inverser" une fonction
    Par gorgonite dans le forum Prolog
    Réponses: 13
    Dernier message: 05/10/2006, 11h13

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