如何在MATLAB中快速/方便地合并和平均矩阵中的数据?

如何在MATLAB中快速/方便地合并和平均矩阵中的数据?,matlab,matrix,simulink,Matlab,Matrix,Simulink,我有一个特定发动机转速和油门位置下的航空燃油比值矩阵。在2500rpm和60%油门下,AFR为14 矩阵现在为25x10,发动机转速范围为1200-6000rpm,间隔为200rpm,油门范围为0.1-1,间隔为0.1 假设我测量了新值,例如2138转/分时AFR为13.5,节气门开度为74.3%,我如何将其合并到矩阵中?矩阵最接近的值为2000或2200rpm和70或80%节气门。此外,我不希望新数据取代旧数据。如何使矩阵考虑该值并调整其值以考虑新值 简化i具有以下x轴值停止行和1x4矩阵:

我有一个特定发动机转速和油门位置下的航空燃油比值矩阵。在2500rpm和60%油门下,AFR为14 矩阵现在为25x10,发动机转速范围为1200-6000rpm,间隔为200rpm,油门范围为0.1-1,间隔为0.1

假设我测量了新值,例如2138转/分时AFR为13.5,节气门开度为74.3%,我如何将其合并到矩阵中?矩阵最接近的值为2000或2200rpm和70或80%节气门。此外,我不希望新数据取代旧数据。如何使矩阵考虑该值并调整其值以考虑新值

简化i具有以下x轴值停止行和1x4矩阵: 2 4 6 8 14 16 18 20 我刚刚测量了3转时的AFR值为15.5。如果你插值AFR矩阵,你会得到15,所以这个值是不寻常的。 我希望矩阵得到这些数据并调整其他变量,即平均所有数据,这样我输入的数据越多,矩阵就越可靠和准确。因此,在简化的情况下,矩阵会变成: 2 4 6 8 14.3 16.3 18.2 20.1 所以它在新旧数据之间取平均值。我已经阅读了关于连接的文档,但是我相信我的问题不能用这个函数来解决

编辑:为了澄清我的问题,下面是视觉澄清。 添加新数据点时,“矩阵”保持5个点的相同大小。它考虑了新数据,并相应地调整了矩阵。这就是我想要达到的目标。我得到的数据越分散,矩阵就越精确。是的,在这种情况下绿点是一个异常值,但它解释了我的情况


干杯

这不是简单的合并/平均问题。我不认为有一个快速的方法可以做到这一点,除非你有简化的假设。你想要的是对潜在趋势的统计推断。我建议使用高斯过程回归来解决这个问题。Rasmussen和Williams有一个很棒的MATLAB工具箱,叫做GPML

这不是简单的合并/平均问题。我不认为有一个快速的方法可以做到这一点,除非你有简化的假设。你想要的是对潜在趋势的统计推断。我建议使用高斯过程回归来解决这个问题。Rasmussen和Williams有一个很棒的MATLAB工具箱,叫做GPML

这听起来更像是一项数据拟合任务。您的建议是,您有一组测量值,希望获得最佳线性拟合。您需要的不是生成一个数据表,而是一个值表,然后找到最适合这些值的值。例如,我可以创建一个矩阵a,它包含所有记录的值。让我们从以下几点开始:

A=[2,14;3,15.5;4,16;6,18;8,20];
我现在需要一个点矩阵作为拟合曲线的输入,在这个例子中,让我们假设它是线性的,值1和x的集合也是线性的

B=[ones(size(A,1),1), A(:,1)];
我们可以使用以下方法找到切割y轴和渐变的线性拟合参数:

B\A(:,2)
或者,如果希望线穿过的点的值为x:

B*(B\A(:,2))
这导致以下几点:

2,14.1897   3,15.1552   4,16.1207   6,18.0517   8,19.9828
表示通过这些点的最佳拟合线

如果需要,可以手动将其扩展到多项式拟合,也可以使用Matlab函数polyfit。要手动扩展流程,应使用修订后的B矩阵。也可以在最后一行中仅生成一组指定的点。完整的代码将是:

% Original measurements - could be read in from a file,
% but for this example we will set it to a matrix
% Note that not all tabulated values need to be present
A=[2,14; 3,15.5; 4,16; 5,17; 8,20];

% Now create the polynomial values of x corresponding to
% the data points.  Choosing a second order polynomial...
B=[ones(size(A,1),1), A(:,1), A(:,1).^2];

% Find the polynomial coefficients for the best fit curve
coeffs=B\A(:,2);

% Now generate a table of values at specific points
% First define the x-values
tabinds = 2:2:8;
% Then generate the polynomial values of x
tabpolys=[ones(length(tabinds),1), tabinds', (tabinds').^2];
% Finally, multiply by the coefficients found
curve_table = [tabinds', tabpolys*coeffs];
% and display the results
disp(curve_table);

这听起来更像是一项数据拟合任务。您的建议是,您有一组测量值,希望获得最佳线性拟合。您需要的不是生成一个数据表,而是一个值表,然后找到最适合这些值的值。例如,我可以创建一个矩阵a,它包含所有记录的值。让我们从以下几点开始:

A=[2,14;3,15.5;4,16;6,18;8,20];
我现在需要一个点矩阵作为拟合曲线的输入,在这个例子中,让我们假设它是线性的,值1和x的集合也是线性的

B=[ones(size(A,1),1), A(:,1)];
我们可以使用以下方法找到切割y轴和渐变的线性拟合参数:

B\A(:,2)
或者,如果希望线穿过的点的值为x:

B*(B\A(:,2))
这导致以下几点:

2,14.1897   3,15.1552   4,16.1207   6,18.0517   8,19.9828
表示通过这些点的最佳拟合线

如果需要,可以手动将其扩展到多项式拟合,也可以使用Matlab函数polyfit。要手动扩展流程,应使用修订后的B矩阵。也可以在最后一行中仅生成一组指定的点。完整的代码将是:

% Original measurements - could be read in from a file,
% but for this example we will set it to a matrix
% Note that not all tabulated values need to be present
A=[2,14; 3,15.5; 4,16; 5,17; 8,20];

% Now create the polynomial values of x corresponding to
% the data points.  Choosing a second order polynomial...
B=[ones(size(A,1),1), A(:,1), A(:,1).^2];

% Find the polynomial coefficients for the best fit curve
coeffs=B\A(:,2);

% Now generate a table of values at specific points
% First define the x-values
tabinds = 2:2:8;
% Then generate the polynomial values of x
tabpolys=[ones(length(tabinds),1), tabinds', (tabinds').^2];
% Finally, multiply by the coefficients found
curve_table = [tabinds', tabpolys*coeffs];
% and display the results
disp(curve_table);

它似乎可以做我想做的事情,即将分散的数据平均化为一个矩阵。我希望我能使用它,它看起来相当复杂,我还是一名教育工程师。我会调查一下,如果你的回答对我有效的话,我会把它标记为答案。thxIt似乎可以做我想做的事,即a
将分散的数据平均化为一个矩阵。我希望我能使用它,它看起来相当复杂,我还是一名教育工程师。我会调查一下,并将你的回复标记为答案,如果它对我有效,这会创建现有矩阵的过滤版本,对吗?或者它适合一条曲线。但这不是我的目标。我需要向矩阵中添加更多数据,因此它会与新数据进行平均,而矩阵的大小保持不变。如果向矩阵中添加数据,我不确定它将如何保持相同的大小!如果您只希望将2,4,6,8等的值制成表格,但允许通过基础数据调整这些值,那么您基本上是在拟合扩展的矩阵,但在最后一行中,您应该做的不是将系数乘以B,而是创建一个新的矩阵,tabvals=[ones1,4,2:2:8'];然后使用tabvals*B\A:,2仅获取您指定的常规网格上的制表值。这就是你想要的吗?我应该补充一点,如果你存储的都是最终的列表值,那么你会遇到一些问题。当出现新值时,如何知道以何种方式调整表。在您的示例中,为什么不向所有值添加0.5?如果有一个异常值,但其余数据都是好的,会发生什么。如果不存储数据,或者至少不存储关于该数据的统计信息,那么实际上就没有其他调整表的依据。这就是为什么我建议存储测量数据,然后对数据进行最佳线性拟合。感谢您的帮助和努力。我不太知道如何解释它,所以我将在我的原始问题中发布一个直观的澄清。我收集了越来越多的散乱数据,但我想保持我近似数据趋势的de-matrix的大小不变。矩阵本身不应该变大。我帖子中的图片显示了一个由5个数据点组成的“矩阵”,它基于10个测量的、分散的数据点。现在我测量了一个新的,绿色的,我想让矩阵适应它。就像红线一样。@Bart,如果是这样的话,那么我上面的评论应该是有用的。应将所有测量值存储在A中,使用B\A:,2重新计算最佳线性拟合,然后显示指定数据点的结果,其x坐标以tabvals为单位。你的曲线表明线性拟合是不够的,所以我将修改我的原始帖子,加入二次拟合。这将创建现有矩阵的过滤版本,对吗?或者它适合一条曲线。但这不是我的目标。我需要向矩阵中添加更多数据,因此它会与新数据进行平均,而矩阵的大小保持不变。如果向矩阵中添加数据,我不确定它将如何保持相同的大小!如果您只希望将2,4,6,8等的值制成表格,但允许通过基础数据调整这些值,那么您基本上是在拟合扩展的矩阵,但在最后一行中,您应该做的不是将系数乘以B,而是创建一个新的矩阵,tabvals=[ones1,4,2:2:8'];然后使用tabvals*B\A:,2仅获取您指定的常规网格上的制表值。这就是你想要的吗?我应该补充一点,如果你存储的都是最终的列表值,那么你会遇到一些问题。当出现新值时,如何知道以何种方式调整表。在您的示例中,为什么不向所有值添加0.5?如果有一个异常值,但其余数据都是好的,会发生什么。如果不存储数据,或者至少不存储关于该数据的统计信息,那么实际上就没有其他调整表的依据。这就是为什么我建议存储测量数据,然后对数据进行最佳线性拟合。感谢您的帮助和努力。我不太知道如何解释它,所以我将在我的原始问题中发布一个直观的澄清。我收集了越来越多的散乱数据,但我想保持我近似数据趋势的de-matrix的大小不变。矩阵本身不应该变大。我帖子中的图片显示了一个由5个数据点组成的“矩阵”,它基于10个测量的、分散的数据点。现在我测量了一个新的,绿色的,我想让矩阵适应它。就像红线一样。@Bart,如果是这样的话,那么我上面的评论应该是有用的。应将所有测量值存储在A中,使用B\A:,2重新计算最佳线性拟合,然后显示指定数据点的结果,其x坐标以tabvals为单位。你的曲线表明线性拟合是不够的,所以我将修改我原来的帖子,加入二次拟合。