【Matlab基础】数据拟合

目录

一、线性拟合

1. 常用辅助函数

2. 多元线性拟合

例子:

二、多项式拟合

三、lsqcurvefit函数

例子1:

例子2:

四、nlinfit非线性拟合

例子1:

例子2:

五、其他拟合函数

lsqnonlin

fittype


 

【Matlab基础】数据拟合_第1张图片

一、线性拟合

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);
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');

四、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);
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');

五、其他拟合函数

  • lsqnonlin

  • fittype

你可能感兴趣的:(Matlab,matlab,开发语言,过拟合)