Plot 陈';s混沌系统的微分变换解法

Plot 陈';s混沌系统的微分变换解法,plot,matlab-figure,chaos,Plot,Matlab Figure,Chaos,我正在用微分变换方法计算陈氏混沌系统的解。我使用的代码是: 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)=(gam

我正在用微分变换方法计算陈氏混沌系统的解。我使用的代码是:

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)=和0^无穷大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\u sum
。其他事情包括内部循环的矢量化(使用
sum
)、从1开始的索引(而不是一直编写
k+1
),以及删除对
gamma
的不必要调用(
gamma(k)/gamma(k+1)
=
1/k
)。

当k=1时,代码的第3行中不会有数组索引错误;而且gamma(1+k)/gamma(2+k)=1/(k+1)@Upstart,它不会抛出错误,但它是错误的,我现在更正了它。我想写的也是
gamma(k)/gamma(k+1)=1/k
。它在matlab中仍然会抛出一个错误。你能解释一下第三行吗?我把它解释得更清楚了一点。它说:在
x
中取1到k的元素,然后按元素进行乘法(
*
)通过
z
中的元素k到1。然后将所有结果相加并分配到
temp_sum
。顺便说一句,我已经检查了它,它给出了完全相同的结果,没有错误,确保在运行此操作之前键入
clear
。这是什么意思?当你计算z时,为什么要使用gamma(k)/k?