Ваша задача является линейной по a, b, c и d, даже если она является кубической в данных.Поэтому я бы предложил сформулировать это как обычную линейную задачу наименьших квадратов .Позвольте мне переименовать ваш x1 в z.Идея такова: у вас есть
топор i + bx i 2 + cx i 3 + dz i 2 ≈ y i
для некоторого i∈ {1,2,3… n}.Вы можете написать это в виде приближенного матричного уравнения:
⎡x₁ x₁² x₁³ z₁²⎤ ⎡a⎤ ⎡y₁⎤
⎢x₂ x₂² x₂³ z₂²⎥ ⎢b⎥ ⎢y₂⎥
⎢x₃ x₃² x₃³ z₃²⎥ ∙ ⎢c⎥ ≈ ⎢y₃⎥
⎢ ⋮ ⋮ ⋮ ⋮ ⎥ ⎣d⎦ ⎢⋮⎥
⎣xₙ xₙ² xₙ³ zₙ²⎦ ⎣yₙ⎦
Или, короче,
M ∙ X ≈ Y
Теперь вы умножаете обе стороныс транспонированием этой матрицы M:
M T ∙ M ∙ X = M T ∙ Y
Уведомлениечто я изменил с ≈ на =, потому что решение наименьших квадратов будет точно соответствовать этому измененному уравнению (по многим причинам я не хочу вдаваться в подробности).Это простая система линейных уравнений 4 × 4.Решите, используя обычные методы (такие как Гауссово исключение ), чтобы найти X = (a, b, c, d).
Если n большое, вы можете даже вычислить (M T ∙ M) и (M T fly Y) на лету, никогда не сохраняя саму М.Таким образом, 4 × 4 + 4 = 20 номеров будут всей памятью, которую вам нужно поддерживать между входными записями.На самом деле (M T ∙ M) составляет симметричный , поэтому для матрицы достаточно 10 чисел, всего 14.