rectform
Прямоугольная форма сложного выражения
Блокноты MuPAD® будут демонтированы в будущем релизе. Используйте live скрипты MATLAB® вместо этого.
Live скрипты MATLAB поддерживают большую часть функциональности MuPAD, хотя существуют некоторые различия. Для получения дополнительной информации смотрите, Преобразуют Notebook MuPAD в Live скрипты MATLAB.
rectform(z
)
rectform(z)
вычисляет прямоугольную форму сложного выражения z, т.е. это разделяет z в z = ℜ (z) + i ℑ (z).
rectform(z)
попытки разделить z
в его действительную и мнимую часть и возвратить z
в форме z = ℜ (z) + i ℑ (z).
rectform
работает рекурсивно, т.е. это сначала пытается разделить каждое подвыражение z
в его действительную и мнимую часть и затем занимается z
в целом.
Используйте Re
и Im
извлекать действительные и мнимые части, соответственно, от результата rectform
. Смотрите пример 1.
rectform
более мощно, чем прямое приложение Re
и Im
к z
. Однако обычно это намного медленнее. Для постоянных арифметических выражений поэтому рекомендуется использовать функции Re
и Im
непосредственно. Смотрите Пример 2.
Основное использование rectform
для символьных выражений, и свойства идентификаторов учтены (см. assume
). Идентификатор без любого свойства принят, чтобы быть комплексный оцененный. Смотрите Пример 3.
Если z
массив, список или набор, затем rectform
применяется к каждой записи z
.
Если z
hfarray, затем rectform
возвращает z
неизменный.
Если z
полином или последовательное расширение, типа Series::Puiseux
или Series::gseries
, затем rectform
применяется к каждому коэффициенту z
.
Смотрите пример 5.
Результат r := rectform(z)
элемент domain rectform
. Такой доменный элемент состоит из трех операндов, удовлетворяя следующему равенству: z = op(r, 1) + I*op(r, 2) + op(r, 3)
. Первые два операнда являются действительными арифметическими выражениями, и третий операнд является выражением, которое не может быть разделено в его действительную и мнимую часть.
Иногда rectform
не может вычислить необходимое разложение. Затем это все еще пытается возвратить некоторую частичную информацию путем извлечения как можно больше из действительной и мнимой части z
. Извлеченные части хранятся в первых двух операндах, и третий операнд содержит остаток, где никакая дальнейшая экстракция не возможна. В крайних случаях первые два операнда могут даже быть нулем. Пример 6 иллюстрирует некоторые возможные случаи.
Арифметические операции с элементами доменного типа rectform
возможны. Результатом арифметической операции является снова элемент этой области (см. Пример 4).
Функции Most MuPAD®, обрабатывающие арифметические выражения (например, expand
, normal
упрощение
и т.д.), может быть применен к элементам типа rectform
. Они действуют на каждый из этих трех операндов индивидуально.
Используйте expr
преобразовывать результат rectform
в элемент основной области. Смотрите Пример 4.
Функция чувствительна к свойствам набора идентификаторов через assume
. Смотрите пример 3.
Прямоугольная форма sin (z) для комплексных чисел z:
delete z: r := rectform(sin(z))
Действительное и мнимая часть могут быть извлечены можно следующим образом:
Re(r), Im(r)
Сопряженное комплексное число r
может быть получен непосредственно:
conjugate(r)
Действительное и мнимая часть постоянного арифметического выражения могут быть определены функциями Re
и Im
, как в следующем примере:
Re(ln(-4)) + I*Im(ln(-4))
На самом деле они работают намного быстрее, чем rectform
. Однако им не удается вычислить действительное и мнимую часть произвольных символьных выражений, такой что касается термина e i sin (z):
delete z: f := exp(I*sin(z)): Re(f), Im(f)
Функциональный rectform
более мощно. Это может разделить выражение выше в его действительную и мнимую часть:
r := rectform(f)
Теперь мы можем извлечь действительное и мнимую часть f
:
Re(r)
Im(r)
Идентификаторы без свойств считаются комплексными переменными:
delete z: rectform(ln(z))
Однако можно влиять на поведение rectform
путем присоединения свойств к идентификаторам. Например, если z принимает, что только действительные отрицательные величины, действительное и мнимая часть значительно упрощают:
assume(z < 0): rectform(ln(z))
Мы вычисляем прямоугольную форму комплексной переменной x:
delete x: a := rectform(x)
Затем мы делаем то же самое для действительной переменной y:
delete y: assume(y, Type::Real): b := rectform(y)
domtype(a), domtype(b)
Мы сохранили результаты, т.е. элементы доменного типа rectform
, в этих двух идентификаторах a
и b
. Мы вычисляем сумму a
и b
, который снова имеет доменный тип rectform
, т.е. это уже splitted в его действительную и мнимую часть:
c := a + b
domtype(c)
Результат арифметической операции между элементом доменного типа rectform
и произвольное арифметическое выражение имеет доменный тип rectform
также:
delete z: d := a + 2*b + exp(z)
domtype(d)
Используйте функциональный expr
преобразовывать элемент доменного типа rectform
в элемент основной области:
expr(d)
domtype(%)
rectform
также работает на полиномы и последовательные расширения, а именно, индивидуально на каждом коэффициенте:
delete x, y: p := poly(ln(-4) + y*x, [x]): rectform(p)
Точно так же rectform
работает на списки, наборы или массивы, где это применяется к каждой отдельной записи:
a := array(1..2, [x, y]): rectform(a)
hfarrays возвращены неизменные:
a := hfarray(1..2, [1.0, 2.0]): rectform(a)
Обратите внимание на то, что rectform
не работает непосредственно на другие типы основных данных. Например, если входное выражение является таблицей арифметических выражений, то rectform
отвечает сообщением об ошибке:
a := table("1st" = x, "2nd" = y): rectform(a)
Error: Arithmetical expression expected. [rectform::new]
Используйте map
применять rectform
к операндам такого объекта:
map(a, rectform)
Этот пример иллюстрирует значение трех операндов объекта, возвращенного rectform
.
Мы запускаем с выражения x + sin (y), для который rectform
может вычислить полное разложение в действительную и мнимую часть:
delete x, y: r := rectform(x + sin(y))
Первые два операнда r
действительная и мнимая часть выражения, и третий операнд 0:
op(r)
Затем мы считаем выражение x + f (y), где f (y) представляет неизвестную функцию в комплексной переменной. rectform
может разделить x в его действительную и мнимую часть, но не удается сделать это для подвыражения f (y):
delete f: r := rectform(x + f(y))
Первые два операнда возвращенного объекта являются действительным и мнимой частью x, и третий операнд является остатком f (y), для который rectform
не смог извлечь любую информацию о ее действительной и мнимой части:
op(r)
Re(r), Im(r)
Иногда rectform
не может извлечь любую информацию о действительной и мнимой части входного выражения. Затем третий операнд содержит целое входное выражение, возможно в переписанной форме, из-за рекурсивного режима работы rectform
. Первые два операнда 0. Вот пример:
r := rectform(sin(x + f(y)))
op(r)
Re(r), Im(r)
Опытные пользователи могут расширить rectform
к их собственным специальным математическим функциям (см. раздел “Backgrounds” ниже). С этой целью встройте свою математическую функцию в функцию environmentf
и реализуйте поведение rectform
для этой функции как "rectform"
паз функциональной среды.
Если подвыражение формы f(u,..)
происходит в z
, затем rectform
издает приказ f::rectform(u,..)
к стандартной программе паза, чтобы определить прямоугольную форму f(u,..)
.
Для рисунка мы показываем, как это работает на синусоидальную функцию. Конечно, функциональная среда sin
уже имеет "rectform"
паз. Мы вызываем нашу функциональную среду Sin
для того, чтобы не перезаписать существующую системную функцию sin
:
Sin := funcenv(Sin): Sin::rectform := proc(u) // compute rectform(Sin(u)) local r, a, b; begin // recursively compute rectform of u r := rectform(u); if op(r, 3) <> 0 then // we cannot split Sin(u) new(rectform, 0, 0, Sin(u)) else a := op(r, 1); // real part of u b := op(r, 2); // imaginary part of u new(rectform, Sin(a)*cosh(b), cos(a)*sinh(b), 0) end_if end:
delete z: rectform(Sin(z))
Если if
условие верно, затем rectform
не может разделить u
полностью в его действительную и мнимую часть. В этом случае, Sin::rectform
не может разделить Sin(u)
в его действительную и мнимую часть и указывает на это путем хранения целого выражения Sin(u)
в третьем операнде получившегося rectform
объект:
delete f: rectform(Sin(f(z)))
op(%)
|
Арифметическое выражение, полином, последовательное расширение, массив, hfarray, список или набор |
Элемент доменного rectform
если z
арифметическое выражение и объект того же типа как z
в противном случае.
Вызов элемента rectform
когда функция дает к самому объекту, независимо от аргументов. Аргументы не оценены.
Можно применить (почти) любую функцию к элементам rectform
который преобразовывает выражение с комплексным знаком в выражение с комплексным знаком.
Например, можно добавить или умножить те элементы или применить функции, такие как expand
и diff
им. Результат такой операции, которая не является explicitely, перегруженным методом rectform
(см. ниже), элемент rectform
.
Эта “автоматическая перегрузка” работает можно следующим образом: Каждый аргумент операции, которая является элементом rectform
, преобразован в выражение с помощью метода "expr"
(см. ниже). Затем операция применяется, и результат повторно преобразован в элемент rectform
.
Используйте функциональный expr
преобразовывать элемент rectform
к арифметическому выражению (как элемент области ядра).
Функции Re
и Im
возвратите действительную и мнимую часть элементов rectform
.
Элемент z rectform
состоит из трех операндов:
действительная часть z,
мнимая часть z,
часть z, для этого, действительная и мнимая часть не может быть вычислена (возможно целое число 0, если нет таких подвыражений).
Если подвыражение формы f(u,..)
происходит в z
и f
функциональная среда, затем rectform
попытки вызвать паз "rectform"
'off'
определить прямоугольную форму f(u,...)
. Таким образом можно расширить функциональность rectform
к вашим собственным специальным математическим функциям.
Паз "rectform"
вызван аргументами u
'off'
. Если стандартная программа паза f::rectform
не может определить прямоугольную форму f(u,..)
, затем это должно возвратить new(rectform(0,0,f(u,...)))
. Смотрите пример 7. Если f
не имеет паза "rectform"
, затем rectform
возвращает объект new(rectform(0,0,f(u,...)))
для соответствующего подвыражения.
Точно так же, если элемент d
из библиотеки domainT
происходит как подвыражение z
, затем rectform
попытки вызвать паз "rectform"
из той области с d
в качестве аргумента, чтобы вычислить прямоугольную форму d
.
Если стандартная программа паза T::rectform
не может определить прямоугольную форму d
, затем это должно возвратить new(rectform(0,0,d))
.
Если доменный T
не имеет паза "rectform"
, затем rectform
возвращает объект new(rectform(0,0,d))
для соответствующего подвыражения.