Asked by kevin
on 2 Apr 2012

i use the command

c=[1,2,3,4,5] perms(c)

to generate all permutation of c. and there are 2 equation which use the

j=sin(0*c)+sin(72*c)+sin(144*c)+sin(216*c)+sin(288*c)

k=cos(0*c)+cos(72*c)+cos(144*c)+cos(216*c)+cos(288*c)

and Z=j+k

how can i find what permutation for minimum z? the permutation must be the same for both j and k at the same time ie

j=sin(0*1)+sin(72*2)+sin(144*3)+sin(216*4)+sin(288*5)

k=cos(0*1)+cos(72*2)+cos(144*3)+cos(216*4)+cos(288*5)

i actually wrote the euqation wrong, sorry. but if

j=sin(0)*c+sin(72)*c+sin(144)*c+sin(216)*c+sin(288)*c

k=cos(0)*c+cos(72)*c+cos(144)*c+cos(216)*c+cos(288)*c

would that change anything?

*No products are associated with this question.*

Answer by Thomas
on 2 Apr 2012

Accepted answer

Another way:

c=[1,2,3,4,5]; c=perms(c); z=[]; j=[]; k=[];

for i=1:length(c) j(i)=sin(0*c(i,1))*sin(72*c(i,2))+sin(144*c(i,3))+sin(216*c(i,4))+sin(288*c(i,5)); k(i)=cos(0*c(i,1))*cos(72*c(i,2))+cos(144*c(i,3))+cos(216*c(i,4))+cos(288*c(i,5)); z(i)=j(i)+k(i); end

[p,q,r]=find(z==min(z));

c(q,:) minz=min(z)

Show 3 older comments

Thomas
on 2 Apr 2012

doc find

[row,col,v] = find(X, ...)

Matt Tearle
on 2 Apr 2012

Actually, z = []; doesn't preallocate space. It only makes an empty matrix. A better approach would be

n = length(c);

j = zeros(n,1);

k = zeros(n,1);

for i = 1:n

...

Also, calculating z inside the loop isn't necessary. Just do z = j+k; at the end. Natural vectorized expressions like that are one of the main strengths of MATLAB. (Of course, I'd say that you don't need loops at all...)

Thomas
on 2 Apr 2012

true, z need not be calculated inside the loop.. z=j+k+.. at the end should work just as well..

Answer by Matt Tearle
on 2 Apr 2012

I think this is what you're after:

c=[1,2,3,4,5]; cp = perms(c); % 0*c1, 72*c2, 144*c3, 216*c4, 288*c5 allc = bsxfun(@times,[0 72 144 216 288],cp); sc = sin(allc); cc = cos(allc);

j = sc(:,1).*sc(:,2)+sum(sc(:,3:5),2); k = cc(:,1) + cc(:,2).*cc(:,3) + cc(:,4) + cc(:,5); z = j+k;

% which row of the c permutations corresponds to the minimum value of z? cp(z==min(z),:)

If `j` and `k` were all sums, this would be a bit neater, but I'm assuming the products there are deliberate.

**EDIT TO ADD**: From your comment in reply to Thomas, it seems like maybe these should all be sums (ie no products). In that case:

c=[1,2,3,4,5]; cp = perms(c);

% 0*c1, 72*c2, 144*c3, 216*c4, 288*c5 allc = bsxfun(@times,[0 72 144 216 288],cp); % sin(0*c1) + sin(72*c2) + ... j = sum(sin(allc),2); k = sum(cos(allc),2); z = j+k;

% which row of the c permutations corresponds to the minimum value of z? cp(z==min(z),:)

kevin
on 2 Apr 2012

thx guy

Related Content

MATLAB and Simulink resources for Arduino, LEGO, and Raspberry Pi

Learn moreOpportunities for recent engineering grads.

Apply Today
## 1 Comment

## Walter Roberson (view profile)

Direct link to this comment:http://www.mathworks.com/matlabcentral/answers/34268#comment_71474

Is your earlier question http://www.mathworks.com/matlabcentral/answers/34267-ordering-a-list-of-number considered answered? If so please Accept the answer; otherwise there is the appearance that this is an extension of the previous question that should be merged with it.