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

6 views (last 30 days)
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
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.

Sign in to comment.

Accepted Answer

Ameer Hamza
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
Abdelmajid Ben yahya
Abdelmajid Ben yahya on 9 Mar 2020
the first assumptions is not correct, as the formua is the derivation of the cosine rule.
These constraints are made to erase certain mechanical configurations, within a physical crank-shaft mechanism.
I attached some drawings to explainthe idea.
the first two drawings (top) show the mechanism, while the drawings underneath show the derivation of the constraints.
So, i think that the made assumptions can be rejected.
Ameer Hamza
Ameer Hamza on 9 Mar 2020
Ok, your formula is correct. I think it produces an imaginary number in some cases because it is impossible to create a real triangle for some combinations of L_1, L_2, a, and b. I corrected the code and added another condition that both angles should be real.

Sign in to comment.

More Answers (0)

Categories

Find more on Environment and Clutter in Help Center and File Exchange

Products


Release

R2019a

Community Treasure Hunt

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

Start Hunting!