在MATLAB中通过最小二乘拟合数据

时间:2018-01-24 20:21:53

标签: matlab numerical-methods least-squares approximation

给出以下数据点

enter image description here

我正在尝试使用最小二乘法找到最佳拟合模型。

给出了两种模型。

  1. enter image description here
  2. enter image description here
  3. 我的方法是将方程式重写为以下内容。

    1. 其中

      1. 其中

        我编写了以下MATLAB代码来计算不同方程的系数a,b。

        对于第一个等式,我编写了以下代码来评估系数a

        x = [150 200 300 500 1000 2000]';
        y = [2 3 4 5 6 7]';
        func =@(x) (1/x-1/8);
        yy=arrayfun(func,y);
        A = 1./x;
        c= A\yy; yanp= A*c; error = yy-yanp;
        rms(error) % Root mean square error.
        

        给我a = 48.4692,均方根误差为0.0310。

        对于第二个等式,我编写了以下代码来评估系数a,b。

        x = [150 200 300 500 1000 2000]';
        y = [2 3 4 5 6 7]';
        yy = log(8-y);
        A = [ones(6,1) log(x)];
        c= A\yy; yanp= A*c;  error= yy-yanp;
        a = exp(c(1)); %Converting back
        b= c(2);
        rms(error)
        

        给我a = 174.5247,b = -0.6640,均方根误差为0.0756

        我的结果表明,第一个等式是更好的近似,因为误差较小,但我的同学声称第二个等式给出较小的误差,因此是更好的近似。我怀疑我在计算中的某个地方犯了一个错误,我正在寻找指导。

1 个答案:

答案 0 :(得分:1)

在第二种情况下,您没有正确计算错误。您需要将yanp转换回“true units”并与输入y进行比较:

error = y-(8-exp(yanp));