2012-09-19 33 views
8

Tôi có một tập hợp các điểm (x,y) và tôi cần phải tìm dòng phù hợp nhất đi qua nguồn gốc bằng MATLAB.Lắp một đường đi qua gốc (0,0) đến dữ liệu

+1

Làm thế nào để bạn xác định tiêu chí của bạn cho một "phù hợp nhất"? Lỗi vuông tối thiểu? –

+1

Đúng vậy - cảm ơn vì đã chỉ ra điều đó là quan trọng. –

Trả lời

14

Trong ngắn: Chức năng của bạn phải ở dạng y=ax+0, làm cho polyfit vô dụng. Nhưng bạn có thể sử dụng phương pháp bình phương tối thiểu:

a = x(:)\y(:); 

Giải thích:

Bạn có n phương trình và một biến a đó là cần thiết để được tìm thấy:

a*x1 = y1; 
a*x2 = y2; 
... 
a*xn = yn; 

Nhà điều hành \ tìm ra giải pháp bình phương nhỏ nhất.

Ngoài ra, bạn có thể tìm ra giải pháp bằng tay:

a = (x'*x) \ (x'*y); 

hoặc trong mã giả:

 (x1*y1 + x2*y2 + ... xn*yn) 
a = ---------------------------- 
    (x1*x1 + x2*x2 + ... xn*xn) 

này rất hữu ích nếu bạn không sử dụng Matlab - ví dụ trong mã C.


Ví dụ và đoạn mã:

enter image description here

function FindLSSolution() 
    a = 2.5; 
    x = rand(100,1)*10; 
    y = a*x + randn(100,1); 
    figure;scatter(x,y); 

    A = x(:)\y(:); 
    hold on;plot(x, A*x,'g'); 
end 
+0

'a = pinv (x) * y' Điều này có hoạt động không? –

+1

@dr_rk, Có, nhưng nó không được khuyến cáo vì nó chậm hơn và ít ổn định về số lượng –

2

nếu bạn có "đường cong Toolbox Lắp" bạn có thể sử dụng

f = fit(x, y, 'a*x'); 
Các vấn đề liên quan