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 :

Intergration d'une fonction à variable muette [Débutant]


Sujet :

MATLAB

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2014
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Corse (Corse)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2014
    Messages : 10
    Par défaut Intergration d'une fonction à variable muette
    Bonjour,

    Je suis en train d'essayer d’intégrer une fonction dont la variable est muette mais je me retrouve bloquer. Ma fonction semble marcher mais j'ai comme réponse de Matlab Ans = []. C'est mon premier problème...

    Le second est: lorsque je lance mon programme pour l'intégration de cette fonction ( dans un autre fichier donc) Matlab me renvoie cette erreur:

    "??? Attempted to access y(1); index out of
    bounds because numel(y)=0.
    Error in ==> quadl at 74
    if ~isfinite(y(1))
    Error in ==> Temperature at 10
     Tac=quadl(@(x) Fction,0,5);"



    Code de la fonction :


    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
    function T=Fction(D,f,K,Po,z,r)
    N=350;
    set(0,'RecursionLimit',N) 
    persistent x
    D=0.1*10^(-6);
    f=0.05;
    w=2*pi*f;
    K=0.3;
    Po=10^12;
    Sigma=sqrt(i*(w/D));
    z=0;
    r =-0.0024:0.0001:0.0024;
    for n=1:1:length(r);
        T=(Po/(4*pi*K))*((exp((x^2+Sigma^2)*z)/(x^2+Sigma^2)).*((besselj(0,x*r(n))
    end
    Dans mon autre fichier j'ai:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    a1=0;
    b=100;
    r =-0.0024:0.0001:0.0024;
    Tac=quadl(@(x) Fction,0,5);   
    figure(1)
    plot(r,log(abs(Tac.*r)),'-k',r,unwrap(angle(Tac)),'-r')
    Pour information, je n'ai aucune idée de la valeur du x, cette variable me sers simplement à intégrer. De plus j'ai essayé d'intégrer grâce aux séries mais matlab ne supporte pas....
    Avez vous une solution svp?

    Merci d'avance!

  2. #2
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2014
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Corse (Corse)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2014
    Messages : 10
    Par défaut
    Rebonjour,

    voila j'ai un peu modifié 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
    function T=Fction(D,f,K,Po,z,r)
    N=360;
    set(0,'RecursionLimit',N)
    persistent x
    D=0.1*10^(-6);
    f=0.05;
    w=2*pi*f;
    K=0.3;
    Po=10^12;
    Sigma=sqrt(i*(w/D));
    z=0;
    r =-0.0024:0.0001:0.0024;
    % A=repmat(r1,49,1);
    % r=A.*eye(49)
    for n=1:1:length(r);
        T=@(x)(Po/(4*pi*K))*((exp((x^2+Sigma^2)*z)/(x^2+Sigma^2)).*((besselj(1,x*r(n))))*x);
    end
    Tac=quadl(Fction,0,5);
    figure(1)
    plot(r,log(abs(T.*r)),'-k',r,unwrap(angle(T)),'-r')
    Message d'erreur:
    ??? Maximum recursion limit of 360 reached. Use
    set(0,'RecursionLimit',N)
    to change the limit.  Be aware that exceeding
    your available stack space can
    crash MATLAB and/or your computer.
    
    Error in ==>
    Fction>create@(x)(Po/(4*pi*K))*((exp((x^2+Sigma^2)*z)/(x^2+Sigma^2)).*((besselj(1,x*r(n))))*x)
    (j'ai essayé d'autres techniques entre temps mais rien de marche)
    Maintenant ce code me dit qu'il faut plus d'itération donc j'ai augmenté mon N mais au dessus de 360 Matlab crash (version 2008a)
    Je pense ne plus être loin de la solution mais je suis bloqué...
    Auriez vous des idées svp?
    Merci d'avance

  3. #3
    Membre Expert
    Inscrit en
    Août 2010
    Messages
    1 124
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 1 124
    Par défaut
    Ta Fction est infiniment récursive puisqu'elle s'appelle elle-même à chaque fois. N'est-ce pas plutôt @T que tu voulais intrégrer ??

  4. #4
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2014
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Corse (Corse)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2014
    Messages : 10
    Par défaut
    Merci pour ta réponse.
    En effet merci c'est plutôt cette fonction que je voudrais intégrer.
    Mais dois-je le faire dans un autre fichier ou dans le même Matlab peut accepter?

    J'ai donc fais des tests il semble plus logique de le faire dans un autre fichier (je suis pas forcement un bon utilisateur de Matlab ça se voit...)

    voici mon nouveau script:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    K=0.3;
    Po=10^12;
        a1=0;
        b=100;
    r =-0.0024:0.0001:0.0024;
        Tac=quadl(@T,0,100)
    Mais voici le message d'erreur:
    ??? Error using ==> feval
    Undefined function or method 'T' for input
    arguments of type 'double'.
    
    Error in ==> quadl at 70
    y = feval(f,x,varargin{:}); y = y(:).';
    
    Error in ==> Temperature at 9
        Tac=quadl(@T,0,100)
    J'avoue ne pas forcement comprendre comment T est reconnu par Matlab... En fait je cherche à intégrer T entre 0 et +infini et je pense que quadl est le meilleure fonction pour ça. (J'ai essayé de passer par les séries mais la fonction trouvée n'est pas la bonne)
    Je continue mes recherches mais avez-vous des commentaires sur le code?
    Merci d'avance

  5. #5
    Membre Expert
    Inscrit en
    Août 2010
    Messages
    1 124
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 1 124
    Par défaut
    Undefined function or method 'T' for input
    Refais le tout dans un même fichier, la ou est définie T, sinon Matlab ne la trouvera évidement pas. Remplace juste dans ton premier exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Tac=quadl(Fction,0,5);
    % par
    Tac=quadl(T,0,5);

  6. #6
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2014
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Corse (Corse)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2014
    Messages : 10
    Par défaut
    Merci pour l'aide,

    Nouveau message:
    ??? Error using ==> mpower
    Matrix must be square.
    
    Error in ==>
    Fction>@(x)(Po/(4*pi*K))*((exp((x^2+Sigma^2)*z)/(x^2+Sigma^2)).*((besselj(1,x*r(n))))*x)
    at 21
        T=@(x)(Po/(4*pi*K))*((exp((x^2+Sigma^2)*z)/(x^2+Sigma^2)).*((besselj(1,x*r(n))))*x);
        
    Error in ==> quadl at 70
    y = feval(f,x,varargin{:}); y = y(:).';
    
    Error in ==> Fction at 31
    Tac=quadl(T,0,100);
    Je comprends pas pourquoi il pense que c'est des matrices...
    J'ai fait une boucle pour passer r de vecteur lignes à matrice alors j'ai voulu vérifier certaine chose:
    size Sigma = 1 5
    Alors qu'à la vue c'est un scalaire j'ai vérifié: (il me donne un message d'erreur alors que ce matin il me donnait un imaginaire pur.... )
    ??? Error using ==> sigma at 83
    Not enough input arguments.
    Bref, je suis désolé de solliciter pour ce qui pourrait être des broutilles mais je suis un peu dans une impasse depuis un moment....

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

Discussions similaires

  1. Comment appeler une fonction variable ?
    Par franckcl dans le forum C++
    Réponses: 10
    Dernier message: 26/06/2007, 11h00
  2. [Lisp] Variable considérée comme une fonction
    Par lunart dans le forum Lisp
    Réponses: 2
    Dernier message: 07/04/2005, 15h48
  3. Réponses: 5
    Dernier message: 09/02/2005, 18h50
  4. Utilisé une variable hors d'une fonction
    Par PrinceMaster77 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 03/02/2005, 19h21
  5. variable hors d'une fonction
    Par Anduriel dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 02/02/2005, 08h29

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