2014-04-22 276 views
3

我正在嘗試構建一個ARMAX模型,該模型根據以前的高程和上游流入來預測水庫水位升高。我的數據大概在0.041天的時間步,但它確實略有不同,我有3643個時間系列點。我已經使用基本ARMAX MATLAB命令試過,但我得到這個錯誤:如何在Matlab中構建ARMAX模型

Error using armax (line 90) 
Operands to the || and && operators must be convertible to 
logical scalar values. 

我想要的代碼是:

data = iddata(y,x,[],'SamplingInstants',JDAYs) 
m1 = armax(data, [30 30 30 1]) 

其中y是開始像Ÿ海拔的矢量= [135.780 135.800 135.810 135.820 135.820 135.830]」,x是開始如x = [238.865 238.411 238.033 237.223流速的矢量3210 237.223 233.828] '並且JDAYs是時間戳的向量啓動像JDAYs = [122.604 122.651 122.688 122.729 122.771 122.813]'。

我是新來的這種模型類型和系統識別工具箱,所以我有問題搞清楚是什麼導致了這個錯誤。 Matlab的例子不是很有幫助...

回答

2

我希望這不會讓你有點遲到。

檢查您的代碼我發現您使用的參數爲SamplingInstants。我不確定ARMAX函數適用於它。其實我很確定。我已經嘗試過好幾次了,不,它沒有。而且它似乎也不是ARMAX的有據可查的選項 - 或者也適用於其他方法。

ARXARMAX等車型都是基於從Z變換形式主義線性離散系統,也就是一個可以ussualy假設你的系統已經定期採樣率下采樣。當然,這不是一個規律,這是處理線性和非線性系統時的標準框架。而且大多數工業控制採集系統在常規採樣率下工作。然而。

設法得到ARMAX標準設置裏面,像這樣:

y=[135.780 135.800 135.810 135.820 135.820 135.830 .....]'; 
x=[238.865 238.411 238.033 237.223 237.223 233.828 .....]'; 
%JDAYs=[122.604 122.651 122.688 122.729 122.771 122.813 .....]'; 
JDAYs=122.601+[0:length(y)-1]*4.18'; 
data = iddata(y,x,[],'SamplingInstants',JDAYs); 
m1 = armax(data, [30 30 30 1]) 

,這將始終工作。請確保xy足夠長,以便能夠正確估計大於mean(4*orders)的所有自由係數,以使ARMAX能夠正常工作(在此情況下,大於121,並且期望大於10*mean(4*orders),適用於ARMAX算法)解決你的問題,並有足夠的時間變量來防止病態解決方案。

好運;)...

+1

我知道這是很長時間後,但我對你的最後一段感興趣。我目前在另一個問題中使用ARX/ARMAX模型。你能詳細說明嗎?你的意思是說你應該保持小的訂單以避免高估? –

+0

是的。這是解決參數估計問題的準確性有多高的問題。如果你有1000個點,並且你想估計1個參數,那麼確定性的第1個估計誤差將等於e(n)= rms(y-ye(p(n))),隨機預測誤差將會(n)= std(y-ye(p(n)))和參數預期誤差 - 通過迭代實驗框架'i',將'p'視爲隨機變量,將等於' SP(N)= STD(p(N)-mean(p(N)))'。 – hyprfrcb

+0

當增加'p'的尺寸時,當接近'n'的最佳設置時,'e'減小並且'se'增加,'p'的尺寸。當'n' = 1時,'e'和'se'都是非零值,當'n'趨向於無窮大時,'e'爲零,並且'se'傾向於'std(y)'(或一些非零值)。因此,'假設'連續性 - 假設數據能夠在你約束的模型下進行擬合,則存在'n'參數的最優值。隨機變量「se(n)」和「e(n)」的連續性條件經常被忽略,並且只是「假設」的問題。 – hyprfrcb

相關問題