【发布时间】:2013-05-07 02:07:24
【问题描述】:
我正在尝试找到等于某个矩阵的所有可能的总和组合。假设我有:
a = [1 0 0; 0 1 0 ; 0 0 1];
b = [5 0 0; 0 5 0 ; 0 0 5];
我从矩阵a 开始,并希望通过使用r1 和r2 的矩阵加法来生成矩阵b,例如:
r1 = [1 0 0; 0 1 0 ; 0 0 1];
r2 = [2 0 0; 0 2 0 ; 0 0 2];
我希望它显示所有组合的矩阵、加法和结果矩阵,我的意思是:4r1 (1+1+1+1+1), 1r1+1r2+1r1 (1+1+2 +1)、1r2+1r1+1r1 (1+2+1+1) 和 2r2 (1+2+2)。
这是我目前得到的,但我无法通过所有组合:
function v = test_r2(a, b)
if isequal(a,b)==1
v = [];
disp('same')
return
end
v= test_r3(a,b);
end
function v = test_r3(a, b)`
r1 = [1 0 0; 0 1 0 ; 0 0 1];
r2 = [2 0 0; 0 2 0 ; 0 0 2];
r=[{r1} {r2}];
if isequal(a,b)==1
v = b;
else % recursive call
for k = 1:numel(r)
for i = nchoosek(1:numel(r),k)'
r_matrix = r{1,i};
if(isequal(a + r_matrix,b) ==1)
disp([a(:)', r_matrix(:)'])
end
end
end
基本上,我希望它通过元胞数组并找到这些加法的所有可能组合,这将使我能够从矩阵a 到矩阵b。有什么帮助吗?
【问题讨论】:
-
假设您有
n向量最多需要一个因子k和k*n!并不是一个很大的数字(例如最多 k=5 和 n=10 或 k =1000和 n=7) 你可以只做几个嵌套的 for 循环并将结果存储在一个巨大的矩阵中。 -
是否保证所有矩阵都是单位矩阵的倍数?
-
DennisJaheruddin - 如果可能的话,我希望它不要将所有结果存储在一个巨大的矩阵中。我希望矩阵大小(a 和 b)能够扩展得比当前的 3x3 Eitan T 大得多 - 不,矩阵可能不同。例如,r1 可以是 [0 1 3; 2 1 0; 0 0 1]
-
任何帮助将不胜感激!