- Select all combinations of numElements(number of elements) from the vector, where numElements varies from 2 to 5. You can use the nchoosek MATLAB function which returns all the combinations. Refer to the doumentation for the function here: https://www.mathworks.com/help/matlab/ref/nchoosek.html
- The next step would be to iterate through the combinations, find the sum and check for the result in the vector. See the code below:
i have a vector in lenght 5, i need to check if a sum of 2 or more elements in the vector is equal to another element at the same vector how to do that?
1 回表示 (過去 30 日間)
古いコメントを表示
i have a vector in lenght 5, i need to check if a sum of 2 or more elements in the vector is equal to another element at the same vector how to do that?
i try to do a loop inside a loop but it doesnt works
if someone has an idea it would be helpful.
thank you
0 件のコメント
採用された回答
Ayush Aniket
2024 年 7 月 16 日
編集済み: Ayush Aniket
2024 年 7 月 17 日
Hi Omer,
You can check for the existence of an element which is the sum of two or more elements in the same vector as follows:
% Iterate over all combinations of 2 or more elements
for numElements = 2:n
combs = nchoosek(1:n, numElements); %Find indices of all combinations of size numElements from the vector
for i = 1:size(combs, 1)
sumComb = sum(vec(combs(i, :)));
if any(vec == sumComb)
result = true;
return;
end
end
end
The result variable returns the answer. The initial value will be false for this variable.
2 件のコメント
Ayush Aniket
2024 年 7 月 17 日
Hi Omer, the n refres to the length of the original vector vec i.e.
n = length(vec)
For this problem, the value of n will be 5. In the function nchoosek, we construct and pass the vector 1:5 ([1,2,3,4,5], representing the indices of the original vector) as the vector argument. The function then returns the combination of numElements number of elements from this vector.
その他の回答 (1 件)
Voss
2024 年 7 月 16 日
v = [10 5 13 15 28];
m = dec2bin(0:2^numel(v)-1)-'0';
m = m(sum(m,2) >= 2,:);
[ism,idx] = ismember(m*v.',v);
idx = idx(ism);
m = logical(m(ism,:));
for ii = 1:numel(idx)
disp(join(compose('%g',v(m(ii,:))),'+') + "=" + v(idx(ii)))
end
参考
カテゴリ
Help Center および File Exchange で Matrix Indexing についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!