이 페이지의 최신 내용은 아직 번역되지 않았습니다. 최신 내용은 영문으로 볼 수 있습니다.

sym

기호 변수, 기호 표현식, 기호 함수, 기호 행렬 만들기

유효한 변수 이름이 아니고 숫자를 정의하지 않는 문자형 벡터에 대한 지원이 제거되었습니다. 기호 표현식을 만들려면 먼저 기호 변수를 만든 후 이 변수에 대해 연산을 사용하십시오. 예를 들어, sym('x + 1') 대신 syms x; x + 1을, sym('exp(pi)') 대신 exp(sym(pi))를, f(var1,...varN) = sym('f(var1,...varN)') 대신 syms f(var1,...varN)을 사용합니다.

설명

예제

x = sym('x')는 기호 변수 x를 만듭니다.

예제

A = sym('a',[n1 ... nM])은 자동 생성된 요소로 채워진 n1x...xnM 기호 배열을 만듭니다. 예를 들어, A = sym('a',[1 3])은 행 벡터 A = [a1 a2 a3]을 만듭니다. 생성된 요소 a1, a2a3은 MATLAB® 작업 공간에 표시되지 않습니다. 다차원 배열인 경우 요소는 접두사 a 뒤에 _ 구분기호를 사용해서 요소의 인덱스가 추가됩니다(예: a1_3_2).

예제

A = sym('a',n)은 자동 생성된 요소로 채워진 nxn 기호 행렬을 만듭니다.

예제

sym(___,set)는 기호 변수 또는 기호 배열을 만들고 변수나 배열의 모든 요소가 set에 속한다는 가정을 설정합니다. set'real', 'positive', 'integer' 또는 'rational'일 수 있습니다. string형 배열 또는 문자형 벡터로 구성된 셀형 배열을 지정하여 여러 가정을 결합할 수도 있습니다. 예를 들어, set["positive" "rational"] 또는 {'positive','rational'}로 지정하여 양의 유리수 값을 가정합니다.

예제

sym(___,'clear')는 기호 변수 또는 기호 배열에 설정된 가정을 지웁니다. 위에 열거된 구문에서 입력 인수 뒤에 'clear'를 지정하면 됩니다. 단, 'clear'set는 예외적으로 함께 사용할 수 없습니다. 하나의 sym 함수 호출에서 가정을 설정하고 가정을 지울 수 없습니다.

예제

sym(num)은 숫자 또는 숫자형 행렬을 기호 숫자 또는 기호 행렬로 변환합니다.

예제

sym(num,flag)flag에서 지정한 기법을 사용하여 부동소수점 숫자를 기호 숫자로 변환합니다.

예제

symexpr = sym(h)는 함수 핸들 h와 연결된 익명 MATLAB 함수로부터 기호 표현식 또는 기호 행렬 symexpr을 만듭니다.

예제

기호 변수 만들기

기호 변수 xy를 만듭니다.

x = sym('x');
y = sym('y');

기호 벡터 만들기

자동 생성된 요소 a1, ..., a4로 구성된 1x4 기호 벡터 a를 만듭니다.

a = sym('a',[1 4])
a =
[ a1, a2, a3, a4]

형식 문자 벡터를 첫 번째 인수로 사용하여 a 요소의 이름 형식을 지정합니다. sym은 문자 벡터 형식의 %d에 요소의 인덱스를 대입하여 요소 이름을 생성합니다.

a = sym('x_%d',[1 4])
a =
[ x_1, x_2, x_3, x_4]

아래의 구문은 MATLAB 작업 공간에 기호 변수 x_1, ..., x_4를 만들지 않습니다. 표준 인덱싱 방법을 사용하여 a의 요소에 액세스합니다.

a(1)
a(2:3)
ans =
x_1
ans =
[ x_2, x_3]

기호 행렬 만들기

자동 생성된 요소로 구성된 3x4 기호 행렬을 만듭니다. 이 요소는 Ai_j 형식이며 요소 A1_1, ..., A3_4를 생성합니다.

A = sym('A',[3 4])
A =
[ A1_1, A1_2, A1_3, A1_4]
[ A2_1, A2_2, A2_3, A2_4]
[ A3_1, A3_2, A3_3, A3_4]

형식 문자형 벡터를 첫 번째 인수로 사용하여 요소 이름이 x_1_1, ..., x_4_4인 4x4 행렬을 만듭니다. sym은 형식 문자형 벡터의 %d에 요소의 인덱스를 대입하여 요소 이름을 생성합니다.

B = sym('x_%d_%d',4)
B =
[ x_1_1, x_1_2, x_1_3, x_1_4]
[ x_2_1, x_2_2, x_2_3, x_2_4]
[ x_3_1, x_3_2, x_3_3, x_3_4]
[ x_4_1, x_4_2, x_4_3, x_4_4]

아래의 구문은 MATLAB 작업 공간에 기호 변수 A1_1, ..., A3_4, x_1_1, ..., x_4_4를 만들지 않습니다. 행렬 요소에 액세스하려면 괄호를 사용하십시오.

A(2,3)
B(4,2)
ans =
A2_3
 
ans =
x_4_2

기호 다차원 배열 만들기

자동 생성된 요소 A1_1_1, ..., A2_2_2로 구성된 2x2x2 기호 배열을 만듭니다.

A = sym('a',[2 2 2])
A(:,:,1) =
[ a1_1_1, a1_2_1]
[ a2_1_1, a2_2_1]
A(:,:,2) =
[ a1_1_2, a1_2_2]
[ a2_1_2, a2_2_2]

기호 숫자 만들기

숫자형 값을 기호 숫자 또는 기호 표현식으로 변환합니다. 더 정확한 결과를 얻으려면 전체 표현식 대신 하위 표현식에 sym을 사용하십시오. 전체 표현식에 sym을 사용하면 MATLAB에서 먼저 표현식을 부동소수점 숫자로 변환하기 때문에 정확도가 떨어집니다. sym은 이렇게 손실된 정확도를 항상 복구할 수 있지는 않습니다.

inaccurate1 = sym(1/1234567)
accurate1 = 1/sym(1234567)

inaccurate2 = sym(sqrt(1234567))
accurate2 = sqrt(sym(1234567))

inaccurate3 = sym(exp(pi))
accurate3 = exp(sym(pi))
inaccurate1 =
7650239286923505/9444732965739290427392
accurate1 =
1/1234567

inaccurate2 =
4886716562018589/4398046511104
accurate2 =
1234567^(1/2)

inaccurate3 =
6513525919879993/281474976710656
accurate3 =
exp(pi)

큰 기호 숫자 만들기

15자리 이상의 기호 숫자를 만들 때는 따옴표를 사용하여 숫자를 정확하게 나타냅니다.

inaccurateNum = sym(11111111111111111111)
accurateNum = sym('11111111111111111111')
inaccurateNum =
11111111111111110656
accurateNum =
11111111111111111111

따옴표를 사용하여 기호 복소수를 만들 때 숫자의 허수부를 1i, 2i 등으로 지정합니다.

sym('1234567 + 1i')
ans =
1234567 + 1i

함수 핸들에서 기호 표현식 만들기

MATLAB 핸들과 연결된 익명 함수로부터 기호 표현식과 기호 행렬을 만듭니다.

h_expr = @(x)(sin(x) + cos(x));
sym_expr = sym(h_expr)
sym_expr =
cos(x) + sin(x)
h_matrix = @(x)(x*pascal(3));
sym_matrix = sym(h_matrix)
sym_matrix =
[ x,   x,   x]
[ x, 2*x, 3*x]
[ x, 3*x, 6*x]

변수를 만들 때 가정 설정하기

기호 변수 x, y, zt를 만들면서 x는 실수, y는 양수, z는 유리수, t는 양의 정수라고 가정합니다.

x = sym('x','real');
y = sym('y','positive');
z = sym('z','rational');
t = sym('t',{'positive','integer'});

assumptions를 사용하여 x, y, zt에 대한 가정을 확인합니다.

assumptions
ans =
[ in(x, 'real'), in(z, 'rational'), 1 <= t, 0 < y, in(t, 'integer')]

추후 계산을 위해 assume을 사용하여 가정을 지웁니다.

assume([x y z t],'clear')
assumptions
ans =
Empty sym: 1-by-0

행렬 요소에 대해 가정 설정하기

기호 행렬을 만들고 해당 행렬의 각 요소에 대해 가정을 설정합니다.

A = sym('A%d%d',[2 2],'positive')
A =
[ A11, A12]
[ A21, A22]

A의 첫 번째 요소에 대해 방정식을 풉니다. MATLAB은 이 요소를 양수로 가정합니다.

solve(A(1, 1)^2 - 1, A(1, 1))
ans =
1

assumptions를 사용하여 A의 요소에 설정된 가정을 확인합니다.

assumptions(A)
ans =
[ 0 < A11, 0 < A12, 0 < A21, 0 < A22]

assume을 사용하여 기호 행렬 요소에 대해 이전에 설정된 모든 가정을 지웁니다.

assume(A,'clear');
assumptions(A)
ans =
Empty sym: 1-by-0

동일한 방정식을 다시 풉니다.

solve(A(1, 1)^2 - 1, A(1, 1))
ans =
 -1
  1

부동소수점 값에 대한 변환 기법 선택하기

pi를 기호 값으로 변환합니다.

선택적 두 번째 인수('r', 'f', 'd' 또는 'e')를 지정하여 변환 기법을 선택합니다. 디폴트 값은 'r'입니다. 변환 기법에 대한 자세한 내용은 입력 인수 섹션을 참조하십시오.

r = sym(pi)
f = sym(pi,'f')
d = sym(pi,'d')
e = sym(pi,'e')
r =
pi
 
f =
884279719003555/281474976710656
 
d =
3.1415926535897931159979634685442
 
e =
pi - (198*eps)/359

입력 인수

모두 축소

변수 이름으로, 문자형 벡터로 지정됩니다. 인수 x는 유효한 변수 이름이어야 합니다. 즉, x는 문자로 시작하고 영숫자와 밑줄만 포함해야 합니다. 변수 이름이 유효한지 확인하려면 isvarname을 사용하십시오.

예: x, y123, z_1

익명 함수로, MATLAB 함수 핸들로 지정됩니다. 자세한 내용은 익명 함수 (MATLAB) 항목을 참조하십시오.

예: h = @(x)sin(x); symexpr = sym(h)

자동 생성된 행렬 요소의 접두사로, 문자형 벡터로 지정됩니다. 인수 a는 유효한 변수 이름이어야 합니다. 즉, a는 문자로 시작하고 영숫자와 밑줄만 포함해야 합니다. 변수 이름이 유효한지 확인하려면 isvarname을 사용하십시오.

예: a, b, a_bc

벡터, 행렬 또는 배열 차원으로, 정수 벡터로 지정됩니다. 하나의 정수만 지정하여 정사각 행렬을 간단히 만들 수도 있습니다. 예를 들어, A = sym('A',3)3x3 정사각 행렬을 만듭니다.

예: [2 3], [2,3], [2;3]

기호 변수 또는 기호 행렬에 설정된 가정으로, 문자형 벡터, string형 배열 또는 셀형 배열로 지정됩니다. 사용 가능한 가정은 'integer', 'rational', 'real' 또는 'positive'입니다.

string형 배열 또는 문자형 벡터로 구성된 셀형 배열을 지정하여 여러 가정을 결합할 수 있습니다. 예를 들어, set["positive" "rational"] 또는 {'positive','rational'}로 지정하여 양의 유리수 값을 가정합니다.

예: 'integer'

기호 숫자 또는 기호 행렬로 변환할 숫자형 값으로, 숫자 또는 숫자로 구성된 행렬로 지정됩니다.

예: 10, pi, hilb(3)

변환 기법으로, 아래의 테이블에 나열된 문자 중 하나로 지정됩니다.

'r'sym유리수(rational) 모드를 사용하면 적당한 크기의 정수 pq에 대해 p/q, p*pi/q, sqrt(p), 2^q, 10^q 형식의 표현식을 계산하여 얻은 부동소수점 숫자를 이에 대응하는 기호 형식으로 변환합니다. 이렇게 하면 원래 계산에 포함된 반올림 오차를 효과적으로 보정할 수 있지만 부동소수점 값을 정확하게 나타낼 수는 없습니다. sym에서 간단한 유리수 근삿값을 찾을 수 없는 경우 'f' 플래그와 동일한 기법을 사용합니다.
'd'sym십진수(decimal) 모드를 사용하면 digits에 현재 설정된 자릿수를 따르게 됩니다. 16자리 미만으로 변환하면 원래 값이 갖는 정확도를 일부 잃게 되며, 16자리를 초과해 변환하면 결과 값의 수치적 정확성이 보장되지 않을 수 있습니다. 예를 들어, sym(4/3,'d')는 10자리의 정확도로 설정하면 1.333333333을 반환하고, 20자리의 정확도로 설정하면 1.3333333333333332593을 반환합니다. 후자는 3으로 끝나지는 않지만 4/3에 가장 가까운 정확한 십진수 부동소수점 표현입니다.
'e'sym추정값 오차(estimate error) 모드를 사용하면 유리수 모드에서 얻은 결과를 eps 변수에 대한 항으로 보완합니다. 이 항은 이론적인 유리식과 실제 부동소수점 값의 차이를 추정합니다. 예를 들어, sym(3*pi/4,'e')(3*pi)/4 - (103*eps)/249를 반환합니다.
'f'sym부동소수점(floating-point) 모드를 사용하면 N*2^e 또는 -N*2^e 형식의 모든 값을 나타냅니다. 이때 N >= 0이고 e는 정수입니다. 예를 들어, sym(1/10,'f')3602879701896397/36028797018963968을 반환합니다. 반환된 유리수 값은 기호 숫자로 변환된 부동소수점 숫자의 정확한 값입니다.

출력 인수

모두 축소

변수로, 기호 변수로 반환됩니다.

자동 생성된 요소로 구성된 벡터 또는 행렬로, 기호 벡터 또는 기호 행렬로 반환됩니다. 이러한 벡터나 행렬의 요소는 MATLAB 작업 공간에 표시되지 않습니다.

익명 MATLAB 함수에서 생성된 표현식 또는 행렬로, 기호 표현식 또는 기호 행렬로 반환됩니다.

  • pi = sym('pi')delta = sym('1/10')과 같은 명령문은 pi1/10의 값에 내재된 부동소수점 근사를 수행하지 않는 기호 숫자를 만듭니다. 이 방법으로 생성된 pi는 내장 숫자형 함수를 일시적으로 같은 이름으로 바꿉니다.

  • sym은 문자형 벡터 입력값에 있는 i를 항상 식별자로 처리합니다. 허수 i를 입력하려면 대신 1i를 사용하십시오.

  • clear x는 실수, 양수 같은 가정을 설정한 기호 객체와 assume, sym, syms로 설정한 가정을 지우지 않습니다. 가정을 제거하려면 다음 옵션 중 하나를 사용하십시오.

    • assume(x,'clear')x에 영향을 주는 모든 가정을 제거합니다.

    • clear all은 MATLAB 작업 공간에서 모든 객체를 지우고 기호 엔진을 초기화합니다.

    • assumeassumeAlso를 사용하면 변수에 대한 가정을 더 유연하게 설정할 수 있습니다.

  • 숫자형 벡터 또는 숫자형 행렬에서 하나 이상의 요소를 기호 숫자로 대체하면 MATLAB은 해당 숫자를 배정밀도 숫자로 변환합니다.

    A = eye(3);
    A(1,1) = sym('pi')
    A =
        3.1416         0         0
             0    1.0000         0
             0         0    1.0000

    숫자형 벡터 또는 숫자형 행렬의 요소를 기호 변수, 기호 표현식 또는 기호 함수로 대체할 수 없습니다. 이러한 요소는 배정밀도 숫자로 변환할 수 없기 때문입니다. 예를 들어, A(1,1) = sym('a')는 오류를 발생시킵니다.

  • A = sym('a',[n1 ... nM]) 구문을 사용하면 sym 함수는 MATLAB 작업 공간에 기호 배열 A만 할당합니다. A의 자동 생성된 요소까지 할당하려면 syms 함수를 사용하십시오. 예를 들어, syms a [1 3]은 행 벡터 a = [a1 a2 a3]과 기호 변수 a1, a2a3을 MATLAB 작업 공간에 만듭니다.

대체 기능

기호 변수를 만드는 다른 방법

하나의 함수 호출에서 여러 개의 기호 변수를 만들려면 syms를 사용하십시오. syms를 사용하면 특정 변수를 지정해서 가정을 지울 수 있습니다.

R2006a 이전에 개발됨