Nếu không có trở ngại, vấn đề có thể được viết và giải quyết như một hệ thống tuyến tính đơn giản:
% 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(:)
Những hạn chế của khóa học sẽ tự động được hài lòng iff rằng hạn chế mô hình thực sự là nền tảng dữ liệu của bạn. Ví dụ,
% 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)')
Tuy nhiên, nếu bạn áp đặt những hạn chế trên dữ liệu đó là không được mô tả một cách chính xác bởi rằng mô hình hạn chế, mọi thứ có thể đi sai:
% 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)')
(giải pháp này có a == 0
, chỉ dẫn của một i ncorrect model choice).
Nếu sự bình đẳng chính xác của a == 0
là một vấn đề: tất nhiên là không có sự khác biệt nếu bạn đặt a == eps(0)
. Về mặt số lượng, điều này sẽ không đáng chú ý đối với dữ liệu trong thế giới thực, nhưng dù sao nó cũng không phải là nonzero.
Dù sao, tôi nghi ngờ rằng mô hình của bạn không được chọn tốt và các ràng buộc là "khắc phục" để mọi thứ hoạt động hoặc dữ liệu của bạn thực sự không bị phân biệt/rescaled trước khi cố gắng làm cho phù hợp hoặc các điều kiện tiên quyết tương tự được áp dụng (tôi thường thấy mọi người làm điều này, vì vậy vâng, tôi hơi thiên vị về khía cạnh này :).
Vậy ... những lý do thực sự đằng sau những hạn chế đó là gì?
tại sao 'a> 0' và không phải' a> = 0'? giả sử kết quả tối ưu hóa của bạn với 'a = 0', sau đó đặt nó thành' a = \ epsilon' sẽ thay đổi rất ít ... – Shai
Có, bạn nói đúng, tôi đã nói a> 0 chỉ vì dữ liệu của tôi không bao giờ "hoạt động" như một hàm có đóng là 0, nhưng tôi không nhất thiết phải đặt nó là một ràng buộc – bettaberg
@bettaberg: Tôi vẫn còn lo lắng khi biết những ràng buộc đó đến từ đâu ...? Bạn đang cố gắng mô hình hóa gì và tại sao các ràng buộc trên các tham số? –