2017-05-24 4 views
0

Je calculais la solution du système chaotique de Chen en utilisant la méthode différentielle transform. Le code que j'utilise est:solution système chaotique chen utilisant différentiel méthode de transformation

x=zeros(1,7); 
x(1)=-0.1; 
y=zeros(1,7); 
y(1)=0.5; 
z=zeros(1,7); 
z(1)=-0.6; 
for k=0:5 
    x(k+2)=(40*gamma(1+k)/gamma(2+k))*(y(k+1)-x(k+1)); 
    sum=0; 
    for l=0:k 
     sum=sum+x(l+1)*z(k+1-l); 
    end 
    y(k+2)=(gamma(1+k)/gamma(2+k))*(-12*x(k+1)-sum+28*y(k+1)); 
    sum=0; 
    for l=0:k 
     sum=sum+x(l+1)*y(k+1-l); 
    end 
    z(k+2)=(gamma(1+k)/(1+k))*(sum-3*z(k+1)); 
end 
s=fliplr(x); 
t=0:0.05:2; 
a=polyval(s,t); 
plot(t,a) 

Qu'est-ce que ce code est de calculer x(k), y(k) et z(k) ce sont les coefficients du polynôme qui est une approximation de la solution. La solution x(t) = sum_0^infinity x(k)t^k, et de même les autres. Mais ce code ne donne pas la sortie désirée d'une séquence chaotique le graphique de x(t) que je reçois est:

enter image description here

Répondre

1

Ce n'est pas une réponse, mais une vision plus claire et plus correct (parlant programme) à écrire votre boucle:.

for k = 1:6 
    x(k+1)=(40*1/k)*(y(k)-x(k)); 
    temp_sum = sum(x(1:k).*z(k:-1:1),2); 
    y(k+1) = (1/k)*(-12*x(k)-temp_sum+28*y(k)); 
    temp_sum = sum(x(1:k).*y(k:-1:1),2); 
    z(k+1) = (1/k)*(temp_sum-3*z(k)); 
end 

la question la plus importante est ici ne pas surcharger la fonction intégrée sum (je l'ai remplacé avec temp_sum d'autres choses comprennent vectorisation des boucles internes (à l'aide sum ...), l'indexation que commence en 1 (au lieu de f écriture k+1 tout le temps), et la suppression des appels inutiles à gamma (gamma(k)/gamma(k+1) = 1/k).

+0

ne serait pas là une erreur d'indexation de tableau dans la ligne 3 de votre code lorsque k = 1; et aussi gamma (1 + k)/gamma (2 + k) = 1/(k + 1) – Upstart

+0

@Upstart, il ne jette pas une erreur, mais il a eu tort, je l'ai corrigé maintenant. Et aussi ce que je voulais écrire était 'gamma (k)/gamma (k + 1) = 1/k'. – EBH

+0

il jette toujours une erreur dans matlab.can vous m'expliquer la troisième ligne? – Upstart