2013-08-25 6 views
0

Je voudrais ajuster une courbe sur la forme y = a + b * sin (2 * pi * x) + c * cos (2 * pi * x) à certains points de données à Matlab. J'ai essayé d'utiliser « bon », mais je ne reçois que ce message « si isa (fittypeobj, « fittype ») »Ajuster la courbe arbitraire aux points de données dans Matlab

Voici mon code:

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) 

Quelqu'un peut me dire ce que s'il vous plaît Je fais mal?

+1

où obtenez-vous ce message? imprimé comme un message d'erreur dans la ligne de commande? Votre code (avec des données aléatoires (x, y)) fonctionne bien pour moi. – gevang

+1

Il est possible que la boîte à outils d'ajustement de courbe ne soit pas installée. Tapez 'license ('test', 'Curve_Fitting_Toolbox')', si vous renvoyez 0 - il y a votre problème. – Geodesic

Répondre

1

Voici comment faire l'ajustement « à la main » d'une manière des moindres carrés:

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); 

test rapide pour voir si cela fonctionne:

>> 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') 
Questions connexes