2012-02-02 113 views
1

我有兩個數據集在不同的日子獲得。我從兩個不同的數據集中得到的結果具有相似的形狀但不同的值(參見圖1)。我試圖通過將x和B中的常數乘以第二個數據(見圖2)的第二個數據集(x2,y2)與第一個數據集(x1,y1)匹配。 Figure 1 Figure 2如何找出縮放因子以匹配matlab中的兩條曲線?

例如:

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

要找出縮放因子一個 & ,我想通過減少數據1和X修改數據2之間的增量Y獲得。然而,我有一個好辦法,找出答:我應該如何找出一個 & 匹配這兩曲線?任何幫助是極大的讚賞。

回答

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(或任何優化你必須提供)來計算您的coeffiecients:

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

A = coeffs(1); 
B = coeffs(2); 
plot(x1, y1, A*x2, B*y2) 
+0

@ jonnat:這適用於我發佈的數據集。但我有一個問題,當你使用fminunuc時,你如何確定最小範圍([1,1])?當我使用其他數據集進行測試時,它顯示錯誤消息爲「???在28使用==錯誤,輸入到ROOTS不得包含NaN或Inf。」你知道這可能是什麼原因嗎?謝謝你的幫助。 – tytamu 2012-02-03 16:25:29

+0

此錯誤表示您的代碼中的操作生成NaN或Inf而不是有限數字。有很多原因,這可能是,包括無限制的目標函數'fminunc'或簡單的錯誤,例如除以0師如果你想界限添加到您的係數,使用'的fmincon'代替'fminunc'。如果您想確切知道NaN或Inf的生成位置,請在代碼的開頭使用'dbstop if naninf'。如果您仍然無法找到問題,請打開一個新問題。最後,如果我的答案適用於您的示例,請接受它,以便其他人知道它的工作原理。 – foglerit 2012-02-05 06:02:38

0

要確定一個你想要做一個交叉相關,但不是測試範圍的時間滯後的,你要測試範圍X乘數,即一個值。

假設你有一個範圍要測試的A值的,執行兩條曲線(X1,Y1)和(A * X 2,B * Y2)通過在每個曲線與點乘以對應於之間的相關性相同的x值並對這些產品進行求和。這會給你一個數字,表示在特定的值處的相關性。

重複上述每個潛在值。給出最大相關結果的一個是值最好在x維度的兩條曲線相匹配。

該方法要求您測試的值提供與原始x值同步的新x值,以便兩條曲線的值均爲相同的x值。

+0

感謝,這是非常有幫助的。你能給我一些指導,告訴我如何將新的x值與原始值進行同步? – tytamu 2012-02-02 21:16:20

+0

@陳泰妍:好問題。你能避免擔心通過使用你喜歡的任何** A **值數據完全同步的x值,然後進行內插所得到的(A * X 2,B * Y2)到X1的值僅用於計算相關的目的。插值會減少局部最大值,但是足夠細的x分辨率,這不會對相關結果產生很大影響。 – 2012-02-02 22:54:59

+0

@ b3:我只是測試jonnats後,它似乎工作。但在例行程序中,它不計算相關係數。只是好奇你有什麼評論?謝謝。 – tytamu 2012-02-03 16:29:09