Comparison of symbolic expressions

20 vues (au cours des 30 derniers jours)
reincornator
reincornator le 16 Fév 2021
Commenté : reincornator le 16 Fév 2021
Welcome.
A certain set of symbolic calculations is performed in two different ways. After that, you need to compare the results (we want them to be equal). But using " eq " or "= = " you can't get the desired result. You can use a trick and subtract or divide the results, but this method does not always work correctly.
Is there a function for comparing symbolic calculations?
Example:

Réponses (2)

KSSV
KSSV le 16 Fév 2021
syms a b
c = a+b ;
d = b+a ;
isequal(c,d)
ans = logical
1
  2 commentaires
John D'Errico
John D'Errico le 16 Fév 2021
syms theta
isequal(sin(theta)^2 + cos(theta)^2,1)
ans = logical
0
Even worse, we see that while rewrite can seemingly improve this first counter-example, isequal still fails.
rewrite(sin(theta)^2 + cos(theta)^2,'sin')
ans = 
1
isequal(rewrite(sin(theta)^2 + cos(theta)^2,'sin'),1)
ans = logical
0
The reason being that 1 and 1 are counter-intuitively not always seen to be equal, at least by isequal.
For this one, a carefully applied expand would have helped.
syms x
isequal((x+1)^3,x^3 + 3*x^2 + 3*x + 1)
ans = logical
0
reincornator
reincornator le 16 Fév 2021
isequal(expand((x+1)^3),x^3 + 3*x^2 + 3*x + 1)

Connectez-vous pour commenter.


Walter Roberson
Walter Roberson le 16 Fév 2021
isAlways(c == d, 'Unknown', false)
  1 commentaire
reincornator
reincornator le 16 Fév 2021
Modifié(e) : reincornator le 16 Fév 2021
Thanks!
syms a b c
d=c*(a+b);
e=c*b+c*a;
j=a*b;
isAlways(e == d, 'Unknown', 'false')
isAlways(j == d, 'Unknown', 'false')

Connectez-vous pour commenter.

Produits


Version

R2020a

Community Treasure Hunt

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

Start Hunting!

Translated by