用matlab求出A矩阵每一行的每一元素分别与B矩阵每一行的每一元素相减的平方和的最小值,并输出相对应A矩阵和B矩阵的行数。例如,计算A矩阵的第八行的三个元素分别与B矩阵(共22行)每一行的三个元素相减的平分和,最小的结果出现在B矩阵的第11行,那么就输出[22,11]。
我们写的代码如下,问题出在哪里呢?
A=[0 20 39
0 20 82
0 20 125
0 20 168
0 20 211
0 20 254
0 63 39
0 63 82
0 63 125
0 63 168
0 63 211
0 63 254
0 106 39
0 106 82
0 106 125
0 106 168
0 106 211
0 106 254
0 149 39
0 149 82
0 149 125
0 149 168
0 149 211
0 149 254
0 192 39
0 192 82
0 192 125
0 192 168
0 192 211
0 192 254
0 235 39
0 235 82
0 235 125
0 235 168
0 235 211
0 235 254
43 20 39
43 20 82
43 20 125
43 20 168
43 20 211
43 20 254
43 63 39
43 63 82
43 63 125
43 63 168
43 63 211
43 63 254
43 106 39
43 106 82
43 106 125
43 106 168
43 106 211
43 106 254
43 149 39
43 149 82
43 149 125
43 149 168
43 149 211
43 149 254
43 192 39
43 192 82
43 192 125
43 192 168
43 192 211
43 192 254
43 235 39
43 235 82
43 235 125
43 235 168
43 235 211
43 235 254
86 20 39
86 20 82
86 20 125
86 20 168
86 20 211
86 20 254
86 63 39
86 63 82
86 63 125
86 63 168
86 63 211
86 63 254
86 106 39
86 106 82
86 106 125
86 106 168
86 106 211
86 106 254
86 149 39
86 149 82
86 149 125
86 149 168
86 149 211
86 149 254
86 192 39
86 192 82
86 192 125
86 192 168
86 192 211
86 192 254
86 235 39
86 235 82
86 235 125
86 235 168
86 235 211
86 235 254
129 20 39
129 20 82
129 20 125
129 20 168
129 20 211
129 20 254
129 63 39
129 63 82
129 63 125
129 63 168
129 63 211
129 63 254
129 106 39
129 106 82
129 106 125
129 106 168
129 106 211
129 106 254
129 149 39
129 149 82
129 149 125
129 149 168
129 149 211
129 149 254
129 192 39
129 192 82
129 192 125
129 192 168
129 192 211
129 192 254
129 235 39
129 235 82
129 235 125
129 235 168
129 235 211
129 235 254
172 20 39
172 20 82
172 20 125
172 20 168
172 20 211
172 20 254
172 63 39
172 63 82
172 63 125
172 63 168
172 63 211
172 63 254
172 106 39
172 106 82
172 106 125
172 106 168
172 106 211
172 106 254
172 149 39
172 149 82
172 149 125
172 149 168
172 149 211
172 149 254
172 192 39
172 192 82
172 192 125
172 192 168
172 192 211
172 192 254
172 235 39
172 235 82
172 235 125
172 235 168
172 235 211
172 235 254
215 20 39
215 20 82
215 20 125
215 20 168
215 20 211
215 20 254
215 63 39
215 63 82
215 63 125
215 63 168
215 63 211
215 63 254
215 106 39
215 106 82
215 106 125
215 106 168
215 106 211
215 106 254
215 149 39
215 149 82
215 149 125
215 149 168
215 149 211
215 149 254
215 192 39
215 192 82
215 192 125
215 192 168
215 192 211
215 192 254
215 235 39
215 235 82
215 235 125
215 235 168
215 235 211
215 235 254];
B=[0 0 0
255 255 255
255 0 0
246 232 9
72 176 64
27 115 186
53 118 84
244 181 208
255 145 0
177 125 85
92 59 144
11 222 222
228 0 130
255 218 32
118 238 0
17 168 226
255 110 0
201 202 202
255 249 177
179 226 242
249 225 214
186 149 195];
j=1;
u=100000000;
e=0;
q=0;
for i=1:216
x1=A(i,1)
y1=A(i,2)
z1=A(i,3)
for j=1:22
x2=B(j,1)
y2=B(j,2)
z2=B(j,3)
U=[(x1-x2)*(x1-x2),(y1-y2)*(y1-y2),(z1-z2)*(z1-z2)]
e=sum(U,2)
if u>e
u=e;
q=j;
c=[i,q];
else
end
end
end
A=[0 20 39
0 20 82
0 20 125
0 20 168
0 20 211
0 20 254
0 63 39
0 63 82
0 63 125
0 63 168
0 63 211
0 63 254
0 106 39
0 106 82
0 106 125
0 106 168
0 106 211
0 106 254
0 149 39
0 149 82
0 149 125
0 149 168
0 149 211
0 149 254
0 192 39
0 192 82
0 192 125
0 192 168
0 192 211
0 192 254
0 235 39
0 235 82
0 235 125
0 235 168
0 235 211
0 235 254
43 20 39
43 20 82
43 20 125
43 20 168
43 20 211
43 20 254
43 63 39
43 63 82
43 63 125
43 63 168
43 63 211
43 63 254
43 106 39
43 106 82
43 106 125
43 106 168
43 106 211
43 106 254
43 149 39
43 149 82
43 149 125
43 149 168
43 149 211
43 149 254
43 192 39
43 192 82
43 192 125
43 192 168
43 192 211
43 192 254
43 235 39
43 235 82
43 235 125
43 235 168
43 235 211
43 235 254
86 20 39
86 20 82
86 20 125
86 20 168
86 20 211
86 20 254
86 63 39
86 63 82
86 63 125
86 63 168
86 63 211
86 63 254
86 106 39
86 106 82
86 106 125
86 106 168
86 106 211
86 106 254
86 149 39
86 149 82
86 149 125
86 149 168
86 149 211
86 149 254
86 192 39
86 192 82
86 192 125
86 192 168
86 192 211
86 192 254
86 235 39
86 235 82
86 235 125
86 235 168
86 235 211
86 235 254
129 20 39
129 20 82
129 20 125
129 20 168
129 20 211
129 20 254
129 63 39
129 63 82
129 63 125
129 63 168
129 63 211
129 63 254
129 106 39
129 106 82
129 106 125
129 106 168
129 106 211
129 106 254
129 149 39
129 149 82
129 149 125
129 149 168
129 149 211
129 149 254
129 192 39
129 192 82
129 192 125
129 192 168
129 192 211
129 192 254
129 235 39
129 235 82
129 235 125
129 235 168
129 235 211
129 235 254
172 20 39
172 20 82
172 20 125
172 20 168
172 20 211
172 20 254
172 63 39
172 63 82
172 63 125
172 63 168
172 63 211
172 63 254
172 106 39
172 106 82
172 106 125
172 106 168
172 106 211
172 106 254
172 149 39
172 149 82
172 149 125
172 149 168
172 149 211
172 149 254
172 192 39
172 192 82
172 192 125
172 192 168
172 192 211
172 192 254
172 235 39
172 235 82
172 235 125
172 235 168
172 235 211
172 235 254
215 20 39
215 20 82
215 20 125
215 20 168
215 20 211
215 20 254
215 63 39
215 63 82
215 63 125
215 63 168
215 63 211
215 63 254
215 106 39
215 106 82
215 106 125
215 106 168
215 106 211
215 106 254
215 149 39
215 149 82
215 149 125
215 149 168
215 149 211
215 149 254
215 192 39
215 192 82
215 192 125
215 192 168
215 192 211
215 192 254
215 235 39
215 235 82
215 235 125
215 235 168
215 235 211
215 235 254];
B=[0 0 0
255 255 255
255 0 0
246 232 9
72 176 64
27 115 186
53 118 84
244 181 208
255 145 0
177 125 85
92 59 144
11 222 222
228 0 130
255 218 32
118 238 0
17 168 226
255 110 0
201 202 202
255 249 177
179 226 242
249 225 214
186 149 195];
emin = 100000000; % 最小值
ind2 = 0;
for i=1:length(A)
a=A(i,:);
e = sum( (a - B) .^2 ,2);
[em,ind] = min(e);
if em < emin
ind1 = i; % A的行数
ind2 = ind; % B的行数
emin = em;
end
end
disp('A的行数')
disp(i)
disp('B的行数')
disp(ind)
disp('最小距离')
disp(emin)
结果为:
A的行数
216
B的行数
20
最小距离
248