2 pièce(s) jointe(s)
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:
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:
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 :
Pièce jointe 322673
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:
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:
Pièce jointe 322675
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 :ptdr:.
En vous souhaitant une bonne soirée,
Cordialement,
D.
Le script modifié au complet :
Code:
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); |