【问题标题】:trendline option (excel) in matlabmatlab中的趋势线选项(excel)
【发布时间】:2013-08-29 01:48:30
【问题描述】:

在 excel 中,我记得能够根据文档选择一个称为“功率”的特定趋势线:

'功率趋势线是一条曲线,最适合用于比较以特定速率增加的测量值的数据集 - 例如,以一秒为间隔的赛车的加速度。如果您的数据包含零值或负值,则无法创建幂趋势线。

如何在 matlab 中实现?

例如:

a = [15.5156,0.1995;
7.6003,0.2999;
9.4829,0.2592;
12.2185,0.2239;
23.4094,0.1811];

figure;scatter(a(:,1),a(:,2))

【问题讨论】:

    标签: excel matlab


    【解决方案1】:

    Here 是一个可行的解决方案:

    a = [15.5156,0.1995;
    7.6003,0.2999;
    9.4829,0.2592;
    12.2185,0.2239;
    23.4094,0.1811];
    
    x = a(:, 1);
    y = a(:, 2);
    n = 2; % order of the fitted polynomial trendline
    p = polyfit(x, y, n);
    m = 1000; % number of trendline points (the larger the smoother)
    xx = linspace(min(x), max(x), m);
    yy = polyval(p, xx);
    
    figure;
    hold on;
    scatter(a(:,1), a(:,2));
    plot(xx, yy, 'r-');
    

    您可以轻松地将趋势线计算器代码放入单独的函数中。

    【讨论】:

    【解决方案2】:

    我在 excel 上绘制了您的数据,并使用以下等式添加了“幂”趋势线:

    y = 0.7188 x^{-0.4513}
    

    这当然是幂律。

    Matlab 中的类比是对数据的对数对数变换执行线性拟合(这解释了 excel 中“power”趋势线应用程序施加的约束):

    x = a(:, 1);
    y = a(:, 2);
    
    p = polyfit(log(x), log(y), 1);   % <--  linear fit
    

    给了

    p =
    
    -0.4513   -0.3302
    

    要覆盖趋势线,可以像 @kol 一样使用幂律:

    xx = linspace(min(x), max(x), 100);
    yy = exp(p(2))*xx.^p(1);
    
    figure;
    hold on;
    scatter(x, y);
    plot(xx, yy, 'r-');
    

    对于具有某些值xx 或 yy,在您尝试此操作之前需要进行数据移位。

    【讨论】:

      猜你喜欢
      • 2016-02-26
      • 1970-01-01
      • 1970-01-01
      • 2012-06-11
      • 1970-01-01
      • 2018-03-27
      • 2022-01-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多