2015-10-16 22 views
0

this question中給出了檢查整數的給定向量是否恆定的函數。我的問題是你如何能夠擴展到矢量包含浮點數的情況。如何檢查帶浮點數的向量是否爲常量(在Matlab中)?

實施例1:載體A=[1 1 1]

總和(ABS(差異(A)))= 0。矢量是恆定的。

實施例2:矢量B=[pi, 3.1416, 3.141592653589793]

format short,我們得到總和(ABS(差異(B)))= 1.4693e-05。然而,我們可以認爲這些數字在format short的準確性範圍內相等,因爲它們全部讀取3.1416。

+0

一個想法是'總和(abs(diff(A)))<(n-1)* eps',其中__具有_n_元素的矢量和_eps_最小的可表示數量(1e-4表示'format short'),但這是不正確的。 – Karlo

回答

1

您可以檢查這樣的:

if norm(diff(v)) < err 

哪裏v是測試向量和err是可接受的最小誤差。 如果你想測試,如果它是精確到n小數位,那麼你可以這樣做:

if norm(diff(v)) < 1e-n 

if range(round(v,n)) == 0 

if all(diff(round(v,n)) == 0) 

要得到相同的結果爲format short我們想要檢查精度到4位小數,所以n=4

+0

* _... err_)連續元素之間的差異大於(_ Karlo

+1

@MWijnand你應該編輯你的問題,包括一些如何測試它的例子,或者是一些更大的示例向量,它們顯示了你在這裏描述的內容。 – JacobD

0

如果你只是一輪矢量到4十進制的數字,就可以規避discribed問題:

B=[pi, 3.1416, 3.141592653589793] B=round(B*10000)/10000 sum(abs(diff(B)))

最後一個表達式將返回0

+1

您應該將我的答案標記爲正確,而不是發佈相同的新答案(如果不是更復雜)。 「循環」功能可以使用第二個輸入。 – JacobD

相關問題