上述代码:函数或变量 'h_y' 无法识别。
时间: 2024-02-19 20:57:43 浏览: 189
非常抱歉,代码中的 `h_y` 是笔误,应该是 `h_x`,已修正并重新发布。以下是修改后的完整代码:
```matlab
function tau = avg_mi(x)
% 使用平均互信息法确定时间间隔
N = length(x);
max_tau = floor(N/10);
mi = zeros(max_tau, 1);
for tau = 1:max_tau
% 计算自身信息熵
p_x = histcounts(x, 'Normalization', 'pdf');
h_x = -sum(p_x .* log2(p_x));
% 计算时延 tau 的条件熵
y1 = x(1:end-tau);
y2 = x(tau+1:end);
p_xy = histcounts2(y1, y2, 'Normalization', 'pdf');
h_xy = -sum(sum(p_xy .* log2(p_xy)));
% 计算互信息
mi(tau) = h_x + h_xy;
end
tau = find(mi == max(mi), 1);
end
function dim = false_nearest_neighbors(x, max_dim, tau, eps)
% 使用虚假最近邻点法确定嵌入维度
N = length(x);
fnn = zeros(max_dim, 1);
for dim = 1:max_dim
% 重构
n = N - (dim - 1) * tau;
X = zeros(n, dim);
for i = 1:n
for j = 1:dim
X(i, j) = x((i - 1) * tau + j);
end
end
% 计算最近邻点
k = 4;
[idx, dist] = knnsearch(X, X, 'K', k+1);
dist = dist(:, 2:end);
% 计算虚假最近邻点数
r = eps * max(max(dist));
fnn(dim) = sum(any(dist > r, 2)) / n;
end
% 找到第一个虚假最近邻点数大于 10% 的嵌入维度
dim = find(fnn > 0.1, 1);
end
```
阅读全文