matlab 程序陷入死循环,请高手指点一下
function[xn,dn]=PhaSpaRecon(s,tau,m,T)%混沌序列的相空间重构(phasespacereconstruction)%[xn,dn,xn...
function [xn,dn] = PhaSpaRecon(s,tau,m,T)
% 混沌序列的相空间重构 (phase space reconstruction)
% [xn, dn, xn_cols] = PhaSpaRecon(s, tau, m)
% 输入参数: s 混沌序列(列向量)
% tau 重构时延
% m 重构维数
% T 直接预测步数
% 输出参数: xn 相空间中的点序列(每一列为一个点)
% dn 一步预测的目标(行向量)
s=[0.4900 0.8000 0.0800 0.3200 0.5300 0.7100 0.8700 0.0000 0.1100 0.1900 0.2500 0.3000 0.3300 0.3100 0.2700 0.2200 0.1600 0.0900 0.0000 0.9000 0.7900 0.6700 0.5400 0.4000 0.2400 0.0700 0.8900 0.7000 0.5000 0.2900];
[rows,cols] = size(s);
if (rows>cols)
len = rows;
s = s';
else
len = cols;
end
if (nargin < 4)
T = 1;
end
if (nargout==1)
if (len-(m-1)*tau < 1)
disp('err: delay time or the embedding dimension is too large!')
xn = [];
else
xn = zeros(m,len-(m-1)*tau);
for i = 1:m
xn(i,:) = s(1+(i-1)*tau : len-(m-i)*tau); % 相空间重构,每一行为一个点
end
end
elseif (nargout==2)
if (len-T-(m-1)*tau < 1)
disp('err: delay time or the embedding dimension is too large!')
xn = [];
dn = [];
else
xn = zeros(m,len-T-(m-1)*tau);
for i = 1:m
xn(i,:) = s(1+(i-1)*tau : len-T-(m-i)*tau); % 相空间重构,每一行为一个点
end
dn = s(1+T+(m-1)*tau : end); % 预测的目标
end
end
% 计算混沌时间序列 Lyapunov 指数 - 主函数
function [xn,dn] = PhaSpaRecon(s,tau,m,T)
clc
clear
close all
%-----------------------------------------------------------------
% 产生 Lorenz 混沌时间序列
disp('---------- Lorenz ----------')
sigma = 16; % Lorenz 方程参数 a
b = 4; % b
r = 45.92; % c
y = [-1,0,1]; % 起始点 (1 x 3 的行向量)
h = 0.01; % 积分时间步长
k1 = 10000; % 前面的迭代点数
k2 = 5000; % 后面的迭代点数
z = LorenzData(y,h,k1+k2,sigma,r,b);
x = z(k1+1:end,1); % 时间序列
%-----------------------------------------------------------------
% Lorenz 入口参数
tau = 11; % 时延
m = 3; % 嵌入维
[xn] = PhaSpaRecon(x,tau,m); % 每列为一个点
xn = xn'; % 每行为一个点
taumax = 500; % 最大离散步进时间
P = 100; % 序列平均周期
fs = 100; % 采样频率
Y = lyapunov_luzhenbo(xn,taumax,P,fs);
figure(2)
subplot(211); plot(Y,'+:'); grid; xlabel('i'); ylabel('y(i)'); title('Logistic')
subplot(212); plot(diff(Y),'+:'); grid; xlabel('n'); ylabel('slope');
linear_zone = [70:140]'; % 线性区域
F = polyfit(linear_zone,Y(linear_zone),1);
Lyapunov1 = F(1) 展开
% 混沌序列的相空间重构 (phase space reconstruction)
% [xn, dn, xn_cols] = PhaSpaRecon(s, tau, m)
% 输入参数: s 混沌序列(列向量)
% tau 重构时延
% m 重构维数
% T 直接预测步数
% 输出参数: xn 相空间中的点序列(每一列为一个点)
% dn 一步预测的目标(行向量)
s=[0.4900 0.8000 0.0800 0.3200 0.5300 0.7100 0.8700 0.0000 0.1100 0.1900 0.2500 0.3000 0.3300 0.3100 0.2700 0.2200 0.1600 0.0900 0.0000 0.9000 0.7900 0.6700 0.5400 0.4000 0.2400 0.0700 0.8900 0.7000 0.5000 0.2900];
[rows,cols] = size(s);
if (rows>cols)
len = rows;
s = s';
else
len = cols;
end
if (nargin < 4)
T = 1;
end
if (nargout==1)
if (len-(m-1)*tau < 1)
disp('err: delay time or the embedding dimension is too large!')
xn = [];
else
xn = zeros(m,len-(m-1)*tau);
for i = 1:m
xn(i,:) = s(1+(i-1)*tau : len-(m-i)*tau); % 相空间重构,每一行为一个点
end
end
elseif (nargout==2)
if (len-T-(m-1)*tau < 1)
disp('err: delay time or the embedding dimension is too large!')
xn = [];
dn = [];
else
xn = zeros(m,len-T-(m-1)*tau);
for i = 1:m
xn(i,:) = s(1+(i-1)*tau : len-T-(m-i)*tau); % 相空间重构,每一行为一个点
end
dn = s(1+T+(m-1)*tau : end); % 预测的目标
end
end
% 计算混沌时间序列 Lyapunov 指数 - 主函数
function [xn,dn] = PhaSpaRecon(s,tau,m,T)
clc
clear
close all
%-----------------------------------------------------------------
% 产生 Lorenz 混沌时间序列
disp('---------- Lorenz ----------')
sigma = 16; % Lorenz 方程参数 a
b = 4; % b
r = 45.92; % c
y = [-1,0,1]; % 起始点 (1 x 3 的行向量)
h = 0.01; % 积分时间步长
k1 = 10000; % 前面的迭代点数
k2 = 5000; % 后面的迭代点数
z = LorenzData(y,h,k1+k2,sigma,r,b);
x = z(k1+1:end,1); % 时间序列
%-----------------------------------------------------------------
% Lorenz 入口参数
tau = 11; % 时延
m = 3; % 嵌入维
[xn] = PhaSpaRecon(x,tau,m); % 每列为一个点
xn = xn'; % 每行为一个点
taumax = 500; % 最大离散步进时间
P = 100; % 序列平均周期
fs = 100; % 采样频率
Y = lyapunov_luzhenbo(xn,taumax,P,fs);
figure(2)
subplot(211); plot(Y,'+:'); grid; xlabel('i'); ylabel('y(i)'); title('Logistic')
subplot(212); plot(diff(Y),'+:'); grid; xlabel('n'); ylabel('slope');
linear_zone = [70:140]'; % 线性区域
F = polyfit(linear_zone,Y(linear_zone),1);
Lyapunov1 = F(1) 展开
2个回答
展开全部
f=[160 130 220 170 140 130 190 150 190 200 230];
Aeq=[1 1 1 1 0 0 0 0 0 0 0;0 0 0 0 1 1 1 1 0 0 0;0 0 0 0 0 0 0 0 1 1 1];
Beq=[50 60 50];
A=[0 0 0 -1 0 0 0 -1 0 0 0;0 0 0 1 0 0 0 1 0 0 0;-1 0 0 0 -1 0 0 0 -1 0 0;1 0 0 0 1 0 0 0 1 0 0;0 -1 0 0 0 -1 0 0 0 -1 0;0 1 0 0 0 1 0 0 0 1 0;...
0 0 -1 0 0 0 -1 0 0 0 -1;0 0 1 0 0 0 1 0 0 0 1;];
B=[-10 50 -30 80 -70 140 -10 30];
LB=[0 0 0 0 0 0 0 0 0 0 0];
[X,fval,exitflag,output,lambada]=linprog(f,A,B,Aeq,Beq,LB)
Optimization terminated successfully.
X =
0.0000
50.0000
0.0000
0.0000
0.0000
50.0000
0.0000
10.0000
40.0000
0.0000
10.0000
fval =
2.4400e+004
Aeq=[1 1 1 1 0 0 0 0 0 0 0;0 0 0 0 1 1 1 1 0 0 0;0 0 0 0 0 0 0 0 1 1 1];
Beq=[50 60 50];
A=[0 0 0 -1 0 0 0 -1 0 0 0;0 0 0 1 0 0 0 1 0 0 0;-1 0 0 0 -1 0 0 0 -1 0 0;1 0 0 0 1 0 0 0 1 0 0;0 -1 0 0 0 -1 0 0 0 -1 0;0 1 0 0 0 1 0 0 0 1 0;...
0 0 -1 0 0 0 -1 0 0 0 -1;0 0 1 0 0 0 1 0 0 0 1;];
B=[-10 50 -30 80 -70 140 -10 30];
LB=[0 0 0 0 0 0 0 0 0 0 0];
[X,fval,exitflag,output,lambada]=linprog(f,A,B,Aeq,Beq,LB)
Optimization terminated successfully.
X =
0.0000
50.0000
0.0000
0.0000
0.0000
50.0000
0.0000
10.0000
40.0000
0.0000
10.0000
fval =
2.4400e+004
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询