【多项式拟合】
polyfit(X, Y, N);%多项式拟合,返回降幂排列的多项式系数。
polyval(P, xi);%计算多项式的值
function example()
x = [...];
y = [...];
P = polyfit(x, y, 3);
xi = 0:0.2:10;
yi = polyval(P, xi);
plot(xi, yi, x, y, 'r*');
end
%也可以用plot(x, y, '*r')在工具箱(Tools → Basic Fitting)中进行拟合
【指定函数拟合】
样例:f(t) = a cos ( k t ) e ω t
function example()
syms t %创建符号对象
x = [...];
y = [...];
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(x, y, 'r*', xi, yi, 'b-');
end
%也可以在工具箱Start → Toolboxes → Curve Fitting → Curve Fitting Tool(cftool)中或输入cftool命令进行拟合
曲线拟合工具箱
-
Data: 输出、查看和平滑数据。
-
Fitting: 拟合数据、比较拟合曲线和数据集。
-
Exclude: 可从拟合曲线中排出特殊的数据点。
-
Plotting: 选定区间后,单机按钮可选择原始数据和拟合的数据作图。
-
Analysis: 对拟合进行满意度、偏差等分析。
【实例】
给出数据,用Logistic曲线模型进行拟合。
已知函数模型为:
y = 1 / ( a + b e-t )
只需令 y’= 1/y, x’= e-t 就可转换成模型:
y’ = a + b x’
function example()
clear
clc
%读入数据
Y = [...];
X = [...];
%线性优化处理
for t = 1:30
x(t) = exp(-t);
y(t) = 1/Y(t);
end
%计算,并输出回归系数B
c = zeros(30, 1) + 1;
x = [c, x'];
B = inv(X'*X)*X'*y'; %inv求逆矩阵
for i = 1:30
%计算回归拟合值
z(i) = B(1, 1) + B(2,1) * x(i);
%计算离差
s(i) = y(i) - sum(y)/30;
%计算误差
w(i) = z(i) - y(i);
end
%离差平方和S
S = s * s';
%回归误差平方和Q
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
%输出拟合曲线
plot(T, y);
end