1

我有两个在不同日期获得的数据集。我从两个不同的数据集得到的结果具有相似的形状但不同的值(见图 1)。我试图通过将第二个数据的 x 中的常数A和y 中的B相乘来将第二个数据集 (x2,y2) 与第一个数据集 (x1,y1)相匹配(见图 2)。图1 图 2

例如:

数据1:

x1=[-0.3:0.06:2.1]';

Y1 = [0.001 0.001 0.004 0.014 0.052 0.166 0.330 0.416 0.340 0.247 0.194 0.197 0.237 0.330 0.428 0.542 0.669 0.767 0.855 0.900 0.913 0.904 0.873 0.811 0.765 0.694 0.631 0.585 0.514 0.449 0.398 0.351 0.309 0.273 0.233 0.211 0.182 0.154 0.137 0.117 0.101]';

数据2

x2=[-0.3:0.06:2.1]';

Y2 = [0.000 0.000 0.000 0.000 0.025 0.230 0.447 0.425 0.269 0.194 0.225 0.326 0.477 0.636 0.791 0.931 1.036 1.104 1.117 1.123 1.062 0.980 0.897 0.780 0.675 0.571 0.471 0.390 0.309 0.258 0.209 0.161 0.129 0.099 0.079 0.063 0.047 0.038 0.027 0.023 0.015]';

为了找出比例因子A & B,我正在考虑通过最小化 data1 和 x 修改后的 data2 之间的 delta y 来获得B。但是我确实有一个找出 A 的好方法。我应该如何找出AB以匹配这两条曲线?任何帮助是极大的赞赏。

4

2 回答 2

0

要确定A,您需要进行互相关,而不是测试一系列时滞,您需要测试一系列 x 乘数,即A值。

假设您有一系列要测试的 A 值,通过将每条曲线中对应于相同 x 值的点相乘,在两条曲线 (x1, y1) 和 (A*x2, B*y2) 之间建立相关性总结这些产品。这将为您提供一个代表特定A值的相关性的数字。

对每个潜在的 A值重复上述操作。给出最大相关结果的是与 x 维中的两条曲线最匹配的A值。

此方法要求您测试的A值提供与原始 x 值同步的新 x 值,以便两条曲线具有相同 x 值的值。

于 2012-02-02T20:33:32.863 回答
0

如果您有优化工具箱(或访问任何不受约束的非线性最小化例程),您可以执行以下操作:

定义一个计算两条曲线之间误差的函数

function err = sqrError(coeffs, x1, y1, x2, y2)
    % Interpolation of 'y2' with scaled 'x2' into the domain 'x1' 
    y2sampledInx1 = interp1(coeffs(1)*x2,y2,x1);
    % Squred error calculation
    err = sum((coeffs(2)*y2sampledInx1-y1).^2);
end

使用fminunc(或任何可用的优化器)计算您的系数:

coeffs = fminunc(@(c) sqrError(c,x1, y1, x2, y2),[1;1]);

A = coeffs(1);
B = coeffs(2);
plot(x1, y1, A*x2, B*y2)
于 2012-02-02T22:07:47.423 回答