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 :

fonction non linéaire par raphson


Sujet :

MATLAB

  1. #1
    Membre à l'essai
    Inscrit en
    Décembre 2009
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 23
    Points : 14
    Points
    14
    Par défaut fonction non linéaire par raphson
    Bonjour,
    svp est ce que vous pouvez m'indiquer comment faire un programme sur MATLAB ce programme doit demander à l'utilisateur d'entrer une fonction non linéaire quelconque et le programme va calculer ou elle s'annule en appliquant la methode de newton raphson qui permet d’approcher par itérations la valeur au moyen de la
    relation suivante :
    x(n+1)=x(n)-[f(x(n))/f '(x(n))].
    j'attends vos reponses avec patient

  2. #2
    Rédacteur

    Homme Profil pro
    Comme retraité, des masses
    Inscrit en
    Avril 2007
    Messages
    2 978
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 83
    Localisation : Suisse

    Informations professionnelles :
    Activité : Comme retraité, des masses
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 2 978
    Points : 5 179
    Points
    5 179
    Par défaut
    Salut!
    Le problème est que la réponse de l'utilisateur sera du texte, c'est-à-dire une chaîne de caractères, ou plutôt deux, car il doit saisir l'expression de ta fonction et de sa dérivée.
    J'ai une idée, mais je ne sais pas si ça marche parce que je n'ai jamais essayé: il faudrait que ton programme écrive la fonction dans un fichier fonc.m et sa dérivée dans un fichier deri.m puis que Newton-Raphson fasse appel à ces deux fonctions.
    Essaie et dis-nous en des nouvelles.
    Jean-Marc Blanc

  3. #3
    Membre émérite
    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
    Points : 2 841
    Points
    2 841

  4. #4
    Membre à l'essai
    Inscrit en
    Décembre 2009
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 23
    Points : 14
    Points
    14
    Par défaut
    merci pour ta réponce mais quelle est la fonction que je vais utiliser pour que l'utilisateur entre une équation est ce que la fonction "input" ou bien une autre??

  5. #5
    Membre à l'essai
    Inscrit en
    Décembre 2009
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 23
    Points : 14
    Points
    14
    Par défaut
    voila mon essai que je l'ai fait dans un fichier mais lorsque je l'appelais dans MATLAB il ne fonctionne pas portant il me demande d'entrer une équation.
    svp vous pouvez me trouver ou est le problème exact.

    voila 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
    x=-10:0.1:10;
    f(x)=input('taper une équation :');% taper l'equation par l'utilisateur
    x(1)=input('taper la valeur initiale x(1):\n');
    e=1e-10;
    n=1000; 
    for i=2:n
        x(i+1)=x(i)-f(x(i))/diff(f(x(i)));
        if abs(x(i+1)-x(i))<=e   %condition d'arret
             xp=x(i);
             fprintf('xp=%f\n',x(i));
             break;
        end
    end
    j=1:i;
    plot(j,x(j),'*r',j,x(j));
    xlabel('Nombre d''itérations');
    disp('Les valeurs successives de x(i) sont :');

  6. #6
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 309
    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 309
    Points : 52 901
    Points
    52 901
    Par défaut
    Citation Envoyé par crippella Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    f(x)=input('taper une équation :');% taper l'equation par l'utilisateur
    Essaie plutôt ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    str = input('taper une équation :','s');
    f = inline(str);

  7. #7
    Membre à l'essai
    Inscrit en
    Décembre 2009
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 23
    Points : 14
    Points
    14
    Par défaut
    merci pour la réponse ;
    mais quand je fais entrer la fonction et la valeur initiale x(1) il me donne "matix dimensions must agree"et une erreur au niveau de la formule .
    svp aider moi pour résoudre ce programme

  8. #8
    Membre émérite
    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
    Points : 2 841
    Points
    2 841
    Par défaut
    Bonjour.
    Il faut au moins deux valeurs pour diff.

  9. #9
    Membre à l'essai
    Inscrit en
    Décembre 2009
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 23
    Points : 14
    Points
    14
    Par défaut
    j'ai pas compris !!!!!

  10. #10
    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,

    comme te l'a précisé FR119492 dans ta précédente discussion, et il te le redit ici, pour appliquer la méthode de Newton Raphson, il faut connaître la fonction et sa dérivée. Donc tu peux demander à l'utilisateur de renseigner ces 2 fonctions.

    Si tu veux utiliser une approximation de la dérivée, comme te l'a précisé phryte, il faut 2 arguments en entrées de diff, et là il faut que tu précises la méthode que tu souhaites utiliser si tu veux qu'on t'aide.

    Et sinon le message d'erreur complet que tu obtenais, c'était quoi?

  11. #11
    Membre à l'essai
    Inscrit en
    Décembre 2009
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 23
    Points : 14
    Points
    14
    Par défaut
    pardon ,
    mais mon miniprojet nécessite que l'utilisateur entre une fonction non linéaire seulement et le programme va calculer la dérivée et ou il s'annule par cette methode si vous connaissez une autre fonction qui calcule la dérivée veuillez m'informer car j'ai pas compris comment je vais utiliser deux argument pour calculer la dérivée? vous pouvez m'expliquer?
    merci d'avance

  12. #12
    Membre émérite
    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
    Points : 2 841
    Points
    2 841
    Par défaut
    Bonjour.
    Une piste pour le début (parmi d'autres):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    clear
    xi=-10:0.1:10;
    str = input('taper une équation :','s');
    f = inline(str);
    der=diff(f(xi))./diff(xi);

  13. #13
    Rédacteur

    Homme Profil pro
    Comme retraité, des masses
    Inscrit en
    Avril 2007
    Messages
    2 978
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 83
    Localisation : Suisse

    Informations professionnelles :
    Activité : Comme retraité, des masses
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 2 978
    Points : 5 179
    Points
    5 179
    Par défaut
    Salut!
    mais mon miniprojet nécessite que l'utilisateur entre une fonction non linéaire seulement
    Alors, il ne s'agit pas de la véritable méthode de Newton-Raphson, mais de la méthode appelée "quasi-Newton".
    Jean-Marc Blanc

  14. #14
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    2 051
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 2 051
    Points : 877
    Points
    877
    Par défaut
    Citation Envoyé par FR119492 Voir le message
    Salut!

    Alors, il ne s'agit pas de la véritable méthode de Newton-Raphson, mais de la méthode appelée "quasi-Newton".
    Jean-Marc Blanc
    non par forcement,

    il dit qu'en entrée il doit rentrer seulement f(x) et que son programme pour pouvoir calculer la formule ci dessous génère automatiquement f'(x) à partir de ce f(x).

    x(n+1)=x(n)-[f(x(n))/f '(x(n))].

    ps: desolé mais je peux pas t'aider pour l'edition du programme (je suis trop nul en matlab)

  15. #15
    Rédacteur

    Homme Profil pro
    Comme retraité, des masses
    Inscrit en
    Avril 2007
    Messages
    2 978
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 83
    Localisation : Suisse

    Informations professionnelles :
    Activité : Comme retraité, des masses
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 2 978
    Points : 5 179
    Points
    5 179
    Par défaut
    il dit qu'en entrée il doit rentrer seulement f(x) et que son programme pour pouvoir calculer la formule ci dessous génère automatiquement f'(x) à partir de ce f(x).
    Alors il a tort: Dans la méthode de Newton-Raphson originale, un utilise l'expression analytique de f'(x) tandis que dans Quasi-Newton, on fait un calcul approché de f'(x) à partir de valeurs de f(x).
    Jean-Marc Blanc

  16. #16
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    2 051
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 2 051
    Points : 877
    Points
    877
    Par défaut
    Citation Envoyé par FR119492 Voir le message
    Alors il a tort: Dans la méthode de Newton-Raphson originale, un utilise l'expression analytique de f'(x) tandis que dans Quasi-Newton, on fait un calcul approché de f'(x) à partir de valeurs de f(x).
    Jean-Marc Blanc
    je suis d'accord avec toi mais à partir de la seule connaissance de f(x) on peut calculer f'(x) et donc apres appliquer Newton-Raphson, c'est se qu'il veut faire si j'ai bien compris....

    le seul probleme avec matlab je pense et de lui dire de calculer la derivée d'une fonction f(x) quelconque l'on rentre manuellement...

  17. #17
    Membre à l'essai
    Inscrit en
    Décembre 2009
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 23
    Points : 14
    Points
    14
    Par défaut
    boujour ,
    merci pour vos reponses
    j'ai essaié de modifier mon programme d'aprés votre réponces
    mais il ya encore des erreurs .............
    voici 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
    x=-10:0.1:10;
    str=input('taper une équation :','s');%taper l'equation par l'utilisateur
    f=inline(str);
    x(1)=input('entrere la premiere valeur :');
    e=1e-10;
    n=1000; 
    for i=2:n
       x(i+1)=x(i)-f(x(i))./diff(f(x(i)));
        if abs(x(i+1)-x(i))<=e   %condition d'arret
             xp=x(i);
             fprintf('xp=%f\n',x(i));
             break;
        end
    end
    j=1:i;
    plot(j,x(j),'*r',j,x(j));
    xlabel('Nombre d''itérations');
    disp('Les valeurs successives de x(i) sont :',x);
    merci d'avance

  18. #18
    Rédacteur

    Homme Profil pro
    Comme retraité, des masses
    Inscrit en
    Avril 2007
    Messages
    2 978
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 83
    Localisation : Suisse

    Informations professionnelles :
    Activité : Comme retraité, des masses
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 2 978
    Points : 5 179
    Points
    5 179
    Par défaut
    Bonjour à tous.
    à partir de la seule connaissance de f(x) on peut calculer f'(x)
    De deux chose l'une: ou bien on connait une expression de f(x) dérivable analytiquement, donc on connait g(x)=f'(x), et on applique Newton-Raphson; ou bien on essaie de calculer approximativement des valeurs discrètes de f'(x) à partir de valeurs discrètes de f(x). Alors, j'attends avec impatience celui qui me proposera un algorithme et/ou un sous-programme accomplissant cette tâche et que je ne sois pas capable de faire dérailler.
    Jean-Marc Blanc

  19. #19
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    2 051
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 2 051
    Points : 877
    Points
    877
    Par défaut
    il n'y a pas sous matlab des fonctions de calcul formel qui à partir de f(x) nous donnerai f'(x)?

  20. #20
    Membre à l'essai
    Inscrit en
    Décembre 2009
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 23
    Points : 14
    Points
    14
    Par défaut
    bonjour ,
    j'ai un problème de calculer la dérivée en MATLAB je ne sais pas quelle est la commende convenable ou bien l'expression si elle y'en a pas il ya pas
    svp aidez moi je suis coinsé

Discussions similaires

  1. Optimisation fonction non linéaire convexe sous R
    Par Simon Rennais dans le forum R
    Réponses: 0
    Dernier message: 02/04/2014, 16h29
  2. Coût d'une fonction non linéaire
    Par saou88 dans le forum Algorithmes et structures de données
    Réponses: 2
    Dernier message: 20/10/2012, 16h57
  3. Equation non linéaire par Runge-Kutta
    Par sdplam dans le forum Mathématiques
    Réponses: 8
    Dernier message: 28/10/2009, 19h34
  4. Approximation d'une fonction non linéaire
    Par Amirm dans le forum Mathématiques
    Réponses: 2
    Dernier message: 12/01/2009, 14h09

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