如何在matlab中找出匹配两条曲线的缩放因子?

时间:2012-02-02 20:16:03

标签: matlab curve-fitting

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

例如:

DATA1:

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

DATA2

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 modified data2之间的delta y来获得 B 。但是我确实有一个很好的方法来找出A.我应该如何找到 A & B 匹配这两条曲线?非常感谢任何帮助。

2 个答案:

答案 0 :(得分:0)

要确定 A 您想要进行互相关但不是测试一系列时滞,您需要测试一系列x乘数,即 A < / strong>值。

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

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

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

答案 1 :(得分: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)