Main Content

이 번역 페이지는 최신 내용을 담고 있지 않습니다. 최신 내용을 영문으로 보려면 여기를 클릭하십시오.

subs

설명

기호 스칼라 변수와 기호 함수에 대입하기

예제

snew = subs(s,old,new)는 모든 oldnew로 대체한 s의 복사본을 반환한 다음 s를 계산합니다. 여기서 s는 기호 스칼라 변수나 기호 함수로 구성된 표현식이고 old는 대체되어야 하는 기호 스칼라 변수나 기호 함수를 지정합니다.

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

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

예제

snew = subs(s,new)s의 모든 디폴트 기호 스칼라 변수를 new로 대체한 s의 복사본을 반환한 다음 s를 계산합니다. 디폴트 변수는 symvar(s,1)에 의해 정의됩니다.

예제

snew = subs(s)s의 기호 스칼라 변수를 MATLAB® 작업 공간의 할당된 값으로 대체한 복사본 s를 반환한 다음 s를 계산합니다. 값이 할당되지 않은 변수는 변수로 남아 있습니다.

기호 행렬 변수와 기호 함수에 대입하기

예제

sMnew = subs(sM,oldM,newM)은 모든 oldMnewM으로 대체한 sM의 복사본을 반환한 다음 sM을 계산합니다. 여기서 sM은 기호 행렬 변수와 기호 행렬 함수가 포함된 표현식, 방정식 또는 조건이고 oldM은 대체되어야 하는 기호 행렬 변수와 기호 행렬 함수를 지정합니다. 대입 값 newMoldM과 크기가 같아야 합니다. (R2021b 이후)

예제

sMnew = subs(sM,newM)sM의 모든 디폴트 기호 행렬 변수를 newM으로 대체한 sM의 복사본을 반환한 다음 sM을 계산합니다. (R2021b 이후)

예제

sMnew = subs(sM)sM의 기호 행렬 변수를 MATLAB 작업 공간의 할당된 값으로 대체한 sM의 복사본을 반환한 다음 sM을 계산합니다. 값이 할당되지 않은 변수는 변수로 남아 있습니다. (R2023b 이후)

예제

모두 축소

아래의 표현식에서는 a4로 바꿉니다.

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

아래의 표현식에서는 a*b5로 바꿉니다.

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

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

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

그러므로 subsxa로 바꿉니다.

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

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

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

syms x
y = x^2;

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

x = 2;
y
y = x2

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

subs(y)
ans = 4

이전 값과 새 값을 벡터로 지정하여 다중 대입을 수행합니다.

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

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

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

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

syms a t
subs(exp(a*t) + 1, a, -magic(3))
ans = 

(e-8t+1e-t+1e-6t+1e-3t+1e-5t+1e-7t+1e-4t+1e-9t+1e-2t+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 행렬로 확장합니다.

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

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

subs는 비 스칼라 또는 행렬에 행렬 크기를 축소하는 스칼라를 대입할 수 없습니다.

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

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, yz를 숫자형 값으로 바꿉니다.

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

기호 스칼라 변수 xy를 2×2 행렬로 바꿉니다. 벡터 또는 행렬에 대해 다중 대입을 수행하려면 셀형 배열을 사용하여 이전 값과 새 값을 지정합니다.

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

(0-120)

이때 xy가 스칼라이므로 대입이 요소별로 수행되는 것을 볼 수 있습니다.

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

     0    -1
     2     0

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

먼저 방정식 eqn1eqn2를 선언합니다.

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

아래의 기호 함수에서 xa로 바꿉니다.

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)
ans = a+y
argnames(f)
ans = (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
eqs = [x^2 + y^2 == 1, x == y];
S = solve(eqs,[x y]);
S.x
ans = 

(-2222)

S.y
ans = 

(-2222)

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

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

   1   1
   1   1

R2021b 이후

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

syms X Y [2 2] matrix
sM = X*Y
sM = XY

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

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

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

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

Ssym = symmatrix2sym(S)
Ssym = 

(-2222-2)

R2021b 이후

기호 숫자로 구성된 행렬 만들기

A = sym([1 4 2; 4 1 2; 2 2 3])
A = 

(142412223)

charpoly 함수를 사용하여 A의 특성 다항식의 계수를 계산합니다.

c = charpoly(A)
c = (1-5-1721)

그 다음, X를 3×3 기호 행렬 변수로 정의합니다. 계수 c를 사용하여 다항식 p(X)=c1X3+c2X2+c3X+c4I3을 만듭니다. 여기서 X는 3×3 행렬을 나타내는 부정원입니다.

syms X [3 3] matrix
p = c(1)*X^3 + c(2)*X^2 + c(3)*X + c(4)*X^0
p = 21I3-17X-5X2+X3

subs 함수를 사용하여 다항식 p(X)XA를 대입합니다. 케일리-해밀턴 정리에 따라, 계수 cA의 특성 다항식이므로 이 대입 결과는 3×3 영행렬이 됩니다. symmatrix2sym을 사용하여 대입된 표현식을 기호 숫자로 구성된 행렬로 변환합니다.

Y = subs(p,A)
Y = 

-17Σ1-5Σ12+Σ13+21I3where  Σ1=(142412223)

Z = symmatrix2sym(Y)
Z = 

(000000000)

R2022a 이후

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

2×2 기호 행렬 변수 A를 만듭니다. 기호 행렬 함수 f(A)를 만들고, 작업 공간에서 A의 기존 정의가 유지되도록 합니다. 다항식 f(A)를 할당합니다.

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

다음으로 새 기호 행렬 변수 BC를 만듭니다. 새 기호 행렬 함수 g(B,C)를 만들고, 작업 공간에서 BC의 기존 정의가 유지되도록 합니다.

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

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

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

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)

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

Ssym = symmatrix2sym(S)
Ssym = 

(0000)

R2022b 이후

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

기호 행렬 변수 2개(AX)를 만듭니다. 기호 행렬 함수 f(X,A)를 만들고 작업 공간에 AX의 기존 정의를 유지합니다. 방정식을 만듭니다.

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

XT X f(X,A)=2A

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

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

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

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

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

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

tf = isAlways(symfunmatrix2symfun(eq))
tf = 3x3 logical array

   1   1   1
   1   1   1
   1   1   1

R2023b 이후

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

syms X Y [3 3] matrix
C = X*Y^2 - Y*X^2
C = XY2-YX2

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

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

subs를 사용하여 XY의 할당된 값이 있는 표현식 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

입력 인수

모두 축소

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

데이터형: sym | symfun | struct

대체될 스칼라 변수로, 기호 스칼라 변수, 기호 함수, 기호 표현식, 기호 배열 또는 셀형 배열로 지정됩니다.

데이터형: sym | symfun | cell

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

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

기호 입력값으로, 기호 행렬 변수, 기호 행렬 함수, 기호 표현식, 기호 방정식 또는 기호 조건으로 지정됩니다.

데이터형: symmatrix | symfunmatrix

대체될 행렬 변수 또는 행렬 함수로, 기호 행렬 변수, 기호 행렬 함수, 기호 표현식 또는 셀형 배열로 지정됩니다.

데이터형: symmatrix | symfunmatrix | cell

대입시킬 새 값으로, 숫자, 기호 숫자, 기호 행렬 변수, 기호 행렬 함수, 기호 표현식, 기호 배열 또는 셀형 배열로 지정됩니다. newMoldM과 크기가 같거나 sM의 디폴트 기호 행렬 변수와 크기가 같아야 합니다.

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

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

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

  • R2022b부터 도함수 또는 diff 함수를 포함하는 기호 대입은 대입할 기호 객체의 입력 순서를 따릅니다. 예를 들어, 다음 코드는 diff 함수를 포함하는 기호 대입을 수행합니다.

    syms m k x(t)
    syms x_t x_t_ddot
    eqSHM = m*diff(x(t),t,2) == -k*x(t);
    eqSHMnew = subs(eqSHM,[x(t) diff(x(t),t,2)],[x_t x_t_ddot])
    R2022b 이전에는 코드가 다음 출력값을 반환합니다.
    eqSHMnew = 
    m*x_t_ddot == -k*x_t

    R2022b부터는 코드가 다음 출력값을 반환합니다.

    eqSHMnew =
    0 == -k*x_t
    출력값의 차이가 있는 이유는 이제 subsx(t)x_t를 먼저 대입해서 diff(x_t,t,2)가 되고, 그래서 결과가 0이 되기 때문입니다. 이전 릴리스와 같은 대입 결과를 얻으려면 먼저 diff(x(t),t,2) 항을 지정하여 x(t) 항보다 먼저 대입되도록 하십시오.
    eqSHMnew = subs(eqSHM,[diff(x(t),t,2) x(t)],[x_t_ddot x_t])
    eqSHMnew = 
    m*x_t_ddot == -k*x_t

버전 내역

R2006a 이전에 개발됨

모두 확장