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

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

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

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

19.08.2008 15:48:07
3 ОТВЕТА
РЕШЕНИЕ

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

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

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

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

3
24.09.2008 19:47:54

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

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

1
19.08.2008 15:55:28

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

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

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

2
22.10.2008 16:20:11
Если вы используете случайные входные значения, размещение фиксированного начального числа - хорошая идея. Таким образом, если есть проблема, вы можете воспроизвести именно те значения, которые привели к проблеме.
becko 27.03.2019 18:38:32