int
:: addpattern
Добавьте шаблоны для интегрирования
Блокноты MuPAD® будут демонтированы в будущем релизе. Используйте live скрипты MATLAB® вместо этого.
Live скрипты MATLAB поддерживают большую часть функциональности MuPAD, хотя существуют некоторые различия. Для получения дополнительной информации смотрите, Преобразовывают Notebook MuPAD в Live скрипты MATLAB.
int::addpattern(pat
,x
,res
, <[var, …], <[cond, …]>
>) int::addpattern(pat
,x = u .. v
,res
, <[var, …], <[cond, …]>
>)
int::addpattern(pat, x, res)
учит int
использовать.
int::addpattern(pat, x=u..v, res)
преподает int
это.
Значительная часть компьютерной алгебры способности к интегрированию системы происходит от математического сопоставления с образцом. Сопоставитель MuPAD® может быть расширен во времени выполнения с int::addpattern
.
Если далее ограниченный условиями в пятом аргументе, переменные шаблона, перечисленные в четвертом аргументе, не представляют произвольные выражения MuPAD, не содержащие переменную интегрирования, x
.
Любой идентификатор может использоваться в качестве переменной интегрирования в вызове int::addpattern
, и любой идентификатор может использоваться в вызовах int
. Они не должны быть идентичными.
Для определенного интегрирования каждое связанное интегрирование является или арифметическим выражением, которое может содержать переменные шаблона или идентификатор, который может использоваться в качестве переменной в терминах условия и результате.
Пользователи могут включать дополнительные условия путем предоставления дополнительных аргументов. Эти условия, а также результат, защищены от преждевременной оценки, т.е. не необходимо записать hold( _not @ iszero )(a^2-b)
, простой not iszero(a^2-b)
достаточен.
Различие между not iszero(a^2-b)
и a^2-b <> 0
, когда дали как условие - то, что последний учитывает asuumptions на идентификаторах, с которыми сталкиваются, в то время как первое не делает. Cf. Пример 4.
Шаблоны, введенные int::addpattern
, также используются в рекурсивных вызовах интегратора и автоматически расширены, чтобы включать простые приложения интегрирования заменой переменных. Cf. Пример 1.
Шаблоны, добавленные int::addpattern
, не заменяются более поздними вызовами, они остаются активными. int
выбирает самый простой найденный результат. Нет никакого способа удалить шаблоны, однажды добавленные. Cf. Пример 5.
Вызов int::addpattern
изменяет выражения, возвращенные будущими вызовами int
. Кроме того, о помнивших значениях предыдущих вызовов int
забывают.
Не удивительно, MuPAD не знает, как интегрировать функциональный foo:
int(foo(x), x)
Мы добавляем шаблон для этой функции:
int::addpattern(foo(x), x, foo(x)^x)
int(foo(x), x)
Обратите внимание на то, что этот шаблон также используется косвенно:
int(x*foo(x^2), x)
intlib::byparts(int(foo(x)*sin(x), x), foo(x))
Определенные интегралы могут быть добавлены так же. Обратите внимание на то, что результат не зависит от переменной интегрирования:
int::addpattern(wilma(x), x=0..1, fred)
int(wilma(x), x=0..1)
Вышеупомянутый шаблон не будет совпадать с интегралами различным границам интегрирования:
int(wilma(x), x=0..2)
Границы интегрирования могут также содержать переменные, происходящие в шаблоне или результате:
int::addpattern(wilma(x, a), x=0..a, fred(a), [a])
int(wilma(x,2), x=0..2)
Переменная интегрирования в вызове int::addpattern
не должна быть эквивалентной используемый в вызове интегрирования:
int::addpattern(1/(t^2*(ln(t)+1)), t, -E*Ei(ln(t)+1))
int(cos(y)/sin(y)^2/(ln(sin(y)) + 1), y)
Условия проверяются с помощью is
и поэтому реагируют на предположения:
int::addpattern(1/(a+b*tan(x)^2), x, x/(a-b) - b/(2*(a-b)*sqrt(-a*b)) * ln((b*tan(x)-sqrt(-a*b)) /(b*tan(x)+sqrt(-a*b))), [a, b], [a*b < 0])
int::addpattern(1/(a+b*tan(x)^2), x, x/(a-b) - b/((a-b)*sqrt(a*b)) * arctan(b*tan(x)/ sqrt(a*b)), [a, b], [a*b > 0])
int(1/(3+a*tan(x)^2), x) assuming a > 0
int(1/(3+a*tan(x)^2), x) assuming a < 0
Если или условия не удовлетворены или замена значениями в урожаи результата ошибка, шаблон проигнорирован. В шаблонах выше, случай a = b вызывает деление на нуль. Нет никакой потребности включать условие принять меры против этого случая, тем не менее, MuPAD просто вычисляет интеграл, как обычно:
int(1/(3+3*tan(x)^2), x)
Примите, что мы добавили следующий шаблон:
int::addpattern(f(x), x, f(x)^x):
Теперь, f является довольно родовым названием, таким образом, мы могли позже рассматривать его как различную функцию и попытаться переопределить ее антипроизводную:
int::addpattern(f(x), x, 1/sin(f(x))):
int(f(x), x)
Что произошло?
Как оказалось, int::addpattern
просто добавил новый шаблон, и начиная с f (x) x рассматривается “более простым”, чем, результат первого добавленного шаблона все еще возвращен.
Это поведение разумно, поскольку может быть несколько способов представлять антипроизводную и в зависимости от значений параметров, один или другой может быть предпочтительным:
int::addpattern(f(a, x), x, x*f1(a, x^a), [a]): int::addpattern(f(a, x), x, x*f2(a, x^(1-a)), [a]):
int(f(0, x), x)
int(f(1, x), x)
int(f(a, x), x)
|
Шаблон, чтобы соответствовать: арифметическое выражение в |
|
Переменная интегрирования: |
|
Интервал интегрирования для определенного интеграла: арифметические выражения или идентификаторы. |
|
Антипроизводный шаблон: арифметическое выражение |
|
“переменные шаблона”: заполнители в |
|
Условия на переменных шаблона |
Объект типа DOM_NULL