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

Scilab Discussion :

Recherche du minimum d'une fonction


Sujet :

Scilab

  1. #1
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Février 2016
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haute Saône (Franche Comté)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2016
    Messages : 26
    Par défaut Recherche du minimum d'une fonction
    Bonjour,

    Dans le cadre d'un projet pour l'université, je dois écrire un programme pour calculer le minimum d'une fonction donnée par l'utilisateur.

    L'algorithme donné est le suivant:
    Nom : 1.png
Affichages : 711
Taille : 52,0 Ko

    Voici mon 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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    function r=f(x)
        r=x*x;
    endfunction
     
    function res= minimum(f,l,T,bet,Niter,N)
     
        x0=rand(1,1);
        x=[];
        for i=1:N
            x(1)=x0;
            A=x(i)-l
            B=x(i)+l
            y=grand(1,1,'bet',A,B)
            if f(y)<=f(x(i))then 
                x(i+1)=y;
            elseif f(y)>=f(x(i)) then 
                r=rand(1,1);
                p=exp(-(f(y)-f(x(i)))/T);
                if (r<p)
                    then
                    x(i+1)=y;
                else 
                    x(i+1)=x(i);
                end
            end
            if N==Niter then 
                T=bet*T;
                l=bet*l;
            end
        end
    end
    endfunction
    A la ligne 14
    if f(y)<=f(x(i))then
    Scilab me renvoie:

    Opérateur, virgule ou point-virgule manquant.
    at line 10 of function minimum called by :
    endfunction

    Voilà, je ne sais pas trop ce qui coince ici? J'ai bien le point virgule à la fin de l'expression après le premier "then". La fonction f(x)->x^2 est définie et marche correctement. Il y a surement autre chose que je ne comprends pas..

    Merci en avance pour toute aide possible

  2. #2
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Février 2016
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haute Saône (Franche Comté)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2016
    Messages : 26
    Par défaut
    Citation Envoyé par Audinet Voir le message
    if f(y)<=f(x(i))then

    A la ligne 14 Scilab me renvoie:

    Opérateur, virgule ou point-virgule manquant.
    at line 10 of function minimum called by :
    endfunction

    Voilà, je ne sais pas trop ce qui coince ici? J'ai bien le point virgule à la fin de l'expression après le premier "then". La fonction f(x)->x^2 est définie et marche correctement. Il y a surement autre chose que je ne comprends pas..

    Merci en avance pour toute aide possible
    Rebonjour,

    Je viens de m'aperçoir qu'il y a une erreur dans mon code. La ligne 14 est

    Donc pas d'oubli de parenthèse.. J'obtiens la même erreur de Scilab.

    Quel est l'élément qui manque ou l'erreur dans le programme qui fait que Scilab pense qu'il manque qqch? Je ne vois pas.

    Merci encore

  3. #3
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 316
    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 316
    Par défaut
    Attention à la syntaxe du code Scilab…

    Le mot-clé then doit être précédé d'un espace et doit se trouver sur la même ligne que la condition
    Il y a aussi un end en trop dans 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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    function r=f(x)
        r=x*x;
    endfunction
     
    function res= minimum(f,l,T,bet,Niter,N)
     
        x0=rand(1,1);
        x=[];
        for i=1:N
            x(1)=x0;
            A=x(i)-l
            B=x(i)+l
            y=grand(1,1,'bet',A,B)
            if f(y)<=f(x(i)) then
                x(i+1)=y;
            elseif f(y)>=f(x(i)) then
                r=rand(1,1);
                p=exp(-(f(y)-f(x(i)))/T);
                if (r<p) then
                    x(i+1)=y;
                else 
                    x(i+1)=x(i);
                end
            end
            if N==Niter then 
                T=bet*T;
                l=bet*l;
            end
        end
    endfunction

  4. #4
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Février 2016
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haute Saône (Franche Comté)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2016
    Messages : 26
    Par défaut
    Bonsoir et merci,

    Effectivement avec les espaces et le END en mois ça fonctionne.

    Merci

    Bonne soirée

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Recherche d'extrema d'une fonction
    Par un passant dans le forum C
    Réponses: 16
    Dernier message: 21/04/2008, 13h59
  2. Recherche du minimum d'une fonction sur un intervalle
    Par jschutz dans le forum Mathématiques
    Réponses: 6
    Dernier message: 18/03/2008, 15h25
  3. Réponses: 2
    Dernier message: 23/11/2007, 12h33
  4. Réponses: 6
    Dernier message: 21/09/2007, 15h18
  5. Cherche le minimum d'une fonction
    Par yakamone3 dans le forum Algorithmes et structures de données
    Réponses: 12
    Dernier message: 06/06/2006, 11h01

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