+
, _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
вместо того, чтобы использовать неявные преобразования. Если неявные преобразования используются, они должны быть хорошо зарегистрированы.
Большинство областей библиотеки в установке стандарта MuPAD® выполняет это соглашение.
_plus()
возвращает номер 0.
Полиномы типа, DOM_POLY
добавляется +
, если у них есть тот же indeterminates и тот же содействующий звонок.
Для конечных множеств X
, Y
, сумма X + Y
является набором.
Количественное выражение упрощено автоматически:
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(%)
Функциональный эквивалент _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:
Полиномы типа, 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]
Добавление константы к равенству, неравенству или сравнению составляет добавление его обеим сторонам:
(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 и a ≥ b автоматически переписан:
(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);
Для конечных множеств X
, Y
, сумма X + Y
является набором:
{a, b, c} + {1, 2}
Различные области библиотеки, такие как матричная перегрузка областей _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:
Этот пример демонстрирует, как реализовать 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