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 :

Probleme de Matlab


Sujet :

MATLAB

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2013
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2013
    Messages : 12
    Par défaut Probleme de Matlab
    Je suis en train de faire un problème de MATLAB et je me posais des questions sur un point du problème. Voici l’énoncé :

    Problèmeème 2

    La résolution de l'équation f(x) = x2-s = 0 est équivalente à la détermination de la racine carrée de s soit s: Développez une fonction utilisateur MATLAB qui déterrmine la racine carrée d'un nombre positif par solution de l'équation à l'aide de la méthode de Newton-Raphson. Nommez la fonction [Rs]=Racine(s).
    Les paramètres formels d'entrée et de sortie sont respectivement, s, le nombre pour lequel la racine carrée
    est déterminée et Rs, la réponse. La fonction MATLAB doit satisfaire les conditions suivantes:

    - Vérifiez si l'entrée est positive, si non le programme devrait s'arr^eter et afficher un message.
    - La valeur initiale pour les itérations devrait être x=s.
    - Les itérations devraient s'arrêter quand l'erreur relative estimée est inférieure à 0.00001.
    - Le nombre d'itérations devraient se limiter à 25, si non le programme devrait s'arrêter et afficher un message.

    Utilisez la fonction Racine pour déterminer la racine carrée de 625, 1700 et -90.
    je pense comprendre globalement le probleme. on cree une boucle tel que X(i+1) = Xi - F(Xi)/F'(Xi)
    Ce que je capte c'est qu'on doit faire un nombre d'iteration de valeur initiale x=S ???
    Comment j'ecris ca ?

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

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 885
    Par défaut
    bonjour

    as tu commencé a coder quelque chose ?
    rencontres tu des problèmes dans ce code ?
    si oui, montre le nous

    Fabien

  3. #3
    Membre émérite
    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
    Par défaut
    Bonjour,

    Procède par petites étapes simples :

    1) code la fonction avec ses entrées et ses sorties, avec presque rien dedans, de telle sorte que si tu appelles la fonction, Rs te donne une valeur quelconque que tu peux choisir. (Disons par exemple que Rs contienne 0). Fais le, puis montre nous le code, puis passe à la suite. Si tu bloques, pose tes questions.

    2) une fois que c'est fait, tu peux la modifier et la tester très rapidement ! Du coup tu peux passer à l'étape suivante : Vérifiez si l'entrée est positive, si non le programme devrait s'arrêter et afficher un message. Fais le, puis montre nous le code, puis passe à la suite. Si tu bloques, pose tes questions.

    3) une fois que c'est fait, tu peux passer à l'application de la méthode de newton Raphson : pour cela, je te conseille AVANT TOUT de coder une AUTRE fonction qui en entrée prend la valeur courante de x et en sortie la valeur suivante de x grâce à la méthode. <== pas simple !!!! Fais le, puis montre nous le code, puis passe à la suite. Si tu bloques, pose tes questions.

    3') après, tu pourras réfléchir à la boucle... mais fais d'abord les premières étapes ! Ce sont des outils dont tu vas avoir besoin pour résoudre cet exercice (qui est hyper didactique, ton prof vaut de l'or !). Fais le, puis si tu bloques, pose tes questions.

    Procède bien par étape ! Montre-nous ton code, étape par étape, comme ça, s'il y a un problème, on pourra avancer très vite, et tu peux nous poser des questions facilement.

    Cordialement,

    ps: Je veux être clair : ce que je viens de dire, tu dois le faire avant même de réfléchir à résoudre ces points :
    4) La valeur initiale pour les itérations devrait être x=s. Fais le, puis montre nous le code, puis passe à la suite. Si tu bloques, pose tes questions.
    5) Les itérations devraient s'arrêter quand l'erreur relative estimée est inférieure à 0.00001. Fais le, puis montre nous le code, puis passe à la suite. Si tu bloques, pose tes questions.
    6) Le nombre d'itérations devraient se limiter à 25, si non le programme devrait s'arrêter et afficher un message. Fais le, puis montre nous le code, puis passe à la suite. Si tu bloques, pose tes questions.
    ps2: je te conseille, par la suite, avec ce prof, de résoudre les choses dans l'ordre et d'aller le voir dès que tu bloques quelque part. Mais garde ta grande qualité de lire le sujet en entier, c'est important d'avoir une vue d'ensemble.

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2013
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2013
    Messages : 12
    Par défaut
    Alors voici mon code qui fonctionne et qui me donne des réponses justes. Je pense que c'est ça :

    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
    function [ Rs ] = Racine( s )
    %Une fonction qui calcule par la methode Newton-Raphson la racine carree
    %d'un nombre s
    %si le nombre s est negatif, envoyer un message d'erreur
    if s<0
        disp('Le nombre s doit être stricement positif')
    end
    Rs = 0
    %calcule de la racine selon la methode newton
    imax = 25;
    x=s;
    Xn = 0;
    Emax = 0.00001
    for i = 1:imax
        %Babylonian method
        Xn =(x+s/x)/2;
        %Erreur relative
        E = abs((Xn-x)/x);
        %x prend la valeur de Xn pour l'iteration suivante
        x = Xn;
        if E < Emax
            break
        end
    end
    if E > Emax
        Xn ='ERREUR'
        disp('nombre d''iteration trop importante')
    end
    Rs = Xn
    end
    J'ai créé une boucle de 25 itérations, je pense que c'est ce que l'énoncé demande. Puis j'ai rentré la méthode de Newton-Raphson, qu'on appelle méthode babylonienne pour les racines carrées (merci Wikipédia). Puis j'ai finalement calculé mon erreur relative et j'ai dit que si c'est inférieur a 0.00001, on stoppe la boucle. Si c'est supérieur, on envoie un message d'erreur.

    Je sais pas si ça respecte l'énoncé du problème mais en tout cas ça fonctionne.

  5. #5
    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
    Par défaut
    Bonjour,

    le code a l'air juste, néanmoins quelques remarques:
    • La ligne Xn = 0; est inutile.
    • Le programme doit s'arrêter si le nombre est négatif et ton programme ne le fait pas (tu peux utiliser return par exemple).
    • Tu pourrais économiser une variable en appelant la variable de sortie Xn.
    Pour une bonne utilisation des balises code c'est ici!
    Petit guide du voyageur MATLABien : Le forum La faq Les tutoriels Les sources


    La nature est un livre écrit en langage mathématique. Galilée.

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2013
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2013
    Messages : 12
    Par défaut
    Merci !
    J'ai mis cette ligne de code avant ma boucle pour vérifier que le nombre est bien positif. Je pense que ça devrait être ça.

    if s<0
    disp('Le nombre s doit être stricement positif')

Discussions similaires

  1. Probleme demarrage MATLAB sur AMD Sempron
    Par long22 dans le forum MATLAB
    Réponses: 1
    Dernier message: 22/11/2009, 11h41
  2. [engopen] Probleme lancement MATLAB a partir de C++
    Par tedday dans le forum MATLAB
    Réponses: 6
    Dernier message: 15/09/2009, 23h19
  3. Probleme legend matlab
    Par abidineb dans le forum MATLAB
    Réponses: 4
    Dernier message: 25/05/2009, 01h13
  4. Probleme licence Matlab 6.5 sur Vista
    Par MBAYE BABACAR GUEYE dans le forum MATLAB
    Réponses: 3
    Dernier message: 03/11/2007, 18h23
  5. probleme load matlab
    Par slayer23 dans le forum MATLAB
    Réponses: 5
    Dernier message: 07/07/2007, 03h43

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