Существует два инструмента, которые необходимо использовать для проверки на наличие деривативов.Первый - check_partials .Это будет идти компонент за компонентом и использовать либо конечную разность, либо комплексный шаг, чтобы проверить частичные производные для каждого компонента (независимо от того, были ли они объявлены вами при настройке этого компонента).Это поймает проблему, если вы пропустите какие-либо частичные, потому что check-fd увидит их как ненулевые и покажет вам, что есть ошибка.
Check_partials должен быть вашей первой остановкой, всегда.Если вы можете, используйте комплексный шаг, чтобы проверить свои производные.Таким образом, вы знаете, что они абсолютно точны.Кроме того, check_partials выполнит проверку вокруг любой точки, которая в данный момент инициализирована.Так что иногда у вас может быть вырожденный случай (например, у вас есть некоторый ввод, равный 0), и поэтому ваш check_passes, но ваши производные по-прежнему неверны.Например, если ваш компонент представляет y = 2 * x, и вы забыли определить производные, но запустили check_partials при x = 0, тогда проверка прошла бы.Но если вы запустите его при x = 1, то проверка покажет ошибку.
Если все ваши частные производные верны, но вы все еще получаете плохие результаты, тогда вы можете попробовать check_totals .В зависимости от структуры вашей модели, и если у вас есть какая-либо связь (т.е. вам нужно использовать какой-то нелинейный решатель), то возможно, что у вас нет правильно сконфигурированной линейной решающей программы для правильного решения для общих производных.Во многих случаях, если у вас есть связь, вы можете просто поставить DirectSolver прямо на том же уровне, что и нелинейный решатель, который вы вставили в модель.