本人学生,之前没有学过MATLAB 课题需要 模仿网上的程序写了以下程序,运行时一直处于busy状态 没有图像。望各位大神帮忙,卡了5,6天了 谢谢!
m函数没有问题,在计算其他参数是用过。理论上结果应该为混沌图像
function dy = Lorenz(t,y);
R0=10*10^(-6);
rou=990;
sigma=0.0725;
mu=0.001;
p0=1*10^5;
pv=2.33*10^3;
c=1500;
k1=4/3;
pi=3.1415926;
pA=290*10^3;
dy=zeros(4,1);
dy(2)=y(1);
dy(1)=(-(y(1))^2/2*(3-y(1)/c)+(1+(1-3*k1)*y(1)/c)...
*((p0-pv)/rou+2*sigma/rou/R0)*(R0/y(2))^(3*k1)...
-2*sigma/rou/y(2)-4*mu*y(1)/rou/y(2)-(1+y(1)/c)...
*((p0-pv+pA*sin(2*pi*y(3)))/rou)...
-y(2)*2*pi*y(4)*pA*cos(2*pi*y(3))/rou/c)...
*((1-y(1)/c)*y(1)+4*mu/rou/c)^(-1);
dy(3)=y(4);
dy(4)=0;
主程序:
Z=[];
for r=linspace(1*10^5,8*10^5,1000);
[T,Y]=ode45('Lorenz',[0,0001],[0;10*10^(-6);0;r]);
[T,Y]=ode45('Lorenz',[0,0005],Y(length(Y),:));
Y(:,1)=Y(:,2)-Y(:,1);
for k=2:length(Y)
f=k-1;
if Y(k,1)<0
if Y(f,1)>0
y=Y(k,2)-Y(k,1)*(Y(f,2)-Y(k,2))/(Y(f,1)-Y(k,1));
Z=[Z r+(abs(y)/10^(-5))*i];
end
else
if Y(f,1)<0
y=Y(k,2)-Y(k,1)*(Y(f,2)-Y(k,2))/(Y(f,1)-Y(k,1));
Z=[Z r+(abs(y)/10^(-5))*i];
end
end
end
drawnow
plot(Z,'.','markersize',1)
end
title('Lorenz映射分岔图')
xlabel('r'),ylabel('R0/R')
网上的程序:
function dy = Lorenz(t,y)
% Lorenz系统
% 系统微分方程:
% dx/dt = -a(x-y)
% dy/dt = x(r-z)-y
% dz/dt = xy-bz
% a=y(4)
% r=y(5)
% b=y(6)
dy=zeros(6,1);
dy(1)=-y(4)*(y(1)-y(2));
dy(2)=y(1)*(y(5)-y(3))-y(2);
dy(3)=y(1)*y(2)-y(6)*y(3);
dy(4)=0;
dy(5)=0;
dy(6)=0;
随r的分岔图求解程序:——按照x=y平面取截面
function Lorenz_bifur_r
Z=[];
for r=linspace(1,500,1000);
% 舍弃前面迭带的结果,用后面的结果画图
[T,Y]=ode45('Lorenz',[0,1],[1;1;1;16;r;4]);
[T,Y]=ode45('Lorenz',[0,50],Y(length(Y),:));
Y(:,1)=Y(:,2)-Y(:,1);
% 对计算结果进行判断,如果点满足x=y,则取点
for k=2:length(Y)
f=k-1;
if Y(k,1)<0
if Y(f,1)>0
y=Y(k,2)-Y(k,1)*(Y(f,2)-Y(k,2))/(Y(f,1)-Y(k,1));
Z=[Z r+abs(y)*i];
end
else
if Y(f,1)<0
y=Y(k,2)-Y(k,1)*(Y(f,2)-Y(k,2))/(Y(f,1)-Y(k,1));
Z=[Z r+abs(y)*i];
end
end
end
end
plot(Z,'.','markersize',1)
title('Lorenz映射分岔图')
xlabel('r'),ylabel('|y| where x=y')