История изменений
Исправление AITap, (текущая версия) :
Из каких соображений выбирать dx?
А для чего всё это делается? Может, и линейная система тут ни к чему, и задачу нужно решать совсем по-другому? Здесь-то, понятно, самое простое решение будет с dx = 0
, но в общем случае это не так. Никогда не занимался этим вопросом, но, может, нужно заняться символьной регрессией? Найти такие dx
, при которых foo(x)
линейна по каждой из функций f[i](x + dx[i])
. Но что делать, если их нет?
Если разложение не допускает совпадений fi(x + dx1) + fi(x + dx2) то для каждого набора dx решать систему и искать минимальную невязку?
Я ошибся, когда сказал, что дело в недостаточном ранге матрицы предикторов. Это, в принципе, плохо (делает решение неоднозначным), но numpy.linalg.lstsq
с этим справляется, выбирая решение с минимальной нормой. Так что даже если fi(x + dx1)
и fi(x + dx2)
- это не только одинаковые функции с разным dx
, но и линейно зависимые друг от друга (fi(x + dx1) * const == fi(x + dx2)
), какие-то коэффициенты Вам всё равно достанутся, и невязку они будут минимизировать. Серьёзной проблемы здесь нет.
для каждого набора dx решать систему и искать минимальную невязку?
Формально, можно считать это задачей оптимизации. Записать невязку ||A(f,x,dx) @ coef - foo(x)||
как функцию от вектора dx
(остальные параметры зафиксированы заранее или вычисляются из них) и в таком виде запихнуть в метод минимизации, авось что-нибудь скажет. Нужно готовиться к тому, что ответов с примерно одинаковой невязкой будет много (например, в примере про foo(t) = t
через 1
, t
и t^2
, пока ошибки округления от работы с большим t^2
всё не сломают, разницы от выбора dx
практически нет).
Исходная версия AITap, :
Из каких соображений выбирать dx?
А для чего всё это делается? Может, и линейная система тут ни к чему, и задачу нужно решать совсем по-другому? Здесь-то, понятно, самое простое решение будет с dx = 0
, но в общем случае это не так. Никогда не занимался этим вопросом, но, может, нужно заняться символьной регрессией? Найти такие dx
, при которых foo(x)
линейна по каждой из функций f[i](x + dx[i])
. Но что делать, если их нет?
Если разложение не допускает совпадений fi(x + dx1) + fi(x + dx2) то для каждого набора dx решать систему и искать минимальную невязку?
Я ошибся, когда сказал, что дело в недостаточном ранге матрицы предикторов. Это, в принципе, плохо (делает решение неоднозначным), но numpy.linalg.lstsq
с этим справляется, выбирая решение с минимальной нормой. Так что даже если fi(x + dx1)
и fi(x + dx2)
- это не только одинаковые функции с разным dx
, но и линейно зависимые друг от друга (fi(x + dx1) * const == fi(x + dx2)
), какие-то коэффициенты Вам всё равно достанутся, и невязку они будут минимизировать. Серьёзной проблемы здесь нет.
для каждого набора dx решать систему и искать минимальную невязку?
Формально, можно считать это задачей оптимизации. Записать невязку ||A(f,x,dx) @ coef - foo(x)||
как функцию от вектора dx
(остальные параметры зафиксированы заранее или вычисляются из них) и в таком виде запихнуть в метод минимизации, авось что-нибудь скажет. Нужно готовиться к тому, что ответов с примерно одинаковой невязкой будет много (например, здесь, пока ошибки округления от работы с большим t**2
всё не сломают, разницы от выбора dx
практически нет).