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

3 次查看(过去 30 天)
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 个评论
Ameer Hamza
Ameer Hamza 2020-3-9
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.

请先登录,再进行评论。

采纳的回答

Ameer Hamza
Ameer Hamza 2020-3-9
编辑:Ameer Hamza 2020-3-9
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 个评论
Abdelmajid Ben yahya
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 2020-3-9
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.

请先登录,再进行评论。

更多回答(0 个)

类别

Help CenterFile Exchange 中查找有关 Environment and Clutter 的更多信息

产品


版本

R2019a

Community Treasure Hunt

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

Start Hunting!

Translated by