subs

Символьная подстановка

Описание

пример

subs(s,old,new) возвращает копию s, замена всех вхождений old с new, а затем оценивает s.

пример

subs(s,new) возвращает копию s, замена всех вхождений переменной по умолчанию в s с new, а затем оценивает s. Переменная по умолчанию определяется как symvar.

пример

subs(s) возвращает копию s, замена символьных переменных в s, со своими значениями, полученными из вызывающей функции и MATLAB® Рабочая область, а затем оценивает s. Переменные без назначенных значений остаются как переменные.

Примеры

Одинарная Замена

Замените a с 4 в этом выражении.

syms a b
subs(a + b, a, 4)
ans =
b + 4

Замените a*b с 5 в этом выражении.

subs(a*b^2, a*b, 5)
ans =
5*b

Переменная подстановки по умолчанию

Замените переменную по умолчанию в этом выражении на a. Если вы не задаете переменную или выражение, которое нужно заменить, subs использует symvar для поиска переменной по умолчанию. Для x + yпеременная по умолчанию x.

syms x y a
symvar(x + y, 1)
ans =
x

Поэтому нижние индексы заменяет x с a.

subs(x + y, a)
ans =
a + y

Вычислите выражение с новыми значениями

При присвоении нового значения символьной переменной выражения, содержащие переменную, не вычисляются автоматически. Вместо этого вычислите выражения при помощи subs.

Определите выражение y = x^2.

syms x
y = x^2;

Присвоение 2 на x. Значение y все еще x^2 вместо 4.

x = 2;
y
y =
x^2

Оценка y с новым значением x при помощи subs.

subs(y)
ans =
4

Множественные замены

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

syms a b
subs(cos(a) + sin(b), [a, b], [sym('alpha'), 2])
ans =
sin(2) + cos(alpha)

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

subs(cos(a) + sin(b), {a, b}, {sym('alpha'), 2})
ans =
sin(2) + cos(alpha)

Замена скаляров массивами

Замените переменную a в этом выражении с магической квадратной матрицей 3 на 3. Обратите внимание, что постоянная 1 расширяется до матрицы 3 на 3 со всеми ее элементами, равными 1.

syms a t
subs(exp(a*t) + 1, a, -magic(3))
ans =
[ exp(-8*t) + 1,   exp(-t) + 1, exp(-6*t) + 1]
[ exp(-3*t) + 1, exp(-5*t) + 1, exp(-7*t) + 1]
[ exp(-4*t) + 1, exp(-9*t) + 1, exp(-2*t) + 1]

Можно также заменить элемент массива вектора, матрицы или массива нескалярным значением. Для примера создайте эти матрицы 2 на 2.

A = sym('A', [2,2])
B = sym('B', [2,2])
A =
[ A1_1, A1_2]
[ A2_1, A2_2]
 
B =
[ B1_1, B1_2]
[ B2_1, B2_2]

Замените первый элемент матрицы A с матрицей B. Делая эту замену, subs расширяет матрицу 2 на 2 A в эту матрицу 4 на 4.

A44 = subs(A, A(1,1), B)
A44 =
[ B1_1, B1_2, A1_2, A1_2]
[ B2_1, B2_2, A1_2, A1_2]
[ A2_1, A2_1, A2_2, A2_2]
[ A2_1, A2_1, A2_2, A2_2]

subs не позволяет вам заменить нескаляр на скаляр.

Замена символьных переменных в массиве структур

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

syms x y z
S = struct('f1',x*y,'f2',y + z,'f3',y^2)
S = 
  struct with fields:
    f1: [1×1 sym]
    f2: [1×1 sym]
    f3: [1×1 sym]

Замените символьные переменные x, y, и z с числовыми значениями.

Sval = subs(S,[x y z],[0.5 1 1.5])
S = 
  struct with fields:
    f1: [1×1 sym]
    f2: [1×1 sym]
    f3: [1×1 sym]

Отображение значения каждого поля.

Sval.f1
ans =
1/2
Sval.f2
ans =
5/2
Sval.f3
ans =
1

Замена нескольких скаляров массивами

Замените переменные x и y с этими матрицами 2 на 2. Когда вы делаете несколько замен с участием векторов или матриц, используйте массивы ячеек, чтобы задать старые и новые значения.

syms x y
subs(x*y, {x, y}, {[0 1; -1 0], [1 -1; -2 1]})
ans =
[ 0, -1]
[ 2,  0]

Обратите внимание, что эти замены являются поэлементными.

[0 1; -1 0].*[1 -1; -2 1]
ans =
     0    -1
     2     0

Замены в уравнениях

Исключить переменные из уравнения можно используя значение переменной из другого уравнения. Во втором уравнении выделите переменную на левой грани, используя isolateи затем замените правую сторону переменной в первом уравнении.

Во-первых, объявите уравнения eqn1 и eqn2.

syms x y
eqn1 = sin(x)+y == x^2 + y^2;
eqn2 = y*x == cos(x);

Изолируйте y в eqn2 при помощи isolate.

eqn2 = isolate(eqn2,y)
eqn2 =
y == cos(x)/x

Устранение y от eqn1 путем подстановки правой оси eqn2 с левой стороны eqn2 в eqn1.

eqn1 = subs(eqn1,lhs(eqn2),rhs(eqn2))
eqn1 =
sin(x) + cos(x)/x == cos(x)^2/x^2 + x^2

Замещения в функциях

Замените x с a в этой символической функции.

syms x y a
syms f(x, y)
f(x, y) = x + y;
f = subs(f, x, a)
f(x, y) =
a + y

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

formula(f)
argnames(f)
ans =
a + y
 
ans =
[ x, y]

Замените аргументы символьной функции явно.

syms x y
f(x, y) = x + y;
f(a, y) = subs(f, x, a);
f
f(a, y) =
a + y

Подстановка переменных с соответствующими значениями из структуры

Предположим, что вы хотите проверить решения этой системы уравнений.

syms x y
eqs = [x^2 + y^2 == 1, x == y];
S = solve(eqs, [x y]);
S.x
S.y
ans =
 -2^(1/2)/2
  2^(1/2)/2
ans =
 -2^(1/2)/2
  2^(1/2)/2

Проверьте решения, подставив решения в исходную систему.

isAlways(subs(eqs, S))
ans =
  2×2 logical array
   1   1
   1   1

Входные параметры

свернуть все

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

Элемент для замены, заданный как символьная переменная, выражение или массив.

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

Совет

  • subs(s,old,new) не изменяет s. Изменение s, использовать s = subs(s,old,new).

  • Если old и new являются ли оба векторов или массивов ячеек одинакового размера, subs заменяет каждый элемент old с соответствующим элементом new.

  • Если old является скаляром, и new является вектором или матрицей, затем subs(s,old,new) заменяет все образцы old в s с new, выполнение всех операций поэлементно. Все постоянные условия в s заменяются константой, умноженной на вектор или матрицу всех 1с.

  • Если s является одномерным полиномом и new является числовой матрицей, использование polyvalm(sym2poly(s), new) для оценки s как матрица. Все постоянные члены заменяются константой, умноженной на единичную матрицу.

Представлено до R2006a