exponenta event banner

mapSymType

Применение функции к символическим подобъектам определенного типа

Описание

пример

X = mapSymType(symObj,type,func) применяет функцию func к символическим подобъектам типа type в символьном объекте symObj. Вход type должен быть чувствительным к регистру строковым скалярным или символьным вектором и может включать логическое выражение.

  • func должен быть дескриптором функции или символьной функцией типа 'symfun'.

  • func должен возвращать скаляр, который может быть преобразован в символический объект с помощью sym или str2sym функция.

Если symObj содержит несколько вложенных выражений типа type, то mapSymType применяет функцию func к самой большой субэкспрессии.

пример

X = mapSymType(symObj,funType,vars,func) применяет функцию func к неназначенным символическим функциям, зависящим от переменных vars в символьном объекте symObj.

Можно задать тип функции. funType кому 'symfunOf' или 'symfunDependingOn'. Например, syms f(x); mapSymType(f,'symfunOf',x,@(u)cos(u)) прибыль cos(f(x)).

Примеры

свернуть все

Создание символьного выражения, содержащего символьные числа sym.

expr = sym('2') + 1i*pi
expr = 2+πi2 + sym(pi)*sym(1i)

Создайте дескриптор функции, который вычисляет квадрат числа.

sq = @(y) y^2;

Применить функцию sq к символическому подобъекту типа 'integer' в выражении expr.

X = mapSymType(expr,'integer',sq)
X = 4+πi4 + sym(pi)*sym(1i)

Можно также применить существующую функцию MATLAB ®, например: exp. Применить exp функция к символьному подобъекту типа 'complex' в выражении expr.

X = mapSymType(expr,'complex',@exp)
X = πei+2sym(pi)*exp(sym(1i)) + 2

Примените символьную функцию к определенным подобъектам в символьном уравнении.

Создайте символическое уравнение.

syms x t
eq = 0.5*x + sin(x) == t/4
eq = 

x2+sin(x)=t4x/2 + sin(x) == t/4

Создайте символическую функцию, умножающую входной сигнал на 2.

syms f(u)
f(u) = 2*u;

Применение символьной функции f к символьным подобъектам типа 'variable' в уравнении eq.

X = mapSymType(eq,'variable',f)
X = 

x+sin(2x)=t2x + sin(2*x) == t/2

Символьные переменные x и t в уравнении умножаются на 2.

Можно также применить ту же символическую функцию, которая создана с помощью symfun.

X = mapSymType(eq,'variable',symfun(2*u,u))
X = 

x+sin(2x)=t2x + sin(2*x) == t/2

Теперь создайте неназначенную символическую функцию. Применение неназначенной функции к символьным подобъектам типа 'sin' в уравнении eq.

syms g(u)
X = mapSymType(eq,'sin',g)
X = 

x2+g(sin(x))=t4x/2 + g(sin(x)) == t/4

Преобразование наибольшего символьного подэкспрессии определенного типа в выражении.

Создайте символическое выражение.

syms f(x) y
expr = sin(x) + f(x) - 2*y
expr = f(x)-2y+sin(x)f(x) - 2*y + sin(x)

Применить log функция к символьному подобъекту типа 'expression' в выражении expr.

X = mapSymType(expr,'expression',@log)
X = log(f(x)-2y+sin(x))log(f(x) - 2*y + sin(x))

При наличии нескольких вложенных выражений типа 'expression', mapSymType применяет log функция для наибольшего подэкспрессии.

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

Создайте символическое выражение.

syms f(x) g(t) h(x,t) 
expr = f(x) + 2*g(t) + h(x,t)*sin(x)
expr = 2g(t)+f(x)+sin(x)h(x,t)2*g(t) + f(x) + sin(x)*h(x, t)

Создание дескриптора функции, преобразующего входные данные в символьную переменную с именем 'z'.

func = @(obj) sym('z');

Применение функции преобразования func к неназначенным символьным функциям в выражении expr.

Преобразование функций, зависящих от точной последовательности переменных [x t] использование 'symfunOf'.

X = mapSymType(expr,'symfunOf',[x t],func)
X = 2g(t)+f(x)+zsin(x)2*g(t) + f(x) + z*sin(x)

Преобразование функций, зависящих от переменной t использование 'symfunDependingOn'.

X = mapSymType(expr,'symfunDependingOn',x,func)
X = z+2g(t)+zsin(x)z + 2*g(t) + z*sin(x)

Удаление переменной зависимости неназначенных символьных функций в символьном массиве.

Создайте символьный массив, состоящий из нескольких уравнений.

syms f1(t) f2(t) g1(t) g2(t)
eq = [f1(t) + f2(t) == 0, f1(t) == 2*g1(t), g1(t) == diff(g2(t))]
eq = 

(f1(t)+f2(t)=0f1(t)=2g1(t)g1(t)=t g2(t))[f1(t) + f2(t) == 0, f1(t) == 2*g1(t), g1(t) == diff(g2(t), t)]

Применить symFunType для замены неназначенной символьной функции переменной с тем же именем.

Поиск всех функций, зависящих от переменной t использование 'symfunOf' и преобразовать их с помощью symFunType.

X = mapSymType(eq,'symfunOf',t,@symFunType)
X = (f1+f2=0f1=2g1g1=0)[f1 + f2 == 0, f1 == 2*g1, g1 == 0]

Создайте символическое выражение. Найдите его обратное преобразование Лапласа.

syms s;
G = (s+10)/(s^2+2*s+4)/(s^2-4*s+1);
expr = ilaplace(G)
expr = 

19e-tcos(3t)+3sin(3t)1939-19e2tcosh(3t)-183sinh(3t)1939(19*exp((-t))*(cos(sqrt(sym(3))*t) + (sqrt(sym(3))*sin(sqrt(sym(3))*t))/19))/39 - (19*exp((2*t))*(cosh(sqrt(sym(3))*t) - (18*sqrt(sym(3))*sinh(sqrt(sym(3))*t))/19))/39

Результат - с точки зрения exp, sin, cos, sinh, и cosh функции.

Переписать sinh и cosh в результате как exp. Использовать mapSymType для применения rewrite функция для вложенных выражений, которые содержат sinh или cosh.

expr = mapSymType(expr,"sinh|cosh",@(subexpr) rewrite(subexpr,"exp"))
expr = 

19e-tcos(3t)+3sin(3t)1939-19e2te3t2+e-3t2-183e3t2-e-3t21939(19*exp((-t))*(cos(sqrt(sym(3))*t) + (sqrt(sym(3))*sin(sqrt(sym(3))*t))/19))/39 - (19*exp((2*t))*(exp(sqrt(sym(3))*t)/2 + exp((-sqrt(sym(3))*t))/2 - (18*sqrt(sym(3))*(exp(sqrt(sym(3))*t)/2 - exp((-sqrt(sym(3))*t))/2))/19))/39

Входные аргументы

свернуть все

Символьные объекты, определяемые как символьные выражения, символьные функции, символьные переменные, символьные числа или символьные единицы измерения.

Символьные типы, определяемые как чувствительная к регистру скалярная строка или символьный вектор. Вход type может содержать логическое выражение. Ниже приведены параметры значений.

Категория символьного типаСтроковые значения
числа
  • 'integer' - целые числа

  • 'rational' - рациональные числа

  • 'vpareal' - вещественные числа с плавающей запятой переменной точности

  • 'complex' - комплексные числа

  • 'real' - вещественные числа, в том числе 'integer', 'rational', и 'vpareal'

  • 'number' - номера, в т.ч. 'integer', 'rational', 'vpareal', 'complex', и 'real'

константы'constant' - символьные математические константы, в том числе 'number'
символьные математические функции'vpa', 'sin', 'exp', и так далее - символьные математические функции в символьных выражениях
неназначенные символические функции
  • 'F', 'g', и так далее - имя функции неназначенной символической функции

  • 'symfun' - неназначенные символические функции

арифметические операторы
  • 'plus' - оператор сложения + и оператор вычитания -

  • 'times' - оператор умножения * и оператор деления /

  • 'power' - оператор мощности или возведения в степень ^ оператор квадратного корня sqrt

переменные'variable' - символьные переменные
единицы'units' - символьные единицы
выражения'expression' - символьные выражения, включая все предшествующие символьные типы
логические выражения
  • 'or' - логический оператор OR |

  • 'and' - логический оператор И &

  • 'not' - логический оператор NOT ~

  • 'xor' - логический оператор исключающее ИЛИ xor

  • 'logicalconstant' - символьные логические константы symtrue и symfalse

  • 'logicalexpression' - логические выражения, в том числе 'or', 'and', 'not', 'xor', symtrue и symfalse

уравнения и неравенства
  • 'eq' - оператор равенства ==

  • 'ne' - оператор неравенства ~=

  • 'lt' - меньше оператора < или оператор «больше» >

  • 'le' - оператор меньше или равен <= или оператор «больше» или «равно» >=

  • 'equation' - символические уравнения и неравенства, в том числе 'eq', 'ne', 'lt', и 'le'

неподдерживаемые символьные типы

'unsupported' - неподдерживаемые символьные типы

Входная функция, заданная как дескриптор функции или символьная функция. Дополнительные сведения об дескрипторах функций и символьных функциях см. в разделах Создание дескрипторов функций и symfunсоответственно.

Если symObj содержит несколько вложенных выражений типа type, то mapSymType применяет функцию func к самому большому вложенному выражению (самый верхний совпадающий узел в древовидной структуре данных).

Тип функции, указанный как 'symfunOf' или 'symfunDependingOn'.

  • 'symfunOf' применяется func к неназначенным символьным функциям, зависящим от точной последовательности переменных, заданных массивом vars. Например, syms f(x,y); mapSymType(f,'symfunOf',[x y],@(g)g^2) прибыль f(x,y)^2.

  • 'symfunDependingOn' применяется func к неназначенным символьным функциям, зависящим от переменных, заданных массивом vars. Например, syms f(x,y); mapSymType(f,'symfunDependingOn',x,@(g)g/2) прибыль f(x,y)/2.

Входные переменные, определяемые как символьные переменные или символьный массив.

Представлен в R2019a