问题简述
一些商品在t时期的供销平衡问题,会转化为非线性差分方程,下面的例子说明了,如何探究是否有混沌现象和找到分岔点并且要观察分岔点的极限趋势是否符合Feigenbaum常数揭示的规律问题。
非线性差分方程如下:
根据分析方程的极限个数n,从而判断根据n的变化观察是否符合Feigenbaum常数,Feigenbum常数是
代码
function chaos(iter_fun,x0,r,n) %#ok<*INUSL>
kr=0;
for rr = r(1):r(3):r(2)
kr = kr + 1;
y(kr,1)=feval(iter_fun,x0,rr);
for i = 2 : n(2)
y(kr,i) = feval(iter_fun,y(kr,i-1),rr);
end
end
plot(r(1):r(3):r(2),y(:,n(1)+1:n(2)),'.');
end
mu = 4.8;
k = 50; %递推次数
c = 1:1:6; %变参
qt = 2; %期望价格初值(数值滑块控件)
[~,n] = size(c);
for i = 1:n
cc = c(i);
qt0(i,1) = qt;
for j = 1:k
qt0(i,j+1) = 1.2*cc - 1.2*atan(mu*qt0(i,j)) + 0.7*qt0(i,j);
end
end
[c' qt0] %输出结果
subplot(3,2,1),plot(linspace(1,k,k+1),qt0(1,:),"-")
subplot(3,2,2),plot(linspace(1,k,k+1),qt0(2,:),"-")
subplot(3,2,3),plot(linspace(1,k,k+1),qt0(3,:),"-")
subplot(3,2,4),plot(linspace(1,k,k+1),qt0(4,:),"-")
subplot(3,2,5),plot(linspace(1,k,k+1),qt0(5,:),"-")
subplot(3,2,6),plot(linspace(1,k,k+1),qt0(6,:),"-")
c1 = 1;(一个数值滑块控件)
qt1 = linspace(1,6,6)';
for i = 1:6
for j = 1:k
qt1(i,j+1) = 1.2*c1 - 1.2*atan(mu*qt1(i,j)) + 0.7*qt1(i,j);
end
end
subplot(3,2,1),plot(linspace(1,k,k+1),qt1(1,:),"-")
subplot(3,2,2),plot(linspace(1,k,k+1),qt1(2,:),"-")
subplot(3,2,3),plot(linspace(1,k,k+1),qt1(3,:),"-")
subplot(3,2,4),plot(linspace(1,k,k+1),qt1(4,:),"-")
subplot(3,2,5),plot(linspace(1,k,k+1),qt1(5,:),"-")
subplot(3,2,6),plot(linspace(1,k,k+1),qt1(6,:),"-")
clf
chaos(@iter_pt,0,[-2,2,0.01],[100,200])
function y=iter_pt(x,r)
y = 1.2*r - 1.2*atan(4.8*x) + 0.7*x;
end
② 探究Feigenbaum常数和参数的趋近值。
function chaos(iter_fun,x0,r,n)
kr=0;
for rr = r(1):r(3):r(2)
kr = kr + 1;
y(kr,1)=feval(iter_fun,x0,rr);
for i = 2 : n(2)
y(kr,i) = feval(iter_fun,y(kr,i-1),rr);
end
end
figure(1);
plot(r(1):r(3):r(2),y(:,n(1)+1:n(2)),'.');
%对参数的左值进行绘图
% figure(2);
% plot(linspace(0,n(2),200),y(1,:));
% xlabel('n','FontName','Times New Roman','FontSize',12);
% ylabel('y','FontName','Times New Roman','FontSize',12);
% title('c=0.7,X0=0.0001','FontName','Times New Roman','FontSize',12) ; %ͼµÄ±êÌâ
% box off;
% set(gcf,'color','w');
% set(gcf,'Position',[220,2,437,475,2,274,4]);
%一图画六标(适合大范围检索)
% m= (r(2)-r(1))/r(3);
% for i = 0:m-1
% figure (floor(i/6)+2);
% j = mod (i,6)+1;
% subplot(3,2,j),
% plot(linspace(0,n(2),200),y(i+1,:));
%一图画一表
m= (r(2)-r(1))/r(3);
for i = 1:m+1
figure(i);
plot(linspace(0,n(2),200),y(i,:));
end
运行结果
当c=1.086时,此时收敛于一个值。
当c=0.953时,此时在两点之间震荡。
当c=0.91时,在四点之间震荡.
当c=0.897时,在八点之间震荡。
当c=0.896时,在16点之间震荡。
这样我们就得到了五个分岔点:1.086,0.953,0.910,0.897,0.896
(1.086-0.897)\(0.953-0.907)= 4.0870
(0.953-0.896)/(0.910-0.897)= 4.3846
可以看出这是一个逐步逼近Feigenbaum常数的过程。
总结
混沌现象指的就是序列的趋势似乎是一片混乱,但是其实也是有一定的规律的,比如Feigenbaum常数就是出现在不同分岔和混沌现象中的一个常数。在第八题的运行结果中我们可以看出,很明显满足混沌现象。
混沌现象和分岔现象出现在非线性方程和线性偏微分方程中,非线性是混沌现象的一个特例,混沌理论就是关于非线性系统在一定参数条件下展现分岔、周期运动与非周期运动相互纠缠,以至于通向某种非周期有序运动的理论。非线性方程确实是产生混沌现象的重要机制,但非线性方程不一定导致混沌。相反,某些非线性方程可以具有稳定的周期解或稳定的非周期解;线性方程也有可能产生混沌现象。例如,在离散时间和空间中,某些线性偏微分方程可以表现出混沌。更普遍的情况是,当线性系统与非线性效应耦合时,也可以产生混沌。除方程之外,混沌现象也可能产生于映射、迭代过程等中。这些过程不一定可以描述为方程。
产生混沌的关键因素是复杂性,而非线性本身。复杂性可能来源于系统结构的复杂性、参数的复杂变化、初始条件的微小变化等。所以,更准确的说法是:混沌现象可能出现在复杂系统中,这些系统可以是非线性的,也可以是线性的;可以是方程形式的,也可以是非方程形式的。非线性效应只是导致复杂性的许多可能机制之一。复杂性本身才是混沌产生的根源。
参考文献
[1] 姜启源,谢金星,刑文训,张立平,《大学数学实验》,清华大学出版社,2010.12
[2] 丁恒飞,王丙参,田俊红,《MATLAB与大学数学实验》,科学出版社,2017.6
[3] 占海明 等编著,《基于MATLAB的高等数学问题求解》,清华大学出版社,2013.2
[4] 王元昊,曾红,《数学基本问题的MATLAB解法》,化学工业出版社,2019.8
[5] MATLAB - MathWorks. MATLAB
[6](29条消息) 非线性方程模型及求解实例_非线性方程实际问题_苓诣的博客-CSDN博客
[7]第7章 非线性方程与方程组的数值解法(基于MATLAB) - 知乎 (zhihu.com)
[8]姜启源,何青,高立.数学实验.第2版.北京:高等教育出版社,2006
[9]李庆扬,王能超,易大义.数值分析.第5版.北京:清华大学出版社,2008