# Find the Minimum Combination of Sum

17 views (last 30 days)
MarshallSc on 19 Jan 2022
Commented: MarshallSc on 19 Jan 2022
I have a 100 x 1 vector with numeric values, what I want to find is the minimum combination of the reference point with the upper and lower indices for the equation below. For example:
A = rand(100,1);
%Lets say the reference point is A(31)
comb = +-A(31 + 1) +- A(31) +- A(31-1) % So there will be 2^3 scenarios
% When the reference point reaches index 100 (length of the vector), the operation stops
I want to find the absolute minimum combintation of all the possible combinations. Can a function be created to perform this operation since I need to perform this for multiple vectors in a for loop?
##### 2 CommentsShowHide 1 older comment
MarshallSc on 19 Jan 2022
Thanks for your reply. Yes, I want the minimum absolute value which is the closest combination to zero.

Voss on 19 Jan 2022
N = 100;
window_size = 3;
A = rand(N,1);
signs = 1-2*(dec2bin(0:2^(window_size-1)-1,window_size)-'0').';
comb = NaN(N,1);
comb_type = NaN(N,1);
d = (window_size-1)/2;
for i = d+1:N-d
[comb(i),comb_type(i)] = min(abs(sum(A(i+(-d:d)).*signs)));
end
[min_comb,idx] = min(comb);
% minimum absolute-value sum:
disp(min_comb);
0.0041
% occurs at this row of A:
disp(idx);
17
% using these elements of A:
disp(A(idx+(-d:d)));
0.8604 0.8003 0.0643
% with this way of combining the elements:
disp(signs(:,comb_type(idx)));
1 -1 -1

Jon on 19 Jan 2022
If I understand what you are trying to do, I think this might work for you
A = rand(100,1);
% define matrix which can be multiplied by 3 elements to give all possible
% signed summations
c = [-1 -1 -1;-1 -1 1;-1 1 -1; -1 1 1;1 -1 -1;1 -1 1;1 1 -1; 1 1 1]
% loop through data
% not sure what you want to do about end points, so start and end on
% interior points
numPoints = numel(A)
result = zeros(numPoints-2,1); % preallocate array to hold result
for k = 2:numPoints-1
result(k) = min(abs(c*A(k-1:k+1)));
end
##### 2 CommentsShowHide 1 older comment
MarshallSc on 19 Jan 2022
Thank you sir, this method is very useful.