rationalize
Преобразуйте выражение в рациональное выражение
Блокноты MuPAD® будут демонтированы в будущем релизе. Используйте live скрипты MATLAB® вместо этого.
Live скрипты MATLAB поддерживают большую часть функциональности MuPAD, хотя существуют некоторые различия. Для получения дополнительной информации смотрите, Преобразуют Notebook MuPAD в Live скрипты MATLAB.
rationalize(object
, options
)
rationalize(object)
преобразовывает выражение object
в эквивалентное рациональное выражение, заменяя нерациональные подвыражения недавно сгенерированными переменными.
По умолчанию рациональное выражение является выражением, которое содержит только суммы, продукты, степени с целочисленными экспонентами, целыми числами, рациональными числами и идентификаторами как подвыражения.
rationalize
функция возвращает последовательность (rat, subsSet)
. Рационализированное выражение rat
содержит новые переменные. Набор замен subsSet
выражает новые переменные старыми единицами.
Если исходное выражение содержит подвыражения, rationalize
функция может рационализировать или заменить подвыражения или сохранить их в их исходной форме. Используйте опции DescendInto
, ReplaceType
, и StopOn
управлять действием rationalize
берет для конкретных типов подвыражений.
Если FindRelations = ["exp", "_power", "sin"]
, rationalize
функция обнаруживает максимальное количество алгебраических зависимостей.
Если вы вызываете rationalize
с любой комбинацией следующих трех опций противоречия функция выбирает опцию с помощью следующих приоритетов: ReplaceType
, StopOn
, DescendInto
. Например, если вы задаете тот же тип подвыражения с StopOn
и DescendInto
, rationalize
функционируйте использует только StopOn
опция для подвыражений заданного типа. Если вы комбинируете какую-либо из этих опций с ReplaceType
опция, rationalize
использование только ReplaceType
опция.
rationalize
работает с одним арифметическими выражениями, списками и наборами выражений:
rationalize(2*sqrt(3) + 0.5*x^3)
rationalize([(x - sqrt(2))*(x^2 + sqrt(3)), (x - sqrt(2))*(x - sqrt(3))])
Используйте ApproximateFloats
опция, чтобы заменить все числа с плавающей запятой на рациональные числа:
rationalize([0.4, 0.333, 0.74], ApproximateFloats)
Если вы используете оба ApproximateFloats
и ReplaceTypes
опции, ApproximateFloats
не применяется к типам подвыражений, заданных в ReplaceTypes
:
rationalize(0.4*x^2 + sin(0.33/x), ApproximateFloats, ReplaceTypes={DOM_FLOAT})
Вместо того, чтобы задать значение ReplaceTypes
как последовательность типов, можно задать его как функцию. Функция должна возвратить TRUE
или FALSE
в результате. Например, рационализируйте то же выражение. На этот раз используйте функциональный F
чтобы задать тип подвыражений, которые вы хотите заменить переменными:
F := X -> testtype(X, DOM_FLOAT): rationalize(0.4*x^2 + sin(0.33/x), ApproximateFloats, ReplaceTypes = F)
По умолчанию, rationalize
рационализирует суммы, продукты, основы целочисленных степеней, списков и наборов:
rationalize(ln(sin(x)^2 + cos(x)*exp(x)))
DescendInto
опция позволяет вам задать типы подвыражений, которые вы хотите рационализировать. Каждый тип может быть доменным типом, строка, как возвращено функциональным type
или Текстовый объект. Обратите внимание на то, что DescendInto
перезаписывает типы по умолчанию с типами, которые вы задаете:
rationalize(ln(sin(x)^2 + cos(x)*exp(x)), DescendInto = {"ln"})
Если вы хотите добавить новые типы подвыражений к единицам по умолчанию, задайте значение DescendInto
как процедура, которая задает все необходимые типы явным образом. Процедура должна возвратить TRUE
или FALSE
:
F := proc(X) begin hastype(X, {"_plus", "_mult", DOM_SET, DOM_LIST, "ln"}) or (hastype(X, "_power") and hastype(op(X, 2), DOM_INT)) end: rationalize(ln(sin(x)^2 + cos(x)*exp(x)), DescendInto = F)
Используйте MinimalPolynomials
опция, чтобы найти минимальные полиномы иррациональных выражений:
rationalize(x^(7/6) + x^(3/2), MinimalPolynomials)
Используйте Prefix = s
, где s
строка, чтобы задать префикс для сгенерированных переменных (префиксом по умолчанию является X
):
rationalize(x^(7/6) + x^(3/2), Prefix = "ABC")
Используйте ReplaceHardToEval
опция, чтобы заменить пределы, суммы и интегралы со сгенерированными переменными. Выражения с пределами, суммами и интегралами имеют тенденцию быть наиболее в вычислительном отношении дороги:
rationalize(sum(exp(x)/(x^2 + 1), x) + limit(sin(cos(1/x))*cos(1/x), x), ReplaceHardToEval)
По умолчанию, rationalize
избегает рационализации целых чисел, рациональных чисел и идентификаторов:
rationalize(2*sqrt(3) + 0.5*x^3)
DescendInto
опция позволяет вам избежать рационализации конкретных типов подвыражений. Каждый тип может быть задан как доменный тип, строка, как возвращено функциональным type
, или Текстовый объект. Например, рационализируйте то же выражение, оставив подвыражение x^3
(типа "_power"
) неизменный:
rationalize(2*sqrt(3) + 0.5*x^3, StopOn = {"_power"})
Рационализируйте то же выражение включая все подвыражения. Сохраните числа с плавающей запятой, целые числа и идентификаторы (не заменяйте их на сгенерированные переменные):
rationalize(2*sqrt(3) + 0.5*x^3, StopOn = {DOM_FLOAT, DOM_INT, DOM_IDENT})
Обратите внимание на то, что StopOn
перезаписывает типы по умолчанию с типами, которые вы задаете. Если вы хотите добавить новые типы подвыражений к единицам по умолчанию, задайте все типы явным образом:
rationalize(2*sqrt(3) + 0.5*x^3, StopOn = {DOM_INT, DOM_IDENT, DOM_RAT, DOM_FLOAT})
rationalize(2*sqrt(3) + 0.5*x^3, StopOn = {DOM_INT, DOM_IDENT, DOM_RAT, DOM_FLOAT, "_power"})
StopOn
опция также может принять функцию как свое значение. Функция должна возвратить TRUE
или FALSE
. Например, используйте сгенерированные переменные, чтобы заменить только подвыражения, которые содержат sin
. Сохраните все другие подвыражения в целости:
F := X -> not hastype(X, "sin"): rationalize(sin(x^2) + x^3 + exp(x) + 1/x, StopOn = F)
Используйте FindRelations
опция, чтобы обнаружить алгебраические зависимости между экспоненциалами:
rationalize(exp(x/2) + exp(x/3), FindRelations = ["exp"])
Обнаружьте алгебраические зависимости для различных степеней той же основы путем определения типа "_power"
:
rationalize(x^(3/2) + x^(7/4), FindRelations = ["_power"])
Обнаружьте алгебраические зависимости для тригонометрических функций путем определения типа "sin"
или "cos"
:
rationalize(sin(x) + cos(x), FindRelations = ["sin"]); rationalize(sin(x)^3 + cos(x)^3, FindRelations = ["cos"])
Для вложенных экспоненциалов используйте Recursive
опция, чтобы получить список замен:
rationalize(exp(exp(x)), FindRelations = ["exp"], Recursive)
Опция также работает на тригонометрические функции:
rationalize(sin(sin(x)), FindRelations = ["sin"], Recursive)
ShowDependencies
опция показывает все исходные переменные, от которых зависит каждая сгенерированная переменная:
rationalize(sin(x)^3, ShowDependencies)
|
Любой объект MuPAD® |
|
Когда вы используете |
|
Когда вы используете
По умолчанию, |
|
Когда вы используете |
|
Когда вы используете |
|
Используйте |
|
Когда вы используете |
|
Когда вы используете |
|
Когда вы используете
Эта опция позволяет вам задавать и избегать большинства дорогих рационализаций для своего конкретного выражения. Если вы используете эту опцию в сочетании с В качестве альтернативы задайте значение этой опции как функция, которая возвращает |
|
Когда вы используете |
|
Когда вы используете
По умолчанию, Если |
|
Когда вы используете |
Последовательность, состоящая из рационализированного объекта и набор уравнений замены. Если вы используете Recursive
опция, rationalize
функция возвращает список уравнений замены вместо набора. Если вы используете MinimalPolynomials
опция, возвращенное значение имеет третий аргумент: минимальные полиномы.