1. #1
    Membre à l'essai
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    février 2017
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : février 2017
    Messages : 11
    Points : 10
    Points
    10

    Par défaut [fmincon] Utilisation d'une fonction anonyme

    Bonjour,

    Je cherche à utiliser la fonction fmincon en utilisant une fonction anonyme pour les contraintes non linéaires mais je ne m'en sors pas. En fait ça marche si je créé une fonction dans un fichier séparé, mais pour des questions pratiques je souhaiterais quand même utiliser une fonction anonyme. Si vous avez des idées je suis preneur ! Merci d'avance.

    Sans fonction anonyme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    clear all;
    close all;
    clc;
     
    x=fmincon(@(x) sum(1./x),0.5*ones(7,1),[],[],[],[],0.02*ones(7,1),0.8*ones(7,1),@confun,optimoptions(@fmincon,'Algorithm','interior-point'));
    disp(x);
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    function [c, ceq] = confun(x)
    %UNTITLED9 Summary of this function goes here
    %   Detailed explanation goes here
    Meq=dlmread('eq_test.txt');
    cotes=dlmread('cotes_test.txt');
    IT=(cotes(:,1)-cotes(:,2)).*sign(abs(cotes(:,2)...
        -cotes(:,1)))+(cotes(:,1)+cotes(:,2)).*~sign(abs(cotes(:,2)-cotes(:,1))); %Valeur des IT recentrés autour de Cmoy pour les cotes d'assemblage
    % Nonlinear inequality constraints
    c = sqrt(Meq*(x.^2))-IT;
    % Nonlinear equality constraints
    ceq = [];
     
    end


    Et en gros ce que j'aimerai (en rouge la partie à modifier) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    clear all;
    close all;
    clc;
    
    Meq=dlmread('eq_test.txt');
    cotes=dlmread('cotes_test.txt');
    IT=(cotes(:,1)-cotes(:,2)).*sign(abs(cotes(:,2)...
        -cotes(:,1)))+(cotes(:,1)+cotes(:,2)).*~sign(abs(cotes(:,2)-cotes(:,1))); %Valeur des IT recentrés autour de Cmoy pour les cotes d'assemblage
    
    x=fmincon(@(x) sum(1./x),0.5*ones(7,1),[],[],[],[],0.02*ones(7,1),0.8*ones(7,1),@(x) [sqrt(Meq*(x.^2))-IT,[]],optimoptions(@fmincon,'Algorithm','interior-point'));
    disp(x);

  2. #2
    Membre à l'essai
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    février 2017
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : février 2017
    Messages : 11
    Points : 10
    Points
    10

    Par défaut

    Oups j'ai trouvé la solution dans l'aide, j'avais pas vu une section, désolé ! Pour ceux que ça intéresse il faut utiliser la fonction deal.

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

Discussions similaires

  1. Réponses: 8
    Dernier message: 29/06/2006, 16h37
  2. Réponses: 3
    Dernier message: 29/04/2006, 14h02
  3. Réponses: 3
    Dernier message: 14/04/2006, 20h36
  4. Utilisation d'une fonction Transact-SQL ds une requête SQL
    Par Fl0ppeur dans le forum Langage SQL
    Réponses: 1
    Dernier message: 21/02/2006, 14h42
  5. Utilisation d'une fonction dans une procedure
    Par MaxiMax dans le forum MS SQL-Server
    Réponses: 3
    Dernier message: 09/08/2005, 16h51

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