Как протестировать, если матрица является диагональной?

В Swift 4.2 следующее не возвращает ноль, даже если строка не соответствует шаблону:

string.range(of: regex, options: .regularExpression, range: nil, locale: nil)

Как предполагает XCode:

Сравнение необязательного значения типа 'NSRange' (он же '_NSRange') с nil всегда возвращает true

Поэтому в итоге я использовал:

if string.range(of: regex, options: .regularExpression)
        .location != NSNotFound {
    // do stuff if string matches regexp
}
7
задан sharptooth 2 June 2009 в 05:41
поделиться

2 ответа

Поиск в матрице ненулевых значений

logical :: not_diag
integer :: i, j

not_diag = .false.

outer: do i = 2, size(A,1)
  do j = i, size(A, 2)
    if (A(i,j) > PRECISION) then
      not_diag = .true.
      exit outer
    end if
  end
end outer

if (not_diag) then
  ! DO LDL' decomposition
end if

Чтобы использовать подпрограммы LAPACK с двойной точностью, замените первые буквы «s» на «d». Так spotrf становится dpotrf

http://www.netlib.org/lapack/double/

0
ответ дан 6 December 2019 в 23:13
поделиться

Гораздо лучше было бы просто просмотреть все off -диагональные элементы и проверьте, близки ли они к нулю (сравнение числа с плавающей запятой на предмет неравенства подвержено ошибкам округления и может привести к ошибочным результатам).

Во-первых, как только вы обнаружите какой-либо нарушающий элемент, вы можете немедленно прекратить обход, и это может позволить значительно сократить время, если нарушающие матрицы являются типичными.

Во-вторых,

11
ответ дан 6 December 2019 в 23:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: