目录
一、线性拟合
1. 常用辅助函数
2. 多元线性拟合
例子:
二、多项式拟合
三、lsqcurvefit函数
例子1:
例子2:
四、nlinfit非线性拟合
例子1:
例子2:
五、其他拟合函数
lsqnonlin
fittype
format:变换数据显示格式
simple:简化符号表达式或矩阵
syms:定义符号变量
pretty:显示为标准印刷格式
roundn(a,-4):将a的数值保留为4位小数
X1=[ones(length(X(:, 1)), 1), X];
%%加值为1的一列,因为拟合方程中有常数项
[beta, bint, r, rint, states]=regress(Y, X1)
% 多元线性回归
% y=beta(1)+beta(2)*x1+beta(3)*x2+beta(4)*x3+...
% beta—系数估计
% bint—系数估计的上下置信界
% r—残差
% rint—诊断异常值的区间
% states—模型统计信息
rcoplot(r, rint)
%%绘制残差图
saveas(gcf,sprintf('线性曲线拟合_残差图.jpg'),'bmp');
%%保存为图片
p=polyfit(x,y,m)
对数据进行m次多项式拟合,返回拟合多项式的系数向量
polyval(p,x0)
将x0带入,求出多项式的值
poly2str(p,'t')
把系数向量转化为多项式的代数表达式
xdata=[1,2,3];
ydata=[14,35,67];
fun=@(x,xdata)x^2+sin(x); %%拟合函数?
x0=[0,0,0]; %系统初值
y=lsqcurvefit(fun,xo,xdata,ydata)
function yy=myfun(beta,x)
%自定义拟合函数
yy=beta(1)+beta(2)*x(:, 1)+beta(3)*x(:, 2)+beta(4)*x(:, 3)+beta(5)*(x(:, 1).^2)+beta(6)*(x(:, 2).^2)+beta(7)*(x(:, 3).^2);
end
beta0=ones(7, 1);
% 初始值的选取可能会导致结果具有较大的误差。
[beta,resnorm,r, ~, ~, ~, J]=lsqcurvefit(@myfun,beta0,X,Y)
% 在最小二乘意义上解决非线性曲线拟合(数据拟合)问题
% beta—系数估计
% resnorm—残差的平方范数 sum((fun(x,xdata)-ydata).^2)
% r—残差 r=fun(x,xdata)-ydata
% J—雅可比矩阵
[Ypred,delta]=nlpredci(@myfun, X, beta, r, 'Jacobian', J)
plot(X(:, 1), Y, 'k.', X(:, 1), Ypred, 'r');
saveas(gcf,sprintf('非线性曲线拟合_2.jpg'),'bmp');
xdata=[1,2,3];
ydata=[14,35,67];
%%样本数据
myfun=inline('(beta(1)+beta(2).*exp(-x))','beta','x');
%%beta为要求得的拟合方程系数矩阵
beta0=[0.2,0.2]; %%设初值
beta=nlinfit(xdata,ydata,myfunc,beta0);
%%求拟合方程系数
function yy=myfun(beta,x)
%自定义拟合函数
yy=beta(1)+beta(2)*x(:, 1)+beta(3)*x(:, 2)+beta(4)*x(:, 3)+beta(5)*(x(:, 1).^2)+beta(6)*(x(:, 2).^2)+beta(7)*(x(:, 3).^2);
end
beta0=ones(7, 1);
% 初始值的选取可能会导致结果具有较大的误差。
[beta, r, J]=nlinfit(X, Y, @myfun, beta0)
% 非线性回归
% beta—系数估计
% r—残差
% J—雅可比矩阵
[Ypred,delta]=nlpredci(@myfun, X, beta, r, 'Jacobian', J)
% 非线性回归预测置信区间
% Ypred—预测响应
% delta—置信区间半角
plot(X(:, 1), Y, 'k.', X(:, 1), Ypred, 'r');
saveas(gcf,sprintf('非线性曲线拟合_1.jpg'),'bmp');