三维混沌:耦合Sine映射与Chebyshev映射(含MATLAB代码)

本文探讨了如何通过耦合Sine映射和Chebyshev混沌映射来构造三维混沌系统,展示了在特定参数下混沌行为的实验结果,以及对x、y、z混沌值的可视化分析。研究重点在于非线性动力学特性和密钥空间扩展。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、耦合Sine映射与Chebyshev映射原理:

Chebyshev映射是具备良好的非线性动力学特性的1D的混沌映射,当控制参数w∈[2,6]时,该映射的Lyapunov指数为正数,表明在w∈[2,6]的区间范围内,Chebyshev映射能够表现出混沌特性,但是这会限制密钥空间的大小,因此建立高维混沌映射(HD),使其在原有的基础上,更能够表现出好的混沌特性,利用耦合的方法,构造出三维Sine映射与Chebyshev混沌映射。
在这里插入图片描述

二、数值实验

将x,y,z随机初始化,a=10,w=3时:

%% 初始值
T=5000;
x=zeros(1,T);
y=zeros(1,T);
z=zeros(1,T);
x(1)=rand;
y(1)=rand;
z(1)=rand;
a=10;
w=3;
%% 三维混沌映射
for i=2:T
  x(i)=y(i-1)-z(i-1);
  y(i)=sin(pi*x(i-1)-a*y(i-1));
  z(i)=cos(w*acos(z(i-1))+y(i-1));
end
% 画图
figure
plot(x,'.')
xlabel('t')
ylabel('x')
figure  
hist(x)
xlabel('x混沌值')
ylabel('频数')
figure
plot(y,'.')
xlabel('t')
ylabel('y')
figure  
hist(y)
xlabel('y混沌值')
ylabel('频数')
figure
plot(z,'.')
xlabel('t')
ylabel('z')
figure  
hist(z)
xlabel('z混沌值')
ylabel('频数')
figure
plot3(x,y,z,'.')
xlabel('x')
ylabel('y')
zlabel('z')

2.1 x混沌值

在这里插入图片描述
在这里插入图片描述

2.2 y混沌值

在这里插入图片描述
在这里插入图片描述

2.3 z混沌值

在这里插入图片描述
在这里插入图片描述

2.4 三维混沌

在这里插入图片描述
参考文献:
[1]刘雯,阿布都热合曼·卡的尔.耦合sine映射的图像加密方法[J].赤峰学院学报(自然科学版),2020,36(11):1-5.

tic %% 清空环境 clc clear close all warning off all format compact %% 参数设置 Search_Agents = 100; % 种群数量 dimensions = 3; % 维度(三维可视化) Lowerbound = [1e-10, 0.0001, 10]; % 变量下限 Upperbound = [1e-2, 0.002, 400]; % 变量上限 %% 1. 传统随机初始化 fprintf('生成传统随机初始化种群...\n'); random_X = zeros(Search_Agents, dimensions); for i = 1:Search_Agents random_X(i,:) = Lowerbound + rand(1,dimensions).*(Upperbound - Lowerbound); end %% 2. Logistic混沌映射初始化 fprintf('生成Logistic混沌映射初始化种群...\n'); logistic_X = zeros(Search_Agents, dimensions); for i = 1:Search_Agents chaos_seq = zeros(1, dimensions); chaos_seq(1) = rand(); % 随机初始值 % Logistic映射 (μ=4) for j = 2:dimensions chaos_seq(j) = 4 * chaos_seq(j-1) * (1 - chaos_seq(j-1)); end logistic_X(i,:) = Lowerbound + chaos_seq .* (Upperbound - Lowerbound); end %% 3. Tent混沌映射初始化 fprintf('生成Tent混沌映射初始化种群...\n'); tent_X = zeros(Search_Agents, dimensions); for i = 1:Search_Agents chaos_seq = zeros(1, dimensions); chaos_seq(1) = rand(); % Tent映射 for j = 2:dimensions if chaos_seq(j-1) < 0.5 chaos_seq(j) = 2 * chaos_seq(j-1); else chaos_seq(j) = 2 * (1 - chaos_seq(j-1)); end end tent_X(i,:) = Lowerbound + chaos_seq .* (Upperbound - Lowerbound); end %% 4. Gauss混沌映射初始化 fprintf('生成Gauss混沌映射初始化种群...\n'); gauss_X = zeros(Search_Agents, dimensions); alpha = 6.2; beta = -0.5; % Gauss映射参数 for i = 1:Search_Agents chaos_seq = zeros(1, dimensions); chaos_seq(1) = rand(); % Gauss映射 for j = 2:dimensions if chaos_seq(j-1) == 0 chaos_seq(j) = 0; else chaos_seq(j) = exp(-alpha * chaos_seq(j-1)^2) + beta; end % 映射到[0,1]区间 chaos_seq(j) = mod(chaos_seq(j), 1); if chaos_seq(j) < 0 chaos_seq(j) = chaos_seq(j) + 1; end end gauss_X(i,:) = Lowerbound + chaos_seq .* (Upperbound - Lowerbound); end %% 5. Singer混沌映射初始化 fprintf('生成Singer混沌映射初始化种群...\n'); singer_X = zeros(Search_Agents, dimensions); mu = 1.07; % Singer映射参数 for i = 1:Search_Agents chaos_seq = zeros(1, dimensions); chaos_seq(1) = rand(); % Singer映射 for j = 2:dimensions chaos_seq(j) = mu * (7.86*chaos_seq(j-1) - 23.31*chaos_seq(j-1)^2 + ... 28.75*chaos_seq(j-1)^3 - 13.302875*chaos_seq(j-1)^4); chaos_seq(j) = mod(chaos_seq(j), 1); % 取模确保在[0,1] if chaos_seq(j) < 0 chaos_seq(j) = chaos_seq(j) + 1; end end singer_X(i,:) = Lowerbound + chaos_seq .* (Upperbound - Lowerbound); end %% 6. Sinusoidal混沌映射初始化(终极优化) fprintf('生成Sinusoidal混沌映射初始化种群...\n'); sinusoidal_X = zeros(Search_Agents, dimensions); % 使用标准随机数代替qrand quantum_rng = rand(Search_Agents, dimensions); for i = 1:Search_Agents % 创建5个不同参数的混沌序列 chaos_seqs = zeros(5, dimensions); % 初始化序列(使用随机数) for k = 1:5 chaos_seqs(k,1) = quantum_rng(i, mod(k-1, dimensions)+1); end % 动态参数数组 a = [3.92, 2.76, 4.0, 3.5, 3.8]; for j = 2:dimensions % 相互耦合混沌系统 chaos_seqs(1,j) = a(1) * sin(pi * (chaos_seqs(5,j-1) + chaos_seqs(2,j-1))); chaos_seqs(2,j) = a(2) * sin(pi * (chaos_seqs(1,j-1) + chaos_seqs(3,j-1))); chaos_seqs(3,j) = a(3) * sin(pi * (chaos_seqs(2,j-1) + chaos_seqs(4,j-1))); chaos_seqs(4,j) = a(4) * sin(pi * (chaos_seqs(3,j-1) + chaos_seqs(5,j-1))); chaos_seqs(5,j) = a(5) * sin(pi * (chaos_seqs(4,j-1) + chaos_seqs(1,j-1))); % 动态调整参数 a = a + 0.05 * sin(pi*j/7) .* [1.0, 0.8, 1.2, 0.9, 1.1]; a = min(max(a, 3.5), 4.0); % 保持参数在有效范围 end % 混合序列并添加随机扰动 weights = [0.25, 0.2, 0.25, 0.2, 0.1]; mixed_seq = weights * chaos_seqs; mixed_seq = mod(mixed_seq + 0.1*quantum_rng(i,:), 1); % 应用双Tent映射增强 for iter = 1:2 for j = 1:dimensions if mixed_seq(j) < 0.5 mixed_seq(j) = 2 * mixed_seq(j); else mixed_seq(j) = 2 * (1 - mixed_seq(j)); end end end sinusoidal_X(i,:) = Lowerbound + mixed_seq .* (Upperbound - Lowerbound); end %% 7. Chebyshev混沌映射初始化 fprintf('生成Chebyshev混沌映射初始化种群...\n'); chebyshev_X = zeros(Search_Agents, dimensions); k = 4; % Chebyshev阶数 for i = 1:Search_Agents chaos_seq = zeros(1, dimensions); chaos_seq(1) = rand(); % Chebyshev映射 for j = 2:dimensions chaos_seq(j) = cos(k * acos(chaos_seq(j-1))); chaos_seq(j) = (chaos_seq(j) + 1)/2; % 映射到[0,1]区间 end chebyshev_X(i,:) = Lowerbound + chaos_seq .* (Upperbound - Lowerbound); end %% 8. Iterative混沌映射初始化(终极优化) fprintf('生成Iterative混沌映射初始化种群...\n'); iterative_X = zeros(Search_Agents, dimensions); % 使用标准随机数 quantum_rng = rand(Search_Agents, dimensions, 3); for i = 1:Search_Agents % 创建3个耦合混沌系统 chaos_sys = zeros(3, dimensions); % 使用随机初始化 chaos_sys(:,1) = squeeze(quantum_rng(i, 1, :)); % 动态参数 alpha = [0.48, 0.52, 0.45]; beta = [0.15, 0.25, 0.20]; for j = 2:dimensions % 交叉耦合的迭代系统 chaos_sys(1,j) = sin(alpha(1) * pi / (beta(1) + chaos_sys(3,j-1))) + ... 0.1*sin(pi*chaos_sys(2,j-1)); chaos_sys(2,j) = sin(alpha(2) * pi / (beta(2) + chaos_sys(1,j-1))) + ... 0.1*cos(pi*chaos_sys(3,j-1)); chaos_sys(3,j) = sin(alpha(3) * pi / (beta(3) + chaos_sys(2,j-1))) + ... 0.1*sin(pi*chaos_sys(1,j-1)); % 动态调整参数 alpha = alpha + 0.01 * randn(1,3); alpha = min(max(alpha, 0.4), 0.6); beta = beta + 0.005 * randn(1,3); beta = min(max(beta, 0.1), 0.3); end % 混合系统输出 mixed_seq = 0.4*chaos_sys(1,:) + 0.4*chaos_sys(2,:) + 0.2*chaos_sys(3,:); % 应用Logistic-Tent混合映射 for j = 1:dimensions if rand() > 0.3 % Logistic部分 mixed_seq(j) = 4 * mixed_seq(j) * (1 - mixed_seq(j)); else % Tent部分 if mixed_seq(j) < 0.5 mixed_seq(j) = 2 * mixed_seq(j); else mixed_seq(j) = 2 * (1 - mixed_seq(j)); end end end iterative_X(i,:) = Lowerbound + mixed_seq .* (Upperbound - Lowerbound); end %% 9. Piecewise混沌映射初始化 fprintf('生成Piecewise混沌映射初始化种群...\n'); piecewise_X = zeros(Search_Agents, dimensions); p = 0.4; % 控制参数 for i = 1:Search_Agents chaos_seq = zeros(1, dimensions); chaos_seq(1) = rand(); % Piecewise映射 for j = 2:dimensions if chaos_seq(j-1) >= 0 && chaos_seq(j-1) < p chaos_seq(j) = chaos_seq(j-1) / p; elseif chaos_seq(j-1) >= p && chaos_seq(j-1) < 0.5 chaos_seq(j) = (chaos_seq(j-1) - p) / (0.5 - p); elseif chaos_seq(j-1) >= 0.5 && chaos_seq(j-1) < 1 - p chaos_seq(j) = (1 - p - chaos_seq(j-1)) / (0.5 - p); else chaos_seq(j) = (1 - chaos_seq(j-1)) / p; end end piecewise_X(i,:) = Lowerbound + chaos_seq .* (Upperbound - Lowerbound); end %% 10. Sine混沌映射初始化 fprintf('生成Sine混沌映射初始化种群...\n'); sine_X = zeros(Search_Agents, dimensions); for i = 1:Search_Agents chaos_seq = zeros(1, dimensions); chaos_seq(1) = rand(); % Sine映射 for j = 2:dimensions chaos_seq(j) = sin(pi * chaos_seq(j-1)); % 不需要映射,因为sin(pi*x)对于x∈[0,1]的值在[0,1]之间 end sine_X(i,:) = Lowerbound + chaos_seq .* (Upperbound - Lowerbound); end %% 11. Fuch混沌映射初始化(终极优化) fprintf('生成Fuch混沌映射初始化种群...\n'); fuch_X = zeros(Search_Agents, dimensions); % 使用标准随机数 quantum_rng = rand(Search_Agents, dimensions, 2); for i = 1:Search_Agents % 创建主系统和辅助系统 main_seq = zeros(1, dimensions); aux_seq = zeros(1, dimensions); % 随机初始化 main_seq(1) = quantum_rng(i, 1, 1); aux_seq(1) = quantum_rng(i, 1, 2); % 动态参数 gamma = 3.5; delta = 0.3; for j = 2:dimensions % 主Fuch系统 main_seq(j) = cos(gamma / (main_seq(j-1)^2 + delta)) + ... 0.2 * sin(pi * aux_seq(j-1)); % 辅助Logistic系统 aux_seq(j) = 3.99 * aux_seq(j-1) * (1 - aux_seq(j-1)); % 动态调整参数 gamma = 3.5 + 0.2 * sin(pi*j/12); delta = 0.3 + 0.1 * cos(pi*j/15); end % 混合系统并添加随机扰动 mixed_seq = 0.7 * main_seq + 0.3 * aux_seq; mixed_seq = mod(mixed_seq + 0.15 * squeeze(quantum_rng(i,:,1))', 1); % 应用SPM映射增强 alpha = 0.55; for j = 1:dimensions if mixed_seq(j) > 0 && mixed_seq(j) <= alpha mixed_seq(j) = mixed_seq(j)/alpha; else mixed_seq(j) = (1 - mixed_seq(j))/(1 - alpha); end end fuch_X(i,:) = Lowerbound + mixed_seq .* (Upperbound - Lowerbound); end %% 12. SPM混沌映射初始化 fprintf('生成SPM混沌映射初始化种群...\n'); spm_X = zeros(Search_Agents, dimensions); alpha = 0.4; % 控制参数 for i = 1:Search_Agents chaos_seq = zeros(1, dimensions); chaos_seq(1) = rand(); % SPM映射 for j = 2:dimensions if chaos_seq(j-1) > 0 && chaos_seq(j-1) <= alpha chaos_seq(j) = chaos_seq(j-1)/alpha; else chaos_seq(j) = (1 - chaos_seq(j-1))/(1 - alpha); end end spm_X(i,:) = Lowerbound + chaos_seq .* (Upperbound - Lowerbound); end %% 13. ICMIC混沌映射初始化 fprintf('生成ICMIC混沌映射初始化种群...\n'); icmic_X = zeros(Search_Agents, dimensions); beta = 0.5; % 控制参数 for i = 1:Search_Agents chaos_seq = zeros(1, dimensions); chaos_seq(1) = rand(); % ICMIC映射 for j = 2:dimensions chaos_seq(j) = sin(beta / chaos_seq(j-1)); chaos_seq(j) = abs(mod(chaos_seq(j), 1)); end icmic_X(i,:) = Lowerbound + chaos_seq .* (Upperbound - Lowerbound); end %% 14. Cubic混沌映射初始化 fprintf('生成Cubic混沌映射初始化种群...\n'); cubic_X = zeros(Search_Agents, dimensions); a = 3; % 控制参数 for i = 1:Search_Agents chaos_seq = zeros(1, dimensions); chaos_seq(1) = rand(); % Cubic映射 for j = 2:dimensions chaos_seq(j) = a * chaos_seq(j-1) * (1 - chaos_seq(j-1)^2); chaos_seq(j) = mod(chaos_seq(j), 1); if chaos_seq(j) < 0 chaos_seq(j) = chaos_seq(j) + 1; end end cubic_X(i,:) = Lowerbound + chaos_seq .* (Upperbound - Lowerbound); end %% 15. Bernoulli混沌映射初始化 fprintf('生成Bernoulli混沌映射初始化种群...\n'); bernoulli_X = zeros(Search_Agents, dimensions); p = 0.6; % 控制参数 for i = 1:Search_Agents chaos_seq = zeros(1, dimensions); chaos_seq(1) = rand(); % Bernoulli映射 for j = 2:dimensions if chaos_seq(j-1) <= p chaos_seq(j) = chaos_seq(j-1)/p; else chaos_seq(j) = (1 - chaos_seq(j-1))/(1 - p); end end bernoulli_X(i,:) = Lowerbound + chaos_seq .* (Upperbound - Lowerbound); end %% 16. Kent混沌映射初始化 fprintf('生成Kent混沌映射初始化种群...\n'); kent_X = zeros(Search_Agents, dimensions); b = 0.3; % 控制参数 (0 < b < 1) for i = 1:Search_Agents chaos_seq = zeros(1, dimensions); chaos_seq(1) = rand(); % Kent映射 for j = 2:dimensions if chaos_seq(j-1) > 0 && chaos_seq(j-1) <= b chaos_seq(j) = chaos_seq(j-1)/b; else chaos_seq(j) = (1 - chaos_seq(j-1))/(1 - b); end end kent_X(i,:) = Lowerbound + chaos_seq .* (Upperbound - Lowerbound); end %% 计算覆盖率 fprintf('计算各种初始化方法的覆盖率...\n'); coverage_random = coverage_metric(random_X, Lowerbound, Upperbound); coverage_logistic = coverage_metric(logistic_X, Lowerbound, Upperbound); coverage_tent = coverage_metric(tent_X, Lowerbound, Upperbound); coverage_gauss = coverage_metric(gauss_X, Lowerbound, Upperbound); coverage_singer = coverage_metric(singer_X, Lowerbound, Upperbound); coverage_sinusoidal = coverage_metric(sinusoidal_X, Lowerbound, Upperbound); coverage_chebyshev = coverage_metric(chebyshev_X, Lowerbound, Upperbound); coverage_iterative = coverage_metric(iterative_X, Lowerbound, Upperbound); coverage_piecewise = coverage_metric(piecewise_X, Lowerbound, Upperbound); coverage_sine = coverage_metric(sine_X, Lowerbound, Upperbound); coverage_fuch = coverage_metric(fuch_X, Lowerbound, Upperbound); coverage_spm = coverage_metric(spm_X, Lowerbound, Upperbound); coverage_icmic = coverage_metric(icmic_X, Lowerbound, Upperbound); coverage_cubic = coverage_metric(cubic_X, Lowerbound, Upperbound); coverage_bernoulli = coverage_metric(bernoulli_X, Lowerbound, Upperbound); coverage_kent = coverage_metric(kent_X, Lowerbound, Upperbound); %% 打印覆盖率结果 fprintf('\n----------- 空间覆盖率对比 -----------\n'); fprintf('1. 传统随机初始化: %.2f%%\n', coverage_random*1000); fprintf('2. Logistic混沌映射: %.2f%%\n', coverage_logistic*1000); fprintf('3. Tent混沌映射: %.2f%%\n', coverage_tent*1000); fprintf('4. Gauss混沌映射: %.2f%%\n', coverage_gauss*1000); fprintf('5. Singer混沌映射: %.2f%%\n', coverage_singer*1000); fprintf('6. Sinusoidal混沌映射: %.2f%%\n', coverage_sinusoidal*1000); fprintf('7. Chebyshev混沌映射: %.2f%%\n', coverage_chebyshev*1000); fprintf('8. Iterative混沌映射: %.2f%%\n', coverage_iterative*1000); fprintf('9. Piecewise混沌映射: %.2f%%\n', coverage_piecewise*1000); fprintf('10. Sine混沌映射: %.2f%%\n', coverage_sine*1000); fprintf('11. Fuch混沌映射: %.2f%%\n', coverage_fuch*1000); fprintf('12. SPM混沌映射: %.2f%%\n', coverage_spm*1000); fprintf('13. ICMIC混沌映射: %.2f%%\n', coverage_icmic*1000); fprintf('14. Cubic混沌映射: %.2f%%\n', coverage_cubic*1000); fprintf('15. Bernoulli混沌映射: %.2f%%\n', coverage_bernoulli*1000); fprintf('16. Kent混沌映射: %.2f%%\n', coverage_kent*1000); %% 三维空间可视化(对数坐标) fprintf('生成三维可视化图(对数坐标)...\n'); figure('Position', [100, 100, 1400, 1000]) sgtitle('混沌映射初始化方法三维空间分布对比(X/Y轴对数坐标)', 'FontSize', 18, 'FontWeight', 'bold') % 1. 传统随机初始化 subplot(4,4,1) scatter3(random_X(:,1), random_X(:,2), random_X(:,3), 30, 'b', 'filled'); title(sprintf('1. 传统随机 (%.1f%%)', coverage_random*100)); xlabel('X (log)'); ylabel('Y (log)'); zlabel('Z'); grid on; view(3); set(gca, 'XScale', 'log', 'YScale', 'log'); % 添加对数坐标 %xlim([Lowerbound(1), Upperbound(1)]); %ylim([Lowerbound(2), Upperbound(2)]); zlim([Lowerbound(3), Upperbound(3)]); % 2. Logistic映射 subplot(4,4,2) scatter3(logistic_X(:,1), logistic_X(:,2), logistic_X(:,3), 30, 'r', 'filled'); title(sprintf('2. Logistic (%.1f%%)', coverage_logistic*100)); xlabel('X (log)'); ylabel('Y (log)'); zlabel('Z'); grid on; view(3); set(gca, 'XScale', 'log', 'YScale', 'log'); %xlim([Lowerbound(1), Upperbound(1)]); %ylim([Lowerbound(2), Upperbound(2)]); zlim([Lowerbound(3), Upperbound(3)]); % 3. Tent映射 subplot(4,4,3) scatter3(tent_X(:,1), tent_X(:,2), tent_X(:,3), 30, 'g', 'filled'); title(sprintf('3. Tent (%.1f%%)', coverage_tent*100)); xlabel('X (log)'); ylabel('Y (log)'); zlabel('Z'); grid on; view(3); set(gca, 'XScale', 'log', 'YScale', 'log'); %xlim([Lowerbound(1), Upperbound(1)]); %ylim([Lowerbound(2), Upperbound(2)]); zlim([Lowerbound(3), Upperbound(3)]); % 4. Gauss映射 subplot(4,4,4) scatter3(gauss_X(:,1), gauss_X(:,2), gauss_X(:,3), 30, 'm', 'filled'); title(sprintf('4. Gauss (%.1f%%)', coverage_gauss*100)); xlabel('X (log)'); ylabel('Y (log)'); zlabel('Z'); grid on; view(3); set(gca, 'XScale', 'log', 'YScale', 'log'); %xlim([Lowerbound(1), Upperbound(1)]); %ylim([Lowerbound(2), Upperbound(2)]); zlim([Lowerbound(3), Upperbound(3)]); % 5. Singer映射 subplot(4,4,5) scatter3(singer_X(:,1), singer_X(:,2), singer_X(:,3), 30, 'c', 'filled'); title(sprintf('5. Singer (%.1f%%)', coverage_singer*100)); xlabel('X (log)'); ylabel('Y (log)'); zlabel('Z'); grid on; view(3); set(gca, 'XScale', 'log', 'YScale', 'log'); %xlim([Lowerbound(1), Upperbound(1)]); %ylim([Lowerbound(2), Upperbound(2)]); zlim([Lowerbound(3), Upperbound(3)]); % 6. Sinusoidal映射 subplot(4,4,6) scatter3(sinusoidal_X(:,1), sinusoidal_X(:,2), sinusoidal_X(:,3), 30, [1 0.5 0], 'filled'); title(sprintf('6. Sinusoidal (%.1f%%)', coverage_sinusoidal*100)); xlabel('X (log)'); ylabel('Y (log)'); zlabel('Z'); grid on; view(3); set(gca, 'XScale', 'log', 'YScale', 'log'); %xlim([Lowerbound(1), Upperbound(1)]); %ylim([Lowerbound(2), Upperbound(2)]); zlim([Lowerbound(3), Upperbound(3)]); % 7. Chebyshev映射 subplot(4,4,7) scatter3(chebyshev_X(:,1), chebyshev_X(:,2), chebyshev_X(:,3), 30, [0.5 0 0.5], 'filled'); title(sprintf('7. Chebyshev (%.1f%%)', coverage_chebyshev*100)); xlabel('X (log)'); ylabel('Y (log)'); zlabel('Z'); grid on; view(3); set(gca, 'XScale', 'log', 'YScale', 'log'); %xlim([Lowerbound(1), Upperbound(1)]); %ylim([Lowerbound(2), Upperbound(2)]); zlim([Lowerbound(3), Upperbound(3)]); % 8. Iterative映射 subplot(4,4,8) scatter3(iterative_X(:,1), iterative_X(:,2), iterative_X(:,3), 30, [0 0.5 0.5], 'filled'); title(sprintf('8. Iterative (%.1f%%)', coverage_iterative*100)); xlabel('X (log)'); ylabel('Y (log)'); zlabel('Z'); grid on; view(3); set(gca, 'XScale', 'log', 'YScale', 'log'); %xlim([Lowerbound(1), Upperbound(1)]); %ylim([Lowerbound(2), Upperbound(2)]); zlim([Lowerbound(3), Upperbound(3)]); % 9. Piecewise映射 subplot(4,4,9) scatter3(piecewise_X(:,1), piecewise_X(:,2), piecewise_X(:,3), 30, [0.5 0.5 0], 'filled'); title(sprintf('9. Piecewise (%.1f%%)', coverage_piecewise*100)); xlabel('X (log)'); ylabel('Y (log)'); zlabel('Z'); grid on; view(3); set(gca, 'XScale', 'log', 'YScale', 'log'); %xlim([Lowerbound(1), Upperbound(1)]); %ylim([Lowerbound(2), Upperbound(2)]); zlim([Lowerbound(3), Upperbound(3)]); % 10. Sine映射 subplot(4,4,10) scatter3(sine_X(:,1), sine_X(:,2), sine_X(:,3), 30, [0.7 0.7 0.7], 'filled'); title(sprintf('10. Sine (%.1f%%)', coverage_sine*100)); xlabel('X (log)'); ylabel('Y (log)'); zlabel('Z'); grid on; view(3); set(gca, 'XScale', 'log', 'YScale', 'log'); %xlim([Lowerbound(1), Upperbound(1)]); %ylim([Lowerbound(2), Upperbound(2)]); zlim([Lowerbound(3), Upperbound(3)]); % 11. Fuch映射 subplot(4,4,11) scatter3(fuch_X(:,1), fuch_X(:,2), fuch_X(:,3), 30, [0.3 0.7 0.9], 'filled'); title(sprintf('11. Fuch (%.1f%%)', coverage_fuch*100)); xlabel('X (log)'); ylabel('Y (log)'); zlabel('Z'); grid on; view(3); set(gca, 'XScale', 'log', 'YScale', 'log'); %xlim([Lowerbound(1), Upperbound(1)]); %ylim([Lowerbound(2), Upperbound(2)]); zlim([Lowerbound(3), Upperbound(3)]); % 12. SPM映射 subplot(4,4,12) scatter3(spm_X(:,1), spm_X(:,2), spm_X(:,3), 30, [0.9 0.5 0.2], 'filled'); title(sprintf('12. SPM (%.1f%%)', coverage_spm*100)); xlabel('X (log)'); ylabel('Y (log)'); zlabel('Z'); grid on; view(3); set(gca, 'XScale', 'log', 'YScale', 'log'); %xlim([Lowerbound(1), Upperbound(1)]); %ylim([Lowerbound(2), Upperbound(2)]); zlim([Lowerbound(3), Upperbound(3)]); % 13. ICMIC映射 subplot(4,4,13) scatter3(icmic_X(:,1), icmic_X(:,2), icmic_X(:,3), 30, [0.5 0.2 0.8], 'filled'); title(sprintf('13. ICMIC (%.1f%%)', coverage_icmic*100)); xlabel('X (log)'); ylabel('Y (log)'); zlabel('Z'); grid on; view(3); set(gca, 'XScale', 'log', 'YScale', 'log'); %xlim([Lowerbound(1), Upperbound(1)]); %ylim([Lowerbound(2), Upperbound(2)]); zlim([Lowerbound(3), Upperbound(3)]); % 14. Cubic映射 subplot(4,4,14) scatter3(cubic_X(:,1), cubic_X(:,2), cubic_X(:,3), 30, [0.2 0.8 0.5], 'filled'); title(sprintf('14. Cubic (%.1f%%)', coverage_cubic*100)); xlabel('X (log)'); ylabel('Y (log)'); zlabel('Z'); grid on; view(3); set(gca, 'XScale', 'log', 'YScale', 'log'); %xlim([Lowerbound(1), Upperbound(1)]); %ylim([Lowerbound(2), Upperbound(2)]); zlim([Lowerbound(3), Upperbound(3)]); % 15. Bernoulli映射 subplot(4,4,15) scatter3(bernoulli_X(:,1), bernoulli_X(:,2), bernoulli_X(:,3), 30, [0.8 0.2 0.5], 'filled'); title(sprintf('15. Bernoulli (%.1f%%)', coverage_bernoulli*100)); xlabel('X (log)'); ylabel('Y (log)'); zlabel('Z'); grid on; view(3); set(gca, 'XScale', 'log', 'YScale', 'log'); %xlim([Lowerbound(1), Upperbound(1)]); %ylim([Lowerbound(2), Upperbound(2)]); zlim([Lowerbound(3), Upperbound(3)]); % 16. Kent映射 subplot(4,4,16) scatter3(kent_X(:,1), kent_X(:,2), kent_X(:,3), 30, [0.6 0.4 0.2], 'filled'); title(sprintf('16. Kent (%.1f%%)', coverage_kent*100)); xlabel('X (log)'); ylabel('Y (log)'); zlabel('Z'); grid on; view(3); set(gca, 'XScale', 'log', 'YScale', 'log'); %xlim([Lowerbound(1), Upperbound(1)]); %ylim([Lowerbound(2), Upperbound(2)]); zlim([Lowerbound(3), Upperbound(3)]); %% 覆盖率柱状图(新figure) figure('Position', [200, 200, 1200, 600]) methods = { '1. Random'; '2. Logistic'; '3. Tent'; '4. Gauss'; '5. Singer'; '6. Sinusoidal'; '7. Chebyshev'; '8. Iterative'; '9. Piecewise'; '10. Sine'; '11. Fuch'; '12. SPM'; '13. ICMIC'; '14. Cubic'; '15. Bernoulli'; '16. Kent' }; coverages = [ coverage_random; coverage_logistic; coverage_tent; coverage_gauss; coverage_singer; coverage_sinusoidal; coverage_chebyshev; coverage_iterative; coverage_piecewise; coverage_sine; coverage_fuch; coverage_spm; coverage_icmic; coverage_cubic; coverage_bernoulli; coverage_kent ]*1000; % 创建彩色条 colors = [ 0 0 1; % 蓝色 - Random 1 0 0; % 红色 - Logistic 0 1 0; % 绿色 - Tent 1 0 1; % 品红 - Gauss 0 1 1; % 青色 - Singer 1 0.5 0; % 橙色 - Sinusoidal 0.5 0 0.5; % 紫色 - Chebyshev 0 0.5 0.5; % 青色 - Iterative 0.5 0.5 0; % 橄榄色 - Piecewise 0.7 0.7 0.7;% 灰色 - Sine 0.3 0.7 0.9;% 天蓝 - Fuch 0.9 0.5 0.2;% 橙色 - SPM 0.5 0.2 0.8;% 紫色 - ICMIC 0.2 0.8 0.5;% 绿色 - Cubic 0.8 0.2 0.5;% 粉色 - Bernoulli 0.6 0.4 0.2 % 棕色 - Kent ]; % 绘制柱状图 h = bar(coverages); set(h, 'FaceColor', 'flat'); for k = 1:length(coverages) h.CData(k,:) = colors(k,:); end % 关键修改:调整坐标轴位置和标签设置 ax = gca; set(ax, 'XTick', 1:numel(methods)); % 明确设置所有刻度 set(ax, 'XTickLabel', methods, 'XTickLabelRotation', 45, 'FontSize', 10); % 增加底部边距给x轴标签 ax.Position(2) = 0.25; % 增加底部空间 (默认约0.11) ax.Position(4) = 0.65; % 适当降低高度以补偿 title('混沌映射初始化方法空间覆盖率对比', 'FontSize', 14); ylabel('覆盖率 (%)', 'FontSize', 12); grid on % 添加数据标签 y_pos = coverages + max(coverages)*0.05; for i = 1:length(coverages) text(i, y_pos(i), sprintf('%.1f%%', coverages(i)),... 'HorizontalAlignment', 'center', 'FontSize', 9); end ylim([0 max(coverages)*1.3]); %% toc function coverage = coverage_metric(population, Lowerbound, Upperbound) [n, dim] = size(population); % 自适应网格大小(基于搜索空间大小) scale_factors = log10(Upperbound) - log10(Lowerbound); grid_sizes = max(15, min(40, round(15 * scale_factors / min(scale_factors)))); % 创建对数空间网格 log_Lower = log10(Lowerbound); log_Upper = log10(Upperbound); % 为每个维度创建网格 grid_cells = cell(1, dim); for d = 1:dim grid_cells{d} = linspace(log_Lower(d), log_Upper(d), grid_sizes(d)+1); end % 初始化网格计数器 grid_dims = num2cell(grid_sizes); grid_counts = zeros(grid_dims{:}); % 空间分区树加速 max_points_per_cell = 50; grid_point_count = zeros(size(grid_counts)); for i = 1:n log_pos = log10(max(population(i,:), Lowerbound)); % 防止log(0) % 为每个维度找到网格索引 indices = zeros(1, dim); for d = 1:dim idx = find(log_pos(d) >= grid_cells{d}(1:end-1) & ... log_pos(d) < grid_cells{d}(2:end), 1); if isempty(idx) if log_pos(d) >= grid_cells{d}(end) idx = grid_sizes(d); else idx = 1; end end indices(d) = idx; end % 转换为线性索引 idx_cell = num2cell(indices); linear_idx = sub2ind(size(grid_counts), idx_cell{:}); % 空间分区优化 if grid_point_count(linear_idx) < max_points_per_cell grid_counts(linear_idx) = 1; % 标记为覆盖 grid_point_count(linear_idx) = grid_point_count(linear_idx) + 1; end end % 计算覆盖率(至少有一个点的网格比例) covered_grids = sum(grid_counts(:) > 0); total_grids = prod(grid_sizes); coverage = covered_grids / total_grids; end 无法执行赋值,因为左侧的大小为 1×3,右侧的大小为 3×3。 出错 compare_gaijinNGO (第 305 行) fuch_X(i,:) = Lowerbound + mixed_seq .* (Upperbound - Lowerbound);
最新发布
07-15
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值