用微分变换法求解陈氏混沌系统
chen's chaotic system solution using differential transform method
我正在使用微分变换方法计算陈氏混沌系统的解。我使用的代码是:
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)
此代码的作用是计算 x(k)
、y(k)
和 z(k)
,这些是逼近解的多项式的系数。
解决方案 x(t) = sum_0^infinity x(k)t^k
,其他类似。但是这段代码没有给出混沌序列的期望输出,我得到的 x(t)
图是:
这不是答案,而是更清晰、更正确(从编程上讲)编写循环的方法:
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
这里最重要的问题是不重载内置函数 sum
(我用 temp_sum
代替了它)。其他事情包括内部循环的矢量化(使用 sum
。 ..),从 1 开始的索引(而不是一直写 k+1
),并删除对 gamma
的不必要调用(gamma(k)/gamma(k+1)
= 1/k
)。
我正在使用微分变换方法计算陈氏混沌系统的解。我使用的代码是:
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)
此代码的作用是计算 x(k)
、y(k)
和 z(k)
,这些是逼近解的多项式的系数。
解决方案 x(t) = sum_0^infinity x(k)t^k
,其他类似。但是这段代码没有给出混沌序列的期望输出,我得到的 x(t)
图是:
这不是答案,而是更清晰、更正确(从编程上讲)编写循环的方法:
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
这里最重要的问题是不重载内置函数 sum
(我用 temp_sum
代替了它)。其他事情包括内部循环的矢量化(使用 sum
。 ..),从 1 开始的索引(而不是一直写 k+1
),并删除对 gamma
的不必要调用(gamma(k)/gamma(k+1)
= 1/k
)。