matlab多項式擬合以及指定函數擬合


clc;
clear all;
close all;
%% 多項式擬合指令;
% X = [1 2 3 4 5 6 7 8 9 ];
% Y = [9 7 6 3 -1 2 5 7 20];
% P= polyfit (X,Y,3);
%
% x = 0:2:10;
% y = polyval(P,x);
% plot(x,y,X,Y,'r*');
%% 指定函數擬合
x=[ 0;0.4;1.2; 2;2.8;3.6;4.4;5.2; 6;7.2; 8;9.2;10.4;11.6;12.4;13.6;14.4;15];
y=[ 1;0.85;0.29;-0.27;-0.53;-0.4;-0.12;0.17;0.28;0.15;-0.03;-0.15;-0.071;0.059; 0.08;0.032;-0.015;-0.02];
plot(x,y,'r*')
hold on
f = fittype('a*cos(k*t)*exp(w*t)','independent','t','coefficients',{'a','k','w'});
cfun = fit(x,y,f);
xi = 0:1:20;
yi = cfun(xi);
plot(xi,yi,'b-')
%程序中,函數fittype是自定義擬合函數;cfun=fit( x, y, f)是根據自定義的擬合函數f 來擬合數據 x

 

%% 關於擬合小列子,以logistic曲線模型
% 讀入人口數據(1971-2000)
Y=[33815 33981 34004 34165 34212 34327 34344 34458 34498 34476 34483 34488 34513 ...
34497 34511 34520 34507 34509 34521 34513 34515 34517 34519 34519 34521 34521 ...
34523 34525 34525 34527];
% 讀入時間變量數據(t=年份-1970)
T=[ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 ...
27 28 29 30];
% 線性化處理
for i = 1:length(T)
y(i) = 1/Y(i);
x(i) = exp(-T(i));
end
%計算並輸出回歸系數B
for i = 1:length(T)
c = ones(30,1);
X = [c,x'];
b = inv(X'*X)*X'*y';
end
for i = 1: length(T)
z(i) = b(1) + b(2)*x(i); %計算擬合值;
s(i) = z(i) - sum(y)/30; %計算離差值;
w(i) = z(i) - y(i) %計算誤差;
end
%計算計算離差平方和
S = s*s';
%計算計誤差差平方和
Q = w * w';
% 計算回歸平方和U
U=S-Q;
% 計算,並輸出F檢驗值
F=28*U/Q;
% 計算非線性回歸模型的擬合值
for j=1:30,
Y(j)=1/(b(1,1)+b(2,1)*exp(-j));
end
% 輸出非線性回歸模型的擬合曲線(Logisic曲線)
plot(T,Y)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM