Brute force combination of two vectors. Yet, the combination only gets written in a matrix if it fulfils two constraints.
1 次查看(过去 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
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
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 个评论
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 Center 和 File Exchange 中查找有关 Matrix Indexing 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!