2016-10-08 3 views
2

У меня есть некоторые данные формыКак найти квадратичную квадратичную верхнюю границу квадрата с квадратичной ошибкой?

x1[i], x2[i], x3[i], z[i],

где z[i] неизвестная детерминированная функция x1[i], x2[i], and x3[i]. Я хотел бы найти квадратичную функцию u(x1, x2, x3)= a11*x1^2 + a22*x2^2 + a33*x3^2 + a12*x1*x2 + ... + a0, которая перечеркивает данные, то есть u(x1[i], x2[i], x3[i]) >= z[i] для всех i, и это минимизирует сумму квадратов ошибок, связанных с ограничениями.

Есть ли подход с эффективным вычислением в Python или Matlab?

ответ

1

Существует очень простое решение. Просто используйте полиномиальную регрессию в Mathlab (http://www.matrixlab-examples.com/polynomial-regression.html). Вы получите определенную функцию P (x1 [i], x2 [i], x3 [i]). 1. Затем для каждого i вычислим выражение Diff [i] = P (x1 [i], x2 [i], x3 [i]) - z [i]. Вы получите некоторый массив Diff. 2. Выберите все отрицательные значения. 3. Найдите минимальное значение в Diff: M = Min (Diff). 4. Желаемая функция F (x1 [i], x2 [i], x3 [i]) = P (x1 [i], x2 [i], x3 [i]) + Abs (M), где Abs (M) - это значение, исключая знак M.

Но если вы не ограничены только квадратичными функциями, вы можете изменить степень полинома и в конечном итоге получить более точное решение.

+3

Можете ли вы показать, что этот подход минимизирует сумму квадратов ошибок с ограничениями? – Arpi

+0

Hello Andrey, Спасибо, что ответили, но этот подход не работает. Следующий сеанс IPython демонстрирует простой встречный пример: В [1]: x = array ([0, 1, 2, 3, 4]) В [2]: y = array ([0, 0, 1 , 0, 0]) В работе [3]: polyval (polyfit (х, у, 2), х) Из [3]: массив ([- 0,08571429, 0,34285714, 0,48571429, 0,34285714, -0,08571429]) Центральная точка - это та, которая требует наибольшей коррекции (1-0,4857 = 0,5143). Если мы смещаем всю кривую на эту величину, квадратичная область намного выше конечных точек. –

2

Ваша проблема звучит как quadratic programming problem с линейными ограничениями. Существуют эффективные алгоритмы для их решения, и они реализованы также в Matlab и Python; см. quadprog и CVXOPT соответственно.

+0

Ограничения действительно линейны по параметрам. Я изначально не осознавал этого. –