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 programmation


Sujet :

MATLAB

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Inscrit en
    Décembre 2009
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 5
    Par défaut Probleme de programmation
    Bonjour à tous,

    J'ai un problème avec mon programme qui affiche:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ??? One or more output arguments not assigned during call to 'F:\essaye\1\simple_kmeans.m (simple_kmeans)'.
     
    Error in ==> km_demo at 25
    [proto Nproto] = simple_kmeans(X,K,maxerr)
    voila le script
    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
     % Demo for the kmeans algorithm
     
    % First, generate sample data
    %   We will test with 4 clusters in 3 dimensions,
    %   by generating random data with gaussian density, variance 1,
    %   with means (0,0,0), (0,0,6), (0,6,0) and (6,0,0)
    %   and Ndata  200,       300,   100     and 500
     
    K = 4;
    dim = 3;
    variance = 1;
    sdev = sqrt(variance);
     
    cluster1 = sdev*randn(200,dim) + kron(ones(200,1),[0,0,0]);
    cluster2 = sdev*randn(300,dim) + kron(ones(300,1),[0,0,6]);
    cluster3 = sdev*randn(100,dim) + kron(ones(100,1),[0,6,0]);
    cluster4 = sdev*randn(500,dim) + kron(ones(500,1),[6,0,0]);
     
    % Build data matrix
    X = [cluster1 ; cluster2 ; cluster3; cluster4];
     
    % Now apply K-means algorithm
    % Note that order of results may vary
    maxerr = 0;
    [proto Nproto] = simple_kmeans(X,K,maxerr)
    voila fonct
    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
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
     function [means,Nmeans] = simple_kmeans(X,K,maxerr)
     
     function [medias,Nmedias] = simple_kmedias(X,K,maxerr)
     Finds K prototypes representing the samples in data matrix X,
     where each row of X represents a sample. 
    %   Iterates until maximum norm difference between
    %   prototypes found in successive iterations is < maxerr
    %   
    %   This script uses square Euclidean distance, 
    %   but can be easily modified to use other metrics
    %
    % Output arguments
    %   means: matrix with each row a cluster prototype
    %   Nmeans: Number of samples in each cluster
     
     
    [Ndata, dims] = size(X);
    dist = zeros(1,K);
     
    % Initial prototype assignment (arbitrary)
    for i=1:K-1
       means(i,:) = X(i,:);
    end
    means(K,:) = mean(X(K:Ndata,:));
     
    cmp = 1 + maxerr;
    while (cmp > maxerr)
       % Sums (class) and data counters (Nclass) initialization
       class = zeros(K,dims);
       Nclass = zeros(K,1);
     
       % Groups each elements to the nearest prototype
       for i=1:Ndata
          for j=1:K
             % Euclidean distance from data to each prototype
             dist(j) = norm(X(i,:)-means(j,:))^2;
          end
          % Find indices of minimum distance
          index_min = find(~(dist-min(dist)));
          % If there are multiple min distances, decide randomly
          index_min = index_min(ceil(length(index_min)*rand));
          class(index_min,:) = class(index_min,:) + X(i,:);
          Nclass(index_min) = Nclass(index_min) + 1;
       end
       for i=1:K
          class(i,:) = class(i,:) / Nclass(i);
       end
     
       % Compare results with previous iteration
       cmp = 0;
       for i=1:K
          cmp = norm(class(i,:)-means(i,:)); 
       end
     
       % Prototype update
       means = class;
    end
     
    Nmeans = Nclass;
    Merci d'avance

  2. #2
    Expert confirmé
    Avatar de duf42
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Novembre 2007
    Messages
    3 111
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Formateur en informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 111
    Par défaut
    Bonjour,

    Tu as deux entêtes de fonction au début de ta fonction, MATLAB interprète ca comme 2 fonctions successives, la première fonction ne contient donc rien et les arguments de sortie ne sont pas assignés (comme explicité dans le message d'erreur)

    Bonne journée,
    Duf

Discussions similaires

  1. Problème execution programme SDL
    Par youp_db dans le forum SDL
    Réponses: 2
    Dernier message: 11/02/2006, 18h06
  2. Probleme execution programme
    Par jmjmjm dans le forum Bases de données
    Réponses: 3
    Dernier message: 27/11/2005, 19h32
  3. Réponses: 2
    Dernier message: 31/05/2005, 09h50
  4. [TP]Problème de programme exécutable en mode graphique
    Par GoodVibe dans le forum Turbo Pascal
    Réponses: 2
    Dernier message: 24/09/2004, 09h47
  5. [Kylix] probleme execution programme
    Par vin's dans le forum EDI
    Réponses: 1
    Dernier message: 31/03/2004, 12h25

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