2012-07-17 57 views
0

比方說,我有一個數據表,它是1×15前後用價值來分析預期的值:::輻射定標 - 裸奔

[21 78 33 59 90 26 88 54 36 63 72 37 48 93 56] 

所以我裸奔公式我需要實現這一點:

%拖尾= {[abs(Q_n - ((Q_n-1 +公式:

我們將值90分配給Q_n(th來自單元格(1,5))使用這個值意味着對於Q_n-1,我們希望值59,對於Q_n + 1,我們希望值26(實質上是單元格之前(1,4 )和細胞後(1,6))

Q_N = 90

Q_N-1 = 59

Q_N + 1 = 26

我的問題是:我將如何做到這一點的整個數據集並將它們應用於裸奔方程? (不包括第1行和15你不能有一個Q_N-1,第1行,你不能有一個Q_N + 1 15行)

我可能沿着這個思路思考的東西:

Q_n = 1; 
while Q_n < length(middle.middle_interpolate) 
    Q_n = Q_n+1; 
    before = middle.middle_interpolate{Q_n-1}; 
    actual = middle.middle_interpolate{Q_n}; 
    after = middle.middle_interpolate{Q_n+1}; 
    averg = ((before + after)/2); 
    equation = (abs(actual-averg)/averg)*100; 
    plot(equation); 
end 
+0

爲什麼使用單元而不是矩陣?如果你輸入一個矢量,你可以做所有的事情而不需要循環。主要問題似乎是在最後一次迭代中'Q_n == length(input)',並且您訪問'Q_n + 1'。只要將你的邊界改爲' denahiro 2012-07-17 14:49:19

回答

1

我把它分成了幾部分,所以你可以看到我在做什麼。它也只適用於這個特定的數據集,因爲這些索引是硬編碼的(但我敢打賭你可以弄清楚如何使它適用於任何數據集)。

averg = mean([Qn(1:13),Qn(3:15)],2); % this is just getting your averg value. 
actual = Qn(2:14); 
equation = abs(actual-averg)./averg*100; 
plot(equation) 

當然,你可以把所有這一切在同一行,使它看起來瘋狂的複雜...

equation = abs(mean([Qn(1:13),Qn(3:15)],2) - Qn(2:14))./mean([Qn(1:13),Qn(3:15)],2)*100 

但你要保持它的可讀性有所爲別人看起來可能會在代碼中的誰未來。

+0

所以13只是2最大計數下,所以我可以做一些像長度(數據) - 2而不是我的實際數據?以及用長度(數據)替換15,然後用長度(數據)-1替換14? – 2012-07-17 15:55:30

+0

這將是正確的,如果它只是一個1xn矢量,你可以使用'end'而不是'length(data)' – 2012-07-17 15:57:22

+0

好吧,所以我在matlab論壇上提交了另一個答案,看起來這兩個都在做同樣的事情,唯一的差異是你的答案開始第1行的結果,而另一個適用NaN(因爲我怎麼解釋爲什麼它不能用於引用第一行和最後一行)。儘管如此,非常感謝您提供瞭如此快速而明確的迴應。 – 2012-07-17 16:25:27