is there any way to pause the code if there exist an imaginary variable?

18 Ansichten (letzte 30 Tage)
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?

Akzeptierte Antwort

Walter Roberson
Walter Roberson am 3 Jan. 2022
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

Weitere Antworten (2)

dpb
dpb am 3 Jan. 2022
Bearbeitet: dpb am 3 Jan. 2022
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 Kommentare
Walter Roberson
Walter Roberson am 3 Jan. 2022
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.
dpb
dpb am 4 Jan. 2022
Good catch, Walter...shoulda' thunk of it...

Melden Sie sich an, um zu kommentieren.


Image Analyst
Image Analyst am 3 Jan. 2022
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

Kategorien

Mehr zu Debugging and Analysis finden Sie in Help Center und File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by