programme scilab

Salut,

J'ai tapé ce code en scilab :
function m = minimiseur
  P=P0
  n=length(P0)
  Q=P0
  for i = 1:N,
    Q=normalisation(P+eps*(rand(1,n)+%i*rand(1,n)))
    e=energie(Q)
    ee=energie(P)
    if e<ee then
      P=Q;
    end
  end
  l=P
endfunction
Le but est de minimiser la fonctionnelle energie avec un algo aléatoire
normalisation normalise le tableau (pour rester sur la sphère de IC^n pour une norme donnée)
energie calcule la fonctionnelle
Ces deux fonctions marchent bien, je les ai testées à part
Et il me renvoie un message d'erreur que voilà
Undefined operation for the given operands
  check or define function %s_2_s for overloading     
Pouvez-vous m'aider svp, ça fait deux heures que je cherche et je ne comprends pas trop l'info
Merci

Réponses

  • Ca veut dire que tu mets en argument de tes fonctions des objets qui ne sont pas acceptables comme arguments. Ceci dit, si tu ne postes pas les fonctions auxiliaires, (et dire "elles marchent, je les ai testées" ne suffit pas), il est impossible de savoir quel est précisément le problème.
  • ok, voilà les fonctions auxiliaires

    function t = CarrePolynome (l, i)
    ~~~~~~ p=poly(l,"z", "coeff")
    ~~~~~~ p2=p^2
    ~~~~~~ t=coeff(p2, i)
    endfunction

    function e = energie (l)
    ~~~~~~ g=l
    ~~~~~~ n=length(l)
    ~~~~~~ for i = 1:n, g(i)= (abs(l(i))^2)*factorial(i+2)/2; end
    ~~~~~~ h=rand(1,2*n)
    ~~~~~~ for i = 1: 2*n, h(i)= ((abs(CarrePolynome(l,i)))^2)*(factorial(i+1)/(2^(i+2))); end
    ~~~~~~ e=sum(g)+sum(h)
    endfunction

    function N = norme (l)
    ~~~~~~ g=l
    ~~~~~~ n=length(l)
    ~~~~~~ for i = 1:n, g(i)= (abs(l(i))^2)*(factorial(i-1)/2); end
    ~~~~~~ N=sqrt(sum(g))
    endfunction

    function g = normalisation (l)
    ~~~~~~ g=l/(norme (l))
    endfunction


    [Il vaut mieux ne pas cocher la case LaTeX et utiliser le bouton BBcode (police fixe), comme dans ton 1er message. ;) AD]
  • Dans la première fonction :
    function m = minimiseur[b](P0)[/b]
    

    Sinon, un petit script utilisant ces fonctions, pour voir ? Comme tu n'as pas mis de commentaire, c'est un peu dur de deviner ce que tout ça est censé faire, prendre quels arguments, etc.
  • une fonction a obligatoirement un argument?

    parce que je définis P0 dans la fenetre de calcul et ensuite j'applique minimiseur

    ....
  • OK, ça doit marcher aussi comme ça, mais bon ce n'était certainement pas le problème de toutes façons... Est-ce que tu as un script ou comment utilises-tu ces fonctions ?
  • Salut,
    j'ai le même problème que toi et je pense que le problème se situe au niveau de la boucle if! Est ce que tu pourras me donner la solution du problème si tu l'as trouvé stp! Merci
  • Je donne quand même mon programme tout simple mais qui ne fonctionne pas...
    function y=f(x,alpha,nu)
      if 0<x<1/2 then 
        y=0;
      elseif 1/2<x<1 then
        y=-2*nu*C1(alpha,nu);
      end,
    endfunction
    
    Merci
  • c'est bon j'ai trouvé merci quand même!
Connectez-vous ou Inscrivez-vous pour répondre.