Symbolic Math Toolbox で定義された2つの数式が等しいか、iequal で確認すると、正しく評価できない場合があるのはなぜですか?
2 views (last 30 days)
Show older comments
MathWorks Support Team
on 6 Aug 2021
Edited: MathWorks Support Team
on 14 Nov 2025 at 5:22
Symbolic Math Toolbox の isequal 関数を使って式が等しいか確認した時に、意図しない結果が得られる場合があります。
>> syms x y
>> isequal(x*y+x, x*(y+1))
ans =
logical
0
Accepted Answer
MathWorks Support Team
about 8 hours ago
Edited: MathWorks Support Team
on 14 Nov 2025 at 5:22
数学的な等価性を確認したい場合は、isAlways 関数を使用してください。
>> isAlways(x*y+x==x*(y+1))
ans =
logical
1
一般に、シンボリック式において等価性(equality)の2つの概念があります。
1. 数学的等価2 つの式が、それぞれ構成されるシンボル変数が取り得る値に対して、同じ結果を出力する場合、数学的に等価です。数学的等価性は、変数と数学変換に関する仮定を考慮に入れます。例えば、式 'x' および 'sqrt(x^2)' は、一般的に数学的に等価ではありません。ただし、x が負でないと仮定した場合は、数学的に等価です。
>> assume(x >= 0)
式間の数学的等価性をテストするには、'isAlways' 関数を使用する必要があります。
・isAlways
'isAlways' 関数は条件に対して動作し、入力変数の可能なすべての値に対して条件が常に真であることをテストします。
>> isAlways(expr1 == expr2)
% or
>> isAlways(expr1-expr2==0)
なお、logical 関数は、変数の仮定や数学的変換を常に考慮に入れるわけではないことを除いて、'isAlways' 関数に似ています。'論理' 関数の詳細については、次のリンクを参照してください。
・logical
2. 構造的等価性2 つの式は、再帰的に同一である場合、構造的に等価です。構造的な等価性をテストする際、記号式は数学的な意味を持たない単純な MATLAB オブジェクトとして扱われます。2 つの MATLAB シンボリック オブジェクトが同じ属性と同一の子式を持つ場合、構造的に等しくなります。
'isequal' および 'isequaln' 関数は、数学的等価性ではなく、構造的等価性をテストします。そのため、上述の例では、式が数学的に等価であっても false を返します。
・isequal 関数
0 Comments
More Answers (0)
See Also
Categories
Find more on 仮定 in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!