我在MATLAB中有以下错误:
???下标指数必须是实数正整数或逻辑值。 ==> Lloyd_Max在74D(W_count)=平均(x-心(Xq).^2)处的误差;
这是我的密码:
function [ xq,centers,D ] = Lloyd_Max( x,N,min_value,max_value )
%LLOYD_MAX Summary of this function goes here
% Detailed explanation goes here
x = x';
temp = (max_value - min_value)/2^N;
count=1;
for j=0:temp:((max_value - min_value)-temp),
centers(count) = (j + j + temp )/2;
count = count + 1;
end
for i=1:length(centers),
k(i) = centers(i);
end
w_count = 0;
while((w_count < 2) || (D(w_count) - D(w_count - 1) > 1e-6))
w_count = w_count + 1;
count1 = 2;
for i=2:(count-1),
T(i) = (k(i-1) + k(i))/2;
count1 = count1 +1 ;
end
T(1) = min_value;
T(count1) = max_value;
index = 1;
for j=2:count1,
tempc = 0;
tempk = 0;
for k=1:10000,
if(x(k) >= T(j-1) && x(k) < T(j))
tempk = tempk + x(k);
tempc = tempc + 1;
end
end
k(index) = tempk;
k_count(index) = tempc;
index = index + 1;
end
for i=1:length(k),
k(i) = k(i)/k_count(i);
end
for i=1:10000,
if (x(i) > max_value)
xq(i) = max_value;
elseif (x(i) < min_value)
xq(i) = min_value;
else
xq(i) = x(i);
end
end
for i=1:10000,
cnt = 1;
for l=2:count1,
if(xq(i) > T(l-1) && xq(i) <= T(l))
xq(i) = cnt;
end
cnt = cnt +1 ;
end
end
D(w_count) = mean((x - centers(xq)).^2);
end
end
我称之为它,并有这些投入:
M = 10000
t=(randn(M,1)+sqrt(-1)*randn(M,1))./sqrt(2);
A= abs(t).^2;
[xq,centers,D] = Lloyd_Max( A,2,0,4 );
结果: xq和中心均正常,xq在1-4范围,中心1-4指数,0.5~3.5范围。
我不知道哪里出了问题,here...Please帮助我。
提前感谢!
神秘的SOVLED!
谢谢大家的帮助!我刚刚退出了while for循环:
for i=1:10000,
if (x(i) > max_value)
xq(i) = max_value;
elseif (x(i) < min_value)
xq(i) = min_value;
else
xq(i) = x(i);
end
end
而且很有魅力..。此循环再次初始化数组。很抱歉。再次感谢您!
发布于 2013-01-14 22:57:27
函数的中间有一个赋值xq(i) = x(i)
,但是从外部将A
传递为x
,从由randn
抽样的t
中计算A
,因此不能保证xq
是整数。
发布于 2013-01-14 22:30:28
我不知道你的目标是什么,但是你的向量xq
不包含整数,它包含双数。如果要像使用centers(xq)
那样使用索引向量,则向量的所有元素都必须是整数。
只要稍微检查一下,就会发现xq是x值,您应该找到一些方法将它们映射到它们所属的最接近的单元格的整数(我猜‘心’代表单元格的中心?)
https://stackoverflow.com/questions/14332148
复制相似问题