*, _multУмножьте выражения
Блокноты MuPAD® будут демонтированы в будущем релизе. Используйте live скрипты MATLAB® вместо этого.
Live скрипты MATLAB поддерживают большую часть функциональности MuPAD, хотя существуют некоторые различия. Для получения дополнительной информации смотрите, Преобразовывают Notebook MuPAD в Live скрипты MATLAB.
x * y * ...
_mult(x, y, …)
x * y * ... вычисляет продукт x, y и т.д.
x * y * ... эквивалентен вызову функции _mult(x, y, ...).
Все условия, которые являются количествами типа Type::Numeric, автоматически объединены к одному номеру.
Условия символьного продукта могут быть перестроены внутренне, если никакой термин не принадлежит области библиотеки что перегрузки _mult: на условиях, состоявших из областей ядра (числа, идентификаторы, выражения и т.д.), умножение принято, чтобы быть коммутативным. Cf. Пример 1.
Через перегрузку пользователь может реализовать некоммутативный продукт для специальных областей.
_mult принимает произвольное число аргументов. В сочетании с оператором последовательности $ эта функция является рекомендуемым инструментом для вычисления конечных продуктов. Cf. Пример 2. Функциональный product может также служить для вычисления таких продуктов. Однако product разработан для вычисления символьных и бесконечных произведений. Это медленнее, чем _mult.
Частное x/y внутренне представлено как x * (1/y) = _mult(x, _power(y, -1)). Смотрите _divide для деталей.
Много перегрузок областей библиотеки _mult соответствующим slot"_mult". Продукты включающие элементы областей библиотеки обрабатываются можно следующим образом:
Продукт x * y * ... ищется элементы областей библиотеки слева направо. Позвольте z быть первым сроком, который не имеет одного из основных типов, обеспеченных ядром (числа, выражения, и т.д.). Если доменный d = z::dom = domtype(z) имеет slot"_mult", это называется в форме d::_mult(x, y, ...). Результатом, возвращенным d::_mult, является результат x * y * ....
_mult() возвращает номер 1.
Полиномы типа, DOM_POLY умножается на *, если у них есть тот же indeterminates и тот же содействующий звонок. Используйте multcoeffs, чтобы умножить полиномы со скалярными факторами.
Для конечных множеств X, Y, продукт X * Y является набором
.
Равенства, неравенства и сравнения могут быть умножены друг с другом или с арифметическими выражениями. Результаты таких комбинаций продемонстрированы в Примере 5.
Количественное выражение упрощено автоматически:
3 * x * y * (1/18) * sin(4) * 4
![]()
Упорядоченное расположение условий продукта является не обязательно тем же самым как на входе:
x * y * 3 * z * a * b * c
![]()
Внутренне, этим продуктом является символьный вызов _mult:
op(%, 0), type(%)
![]()
Обратите внимание на то, что экран вывод не обязательно отражает внутренний порядок условий в продукте:
op(%2)
![]()
В частности, числовой фактор внутренне хранится как последний операнд. На экране числовой фактор отображен перед остающимися условиями:
3 * x * y * 4
![]()
op(%)
![]()
Функциональный эквивалент _mult оператора * является удобным инструментом для вычисления конечных продуктов. В следующем условия сгенерированы через оператор последовательности $:
_mult(i $ i = 1..20)
![]()
Например, легко умножить все элементы в наборе:
S := {a, b, 1, 2, 27}: _mult(op(S))![]()
Следующая команда “архивирует” два списка путем умножения соответствующих элементов:
L1 := [1, 2, 3]: L2 := [a, b, c]: zip(L1, L2, _mult)
![]()
delete S, L1, L2:
Полиномы типа, DOM_POLY умножается на *, если у них есть тот же indeterminates и тот же содействующий звонок:
poly(x^2 + 1, [x]) * poly(x^2 + x - 1, [x])
![]()
Если indeterminates или содействующие звонки не соответствуют, _mult возвращает ошибку:
poly(x, [x]) * poly(x, [x, y])
Error: Invalid argument. [_mult]
poly(x, [x]) * poly(x, [x], Dom::Integer)
Error: Invalid argument. [_mult]
Используя *, можно умножить полиномы на скалярные факторы:
2 * y * poly(x, [x])
![]()
Используйте multcoeffs вместо этого:
multcoeffs(poly(x^2 - 2, [x]), 2*y)
![]()
Для конечных множеств X, Y, продукт X * Y является набором
:
{a, b, c} * {1, 2}![]()
Обратите внимание на то, что комплексные числа типа DOM_INT, DOM_RAT, DOM_COMPLEX, DOM_FLOAT и идентификаторы неявно преобразованы в наборы с одним элементом:
2 * {a, b, c}![]()
a * {b, c}, PI * {3, 4}![]()
Умножение на константное выражение выполняется с обеих сторон уравнения:
(a = b) * c
![]()
Для неравенств только выполняется этот шаг, если константа, как известно, ненулевая:
assume(d <> 0): (a <> b) * c, (a <> b) * d; delete d:
![]()
Умножение сравнения с константой только задано для вещественных чисел. Даже для них, результат зависит от знака константы, начиная с умножения с отрицательной константой изменения направление сравнения:
(a < b) * 2, (a < b) * (-3)
![]()
(a < b) * I
Error: Inequalities must not be multiplied by complex numbers. [_less::_mult]
(a < b) * c, (a <= b) * c

Умножение двух равенств выполняется путем умножения левых сторон и правых сторон отдельно:
(a = b) * (c = d)
![]()
Неравенства не могут быть умножены друг с другом или со сравнениями; умножение с равенствами, однако, задано, если по крайней мере один операнд уравнения, как известно, является ненулевым:
assume(d <> 0): (a <> b) * (c = d); delete d:
![]()
В других случаях не расширен продукт:
delete c, d: (a <> b) * (c = d)
![]()
Умножение сравнений с равенствами и сравнений выполняется подобное случаям выше:
assume(c > 0): (a < b) * (c = d); delete c:
![]()
(a <= b) * (c <= d)

Различные области библиотеки, такие как матричная перегрузка областей _mult. Умножение не является коммутативным:
x := Dom::Matrix(Dom::Integer)([[1, 2], [3, 4]]): y := Dom::Matrix(Dom::Rational)([[10, 11], [12, 13]]): x * y, y * x
![]()
Если условия в x * y имеют другой тип, первый срок, x пытается преобразовать y в тип данных x. Если успешный, продукт имеет тот же тип как x. В предыдущем примере x и y имеют различные типы (оба - матрицы, но области компонента отличаются). Следовательно x * y и y * x имеют различные типы, который наследован от первого срока:
domtype(x * y), domtype(y * x)
![]()
Если x не успешно выполняется, чтобы преобразовать y, то y пытается преобразовать x. В следующем вызове 27/2 компонента не может быть преобразован в целое число. Следовательно, в x * y, термин y преобразовывает x и приводит к результату, который совпадает с доменным типом y:
y := Dom::Matrix(Dom::Rational)([[10, 11], [12, 27/2]]): x * y, y * x

domtype(x * y), domtype(y * x)
![]()
delete x, y:
Этот пример демонстрирует, как реализовать slot"_mult" для области. Следующий доменный myString должен представлять символьные строки. Через перегрузку _mult целочисленные множители таких строк должны произвести конкатенацию соответствующего количества копий строки.
Метод "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):Без метода "_mult" системная функция _mult обрабатывает элементы этой области как любой символьный объект:
y := myString(y): z := myString(z): 4 * x * y * z * 3/2
![]()
Теперь, мы реализуем метод "_mult". Это использует split, чтобы выбрать все целочисленные условия в его списке аргументов и умножает их. Результатом является целочисленный n. Если существует точно еще один оставленный термин (это должно быть строкой типа myString), это - скопированные времена n. Конкатенация копий возвращена:
myString::_mult:= proc()
local Arguments, intfactors, others, dummy, n;
begin
print(Unquoted, "Info: myString::_mult called with the arguments:",
args());
Arguments := [args()];
// split the argument list into integers and other factors:
[intfactors, others, dummy] :=
split(Arguments, testtype, DOM_INT);
// multiply all integer factors:
n := _mult(op(intfactors));
if nops(others) <> 1 then
return(FAIL)
end_if;
myString::new(_concat(extop(others[1], 1) $ n))
end_proc:Теперь, целочисленные множители объектов myString могут быть созданы через оператор *:
2 * myString("string") * 3Info: myString::_mult called with the arguments:, 2, string, 3
![]()
Только продукты целых чисел и объектов myString позволены:
3/2 * myString("a ") * myString("string")
3
Info: myString::_mult called with the arguments:, -, a , string
2
![]()
delete myString, y, z:
|
арифметические выражения, полиномы типа |
Арифметическое выражение, полином, набор, уравнение, неравенство или сравнение.
x, y