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.
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)
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...)
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),:)
1 Comment
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.