您的位置:首页 > 编程语言 > MATLAB

matlab_数据拟合

2015-08-25 16:05 411 查看

【多项式拟合】

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  matlab