+, _plus

Добавьте выражения

Блокноты MuPAD® будут демонтированы в будущем релизе. Используйте live скрипты MATLAB® вместо этого.

Live скрипты MATLAB поддерживают большую часть функциональности MuPAD, хотя существуют некоторые различия. Для получения дополнительной информации смотрите, Преобразуют Notebook MuPAD в Live скрипты MATLAB.

Синтаксис

x + y + ...
_plus(x, y, …)

Описание

x + y + ... вычисляет сумму xY и т.д.

x + y + ... эквивалентно вызову функции _plus(x, y, ...).

Все условия, которые являются количествами типа Type::Numeric автоматически объединены к одному номеру.

Условия символьной суммы могут быть перестроены внутренне. См. Пример 1. Пользователь может управлять упорядоченным расположением настройкой Pref::keepOrder. См. также документацию для print.

_plus принимает произвольное число аргументов. В сочетании с оператором последовательности $, эта функция является рекомендуемым инструментом для вычисления конечных сумм. См. Пример 2. Функциональный sum май также служит для вычисления таких сумм. Однако sum спроектирован для расчета символьных и бесконечных сумм. Это медленнее, чем _plus.

x - y внутренне представлен как x + y*(-1) = _plus(x, _mult(y, -1)). Смотрите _subtract для деталей.

Для добавления равенств, неравенств и сравнений, реализованы следующие правила:

  • Добавление арифметического выражения добавляет выражение в обе стороны.

  • Добавление равенства добавляет левые стороны и правые стороны отдельно.

  • Добавление сравнения делает аналогично, заботясь о правильном операторе. Добавление сравнения с неравенством не разрешено.

См. пример 4.

Много перегрузок областей библиотеки _plus соответствующим slot"_plus". Суммы включающие элементы областей библиотеки обрабатываются можно следующим образом:

Сумма x + y + ... ищется элементы областей библиотеки слева направо. Позвольте z будьте первым сроком, который не имеет одного из основных типов, обеспеченных ядром (числа, выражения, и т.д.). Если доменный d = z::dom = domtype(z) имеет slot"_plus", это называется в форме d::_plus(x, y, ...). Результат возвращен d::_plus результат x + y + ....

Пользователи должны реализовать паз d::_plus из их областей d согласно следующему соглашению:

  • Если все условия являются элементами d, соответствующая сумма типа d должен быть возвращен.

  • Если по крайней мере один термин не может быть преобразован в элемент d, паз должен возвратить FAIL.

  • Необходимо соблюдать осторожность, если существуют условия, которые не имеют типа d, но может быть преобразован, чтобы ввести d. Такие условия должны быть преобразованы, только если математическая семантика очевидна для любого пользователя, который использует эту область в качестве 'черного квадрата' (например, целые числа могут рассматриваться как рациональные числа из-за естественного математического встраивания). Если в сомнении, "_plus" метод должен возвратить FAIL вместо того, чтобы использовать неявные преобразования. Если неявные преобразования используются, они должны быть хорошо зарегистрированы.

См. пример 6 и пример 7.

Большинство областей библиотеки в установке стандарта MuPAD® выполняет это соглашение.

_plus() возвращает номер 0.

Полиномы типа DOM_POLY добавляются +, если у них есть тот же indeterminates и тот же содействующий звонок.

Для конечных множеств XY, сумма X + Y набор.

Примеры

Пример 1

Количественное выражение упрощено автоматически:

3 + x + y + 2*x + 5*x - 1/2 - sin(4) + 17/4

Упорядоченное расположение условий суммы является не обязательно тем же самым как на входе:

x + y + z + a + b + c

1 + x + x^2 + x^10

Внутренне, эта сумма является символьным вызовом _plus:

op(%, 0), type(%)

Пример 2

Функциональный эквивалент _plus из оператора + удобный инструмент для вычисления конечных сумм. В следующем условия сгенерированы через оператор последовательности $:

_plus(i^2 $ i = 1..100)

Например, легко сложить все элементы в наборе:

S := {a, b, 1, 2, 27}: _plus(op(S))

Следующая команда “архивирует” два списка путем добавления соответствующих элементов:

L1 := [a, b, c]: L2 := [1, 2, 3]: zip(L1, L2, _plus)

delete S, L1, L2:

Пример 3

Полиномы типа DOM_POLY добавляются +, если у них есть тот же indeterminates и тот же содействующий звонок:

poly(x^2 + 1, [x]) + poly(x^2 + x - 1, [x])

Если indeterminates или содействующие звонки не соответствуют, _plus возвращает ошибку:

poly(x, [x]) + poly(x, [x, y])
Error: Invalid argument. [_plus]
poly(x, [x]) + poly(x, [x], Dom::Integer)
Error: Invalid argument. [_plus]

Пример 4

Добавление константы к равенству, неравенству или сравнению составляет добавление его обеим сторонам:

(a = b) + c, (a <> b) + c, (a <= b) + c, (a < b) + c

Добавление равенства выполняется путем добавления левых сторон и правых сторон отдельно:

(a = b) + (c = d), (a <> b) + (c = d),
(a <= b) + (c = d), (a < b) + (c = d)

Неравенства могут только быть добавлены к равенствам:

(a = b) + (c <> d), (a <> b) + (c <> d),
(a <= b) + (c <> d), (a < b) + (c <> d)

Сложение взятий сравнений различия между < и <= во внимание. Обратите внимание на то, что MuPAD использует только эти два оператора сравнения; a> b и ab автоматически переписан:

(a = b) + (c <= d), (a <> b) + (c <= d),
(a <= b) + (c <= d), (a < b) + (c <= d);

(a = b) + (c < d), (a <> b) + (c < d),
(a <= b) + (c < d), (a < b) + (c < d);

(a = b) + (c >= d), (a <> b) + (c >= d),
(a <= b) + (c >= d), (a < b) + (c >= d);

(a = b) + (c > d), (a <> b) + (c > d),
(a <= b) + (c > d), (a < b) + (c > d);

Пример 5

Для конечных множеств XY, сумма X + Y набор:

{a, b, c} + {1, 2}

Пример 6

Различные области библиотеки, такие как матричная перегрузка областей _plus:

x := Dom::Matrix(Dom::Integer)([1, 2]):
y := Dom::Matrix(Dom::Rational)([2, 3]):
x + y, y + x

Если условия в сумме x + y имеют другой тип, первый срок x попытки преобразовать y к типу данных x. Если успешный, сумма имеет тот же тип как x. В предыдущем примере, x и y имейте различные типы (оба - матрицы, но области компонента отличаются). Следовательно суммы x + y и y + x отличайтесь синтаксически, потому что они наследовали свой тип от первого срока:

bool(x + y = y + x)

domtype(x + y), domtype(y + x)

Если x не успешно выполняется, чтобы преобразовать y, затем FAIL возвращен. В следующем вызове, 2/3 компонента не может быть преобразован в целое число:

y := Dom::Matrix(Dom::Rational)([2/3, 3]): x + y

delete x, y:

Пример 7

Этот пример демонстрирует, как реализовать slot"_plus" для области. Следующий доменный myString должен представлять символьные строки. Сумма таких строк должна быть конкатенацией строк.

"new" метод использует expr2text преобразовывать любой объект MuPAD в строку. Эта строка является внутренним представлением элементов myString. "print" метод превращает эту строку в экран выход:

myString := newDomain("myString"):
myString::new := proc(x) 
begin
  if args(0) = 0 then x := "": end_if;
  case domtype(x)
    of myString do return(x);
    of DOM_STRING do return(new(dom, x));
    otherwise return(new(dom, expr2text(x)));
  end_case 
end_proc:
myString::print := x -> extop(x, 1):

Без "_plus" метод, системная функция _plus элементы указателей этой области как любой символьный объект:

y := myString(y): z := myString(z): 1 + x + y + z + 3/2

Теперь мы реализуем "_plus" метод. Это проверяет все аргументы. Аргументы преобразованы, если они не имеют типа myString. Обычно такого неявного преобразования нужно избежать. В этом случае, однако, любой объект имеет соответствующее строковое представление через expr2text и реализовано неявное преобразование. Наконец, сумма myString объекты заданы как конкатенация внутренних строк:

myString::_plus := proc()
local n, Arguments, i;
begin
  print(Unquoted, "Info: myString::_plus called with the arguments:",
           args()):
  n := args(0):
  Arguments := [args()];
  for i from 1 to n do
    if domtype(Arguments[i]) <> myString then
      // convert the i-th term to myString
      Arguments[i] := myString::new(Arguments[i]):
    end_if;
  end_for:
  myString::new(_concat(extop(Arguments[i], 1) $ i = 1..n))
end_proc:

Теперь myString объекты могут быть добавлены:

myString("This ") + myString("is ") + myString("a string")
Info: myString::_plus called with the arguments:, This , is , a string

В следующей сумме, y и z элементы myString. Термин y первый срок, который является элементом области библиотеки. Его "_plus" метод называется и конкатенирует все условия к строке типа myString:

1 + x + y + z + 3/2;
                                                              3
Info: myString::_plus called with the arguments:, 1, x, y, z, -
                                                              2

delete myString, y, z:

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

Арифметическое выражение, полином, набор, уравнение, неравенство или сравнение.

Перегруженный

xY

Смотрите также

Функции MuPAD