Best method to clear persistent variables
古いコメントを表示
Hello all,
Recently I came to know that it is not a good idea to use
clear all;
So, I started using
clear variables
Now, I am wondering what I should do to clear only the persistent variables that I use inside my functions. It is absolutely critical that I clear the persistent states of my adaptive algorithms. Is there a way I can clear only persistent variables so that I don't have to re-run the entire script to generate the same data only to be used in a differently initialized algorithm?
Currently, I do this by calling the particular function with a
myfunction('init', init_method)
to clear the persistent variables or re-initialize them. Is it the best way? Your comments will help,
Thank you,
採用された回答
その他の回答 (2 件)
Walter Roberson
2011 年 9 月 26 日
I don't know about the "best" way, but you can clear all the persistent variables in a particular function by asking to clear the function itself; e.g.,
clear myfunction
This will probably have the side effect of removing the stored JIT'd copy of it, causing it to be reparsed the next time it is invoked.
6 件のコメント
Daniel
2014 年 5 月 23 日
This worked perfectly, thanks!
Leo Simon
2014 年 7 月 14 日
I spent many many hours today trying to track down a bug that was clearly related to a failure to clear a persistent variable. One of the most impenetrable bugs I've seen in a long time. Clearing the parent program whose child caused the problem fixed the problem. What an incredibly easy fix to a really nasty problem. Thanks very much!
Puneet Kumar
2018 年 11 月 16 日
Not working for me
Walter Roberson
2018 年 11 月 16 日
Puneet Kumar, please describe the difficulty in more detail.
Gavriel Aminov
2021 年 1 月 6 日
編集済み: Walter Roberson
2022 年 9 月 4 日
@Leo Simon,
Leo, you are right, that the problem must be solved at the parent of the calling function, I thank you.
I just want to stress the point, that I got the desirable result of clearing the persistent variable by the next way of:
clearing the function, the persistent variable is declared in, at the parent function of the calling function.
That is:
function FunParent()
clear FunWithPersistent
[a,b,c]=FunCalling();
end
------------------------------------
function FunCalling()
[x,y]=FunWithPersistent();
end
------------------------------------
function FunWithPersistent()
persistent OurHero
...
end
I'm sorry to say, that it is indeed seems to be a bug of MATLAB...
Dimitrios Patikas
2022 年 9 月 4 日
Thank you
John D'Errico
2022 年 9 月 4 日
You can also use
clear persistent
Which will clear all persistent variables.
カテゴリ
ヘルプ センター および File Exchange で Scope Variables and Generate Names についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!