LINUX.ORG.RU

История изменений

Исправление 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 практически нет).