2013-08-25 81 views
0

我想在一些數據點上擬合形式爲y = a + b * sin(2 * pi * x)+ c * cos(2 * pi * x)的曲線在Matlab中。我一直在嘗試使用「適合」,但後來我只得到這個消息「如果ISA(fittypeobj,‘fittype’)」在Matlab中將任意曲線擬合到數據點

這是我的代碼:

L = load('file.mat'); 
x = filedata(:,1); 
ft = fittype('a+b*sin(2*pi*x)+c*cos(2*pi*x)'); 

fit(x, filedata(:,3), ft) 

有人可以告訴我什麼我做錯了?

+1

你在哪裏得到這個消息?在命令行中打印爲錯誤消息?你的代碼(隨機(x,y)數據)適合我。 – gevang

+1

您可能沒有安裝曲線擬合工具箱。輸入'license('test','Curve_Fitting_Toolbox')',如果你返回0 - 這是你的問題。 – Geodesic

回答

1

這裏是如何「手動」做適合在最小二乘方法:看

x = x(:); %make sure we have column vectors 
y = y(:); 

f0 = 1; 
M = [ones(size(x)), sin(2*pi*f0*x), cos(2*pi*f0*x)]; 
%design matrix, columns are base vectors 

% least square approximation of x = k(1)*M(:,1) + k(2)*M(:,2) + k(3)*M(:,3); 
% see help mldivide 
k = M \ y; 

a = k(1); 
b = k(2); 
c = k(3); 

快速測試,如果它的工作原理:

>> x = linspace(0,10,1000)'; % note transpose to make column 
>> y = 3 + 1.5 * sin(2*pi*x) + 8 * cos(2*pi*x) + randn(size(x)); % add some noise 
>> f0 = 1; 
>> M = [ones(size(x)), sin(2*pi*f0*x), cos(2*pi*f0*x)]; 
>> k = M \ y 

k = 

    3.0383 
    1.5264 
    7.9385 
>> plot(x, y, x, M*k, 'r'); legend('measurement', 'fit')