+, _plus

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

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

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

Синтаксис

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

Описание

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

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

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

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

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

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

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

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

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

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

Cf. Пример 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 вместо того, чтобы использовать неявные преобразования. Если неявные преобразования используются, они должны быть хорошо зарегистрированы.

Cf. Пример 6 и пример 7.

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

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

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

Для конечных множеств X, Y, сумма 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

Для конечных множеств X, Y, сумма 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:

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

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

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

x, y

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

Функции MuPAD