Нет эквивалента find
(пока) даже в ветке по умолчанию.Однако ваша функция может быть выражена с использованием метода select
(также работает с Eigen 3.3.x):
double ret1 = (dlamu1.array()<0).select(-lamu1.cwiseQuotient(dlamu1), 1.0).minCoeff();
return std::min(1.0,ret1); // not necessary, if dlamu1.array()<0 at least once
select
оценивает лениво, т. Е. Только если условие истинно, частное будетрассчитывается.С другой стороны, с кодом выше произойдет много ненужных сравнений с 1.0.
Если [d]lamu
хранится в Eigen::ArrayXd
вместо Eigen::VectorXd
, вы можете написать:
double ret1 = (dlamu1<0).select(-lamu1/dlamu1, 1.0).minCoeff();
Если вы все равно грубо форсировали indl
, вы можете, как предложил Ггаэль, написать:
lamu1(indl).cwiseQuotient(dlamu1(indl)).minCoeff();
(это не определено / вылетает, если indl.size()==0
)