2016-10-08 6 views
2

Ich habe einige Daten des FormularsWie findet man die quadratische Obergrenze des kleinsten quadratischen Fehlers?

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

wo z[i] eine unbekannte deterministische Funktion von x1[i], x2[i], and x3[i] ist. Ich würde gerne eine quadratische Funktion u(x1, x2, x3)= a11*x1^2 + a22*x2^2 + a33*x3^2 + a12*x1*x2 + ... + a0 finden, die die Daten überbrückt, d. H. u(x1[i], x2[i], x3[i]) >= z[i] für alle i, und das minimiert die Summe der quadrierten Fehler, die den Beschränkungen unterliegen.

Gibt es einen rechnerisch effizienten Lösungsansatz in Python oder Matlab?

Antwort

1

Es gibt eine sehr einfache Lösung. Verwenden Sie einfach die polynomiale Regression in Mathlab (http://www.matrixlab-examples.com/polynomial-regression.html). Sie erhalten eine bestimmte Funktion P (x1 [i], x2 [i], x3 [i]). 1. Dann für jeden i Berechnung Ausdruck Diff [i] = P (x1 [i], x2 [i], x3 [i]) - z [i]. Sie erhalten einige Array Diff. 2. Wählen Sie alle negativen Werte aus. 3. Suchen Sie den minimalen Wert in Diff: M = Min (Diff). 4. Die gewünschte Funktion ist F (x1 [i], x2 [i], x3 [i]) = P (x1 [i], x2 [i], x3 [i]) + Abs (M), wobei Abs (M) - es ist Wert ohne das Vorzeichen von M.

Aber wenn Sie nicht nur auf quadratische Funktionen beschränkt sind, können Sie den Grad des Polynoms variieren und schließlich eine genauere Lösung erhalten.

+3

Können Sie zeigen, dass dieser Ansatz die Summe der Fehler im Quadrat mit den Einschränkungen minimiert? – Arpi

+0

Hallo Andrey, Danke für die Antwort, aber dieser Ansatz funktioniert nicht. Die folgende IPython-Sitzung demonstriert ein einfaches Gegenbeispiel: In [1]: x = Array ([0, 1, 2, 3, 4]) In [2]: y = Array ([0, 0, 1 , 0, 0]) In [3]: polyval (polyfit (x, y, 2), x) Out [3]: Array ([- 0,08571429, 0,34285714, 0,48571429, 0,34285714, -0,08571429]) Der Mittelpunkt ist derjenige, der die größte Korrektur erfordert (1-0,4857 = 0,5143). Wenn wir die gesamte Kurve um diesen Betrag verschieben, liegt die quadratische Kurve weit über den Endpunkten. –

2

Ihr Problem klingt wie ein quadratic programming problem mit linearen Einschränkungen. Es gibt effiziente Algorithmen, um diese zu lösen, und sie werden auch in Matlab und Python implementiert; siehe quadprog bzw. CVXOPT.

+0

Die Einschränkungen sind in der Tat in den Parametern linear. Das hatte ich zunächst nicht erkannt. –

Verwandte Themen