accepting values into an array, then accepting new values by shifting left

1 回表示 (過去 30 日間)
Michael Scott
Michael Scott 2018 年 2 月 10 日
コメント済み: Michael Scott 2018 年 4 月 11 日
I am calling a function in a different m file. I want this function to write newValues into an array. After 7 entries, the newValues need to be added to the end of the array and then shifted left in order to keep the values in order. Example: values accepted in the array are [1 2 3 4 5 6 7]. The new value is 8 which makes the array have values [2 3 4 5 6 7 8]. This is what I have so far....
function arrayWithLatestValues = fn_updateArray(newValue)
persistent A;
A = [A(2:end) newValue];
arrayWithLatestValues = A;
end
this is my output im getting:
0 0 0 0 0 0 0
0 0 0 0 0 0 0
0 0 0 0 0 0 0
0 0 0 0 0 0 0
0 0 0 0 0 0 0
0 0 0 0 0 0 0
0 0 0 0 0 0 0
0 0 0 0 0 0 0
0 0 0 0 0 0 0
0 0 0 0 0 0 0
0 0 0 0 0 0 0
0 0 0 0 0 0 0

採用された回答

possibility
possibility 2018 年 2 月 10 日
編集済み: possibility 2018 年 2 月 10 日
I'm guessing it is because of the persistent statement. Quote from the statement explanation:
" If the persistent variable does not exist the first time you issue the persistent statement, it will be initialized to the empty matrix."
If you have the vector as an input to the function, I believe the problem will be solved.
function arrayWithLatestValues = fn_updateArray(newValue,A)
A = [A(2:end) newValue];
arrayWithLatestValues = A;
end

その他の回答 (1 件)

Stephen23
Stephen23 2018 年 2 月 10 日
編集済み: Stephen23 2018 年 2 月 10 日
function outVec = fn_updateArray(newValue)
persistent newVec;
newVec = [newVec(max(1,end-5):end),newValue];
outVec = newVec;
end
and tested:
>> fn_updateArray(1)
ans = 1
>> fn_updateArray(2)
ans =
1 2
>> fn_updateArray(3)
ans =
1 2 3
>> fn_updateArray(4)
ans =
1 2 3 4
>> fn_updateArray(5)
ans =
1 2 3 4 5
>> fn_updateArray(6)
ans =
1 2 3 4 5 6
>> fn_updateArray(7)
ans =
1 2 3 4 5 6 7
>> fn_updateArray(8)
ans =
2 3 4 5 6 7 8
>> fn_updateArray(9)
ans =
3 4 5 6 7 8 9
>>

カテゴリ

Help Center および File ExchangeTesting Frameworks についてさらに検索

製品

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by