目录
一、线性拟合
1. 常用辅助函数
2. 多元线性拟合
例子:
二、多项式拟合
三、lsqcurvefit函数
例子1:
例子2:
四、nlinfit非线性拟合
例子1:
例子2:
五、其他拟合函数
lsqnonlin
fittype
一、线性拟合
1. 常用辅助函数
format:变换数据显示格式
simple:简化符号表达式或矩阵
syms:定义符号变量
pretty:显示为标准印刷格式
roundn(a,-4):将a的数值保留为4位小数
2. 多元线性拟合
例子:
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')
把系数向量转化为多项式的代数表达式
三、lsqcurvefit函数
例子1:
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)
例子2:
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);
endbeta0=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');
四、nlinfit非线性拟合
例子1:
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);%%求拟合方程系数
例子2:
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);
endbeta0=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');
五、其他拟合函数
-
lsqnonlin
-
fittype