Ohne Einschränkungen kann das Problem geschrieben und als ein einfaches lineares System gelöst werden:
% Your design matrix ([4 2 0] are the powers of the polynomial)
A = bsxfun(@power, your_X_data(:), [4 2 0]);
% Best estimate for the coefficients, [a b c], found by
% solving A*[a b c]' = y in a least-squares sense
abc = A\your_Y_data(:)
Diese Einschränkungen werden natürlich automatisch erfüllt sein iff, die in der Tat gezwungen Modell Ihrer Daten zugrunde liegt. wenn Sie Einschränkungen für Daten verhängen Zum Beispiel
% some example factors
a = +23.9;
b = -15.75;
c = 4;
% Your model
f = @(x, F) F(1)*x.^4 + F(2)*x.^2 + F(3);
% generate some noisy XY data
x = -1:0.01:1;
y = f(x, [a b c]) + randn(size(x));
% Best unconstrained estimate a, b and c from the data
A = bsxfun(@power, x(:), [4 2 0]);
abc = A\y(:);
% Plot results
plot(x,y, 'b'), hold on
plot(x, f(x, abc), 'r')
xlabel('x (nodes)'), ylabel('y (data)')
jedoch, die nicht genau durch diese eingeschränkte Modell beschrieben, könnten die Dinge schief gehen:
% Note: same data, but flipped signs
a = -23.9;
b = +15.75;
c = 4;
f = @(x, F) F(1)*x.^4 + F(2)*x.^2 + F(3);
% generate some noisy XY data
x = -1:0.01:1;
y = f(x, [a b c]) + randn(size(x));
% Estimate a, b and c from the data, Forcing a>0 and b<0
abc = fmincon(@(Y) sum((f(x,Y)-y).^2), [0 0 0], [-1 0 0; 0 +1 0; 0 0 0], zeros(3,1));
% Plot results
plot(x,y, 'b'), hold on
plot(x, f(x, abc), 'r')
xlabel('x (nodes)'), ylabel('y (data)')
(diese Lösung hat a == 0
, indikativ für ein i nkorrekte Modellwahl).
Wenn die genaue Gleichheit von a == 0
ein Problem ist: Es gibt natürlich keinen Unterschied, wenn Siesetzen. Numerisch wird dies für reale Daten nicht wahrnehmbar sein, aber nichtsdestotrotz ungleich null.
Wie auch immer, ich habe den Verdacht, dass Ihr Modell nicht gut gewählt ist und die Einschränkungen sind ein "Fix", um alles zum Laufen zu bringen, oder Ihre Daten sollten tatsächlich unvoreingenommen sein, bevor Sie versuchen, oder einige fit zu machen ähnliche Voraussetzungen treffen zu (ich habe oft Leute gesehen, die so etwas machen, also ja, ich bin in dieser Hinsicht ein bisschen voreingenommen :).
Also ... was sind die wahren Gründe für diese Einschränkungen?
warum 'a> 0' und nicht' a> = 0'? Nehmen wir an, Ihre Optimierungsergebnisse würden mit 'a = 0' und dann mit 'a = \ epsilon' sehr wenig ändern ... – Shai
Ja, Sie haben Recht, ich habe ein> 0 gesagt, nur weil meine Daten sich nie" benehmen " eine Funktion mit einem geschlossenen Wert von 0, aber ich muss es nicht unbedingt als Bedingung setzen – bettaberg
@bbettaberg: Ich bin immer noch gespannt, woher diese Einschränkungen kommen ...? Was versuchst du zu modellieren und warum die Einschränkungen der Parameter? –