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 :

Intégration sur matlab


Sujet :

MATLAB

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2017
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2017
    Messages : 4
    Points : 3
    Points
    3
    Par défaut Intégration sur matlab
    Dans le code ci-dessous, a un moment, en utilisant G(ceil(ti)), l'erreur reçue est la suivante: Undefined function 'G' for input arguments of type 'double'. Alors que ceil est censé retourner un entier ?

    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
    A=1:1:100; 
    B=1:1:100; 
    C=1; 
    D=1:1:100; 
    E=2; 
    F=1:1:100;
    G=1:1:100; 
    H=0.1:0.1:10; 
    fun_1=@(t)integral(@(ti)G(ceil(ti)).*H(ceil(t-ti)),0.1,t-1);
    fun_2=@(t)integral(@(ti)G(ceil(ti)).*B(ceil(ti)).*(C.*D(t).^E)./F(t).*...
        exp(-integral(@(x)(C.*D(ceil(x)).^E)./F(ceil(x)),ti,5)-K.*(t-ti)),0.1,t-1,'ArrayValued',true);
    I=500;
    J=1000; 
    K=2;
    fun_3=@(t)I*integral(@(ti)min(fun_2(ceil(ti)),J).*exp(-(K+I).*(t-ti)),0.1,t-1);
    t=1:1:5;
    figure(1)
    fplot(fun_1,t);
    figure(2)
    fplot(fun_2,t);
    figure(3)
    fplot(fun_3,t);

    Crdlmnt,
    Alfredo B

  2. #2
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2013
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Santé

    Informations forums :
    Inscription : Septembre 2013
    Messages : 35
    Points : 103
    Points
    103
    Par défaut Réponse "Intégration sur matlab"
    Bonsoir alfredo_butticaz,

    J'ai testé votre script sur la version R2013a de Matlab et il a très bien fonctionné jusqu'à la ligne 20, où vous cherchez à tracer votre graphique de la fonction 'fun_2'. J'obtiens l'erreur suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Subscript indices must either be real positive integers or logicals.
    
    Error in
    @(ti)G(ceil(ti)).*B(ceil(ti)).*(C.*D(t).^E)./F(t).*exp(-integral(@(x)(C.*D(ceil(x)).^E)./F(ceil(x)),ti,5)-K.*(t-ti))
    
    Error in integralCalc/iterateArrayValued (line 157)
                    fxj = FUN(t(1)).*w(1);
    Soit une erreur dans le calcul de la fonction anonyme 'func_2'. J'ai essayé d'obtenir l'erreur que vous avez indiquée. Comment avez-vous procédé pour obtenir : 'Undefined function 'G' précisément ? Si vous avez posé un 'breakpoint' au sein de la fonction 'integralCalc' pour étudier le comportement de cette fonction en mode DEBUG : alors le vecteur 'G' n'existe plus tant que vous êtes au sein de 'integralCalc'.

    Si j'en reviens à l'erreur que j'ai identifiée en lançant votre script, il vous suffit d'utiliser 'ceil' pour les vecteurs D et F dans 'fun_2' :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    fun_2=@(t)integral(@(ti)G(ceil(ti)).*B(ceil(ti)).*(C.*D(ceil(t)).^E)./F(ceil(t)).*...
        exp(-integral(@(x)(C.*D(ceil(x)).^E)./F(ceil(x)),ti,5)-K.*(t-ti)),0.1,t-1,'ArrayValued',true);
    Vous obtiendrez la courbe suivante :
    Nom : fplot_fun2.png
Affichages : 140
Taille : 3,8 Ko

    Malheureusement, vous aurez encore une erreur sur la dernière ligne de fplot(fun_3,t) : vous demandez à Matlab de calculer une intégrale avec une borne 'b' vecteur ligne de longueur 150. En changeant 'fun_3' par :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fun_3=@(t)I*integral(@(ti)min(fun_2(ceil(ti)),J).*exp(-(K+I).*(t-ti)),0.1,t-1,'ArrayValued',true);
    l'intégrale se calcule. Vous obtenez ceci en figure 3:
    Nom : fplot_fun3.png
Affichages : 169
Taille : 2,8 Ko

    J'espère avoir pu vous aider sur votre problème, n'hésitez pas à me donner plus de détails s'il vous manque quelque chose ou si je suis à côté de la plaque .

    En vous souhaitant une bonne soirée,

    Cordialement,

    D.

    Le script modifié au complet :
    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
    A=1:1:100; 
    B=1:1:100; 
    C=1; 
    D=1:1:100; 
    E=2; 
    F=1:1:100;
    G=1:1:100; 
    H=0.1:0.1:10; 
    fun_1=@(t)integral(@(ti)G(ceil(ti)).*H(ceil(t-ti)),0.1,t-1);
    fun_2=@(t)integral(@(ti)G(ceil(ti)).*B(ceil(ti)).*(C.*D(ceil(t)).^E)./F(ceil(t)).*...
        exp(-integral(@(x)(C.*D(ceil(x)).^E)./F(ceil(x)),ti,5)-K.*(t-ti)),0.1,t-1,'ArrayValued',true);
    I=500;
    J=1000; 
    K=2;
    fun_3=@(t)I*integral(@(ti)min(fun_2(ceil(ti)),J).*exp(-(K+I).*(t-ti)),0.1,t-1,'ArrayValued',true);
    t=1:1:5;
    figure(1)
    fplot(fun_1,t);
    figure(2)
    fplot(fun_2,t);
    figure(3)
    fplot(fun_3,t);

Discussions similaires

  1. intégration sur matlab
    Par suzanne1307 dans le forum MATLAB
    Réponses: 2
    Dernier message: 17/04/2009, 18h38
  2. intégration de matlab dans java
    Par mehdiing dans le forum Langage
    Réponses: 9
    Dernier message: 07/05/2007, 10h22
  3. Problème variable locale sur MATLAB
    Par nuans dans le forum MATLAB
    Réponses: 10
    Dernier message: 12/04/2007, 10h34
  4. Nombre pair sur Matlab
    Par cricri04 dans le forum MATLAB
    Réponses: 2
    Dernier message: 16/03/2007, 16h46
  5. Un nouveau qui a besoin d'aide sur MATLAB
    Par bf491499 dans le forum MATLAB
    Réponses: 4
    Dernier message: 26/02/2007, 16h10

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