matlab中的trendline选项(excel)

时间:2013-08-28 09:40:18

标签: excel matlab

在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))

2 个答案:

答案 0 :(得分:5)

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

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

答案 1 :(得分:3)

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

对于xxyy,如果某些值<0,则在尝试此操作之前需要进行数据移位。