ans = 
Does isAlways Make an Unwarranted Assumption that a Variable is real?
Afficher commentaires plus anciens
Define a sym variable
syms v
isAlways can't prove that v is real. Makes sense.
isAlways(in(v,'real'))
Now make an assumption
assume(v > 0); % (1)
Is that assumption a sufficient condition to imply that v is real?
isAlways(in(v,'real')) %(2)
Apparently it does.
But we don't see that v is real in the assumptions
assumptions(v)
as we would if stated explicitly
assumeAlso(v,'real');
assumptions(v)
Now define v as a complex number, which clears all of the assumptions
v = sym(1+1i);
assumptions(v)
Here, v satisfies assumption (1) because symbolic gt only compares the real parts of both sides (though the doc page does not state that explicitly)
isAlways(v > 0)
But satisfying assumption (1) in this case does not imply the truth of condition (2) (thankfully)
isAlways(in(v,'real'))
Seems like the correct way for the software to interpret (1) would be Re(v) > 0, in accordance with the de facto definition of symbolic gt, which would provide no information for evaluating (2).
9 commentaires
Matt J
le 28 Jan 2026
In my opinion, the thing that is wrong is,
>> isAlways( sym(1+1i) > 0)
ans =
logical
1
I never really understood this convention even for numeric variables, but certainly not for symbolic variables.
Paul
le 29 Jan 2026
Matt J
le 29 Jan 2026
That's my opinion, yes.
Paul
le 30 Jan 2026
the cyclist
le 31 Jan 2026
Modifié(e) : the cyclist
le 31 Jan 2026
I guess I would have expected
1 + i > 0
to return NaN, since ordering is not defined on complex numbers.
Matt J
le 31 Jan 2026
x >= x % returns false?
I can see the case for returning true iff the inequality is satisfied with equality.
Réponses (0)
Catégories
En savoir plus sur Operators and Elementary Operations dans Centre d'aide et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!