Сведения о вопросе

Математик

03:46, 1st August, 2020

Теги

testing   numerical    

Как проверить процедуры численного анализа?

Просмотров: 438   Ответов: 3

Есть ли хорошие онлайн-ресурсы, чтобы создать, поддерживать и думать о написании тестовых подпрограмм для кода численного анализа?

Одно из ограничений, которое я вижу для чего-то вроде тестирования умножения матриц, заключается в том, что очевидные тесты (например, наличие одной матрицы, являющейся идентификатором) не могут полностью проверить функциональность кода.

Кроме того, существует тот факт, что вы обычно имеете дело с большими структурами данных, а также. У кого-нибудь есть хорошие идеи о том, как подойти к этому, или есть указатели на хорошие места для поиска?



  Сведения об ответе

9090

15:38, 10th August, 2020

Похоже, что вам нужно подумать о тестировании по крайней мере двумя разными способами:

  1. Некоторые численные методы допускают некоторое мета-мышление. Например, обратимые операции позволяют настроить тестовые случаи, чтобы увидеть, находится ли результат в допустимых пределах ошибки оригинала. Например, матрица M-обратное время матрицы M * случайный вектор V должен привести к V снова, в пределах некоторой приемлемой меры ошибки.
    Очевидно, что в этом примере выполняется матричное обратное, матричное умножение и матрично-векторное умножение. Мне нравятся такие цепочки, потому что вы можете генерировать довольно много случайных тестовых случаев и получать статистическое покрытие, которое было бы трудным, чтобы писать вручную. Однако они не проводят одиночных операций изолированно.

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

В принципе, этот вопрос иллюстрирует проблему, что тестирование сложных методов хорошо требует довольно много знаний о предметной области. Конкретные ссылки потребуют немного более конкретной информации о том, что вы тестируете. Я бы определенно рекомендовал вам, по крайней мере, иметь список рекомендуемых книг Стива Йегге под рукой.


  Сведения об ответе

lats

01:17, 22nd August, 2020

Если вы собираетесь выполнять матричные вычисления, используйте LAPACK. Это очень хорошо протестированный код. Очень умные люди работали над этим десятилетиями. Они глубоко задумались о проблемах, о которых непосвященные никогда бы не задумались.

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

Случайные входные значения также важны. Если вы рационально выберете все тестовые случаи, вы можете систематически избегать чего-то, что вы не понимаете, является проблемой. Иногда вы можете хорошо использовать случайные входные значения, даже если у вас нет точных значений для тестирования. Например, если у вас есть код для вычисления функции и ее инверсии, вы можете сгенерировать 1000 случайных значений и посмотреть, приведет ли применение функции и ее инверсии к тому, что вы начали.


  Сведения об ответе

PROGA

17:49, 26th August, 2020

Ознакомьтесь с книгой Дэвида Грайса " наука программирования". Речь идет о доказательстве правильности программ. Если вы хотите быть уверены, что ваши программы верны (вплоть до доказательства их правильности), эта книга-хорошее место для начала.

Вероятно, это не совсем то, что вы ищете, но это ответ компьютерной науки на вопрос о разработке программного обеспечения.


Ответить на вопрос

Чтобы ответить на вопрос вам нужно войти в систему или зарегистрироваться