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ложь, или UNKNOWN

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

Функции MuPAD