2012-12-20 41 views
0

我有一個問題,曲線擬合,我必須適應設置使用此方程 點(x和y)的+ BX^2.5 + CX^3.5.Already我試圖得到它從matlab曲線擬合工具箱使用nlinfit函數。現在我想將它轉換爲C/C + +。是否有任何方式將其從MATLAB轉換或否則有任何庫在C/C++中執行。nlinfit MATLAB函數等效函數c代碼

x = [0 90 180 270]'; 
y = [201 173 118 146]'; 
modelfun = @(b,x)(b(1)+ b(2).*x.^2.5+ b(3).*x.^3); 
opts = statset('nlinfit'); 
beta0 = [0;0;0]; 
beta = nlinfit(x,y,modelfun,beta0,opts); 
disp(beta); 
b = beta; 
y1 = b(1)+ b(2).*x.^2.5 + b(3).*x.^3; 
disp(y1); 

在此先感謝。

+0

C還是Visual-C++? – 2012-12-20 07:39:43

+1

爲什麼你在這種情況下使用'nlinfit'?爲什麼不使用最小二乘?做一個矩陣'X = [ones(numel(x),1)x(:)。^ 2.5 x(:)。^ 3]'然後你就會有'b = X \ y'? – Shai

+0

的Visual C++是非常有用的...... – aranga

回答

0

最後我得到了很簡單的回答這個nlinfit .... MATLAB代碼是

modelfun = @(b,x)(b(1)+ b(2).*x.^2.5+ b(3).*x.^3); 
opts = statset('nlinfit'); 
beta0 = [0;0;0]; 
beta = nlinfit(x,y,modelfun,beta0,opts); 
% % % disp(beta); 
b = beta; 
y1 = b(1)+ b(2).*x.^2.5 + b(3).*x.^3; 
% disp(y1); 

等效功能進行了這種推導

Ax = B; 
%multiply with A' Then 
(A'*A)*x=(A'*b) 
% x=(A'*A)/(A'*b)% similar to inv(A'*A)*(A'*b) 
coeff1 = inv(A'*A)*(A'*B); 
disp(coeff1); 

使用這些係數,我們可以輕鬆地查找創建Y的值使用上面的等式。 謝謝shai ....