Optimization of 2 matrices

조회 수: 2 (최근 30일)
NS
NS 2011년 5월 23일
Hi Guys,
I need to solve a problem. I have an idea to do that, just am confused about which functions to use to implement the idea.
So I have 2 matrices. Each matrix contains n rows and 2 columns. The matrix is essentially the x and y co-ordinates of n points. Matrix 1 consists of the co-ordinates at time 't' and Matrix 2 at time 't+Δt'.
The idea.
1.I want to find all possible combinations of the elements in matrix 1 with matrix 2. Since I have 'n' rows, I will have 'n!' combinations.
2. After finding the combinations, I want to calculate the distance between the two points. I use the default formula i.e sqrt((x1-x2)^2+(y1-y2)^2).
3. So i ll have n! n*1 distance matrices. I want to add all the elements in one matrix and then find the matrix that has the least total value amongst all n! matrices.
4. Now the matrix that has the least total distance, I want to take the second matrix (that led to that combination) in my forward calculation.
I am stuck in steps 1, 2 and the final correspondence in step 4. Could anyone tell me what functions I could use to serve my purpose.
Thanks. NS.
I hope I explained the problem clearly.
To simplify things,
if [a b c] and [d e f] are my initial matrices with a-f being the coordinates of points. The matrices are column matrices and should actually contain 2 columns. I have just simplified it. The possible combinations will be [ad be cf], [ad bf ce], [ae bd cf], [ae bf cd], [af bd ce], [af be cd]. After steps 3 and 4, I find that [ae bd cf] gives me the least distance. I want to take the matrix [e d f] in my forward calculations.
  댓글 수: 4
John D'Errico
John D'Errico 2011년 5월 24일
Um, wrong. Since you have two matrices with n rows in each, all possible combinations will be n^2, NOT n!, i.e., not factorial(n).
NS
NS 2011년 5월 24일
John, I still think it is n!.
I used solved it using the cases when n=2 and when n=3. In the cases, I got the possible combinations to be 4 and 6. The order is important, so I think these are actually permutations and not combinations. :)

댓글을 달려면 로그인하십시오.

채택된 답변

Matt Fig
Matt Fig 2011년 5월 23일
Here is one way to get the permutations:
A = [1 2 3];
B = [4 5 6];
P = perms(1:3);
for ii = 1:size(P,1)
pairing = [A; B(P(ii,:))] % Print out just to show the pairing.
% Do what you will with the pairings steps 2:4?
end
I have a feeling you will do the other steps in the loop as well, but they aren't that clear to me. Perhaps this will give you a start.
%
%
%
%
EDIT
So I think I understand better after some of your comments. This does what you want:
A = rand(3,2); % Matrix one.
B = rand(3,2); % Matrix two.
P = perms(1:size(B,1));
for ii = 1:size(P,1)
Dist{ii} = sqrt(sum((A-B(P(ii,:),:)).^2,2));
end
S = cellfun(@sum,Dist);
[M,I] = min(S);
Min_comb = B(P(I,:),:) % This has the minimum combination.
Note that if you don't need S or Dist for future use, this simplifies to:
mn = inf;
for ii = 1:size(P,1)
tmp = sum(sqrt(sum((A-B(P(ii,:),:)).^2,2)));
if tmp<mn
mn = tmp;
idx = ii;
end
end
Min_comb = B(P(idx,:),:) % This is the one you want.
  댓글 수: 1
NS
NS 2011년 5월 24일
It worked for a random case that I took. I ll try implementing it in my main code and let you know. Thanks Matt. :)

댓글을 달려면 로그인하십시오.

추가 답변 (0개)

카테고리

Help CenterFile Exchange에서 Logical에 대해 자세히 알아보기

태그

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by