不知道如何解释这个问题。
功能例如:
数据:https://www.dropbox.com/s/wr61qyhhf6ujvny/data.mat?dl=0
在这种情况下,如何计算此函数的休息点为〜1?我可以访问制作情节的矢量。 我想平均值是近似值,但在某些情况下它可能非常糟糕。
答案 0 :(得分:2)
假设"休息" point是数据中的稳态值以及稳态值在数据中大部分时间发生的事实,您可以简单地将所有点合并并将每个唯一值用作单独的bin。具有最高计数的bin应该对应于稳态值。
您可以通过histc
和unique
的组合来完成此操作。假设您的数据存储在y
中,请执行以下操作:
%// Find all unique values in your data
bins = unique(y);
%// Find the total number of occurrences per unique value
counts = histc(y, bins);
%// Figure out which bin has the largest count
[~,max_bin] = max(counts);
%// Figure out the corresponding y value
ss_value = bins(max_bin);
ss_value
包含数据的稳态值,对应于最常出现的输出点,并具有上面列出的假设。
使用上述方法的一个小警告是,这对浮点数据不友好,浮点数据的唯一值是由超过前几位有效数字的十进制值不同的浮点值生成的。
以下是从2300到2320点的数据示例:
>> format long g;
>> y(2300:2320)
ans =
0.99995724232555
0.999957488454868
0.999957733165346
0.999957976465197
0.999958218362579
0.999958458865564
0.999958697982251
0.999958935720613
0.999959172088623
0.999959407094224
0.999959640745246
0.999959873049548
0.999960104014889
0.999960333649014
0.999960561959611
0.999960788954326
0.99996101464076
0.999961239026462
0.999961462118947
0.999961683925704
0.999961904454139
因此,我建议的可能是圆形,以便保留前5个左右的有效数字。
在继续之前,您可以对数据集执行此操作:
num_digits = 5;
y_round = round(y*(10^num_digits))/(10^num_digits);
这将首先乘以10^n
,其中n
是您想要的位数,以便小数点移位n
个位置。我们对此结果进行舍入,然后除以10^n
以使其恢复到之前的比例。如果你这样做,对于那些0.9999的点......如果有n
个小数位,那么它们将四舍五入为1,这可能有助于上述计算。
然而,更新版本的MATLAB已将此功能内置于round
,您可以这样做:
num_digits = 5;
y_round = round(y,num_digits);
更新版本的MATLAB不鼓励使用histc
,建议您改用histcounts
。相同的函数定义和预期的输入和输出......如果您的MATLAB版本可以处理它,只需将histc
替换为histcounts
。
使用上述逻辑,您也可以使用中位数。如果大多数数据在1左右波动,那么中位数很可能会选择稳态值...所以试试这个:
ss_value = median(y_round);