exponenta event banner

подводные лодки

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

Описание

пример

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

Поэтому subs заменяет 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 заменяются константой, умноженной на вектор или матрицу всех 1s.

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

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