주요 콘텐츠

subs

R2026b

설명

변수, 함수 또는 하위 표현식에 대입하기

exprnew = subs(expr,match,replacement)는 expr에 나오는 모든 match를 replacement로 대체하고, 표현식을 계산한 다음 그 결과를 기호 표현식으로 반환합니다.

  • match 및 replacement가 모두 같은 크기의 벡터 또는 셀형 배열인 경우 subs는 match의 각 요소를 그에 대응하는 replacement 요소로 대체합니다.

  • match가 스칼라이고 replacement가 벡터 또는 행렬인 경우 subs는 모든 연산을 요소별로 수행하여 모든 match 요소를 replacement로 대체합니다. 이 함수는 expr의 모든 상수항을 해당 상수에 모두 1로 구성된 벡터 또는 행렬을 곱한 값으로 대체합니다.

  • expr에 기호 행렬 변수나 기호 행렬 함수가 포함된 경우 replacement 및 match는 크기가 동일해야 합니다.

예제

exprnew = subs(expr,replacement)는 expr에 있는 모든 디폴트 기호 변수를 replacement로 대체하고, 표현식을 계산한 다음 그 결과를 기호 표현식으로 반환합니다. 디폴트 변수는 symvar(expr,1)에 의해 정의됩니다.

예제

exprnew = subs(expr)은 expr의 기호 변수와 기호 함수를 MATLAB® 작업 공간의 할당된 값으로 대체하고, 표현식을 계산한 다음 그 결과를 기호 표현식으로 반환합니다. 값이 할당되지 않은 변수는 변수로 남아 있습니다.

예제

패턴 일치를 사용하여 대입하기

R2026b 이후

exprnew = subs(expr,match,replacement,Wildcards=vars)는 expr에서 패턴 match와 일치하는 하위 표현식을 찾아 replacement로 대체하여 패턴 기반 대입을 수행합니다. 이때 vars에 지정된 변수는 와일드카드로 처리합니다.

예제

exprnew = subs(expr,match,replacement,Wildcards=vars,Condition=condition)은 condition으로 지정된 제약 조건 또는 조건을 사용하여 패턴 기반 대입을 수행합니다. 이 함수는 일치하는 와일드카드 값에 대해 condition이 true인 경우에만 일치하는 하위 표현식을 대체합니다.

예제

예제

모두 축소

기호 표현식에서 a를 4로 대체합니다.

syms a b
expr = a*b^2
expr = a b2
exprnew = subs(expr,a,4)
exprnew = 4 b2

원래 표현식에서 a*b를 5로 대체합니다.

exprnew = subs(expr,a*b,5)
exprnew = 5 b

기호 표현식의 디폴트 기호 스칼라 변수에 a를 대입합니다. 대체할 스칼라 변수 또는 하위 표현식을 지정하지 않으면 subs는 symvar을 사용하여 디폴트 변수를 구합니다.

syms x y a
expr = x + y
expr = x+y
var = symvar(expr,1)
var = x

x + y의 경우 디폴트 변수는 x입니다. 그러므로 subs는 x를 a로 바꿉니다.

exprnew = subs(expr,a)
exprnew = a+y

기호 스칼라 변수에 새 값을 할당하더라도 그 변수를 포함하는 표현식이 자동으로 계산되지 않습니다. 대신 subs를 사용하여 표현식을 계산하십시오.

표현식 y = x^2을 정의합니다.

syms x
y = x^2;

x에 2를 대입합니다. y의 값은 여전히 4가 아닌 x^2입니다.

x = 2;
y
y = x2

subs를 사용하여 x의 새로운 값으로 y를 계산합니다.

yeval = subs(y)
yeval = 4

대체할 변수와 새 값을 벡터로 지정하여 다중 대입을 수행합니다.

syms a b
expr = cos(a) + sin(b)
expr = cos(a)+sin(b)
exprnew = subs(expr,[a,b],[sym("alpha"),2])
exprnew = sin(2)+cos(α)

또는 셀형 배열을 사용하여 다중 대입을 수행합니다.

exprnew = subs(expr,{a,b},{sym("alpha"),2})
exprnew = sin(2)+cos(α)

기호 표현식의 기호 스칼라 변수 a를 3×3 마방진 행렬로 바꿉니다. 상수 1은 모든 요소가 1인 3×3 행렬로 확장됩니다.

syms a t
expr = exp(a*t) + 1
expr = ea t+1
expr3by3 = subs(expr,a,magic(3))
expr3by3 = 

(e8 t+1et+1e6 t+1e3 t+1e5 t+1e7 t+1e4 t+1e9 t+1e2 t+1)

벡터, 행렬 또는 배열의 요소에 비 스칼라 값을 대입할 수도 있습니다. 예를 들어, 다음과 같은 2×2 행렬을 만듭니다.

A = sym("A",[2,2])
A = 

(A1,1A1,2A2,1A2,2)

B = sym("B",[2,2])
B = 

(B1,1B1,2B2,1B2,2)

행렬 A의 첫 번째 요소를 행렬 B로 바꿉니다. 이렇게 대입하려고 하면 subs는 2×2 행렬 A를 아래와 같은 4×4 행렬로 확장합니다.

A4by4 = subs(A, A(1,1), B)
A4by4 = 

(B1,1B1,2A1,2A1,2B2,1B2,2A1,2A1,2A2,1A2,1A2,2A2,2A2,1A2,1A2,2A2,2)

subs를 사용하여, 행렬을 나타내는 변수를 행렬 크기를 축소하는 스칼라 값으로 대체할 수는 없습니다.

표현식의 기호 스칼라 변수 x 및 y를 2×2 행렬로 바꿉니다. 벡터 또는 행렬에 대해 다중 대입을 수행하려면 셀형 배열을 사용하여 대체할 변수와 새 값을 지정합니다.

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

(0-120)

x와 y가 스칼라이므로 대입이 요소별로 수행됩니다. 결과를 두 개의 2×2 행렬의 요소별 곱셈 결과와 비교합니다.

exprmult = [0 1; -1 0].*[1 -1; -2 1]
exprmult = 2×2

     0    -1
     2     0

필드 값으로 기호 표현식을 사용하여 구조체형 배열을 만듭니다.

syms x y z
S = struct("f1",x*y,"f2",y + z,"f3",y^2)
S = struct with fields:
    f1: x*y
    f2: y + z
    f3: y^2

기호 스칼라 변수 x, y 및 z를 숫자형 값으로 바꿉니다.

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

첫 번째 방정식의 변수에 대해 두 번째 방정식의 그 변수 값을 사용하여 첫 번째 방정식에서 스칼라 변수를 제거합니다. 두 번째 방정식에서 isolate를 사용하여 좌변의 변수를 분리합니다. 그런 다음 첫 번째 방정식의 변수에 두 번째 방정식의 우변을 대입합니다.

먼저, 방정식 eqn1과 eqn2를 정의합니다.

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

isolate를 사용하여 eqn2에서 y를 분리합니다.

eqn2 = isolate(eqn2,y)
eqn2 = 

y=cos(x)x

eqn2 좌변에 해당하는 요소에 eqn2 우변에 해당하는 요소를 대입하여 eqn1에서 y를 제거합니다.

eqn1 = subs(eqn1,lhs(eqn2),rhs(eqn2))
eqn1 = 

sin(x)+cos(x)x=cos(x)2x2+x2

기호 함수에서 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 = formula(f)
formula = a+y
args = argnames(f)
args = (xy)

기호 함수의 인수를 명시적으로 바꿉니다.

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

다음 연립방정식의 해를 검증한다고 가정해 보겠습니다.

syms x y
eqns = [x^2 + y^2 == 1, x == y];
sols = solve(eqns,[x y]);
sols.x
ans = 

(-2222)

sols.y
ans = 

(-2222)

해를 원래의 방정식에 대입하여 해를 검증합니다.

tf = isAlways(subs(eqns,sols))
tf = 2×2 logical array

   1   1
   1   1

1계 및 2계 도함수를 포함하는 기호 표현을 만듭니다.

syms r(t)
expr = diff(r,t,t) + diff(r,t)
expr(t) = 

∂2∂t2 r(t)+∂∂t r(t)

1계 도함수에 다른 변수 v0을 대입하고, 2계 도함수에 다른 변수 D2r을 대입합니다. 이를 수행하기 위해 더 높은 계수를 가진 도함수를 먼저 대체해야 합니다.

syms v_0 D2r
exprnew = subs(expr,diff(r,t,t),D2r);
exprnew = subs(exprnew,diff(r,t),v_0)
exprnew(t) = D2r+v0

대체할 변수와 대체 항목을 벡터로 지정하여 단일 subs 호출로 이러한 대입을 수행할 수도 있습니다.

exprnew = subs(expr,[diff(r,t,t) diff(r,t)],[D2r v_0])
exprnew(t) = D2r+v0

2계 도함수는 그대로 두고 1계 도함수만 대체하려면 임시 변수 D2r을 ∂2∂t2r(t)로 다시 변경하여 이전 워크플로를 계속 진행할 수 있습니다.

exprnew = subs(exprnew,D2r,diff(r,t,t))
exprnew(t) = 

∂2∂t2 r(t)+v0

비교를 위해 원래 표현식의 1계 도함수에 v0을 먼저 대입하면 결과는 v0이 됩니다. 여기서 subs는 1계 도함수를 v0으로, 2계 도함수를 ∂∂t∂r(t)∂t=∂∂tv0=0으로 대체합니다. 이러한 대입의 결과로 2계 도함수를 포함하지 않는 표현식이 생성됩니다.

syms v_0
exprnew = subs(expr,diff(r,t),v_0)
exprnew(t) = v0

두 2×2 행렬의 곱을 정의합니다. 행렬을 symmatrix 데이터형의 기호 행렬 변수로 선언합니다.

syms X Y [2 2] matrix
M = X*Y
M = X Y

행렬 변수 X 및 Y를 2×2 기호 행렬로 바꿉니다. 벡터 또는 행렬에 대해 다중 대입을 수행하려면 셀형 배열을 사용하여 대입할 행렬 변수와 새 값을 지정합니다. 새 값은 대체되어야 하는 행렬 변수와 크기가 같아야 합니다.

Mnew = subs(M,{X,Y},{[0 sqrt(sym(2)); sqrt(sym(2)) 0], [1 -1; -2 1]})
Mnew = 

Σ1where  Σ1=(-2 222-2)

표현식 Mnew를 sym 데이터형으로 변환하여 대입된 행렬 곱셈의 결과를 확인합니다.

Mnew = symmatrix2sym(Mnew)
Mnew = 

(-2 222-2)

R2022a 이후

함수 f(A)=A2-2A+I2를 정의합니다. 여기서 A는 2×2 행렬이고 I2는 2×2 단위 행렬입니다. 변수 A를 다른 표현식으로 대체하고 새 함수를 계산합니다.

2×2 기호 행렬 변수 A를 만듭니다. 작업 공간에서 A의 기존 정의를 유지한 상태로 기호 행렬 함수 f(A)를 생성합니다. f(A)의 다항식을 할당합니다.

syms A 2 matrix
syms f(A) 2 matrix keepargs
f(A) = A*A - 2*A + eye(2)
f(A) = I2-2 A+A2

다음으로 새 기호 행렬 변수 B와 C를 만듭니다. 작업 공간에서 B와 C의 기존 정의를 유지한 상태로 새 기호 행렬 함수 g(B,C)를 생성합니다.

syms B C 2 matrix
syms g(B,C) 2 matrix keepargs

f(A)의 변수 A를 B+C로 대체합니다. 대입된 결과를 새 함수 g(B,C)에 할당합니다.

g(B,C) = subs(f,A,B+C)
g(B, C) = B+C2+I2-2 B-2 C

subs를 사용하여 행렬 값 B=[01-10]과 C=[1-1-21]에 대해 g(B,C)를 계산합니다.

S = subs(g(B,C),{B,C},{[0 1; -1 0],[1 -1; -2 1]})
S = 

-2 Σ1-2 Σ2+Σ1+Σ22+I2where  Σ1=(01-10)  Σ2=(1-1-21)

표현식 S를 symmatrix 데이터형에서 sym 데이터형으로 변환하여 대입된 다항식의 결과를 표시합니다.

Ssym = symmatrix2sym(S)
Ssym = 

(0000)

R2022b 이후

방정식 ∂∂XT∂∂Xf(X,A)=2A를 정의합니다. 여기서 A는 3×3 행렬이고 X는 3×1 행렬입니다. f(X,A)에 또 다른 기호 표현식을 대입하고 A에 기호 값을 대입합니다. 방정식이 이러한 값에 대해 true인지 확인합니다.

기호 행렬 변수 2개(A 및 X)를 만듭니다. 작업 공간에서 A와 X의 기존 정의를 유지한 상태로 기호 행렬 함수 f(X,A)를 생성합니다. 방정식을 만듭니다.

syms A [3 3] matrix
syms X [3 1] matrix
syms f(X,A) [1 1] matrix keepargs
eqn = diff(diff(f,X),X.') == 2*A
eqn(X, A) = 

∂∂XT ∂∂X f(X,A)=2 A

f(X,A)에 XTAX를 대입하고 이 표현식에 대한 방정식에서 2차 미분 함수를 계산합니다.

eqn = subs(eqn,f,X.'*A*X)
eqn(X, A) = AT+A=2 A

A에 차수가 3인 힐베르트 행렬을 대입합니다.

eqn = subs(eqn,A,hilb(3))
eqn(X, A) = 

Σ1+Σ1T=2 Σ1where  Σ1=(11213121314131415)

isAlways를 사용하여 방정식이 이러한 값에 대해 true인지 확인합니다. isAlways는 symfun 또는 sym 유형의 기호 입력값만 받으므로, isAlways를 사용하기 전에 eqn을 symfunmatrix 유형에서 symfun 유형으로 변환합니다.

tf = isAlways(symfunmatrix2symfun(eqn))
tf = 3×3 logical array

   1   1   1
   1   1   1
   1   1   1

R2023b 이후

표현식 XY2-YX2을 정의합니다. 여기서 X와 Y는 3×3 행렬입니다. 행렬을 기호 행렬 변수로 만듭니다.

syms X Y [3 3] matrix
C = X*Y^2 - Y*X^2
C = X Y2-Y X2

행렬 X와 행렬 Y에 값을 할당합니다.

X = [-1 2 pi; 0 1/2 2; 2 1 0];
Y = [3 2 2; -1 2 1; 1 2 -1];

subs를 사용하여 X 및 Y의 할당된 값이 있는 표현식 C를 계산합니다.

Cnew = subs(C)
Cnew = 

-Σ1 Σ22+Σ2 Σ12where  Σ1=(322-12112-1)  Σ2=(-12π0122210)

symmatrix 데이터형에서 double 데이터형으로 결과를 변환합니다.

Cnum = double(Cnew)
Cnum = 3×3

  -42.8496  -13.3584  -13.4336
   -0.7168    3.1416    0.0752
   -3.2832   29.8584   16.4248

R2026b 이후

기호 표현식을 만듭니다.

syms x y z
expr = x + y*z
expr = x+y z

패턴 기반 대입에 와일드카드로 사용할 기호 변수를 만듭니다.

syms w

subs를 사용하여 표현식에서 패턴 w와 일치하는 모든 항을 3으로 대체합니다. 표현식의 변수 x, y, z가 대체되며, 그 결과 12가 출력됩니다.

exprnew = subs(expr,w,3,Wildcards=w)
exprnew = 12

R2026b 이후

특정 삼각함수 항등식을 적용할 기호 표현식을 만듭니다.

syms x y
expr = cos(x)^2 + sin(x)^2 + tan(y)^2 + x
expr = cos(x)2+sin(x)2+tan(y)2+x

대입에 와일드카드로 사용할 기호 변수를 만듭니다. 삼각함수 항등식 cos2(θ)+sin2(θ)=1을 적용하려면 일치시킬 패턴과 대체 값을 정의합니다.

syms w
match = cos(w)^2 + sin(w)^2
match = cos(w)2+sin(w)2
replacement = 1
replacement = 
1

삼각함수 항등식에 기반하여 패턴과 일치하는 항을 대체합니다.

exprnew = subs(expr,match,replacement,Wildcards=w)
exprnew = tan(y)2+x+1

비교를 위해 simplify 함수를 사용하여 원래 표현식을 단순화합니다.

res_simp = simplify(expr)
res_simp = 

--x sin(y)2+x+1sin(y)2-1

simplify는 광범위한 대수 규칙과 삼각 함수 규칙을 적용하지만, 의도한 형식이 생성되지 않을 수도 있습니다. 여기서 simplify는 expr의 원래 표현식을 단순화하기 전에 tan 함수와 cos 함수를 sin에 대해 재작성합니다.

R2026b 이후

정수와 기호 변수를 갖는 기호 행렬을 만듭니다. 여기서 변수 c는 정수로 간주됩니다.

syms a b
syms c integer
M = [a 2 3; 3 4 b; 3 3 c]
M = 

(a2334b33c)

대입에 와일드카드로 사용할 기호 변수를 만듭니다. integer 유형의 임의의 기호 객체와 일치하도록 패턴의 조건을 정의합니다.

syms w
condition = @(w) isSymType(w,"integer");

행렬 M의 모든 정수를 5로 대체합니다.

Mnew = subs(M,w,5,Wildcards=w,Condition=condition)
Mnew = 

(a5555b55c)

여기서 변수 c는 5로 대체되지 않습니다. c가 임의의 정수 값을 갖는 것으로 가정되지만, 이 객체의 유형은 variable이며, 이는 condition에 정의된 조건을 충족하지 않습니다.

symType(c)
ans = 
"variable"

c에 대한 기존 가정을 확인합니다.

assumptions
ans = c∈Z

이 가정을 기반으로 in을 사용하여 와일드카드 변수에 대한 새 조건을 정의합니다.

condition = @(w) in(w,"integer");

행렬 M의 모든 정수를 5로 대체합니다. 이제 변수 c가 5로 대체됩니다.

Mnew = subs(M,w,5,Wildcards=w,Condition=condition)
Mnew = 

(a5555b555)

입력 인수

모두 축소

기호 입력값으로, 기호 스칼라 변수, 기호 행렬 변수, 기호 함수, 기호 행렬 함수, 기호 표현식, 기호 방정식, 기호 배열 또는 구조체로 지정됩니다.

데이터형: sym | symmatrix | symfun | symfunmatrix (R2022a 이후) | struct

대입할 기호 변수, 기호 함수 또는 기호 하위 표현식으로, 기호 스칼라 변수, 기호 행렬 변수, 기호 함수, 기호 행렬 함수, 기호 표현식, 기호 배열 또는 셀형 배열로 지정됩니다.

Wildcards 옵션을 사용할 경우 match는 지정된 변수가 와일드카드로 동작하는 기호 패턴을 정의합니다. 이 경우 match는 sym 또는 symfun 유형이어야 하며, subs 함수는 expr에서 기호 패턴과 일치하는 각 스칼라 하위 표현식을 대체합니다. (R2026b 이후)

데이터형: sym | symmatrix | symfun | symfunmatrix | cell

새 대체 값으로, 숫자, 기호 숫자, 기호 스칼라 변수, 기호 행렬 변수, 기호 함수, 기호 행렬 함수, 기호 표현식, 기호 배열, 구조체 또는 셀형 배열로 지정됩니다.

기호 행렬 변수 또는 기호 행렬 함수에 대입하는 경우 replacement는 match와 크기가 같거나 expr의 디폴트 기호 변수와 크기가 같아야 합니다.

Wildcards 옵션을 사용할 경우 replacement는 와일드카드가 포함된 패턴과 일치하는 항에 대한 대체를 정의합니다. 이 경우 subs 함수는 일치하는 하위 표현식에 대해 스칼라 대입을 수행합니다. 대체 값은 sym, symfun, single, double, int8, int16, int32, int64, uint8, uint16, uint32 또는 uint64 유형이어야 합니다. (R2026b 이후)

데이터형: sym | symmatrix | symfun | symfunmatrix | single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | struct | cell

R2026b 이후

패턴 일치를 위한 와일드카드 변수로, 기호 스칼라 변수 또는 기호 스칼라 변수로 구성된 벡터로 지정됩니다. 와일드카드로 사용되는 기호 변수는 입력 표현식 expr에 사용된 변수와 달라야 합니다.

데이터형: sym

R2026b 이후

패턴 일치를 제약하기 위한 조건으로, 와일드카드 값에 대해 true 또는 false로 평가되는 함수 핸들로 지정됩니다. subs 함수는 일치하는 와일드카드 값에 대해 condition이 true인 경우에만 대입을 수행합니다. 다음 표에는 함수 핸들과 그에 대응하는 일치 조건의 예가 나와 있습니다.

함수 핸들일치 조건
@(w) true복소수인 모든 와일드카드 값과 일치함
@(w) w > 00보다 큰 모든 와일드카드 값과 일치함
@(w) (0 < w) & (w < 5)0보다 크고 5보다 작은 모든 와일드카드 값과 일치함
@(w) ~has(w,sym("t"))변수 t를 포함하지 않는 모든 와일드카드 값과 일치함
@(w) isSymType(w,"symfun")기호 함수인 모든 와일드카드 값과 일치함
@(w) isSymType(w,"integer")명시적으로 정수인 모든 와일드카드 값과 일치함
@(w) in(w,"integer")정수라는 가정까지 포함하여 정수인 모든 와일드카드 값과 일치함

기호 변수는 기본적으로 복소수이므로, 패턴 기반 대입은 복소수이면서 조건 @(w) true를 충족하는 모든 와일드카드 값에 대해 일치하는 항목을 찾습니다. subs 함수는 일치하는 가장 작은 하위 표현식부터 시작하여 가능한 한 많은 독립적인 대체를 수행합니다.

패턴 기반 대입을 수행할 때 subs는 내부적으로 isAlways를 사용하여 expr의 변수에 대해 설정된 모든 가정을 고려합니다. 따라서, 패턴 일치를 제약하기 위한 조건을 지정할 때 isAlways를 명시적으로 호출할 필요가 없습니다. 예를 들어, 패턴 일치를 제약하기 위한 조건을 @(w) isAlways(w > 0) 대신 @(w) w > 0으로 정의할 수 있습니다.

데이터형: function_handle

출력 인수

모두 축소

대입 후의 기호 표현식으로, 기호 숫자, 기호 스칼라 변수, 기호 행렬 변수, 기호 함수, 기호 행렬 함수, 기호 표현식, 기호 방정식, 기호 배열 또는 구조체로 반환됩니다.

데이터형: sym | symmatrix | symfun | symfunmatrix

팁

  • subs(expr,__)는 expr을 수정하지 않습니다. expr을 수정하려면 expr = subs(expr,__)를 사용하십시오.

  • expr이 일변량 다항식이고 replacement가 숫자형 행렬인 경우 polyvalm(sym2poly(expr),replacement)를 사용하여 expr을 행렬로 계산하십시오. 이 함수는 모든 상수항을 해당 상수에 단위 행렬을 곱한 값으로 대체합니다.

버전 내역

R2006a 이전에 개발됨

모두 확장