find negative values of simple summation. code efficiency

1 次查看(过去 30 天)
Hello, I have the following statement which must be true: v1_before(1) == v1_transferred_vector(1) + v1_conserved_vector(1)
My goal is to find out which of the two elements on the right side are actually negative. The algebraic sign of "v1_before" is already known, as well as the absolute values of the two elements on the right side.
The indices refer to the x-value of the [x,y] vectors. So i will do exactly the same with (2) / y-values too.
I coded the following. But im wondering whether there is a more elegant and efficient way to do it. Many thanks in advance!!!!
%determine whether + / - for x-values
if v1_before(1) - v1_transferred_vector(1) - v1_conserved_vector(1) == 0 %==0 when difference is smaller then 1e-15/eps
%do nothing, leave them positiv
elseif v1_before(1) + v1_transferred_vector(1)- v1_conserved_vector(1) == 0
v1_transferred_vector(1) = - v1_transferred_vector(1);
elseif v1_before(1) - v1_transferred_vector(1) + v1_conserved_vector(1) == 0
v1_conserved_vector(1) = - v1_conserved_vector(1);
else %v1_before(1) + v1_transferred_vector(1) + v1_conserved_vector(1) == 0
v1_transferred_vector(1) = - v1_transferred_vector(1);
v1_conserved_vector(1) = - v1_conserved_vector(1);
end
  6 个评论
Rik
Rik 2021-1-5
If this code only runs once it doesn't matter if it takes 1 ms or 100 ms, but if this code is executed thousands of times in a time-sensitive context, then it does start to matter.
The main point is to spend time optimizing the code that matters. You can spend a few hours here to save a few miliseconds, or spend your time on code that runs often and takes longer to complete.

请先登录,再进行评论。

回答(1 个)

Walter Roberson
Walter Roberson 2021-1-5
M = [1 1; 1 -1; -1 1; -1 -1];
m = M(v1_before(1) == M*[v1_transferred_vector(1); v1_conserved_vector(1)],:);
v1_transfered_vector(1) = m(1)*v1_transfered_vector(1);
v1_conserved_vector(1) = m(2)*v1_conserved_vector(1);
This can be vectorized with a slight bit of work.

类别

Help CenterFile Exchange 中查找有关 Loops and Conditional Statements 的更多信息

产品


版本

R2019b

Community Treasure Hunt

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

Start Hunting!

Translated by