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, simplify и т.д.), могут быть применены к элементам типа rectform. Они действуют на каждый из этих трех операндов индивидуально.

Используйте expr, чтобы преобразовать результат rectform в элемент основной области. Смотрите Пример 4.

Взаимодействия среды

Функция чувствительна к свойствам набора идентификаторов через assume. Смотрите Пример 3.

Примеры

Пример 1

Прямоугольная форма sin (z) для комплексных чисел z:

delete z: r := rectform(sin(z))

Действительное и мнимая часть могут быть извлечены можно следующим образом:

Re(r), Im(r)

Сопряженное комплексное число r может быть получено непосредственно:

conjugate(r)

Пример 2

Действительное и мнимая часть постоянного арифметического выражения могут быть определены функциями Re и Im, как в следующем примере:

Re(ln(-4)) + I*Im(ln(-4))

На самом деле они работают намного быстрее, чем rectform. Однако им не удается вычислить действительное и мнимую часть произвольных символьных выражений, такой что касается термина e isin (z):

delete z: f := exp(I*sin(z)):
Re(f), Im(f)

Функциональный rectform более мощен. Это может разделить выражение выше в его действительную и мнимую часть:

r := rectform(f)

Теперь мы можем извлечь действительное и мнимую часть f:

Re(r)

Im(r)

Пример 3

Идентификаторы без свойств считаются комплексными переменными:

delete z: rectform(ln(z))

Однако можно влиять на поведение rectform путем присоединения свойств к идентификаторам. Например, если z принимает, что только действительные отрицательные величины, действительное и мнимая часть значительно упрощают:

assume(z < 0): rectform(ln(z))

Пример 4

Мы вычисляем прямоугольную форму комплексной переменной 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(%)

Пример 5

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)

Пример 6

Этот пример иллюстрирует значение трех операндов объекта, возвращенного 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)

Пример 7

Опытные пользователи могут расширить 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(%)

Параметры

z

Арифметическое выражение, полином, последовательное расширение, массив, hfarray, список или набор

Возвращаемые значения

Элемент доменного rectform, если z является арифметическим выражением и объектом того же типа как z в противном случае.

Вызовы функции

При вызове элемента rectform, когда функция приводит к самому объекту, независимо от аргументов. Аргументы не оценены.

Операции

Можно применить (почти) любую функцию к элементам rectform, который преобразовывает выражение с комплексным знаком в выражение с комплексным знаком.

Например, можно добавить или умножить те элементы или применить функции, такие как expand и diff им. Результатом такой операции, которая не является explicitely, перегруженным методом rectform (см. ниже), является элемент rectform.

Эта “автоматическая перегрузка” работает можно следующим образом: Каждый аргумент операции, которая является элементом rectform, преобразован в выражение с помощью метода "expr" (см. ниже). Затем операция применяется, и результат повторно преобразован в элемент rectform.

Используйте функциональный expr, чтобы преобразовать элемент rectform к арифметическому выражению (как элемент области ядра).

Функции Re и Im возвращают действительную и мнимую часть элементов rectform.

Операнды

Элемент z rectform состоит из трех операндов:

  1. действительная часть z,

  2. мнимая часть z,

  3. часть z, для этого, действительная и мнимая часть не может быть вычислена (возможно целое число 0, если нет таких подвыражений).

Алгоритмы

Если подвыражение формы, f(u,..) происходит в z и f, является функциональной средой, то rectform пытается вызвать слот "rectform" f, чтобы определить прямоугольную форму f(u,...). Таким образом можно расширить функциональность rectform к собственным специальным математическим функциям.

Слот "rectform" вызван аргументами u... f. Если стандартная программа слота, 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)) для соответствующего подвыражения.