is there any way to pause the code if there exist an imaginary variable?
10 次查看(过去 30 天)
显示 更早的评论
I want matlab to stop if an imaginary number produced any where in the code. I can make an if condition for specific variable but is it possible to make code stop on every where imaginary number is made?
采纳的回答
Walter Roberson
2022-1-3
At any particular location, you can insert a conditional breakpoint with the condition
any([whos().complex])
However, it is not possible to put in a breakpoint that stops as soon as any variable is assigned a complex value, and it is not possible to put in a breakpoint that stops as soon as any expression is assigned a complex value.
There is no call such as dbstop if complex
0 个评论
更多回答(2 个)
dpb
2022-1-3
编辑:dpb
2022-1-3
While I've not tried it, the following should work if you can arrange the conditions needed. The first one may be the kicker in that the variable w will only know of those variables that exist in the workspace when it is executed...any that come later won't be known.
Perhaps preallocation of everybody would serve -- something like having an
IMPLICIT NONE
statement in a Fortran code module; require a declaration for everything of interest. One would presume things like loop indices, etc., would not be of interest/need to be covered.
w=whos; % create the variable in your function--it will have to execute after all variables exist
Then set the expression as
dbstop in file if any([w.complex])
The real kicker is, of course, that you have to have the variable w recreated continuously -- it won't do for it to be static.
2 个评论
Walter Roberson
2022-1-3
dbstop in FUNCTIONNAME if any([whos().complex])
or
dbstop in FILENAME if any([whos().complex])
both have the effect of putting the condition on the first executable line of the function.
Image Analyst
2022-1-3
I don't think anywhere within the program, but you might be able to check certain specific variables at certain specific locations in the code, like
squareRoot = sqrt(someNumber); % Some operation that might produce a complex number.
% See if it's complex.
if imag(squareRoot) ~= 0
% If the imaginary part is not zero, then it's complex, and we need to warn the user.
uiwait(warndlg('Hey!!! The "squareRoot" variable is complex!!!'));
end
0 个评论
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Debugging and Analysis 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!