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.
Используя опции, процесс упрощения может быть сделан более сильным за счет увеличенного времени выполнения.
Проверяйте математическую эквивалентность выражений:
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))
![]()
Применение 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:
![]()
При попытке доказать эквивалентность двух выражений, команда 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)![]()
Когда 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![]()
|
Любые выражения MuPAD |
|
Опция, заданная как Эта опция непосредственно передается |
|
Опция, заданная как Эта опция непосредственно передается |
|
Опция, заданная как Эта опция непосредственно передается Значением по умолчанию Опытный пользователь может задать ее собственную основу правила (см. |
|
Опция, заданная как Эта опция определяет число раз Значение по умолчанию |
|
Эта опция применяет чисто алгебраические упрощения в выражениях Обратите внимание на то, что случайные тесты имеют более высокий приоритет, чем |
TRUE, FALSE или UNKNOWN