Если вы продолжаете смотреть видео , , self.slope
и self.alp_sc
также используются в методе compute_partials
. self.alp_sc
является константой, поэтому я думаю, что она могла быть объявлена в методе initialize
класса (если это параметр, который вы хотите потенциально изменить для разных экземпляров) или вне класса (если это действительно постоянная). self.slope
в этом случае также является константой, поэтому то же самое относится. Но представьте, что наклон будет зависеть от входных данных вашего компонента, и вам нужно будет пересчитывать его в каждой итерации (и, скажем, это также очень дорого в вычислительном отношении, чего в примере явно нет). В этом случае вы можете сохранить некоторые вычисления, сохранив значение в атрибуте класса (self.slope) и просто повторно использовав его в производных вычислениях. Необходимо убедиться в том, что в каждой итерации compute
вызывается до compute_partials
(в противном случае вы можете использовать устаревшее значение из предыдущей итерации в вычислении производной), но я думаю, что это всегда так в текущем OpenMDAO 3.0.
Довольно часто вам нужно вычислять одинаковые величины для функции и для производных. Хранить его в атрибуте - это один из способов (меньше вычислений), или вызывать ту же функцию в compute, а compute_partials (вдвое больше вычислений, меньше памяти) - еще один способ.