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?