# Brute force combination of two vectors. Yet, the combination only gets written in a matrix if it fulfils two constraints.

2 views (last 30 days)

Show older comments

Abdelmajid Ben yahya
on 9 Mar 2020

Edited: Ameer Hamza
on 9 Mar 2020

I have two vectors:

L_1=[30:10:500];

L_2=[30:10:500];

and two values that are known:

a=250;

b=482;

These vectors are now of the same size, but this is not always the case. Thus, I would like to create a matrix (2 columns) that has every possible combination L_1,L_2 that fulfils the following constraints.

L_1< (a/theta_a); AND L_1< (b/theta_b);

The values theta_a and theta_b are calculated through on behalf of the values L_1 and L_2 with the following formula:

Theta_a=acosd((a^2+L_1^2-L_2^2)/(2*a*L_1);

Theta_b=acosd((b^2+L_1^2-L_2^2)/(2*b*L_1);

It would be great if the computational time can be reduced by an efficient script.

Thank you in advance.

##### 1 Comment

Ameer Hamza
on 9 Mar 2020

For the values of L_1 and L_2, a and b you gave, the function acosd can return complex value. The domain of acosd is -1 to 1 for real-valued output. But the input of acosd

(a^2+L_1^2-L_2^2)/(2*a*L_1)

can take any value beyong -1 to 1. How will you do comparison in that case.

### Accepted Answer

Ameer Hamza
on 9 Mar 2020

Edited: Ameer Hamza
on 9 Mar 2020

L_1=30:1:500;

L_2=30:1:500;

a=250;

b=482;

combinations = combvec(L_1, L_2)';

Theta_a=acos((a^2+combinations(:,1).^2-combinations(:,2).^2) ...

./(2*a*combinations(:,1)));

Theta_b=acos((b^2+combinations(:,1).^2-combinations(:,2).^2) ...

./(2*b*combinations(:,1)));

mask = imag(Theta_a) == 0 & imag(Theta_b) == 0; % only keep rows where both angles are real

mask = mask & (combinations(:,1) < a./Theta_a) & (combinations(:,1) < b./Theta_b);

final_combinations = combinations(mask, :);

##### 2 Comments

Ameer Hamza
on 9 Mar 2020

### More Answers (0)

### See Also

### Categories

### Community Treasure Hunt

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

Start Hunting!