testeq

Проверяйте математическую эквивалентность выражений

Блокноты MuPAD® будут демонтированы в будущем релизе. Используйте live скрипты MATLAB® вместо этого.

Live скрипты MATLAB поддерживают большую часть функциональности MuPAD, хотя существуют некоторые различия. Для получения дополнительной информации смотрите, Преобразовывают Notebook MuPAD в Live скрипты MATLAB.

Синтаксис

testeq(ex1, options)
testeq(ex1, ex2, options)

Описание

testeq(ex1, ex2) проверяет, эквивалентны ли выражения ex1 и ex2 математически.

testeq(ex1, ex2) возвращает TRUE, если различие ex1 - ex2 может быть упрощено до нуля.

testeq возвращает FALSE, если ex1 и ex2 достигают различных значений по крайней мере для одного выбора переменных, содержимых в них.

По умолчанию testeq выполняет пять случайных тестов. Если случайным образом выбранные значения переменных противоречивы с предположениями на этих переменных, или тест возвращает значение undefined, функция testeq выполняет дополнительный тест. Количество дополнительных тестов не может превысить количество начальных тестов. По умолчанию максимальное общее количество тестов равняется 10. Смотрите Пример 4.

Если эквивалентность ex1 и ex2 не может быть решена, testeq возвращает UNKNOWN.

Если только одно выражение передается testeq, оно проверяется, эквивалентно ли это выражение нулю.

testeq использует Simplify(ex1 - ex2) и is(ex1 - ex2 = 0), чтобы определить его результат. Результат UNKNOWN может быть вызван слабыми местами Simplify и is.

Используя опции, процесс упрощения может быть сделан более сильным за счет увеличенного времени выполнения.

Примеры

Пример 1

Проверяйте математическую эквивалентность выражений:

testeq(sin(x)^2, 1 - cos(x)^2)

testeq(sin(2*x), 2*sin(x)*cos(x))

testeq((cos(a) + sin(a))^2, 2*(cos(PI/4 - a)^2))

В порядке быть эквивалентными, два выражения должны быть эквивалентными для всех значений, которых могут достигнуть их переменные. Для определенных значений параметра a следующие два выражения эквивалентны, но для других значений они не; поэтому, они не эквивалентны:

testeq((cos(a) + sin(a))^2, 3*(cos(PI/4 - a)^2))

Пример 2

Применение expand и rewrite к выражению всегда производит эквивалентное выражение. Однако с настройкой по умолчанию шагов 100 для внутренней процедуры упрощения, эквивалентность не распознана в следующем примере:

f:= exp(arcsin(I*sin(x))):
g:= rewrite(expand(f), ln):
testeq(f, g)

После шагов 1000, однако, выражения распознаны как являющийся эквивалентным:

testeq(f, g, Steps = 1000);
delete f, g:

Пример 3

При попытке доказать эквивалентность двух выражений, команда testeq запускает случайные тесты прежде, чем применить IgnoreAnalyticConstraints. Если тесты для случайных значений идентификаторов показывают, что выражения не эквивалентны, testeq игнорирует опцию IgnoreAnalyticConstraints и возвращает FALSE:

testeq(x^(ln(a))*x^(ln(b)) = x^(ln(a*b)),
               IgnoreAnalyticConstraints)

Если для данного количества попыток случайные тесты не находят, что неравенство между выражениями, testeq применяет опцию IgnoreAnalyticConstraints:

testeq(ln(a) + ln(b) = ln(a*b), IgnoreAnalyticConstraints)

По умолчанию случайные тесты проверяют равенство выражений для пяти случайных множеств значений идентификаторов. Увеличение числа попыток может доказать неравенство:

testeq(ln(a) + ln(b) = ln(a*b), NumberOfRandomTests = 10,
                                IgnoreAnalyticConstraints)

Пример 4

Когда testeq выполняет тесты, он учитывает предположения на переменных, что вы задаете:

testeq(x, abs(x)) assuming x > 0

Если testeq выбирает значения переменных, которые противоречивы с предположениями на этих переменных, он выполняет дополнительный тест. Количество тестов не может превысить 2n, где n является исходным количеством тестов, заданных опцией NumberOfRandomTests. Если testeq выполняет тесты 2n, и все значения переменных противоречивы с предположениями на переменных, testeq возвращает UNKNOWN:

testeq(x, abs(x)) assuming x^2 + x + 7 = x^13 + 11

Для этого конкретного предположения MuPAD® не может найти, что выражение закрытой формы заменяет x:

solve(x^2 + x + 7 = x^13 + 11, x)

Поэтому увеличение числа тестов не помогает testeq решить, эквивалентны ли выражения:

testeq(x, abs(x), NumberOfRandomTests = 100)
            assuming x^2 + x + 7 = x^13 + 11

Параметры

ex1, ex2

Любые выражения MuPAD

Опции

Steps

Опция, заданная как Steps = n

Эта опция непосредственно передается Simplify и решает, что максимальное количество шагов допускало внутренний процесс упрощения. Значением по умолчанию n является 100. Увеличение числа шагов может дать вам более простой результат, часто по затратам на увеличенное время выполнения. Для получения дополнительной информации смотрите страницу справки Simplify.

Seconds

Опция, заданная как Seconds = t

Эта опция непосредственно передается Simplify и устанавливает ограничение по времени t в секундах для внутреннего процесса упрощения. Настройкой по умолчанию является infinity, т.е. процесс упрощения не остановится из-за ограничения времени, но из-за другого внутреннего критерия остановки. См. документацию Simplify для деталей.

RuleBase

Опция, заданная как RuleBase = base

Эта опция непосредственно передается Simplify и определяет основу правила, которая используется для внутреннего процесса упрощения. См. документацию Simplify для деталей.

Значением по умолчанию base является Simplify.

Опытный пользователь может задать ее собственную основу правила (см. Simplify). Это позволяет конструкцию специализированных и быстрых тестов для специальных классов выражений.

NumberOfRandomTests

Опция, заданная как NumberOfRandomTests = n

Эта опция определяет число раз, testeq пытается опровергнуть эквивалентность ex1 и ex2 путем включения некоторых случайных значений для всех идентификаторов.

Значение по умолчанию n равняется 5. Если случайным образом выбранные значения переменных противоречивы с предположениями на этих переменных, или тест возвращает значение undefined, функция testeq выполняет дополнительный тест. Общее количество тестов не превышает 2n. Смотрите Пример 4.

IgnoreAnalyticConstraints

Эта опция применяет чисто алгебраические упрощения в выражениях ex1 и ex2. Для списка правил см. документацию Simplify. Эти правила упрощения не обычно допустимы.

Обратите внимание на то, что случайные тесты имеют более высокий приоритет, чем IgnoreAnalyticConstraints. При попытке доказать эквивалентность двух выражений, команда testeq запускает случайные тесты прежде, чем применить опцию IgnoreAnalyticConstraints. Если случайные тесты доказывают, что выражения не эквивалентны, testeq возвращает FALSE значения. Смотрите Пример 3.

Возвращаемые значения

TRUE, FALSE или UNKNOWN

Смотрите также

Функции MuPAD