is there any way to pause the code if there exist an imaginary variable?
15 visualizzazioni (ultimi 30 giorni)
Mostra commenti meno recenti
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?
Risposta accettata
Walter Roberson
il 3 Gen 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
0 Commenti
Più risposte (2)
dpb
il 3 Gen 2022
Modificato: dpb
il 3 Gen 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 Commenti
Walter Roberson
il 3 Gen 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.
Image Analyst
il 3 Gen 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
0 Commenti
Vedere anche
Categorie
Scopri di più su Debugging and Analysis in Help Center e File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!