Мне часто нужно проверять, если expr1==expr2
, где проверка на символическое равенство трудна, но достаточна числовая проверка
Чтобы справиться с такими случаями, было бы замечательно, чтобы TildeTilde
работал как Equal
но вместо проверки символьного равенства он будет заменять неизвестные числовыми значениями и проверять числовое равенство в нескольких точках.
Неизвестные - это вещи, которые "выглядят как" переменные в выражении.Те, о которых я могу думать, имеют форму x
, x[1,2]
и Subscript[x,2,3]
.Любые советы приветствуются!
edit
обычно я делаю что-то вроде ниже, но это требует указания переменных, иногда требует изменения допуска Чопа, и "10 образцов" кажется произвольным.Идеальным тестером была бы функция, которая работает как Equals
и гарантирует значимые False
ответы.(чтобы дополнить Equals
, который имеет содержательные True
ответы)
approxEqual[expr1_, expr2_, vars_] :=
Chop[(expr1 - expr2 /. Thread[vars -> #]) & /@
RandomReal[{-1, 1}, {10, Length[vars]}]] == Table[0, {10}];
expr1 = 1/Sqrt[2] Log[Cosh[q + x/Sqrt[2]] Sech[q - x/Sqrt[2]]];
expr2 = Sqrt[2] ArcTanh[Tanh[q] Tanh[x/Sqrt[2]]];
approxEqual[expr1, expr2, {q, x}]
В качестве дополнительного примечания, очевидно, Maple использует этот алгоритм для такого тестирования на равенство