algorithm – 选择一组对以便最小化组的rms

简化问题

我有~40个电阻(所有相同值-5%),我需要选择其中的12个,以便它们尽可能相似.

解决方案:我按顺序列出它们,并以最小的RMS连续12次.

实际问题

我有~40个电阻(所有相同的值-5%),我必须选择12对电阻,以便对的电阻尽可能相似.

笔记

该对(R1,R2)的电阻为R1 R2.
我并不真正关心编程语言,但是我要说我正在寻找一种C或Python的解决方案,这是我最熟悉的两种语言.

最佳答案 这给出了相当好的结果(在MATLAB中)

a = ones(40,1) + rand(40,1)*0.1-0.05; % The resistors
vec = zeros(40,2);        % Initialize matrix
indices = zeros(40,2);    % Initialize matrix
a = sort(a);              % Sort vector of resistors
for ii = 1:length(a)
  vec(ii,:) = [a(ii) a(ii)];    % Assign resistor values to row ii of vec
  indices(ii,:) = [ii,ii];      % Corresponding resistor number (index)
  for jj = 1:length(a)
    if sum(abs((a(ii)+a(jj))-2*mean(a))) < abs(sum(vec(ii,:))-2*mean(a))
      vec(ii,:) =  [a(ii) a(jj)];    % Check if the new set is better than the
      indices(ii,:) = [ii, jj];      % previous, and update vec and indices if true.
    end
  end
end

[x, idx] = sort(sum(vec')');   % Sort the sum of the pairs 
final_list = indices(idx);     % The indices of the sorted pairs

这是我绘制时的结果:

点赞