How to do this in MATLAB without for loops

Hi,
I have 4 vectors x1, x2, x3, and x4 all of size N-by-1. I need to select two vectors such that their minimum values are the maximum among all. How can I do that in MATLAB without using for loops?
Thanks

Antworten (2)

Daniel Shub
Daniel Shub am 12 Mär. 2012

1 Stimme

What about using an Nx4 matrix (or a cell array) instead of x1, x2, ...
In general x1, x2, ... naming is a bad idea:
Andrei Bobrov
Andrei Bobrov am 12 Mär. 2012

0 Stimmen

EDIT
n = 4;
a = eval(['[',sprintf('x%d,',1:n),']']);
[~,idx] = sort(min(a),'descend');
out = a(:,idx(1:2))

4 Kommentare

Jan
Jan am 12 Mär. 2012
What about: a = [x1,x2,x3,x4]; ?
Andrei Bobrov
Andrei Bobrov am 12 Mär. 2012
yes! :)
Andrei Bobrov
Andrei Bobrov am 13 Mär. 2012
Hi Jan! Corrected for general (any) case, when n > 4.
Jan
Jan am 13 Mär. 2012
There is even no general case of x1, x2, x3, ... as long as Matlab cannot handle x_inf.
I think I should publish a Mex function "Unpoof('x', a, b)", which concatenates the contents of the variables x<a> to x<b> to the variable x and use the ASSIGNIN equivalent to put x into the caller workspace.

Melden Sie sich an, um zu kommentieren.

Kategorien

Gefragt:

am 12 Mär. 2012

Community Treasure Hunt

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

Start Hunting!

Translated by