【问题标题】:Logarithmic Least Square Method on MatlabMatlab上的对数最小二乘法
【发布时间】:2023-04-04 16:35:01
【问题描述】:

我如何使用这个函数y=(a*x)./(b+x)来近似这个数据 x = [1.5 4 5 8 12 16 17],y = [1.6 2.6 2.4 3.2 3.4 3.6 3.4]用matlab最小二乘法?

我使用对数得到log(y)=log(a*x)-log(b+x)。结果不是我需要的y = a*x + b 形式。 a 它没有与 x 相乘,因为它应该是,但它被添加到它,因为 log(y)=log(a)+log(x)-log(b)。所以我不知道下一步该怎么做。我知道y=b*x.^ay=b*exp.(x*a) 的代码,但我不知道如何解决这个问题。

【问题讨论】:

    标签: matlab logarithm least-squares data-fitting


    【解决方案1】:

    嗯,我认为是时候回到代数 1。log(b+x) 与 log(b) 不同。你不能使用日志来解决这个问题,至少你已经尝试过。

    只要你愿意在错误结构中快速而松散地玩弄(即使你不知道这意味着什么,它仍然很重要)那么假设你颠倒了事情?

    1/y = (b+x)/(ax) = b/(ax) + 1/a
    

    转换问题,使

    c = b/a
    d = 1/a
    u = 1/x
    v = 1/y
    

    现在我们有

    v = cu + d
    

    解决这个线性回归问题,然后从 c 和 d 中恢复 a 和 b。

    在 MATLAB 中,这很简单。

    x = [1.5 4 5 8 12 16 17];
    y = [1.6 2.6 2.4 3.2 3.4 3.6 3.4];
    
    u = 1./x;
    c_d = polyfit(u,1./y,1)
    c = c_d(1);
    d = c_d(2);
    
    a = 1./d
    a =
              3.90554889035516
    
    b = c*a
    b =
              2.19394529536478
    

    并绘制拟合结果。

    ezplot(@(x) a.*x./(b+x),[1.5 17])
    hold on
    plot(x,y,'ro')
    

    【讨论】:

      猜你喜欢
      • 2016-03-25
      • 1970-01-01
      • 1970-01-01
      • 2012-06-12
      • 2013-05-20
      • 1970-01-01
      • 1970-01-01
      • 2013-02-20
      • 2014-04-28
      相关资源
      最近更新 更多