Main Content

matlabFunction

기호 표현식을 함수 핸들 또는 파일로 변환

설명

예제

ht = matlabFunction(f)는 핸들 ht를 사용하여 기호 표현식 또는 기호 함수 f를 MATLAB® 함수로 변환합니다. 기호 표현식 또는 기호 함수의 double 데이터형에 대해 연산을 수행하는 동일한 MATLAB 함수가 있는 경우 변환된 함수는 Symbolic Math Toolbox™ 없이도 사용할 수 있습니다.

예제

ht = matlabFunction(f1,...,fN)f1,...,fNN개 출력값을 갖는 MATLAB 함수로 변환합니다. 함수 핸들은 ht입니다. f1,...,fN의 각 요소는 기호 표현식이나 기호 함수, 또는 기호 표현식이나 기호 함수로 구성된 벡터 또는 행렬이 될 수 있습니다.

예제

ht = matlabFunction(___,Name,Value)는 위에 열거된 구문의 입력 인수 조합과 함께 하나 이상의 이름-값 인수를 사용하여 옵션을 지정합니다.

예를 들어, 생성된 MATLAB 함수를 파일에 쓰기 위해 File 이름-값 인수를 지정할 수 있습니다. 또한 스칼라 변수와 벡터 변수의 조합인 입력 인수를 사용하는 MATLAB 함수를 생성하기 위해 Vars 이름-값 인수를 지정할 수도 있습니다.

예제

모두 축소

핸들 ht를 사용하여 기호 표현식 r을 MATLAB 함수로 변환합니다. 변환된 함수는 Symbolic Math Toolbox가 없어도 사용할 수 있습니다.

syms x y
r = sqrt(x^2 + y^2);
ht = matlabFunction(r)
ht =
  function_handle with value:
    @(x,y)sqrt(x.^2+y.^2)

쉼표로 구분된 입력값을 사용하여 여러 기호 표현식을 변환합니다.

ht = matlabFunction(r,r^2)
ht =
  function_handle with value:
    @(x,y)deal(sqrt(x.^2+y.^2),x.^2+y.^2)

기호 함수를 만들고 핸들 ht를 사용하여 MATLAB 함수로 변환합니다.

syms x y
f(x,y) = x^3 + y^3;
ht = matlabFunction(f)
ht = 
  function_handle with value:
    @(x,y)x.^3+y.^3

File 이름-값 인수를 지정하여 생성된 MATLAB 함수를 파일에 씁니다. 기존 파일이 있으면 덮어씁니다. 파일에 쓰는 경우 matlabFunctiont0, t1 등의 이름이 지정된 중간 변수를 사용하여 코드를 최적화합니다. Comments 이름-값 인수를 사용하여 파일에 주석을 포함합니다.

f에서 생성된 MATLAB 함수를 파일 myfile에 씁니다.

syms x
f = x^2 + log(x^2);
matlabFunction(f,"File","myfile");
function f = myfile(x)
%MYFILE
%    F = MYFILE(X)

%    This function was generated by the Symbolic Math Toolbox version 8.4.
%    01-Sep-2019 00:00:00

t2 = x.^2;
f = t2+log(t2);

파일에 주석 Version: 1.1을 포함합니다.

matlabFunction(f,"File","myfile","Comments","Version: 1.1");
function f = myfile(x)
...
%Version: 1.1
t2 = x.^2;
...

기호 표현식을 MATLAB 함수로 변환할 때 결과 함수의 입력 인수 순서를 지정할 수 있습니다. 또한 일부 입력 인수는 스칼라 변수 대신 벡터로 지정할 수도 있습니다.

기호 표현식을 만듭니다.

syms x y z
r = x + y/2 + z/3;

r을 MATLAB 함수로 변환하고 이 함수를 파일 myfile에 씁니다. 기본적으로 matlabFunction은 변수 이름에 소문자만 포함된 기호 표현식을 변환할 때 입력 인수의 사전적 순서를 사용합니다. 생성된 입력 인수는 스칼라 변수 x, y, z입니다.

matlabFunction(r,"File","myfile");
function r = myfile(x,y,z)
%MYFILE
%    R = MYFILE(X,Y,Z)
r = x+y./2.0+z./3.0;

Vars 이름-값 인수를 벡터 [y z x]로 지정하여, 생성된 MATLAB 함수에 대한 입력 인수의 순서를 수정합니다. 생성된 입력 인수는 스칼라 변수 y, z, x입니다.

matlabFunction(r,"File","myfile","Vars",[y z x]);
function r = myfile(y,z,x)
%MYFILE
%    R = MYFILE(Y,Z,X)
r = x+y./2.0+z./3.0;

이제 기호 표현식 v를 입력 인수가 스칼라와 벡터인 MATLAB 함수로 변환합니다. Vars 이름-값 인수를 셀형 배열 {t,[x y z]}로 지정합니다. 생성된 입력 인수는 스칼라 변수 t와 1×3 벡터 변수 in2입니다.

syms x y z t
v = (x + y/2 + z/3)*exp(-t);
matlabFunction(v,"File","myfile","Vars",{t,[x y z]});
function v = myfile(t,in2)
%MYFILE
%    R = MYFILE(T,IN2)
x = in2(:,1);
y = in2(:,2);
z = in2(:,3);
v = exp(-t).*(x+y./2.0+z./3.0);

벡터 변수를 입력 인수로 사용하는 MATLAB 함수를 생성하려면 Vars 이름-값 인수를 셀형 배열로 지정합니다.

두 1×3 벡터의 내적을 구하는 기호 표현식을 만듭니다.

syms x y [1 3] real
f = dot(x,y);

표현식 f를 MATLAB 함수로 변환합니다. Vars를 셀형 배열 {x,y}로 지정합니다. 생성된 입력 인수는 각각 xy에 대응하는 2개의 1×3 벡터 변수 in1in2입니다.

matlabFunction(f,"File","myfile","Vars",{x,y});
function f = myfile(in1,in2)
%MYFILE
%    F = MYFILE(IN1,IN2)
x1 = in1(:,1);
x2 = in1(:,2);
x3 = in1(:,3);
y1 = in2(:,1);
y2 = in2(:,2);
y3 = in2(:,3);
f = x1.*y1+x2.*y2+x3.*y3;

이제 네 변수의 함수인 기호 함수를 만듭니다.

syms g(x,y,z,t)
g(x,y,z,t) = x^2 + y^2 + z^2 - t^2;

함수 표현식 g를 MATLAB 함수로 변환합니다. 생성된 입력 인수를 g의 입력 변수에서 4×1 열 벡터로 지정하려면 Vars를 4×1 벡터를 포함하는 셀형 배열로 지정합니다. argnames를 사용하면 입력 변수 x, y, z, tg로부터 구할 수 있습니다.

matlabFunction(g,"File","myfunction","Vars",{argnames(g).'});
function g = myfunction(in1)
%MYFUNCTION
%    G = MYFUNCTION(IN1)
x = in1(1,:);
y = in1(2,:);
z = in1(3,:);
t = in1(4,:);
g = -t.^2+x.^2+y.^2+z.^2;

기호 표현식을 MATLAB 함수로 변환하고 결과 함수를 파일에 쓸 때 matlabFunction은 기본적으로 코드를 최적화합니다. 이 방법을 통해 해당 파일을 사용하는 추가 계산을 단순화하고 계산 속도를 높일 수 있습니다. 그러나 일부 기호 표현식과 기호 함수에서는 최적화된 코드를 생성하는 데 많은 시간이 소요될 수 있습니다. 코드 최적화를 비활성화하려면 Optimize 이름-값 인수를 사용하십시오.

기호 표현식을 만듭니다.

syms x
r = x^2*(x^2 + 1);

r을 MATLAB 함수로 변환하고 이 함수를 파일 myfile에 씁니다. 기본적으로 matlabFunction은 최적화된 코드를 포함하는 파일을 만듭니다.

f = matlabFunction(r,"File","myfile");
function r = myfile(x)
%MYFILE
%    R = MYFILE(X)
t2 = x.^2;
r = t2.*(t2+1.0);

Optimizefalse로 설정하여 코드 최적화를 사용하지 않습니다.

f = matlabFunction(r,"File","myfile","Optimize",false);
function r = myfile(x)
%MYFILE
%    R = MYFILE(X)
r = x.^2.*(x.^2+1.0);

기호 행렬을 MATLAB 함수로 변환할 때, matlabFunction은 기본적으로 조밀 행렬이 있는 기호 행렬을 표현합니다. 입력된 기호 행렬의 요소가 대부분 0인 경우에는 희소 행렬이 있는 기호 행렬을 표현하는 것이 더욱 효율적인 방법입니다.

3×3 기호 대각 행렬을 만듭니다.

syms x
A = diag(x*ones(1,3))
A =
[ x, 0, 0]
[ 0, x, 0]
[ 0, 0, x]

A를 숫자형 행렬을 나타내는 MATLAB 함수로 변환하고 결과를 파일 myfile1에 씁니다. 기본적으로, 생성된 MATLAB 함수는 모든 0 요소를 포함해 행렬의 각 요소를 지정하는 조밀한 숫자형 행렬을 만듭니다.

f1 = matlabFunction(A,"File","myfile1");
function A = myfile1(x)
%MYFILE1
%    A = MYFILE1(X)
A = reshape([x,0.0,0.0,0.0,x,0.0,0.0,0.0,x],[3,3]);

Sparse 이름-값 인수를 true로 설정하여 A를 MATLAB 함수로 변환합니다. 이제 생성된 MATLAB 함수는 0이 아닌 요소만 지정하고 모든 다른 요소는 0이라고 가정하는 희소 숫자형 행렬을 만듭니다.

f2 = matlabFunction(A,"File","myfile2","Sparse",true);
function A = myfile2(x)
%MYFILE2
%    A = MYFILE2(X)
A = sparse([1,2,3],[1,2,3],[x,x,x],3,3);

기호 표현식을 MATLAB 함수로 변환할 때 출력 변수의 이름을 지정할 수 있습니다. matlabFunctionFile 이름-값 인수가 없거나 파일 경로가 빈 문자형 벡터로 지정된 경우 함수 핸들을 만들고 Outputs 이름-값 인수를 무시합니다.

기호 표현식 rq를 만듭니다.

syms x y z
r = x^2 + y^2 + z^2;
q = x^2 - y^2 - z^2;

rq를 단일 MATLAB 함수로 변환하고 결과 함수를 파일 myfile에 쓰면 두 요소 name1name2로 구성된 벡터가 반환됩니다.

f = matlabFunction(r,q,"File","myfile", ...
                   "Outputs",{'name1','name2'});
function [name1,name2] = myfile(x,y,z)
%MYFILE
%    [NAME1,NAME2] = MYFILE(X,Y,Z)
t2 = x.^2;
t3 = y.^2;
t4 = z.^2;
name1 = t2+t3+t4;
if nargout > 1
    name2 = t2-t3-t4;
end

기호 함수를 익명 MATLAB 함수로 변환하여 주어진 좌표에서 기호 함수의 계산 속도를 높일 수 있습니다. matlabFunction을 사용하여 변환을 수행합니다. 기호 함수를 계산하면 정확한 기호 숫자가 반환되지만, MATLAB 함수를 계산하면 배정밀도 숫자가 반환됩니다.

x, y, z의 함수인 기호 함수 f(x,y,z)를 만듭니다.

syms f(x,y,z)
f(x,y,z) = y*z*sin(x) + x*sin(z)*cos(y) - z^3;

지정된 간격으로 3차원 그리드 좌표를 만듭니다.

[xDouble,yDouble,zDouble] = meshgrid(1:20,1:50,1:20);

이 좌표에서 기호 함수를 계산합니다. tictoc 호출 쌍을 사용하여 경과 시간을 측정합니다.

tic
fResult = f(xDouble,yDouble,zDouble);
toc
Elapsed time is 1.646188 seconds.

이 경우, 계산은 느리지만 정확한 기호 숫자가 반환됩니다. 결과 샘플을 표시합니다.

fResult(1:2,1:2,20)
ans = 

(20sin(1)+cos(1)sin(20)-800020sin(2)+2cos(1)sin(20)-800040sin(1)+cos(2)sin(20)-800040sin(2)+2cos(2)sin(20)-8000)

함수의 계산 속도를 높이기 위해 matlabFunction을 사용하여 기호 함수를 MATLAB 함수로 변환합니다. 동일한 좌표에서 MATLAB 함수를 계산합니다.

f1 = matlabFunction(f);
tic
fResult = f1(xDouble,yDouble,zDouble);
toc
Elapsed time is 0.036038 seconds.

이 경우, 계산이 더 빠릅니다. 계산된 MATLAB 함수는 배정밀도 숫자를 반환합니다. 결과 샘플을 표시합니다.

fResult(1:2,1:2,20)
ans = 2×2
103 ×

   -7.9827   -7.9808
   -7.9667   -7.9644

입력 인수

모두 축소

MATLAB 함수로 변환할 기호 입력값으로, 기호 표현식, 기호 함수, 기호 벡터 또는 기호 행렬로 지정됩니다. 희소 기호 벡터 또는 희소 기호 행렬을 변환할 때는 Sparse 이름-값 인수를 true로 지정합니다.

N개의 출력값이 있는 MATLAB 함수로 변환할 기호 입력값으로, 기호 표현식, 기호 함수, 기호 벡터 또는 기호 행렬이 쉼표로 구분되어 지정됩니다.

matlabFunction은 기호 벡터 또는 기호 행렬의 각 요소에 대해 개별 출력 인수를 만들지 않습니다. 예를 들어, ht = matlabFunction([x + 1, y + 1])은 한 개의 출력 인수가 있는 MATLAB 함수를 만들고, ht = matlabFunction(x + 1, y + 1)은 두 개의 출력 인수가 있는 MATLAB 함수를 만듭니다.

이름-값 인수

선택적 인수 쌍을 Name1=Value1,...,NameN=ValueN으로 지정합니다. 여기서 Name은 인수 이름이고 Value는 대응값입니다. 이름-값 인수는 다른 인수 뒤에 와야 하지만, 인수 쌍의 순서는 상관없습니다.

예: matlabFunction(f,File="myfile",Optimize=false)

R2021a 이전 버전에서는 쉼표를 사용하여 각 이름과 값을 구분하고 따옴표로 Name을 묶으십시오.

예: matlabFunction(f,"File","myfile","Optimize",false)

파일 헤더에 포함할 주석으로, 문자형 벡터, 문자형 벡터로 구성된 셀형 배열 또는 string형 배열로 지정됩니다.

생성된 MATLAB 함수를 포함하는 파일에 대한 경로로, 문자형 벡터 또는 string형 스칼라로 지정됩니다. 생성된 함수는 double형의 인수를 받으며 Symbolic Math Toolbox가 없어도 사용할 수 있습니다. File이 비어 있는 경우 matlabFunction은 익명 함수를 생성합니다. File.m으로 끝나지 않으면 함수가 .m을 추가합니다.

파일에 쓰는 경우 matlabFunctiont0, t1 등의 이름이 지정된 중간 변수를 사용하여 코드를 최적화합니다. 코드 최적화를 비활성화하려면 Optimize 이름-값 인수를 사용하십시오.

파일에 주석과 함께 MATLAB 함수 쓰기 항목을 참조하십시오.

함수 파일에 쓴 코드의 최적화 여부로, 논리값 1(true) 또는 0(false)으로 지정됩니다.

파일에 쓰는 경우 matlabFunction은 기본적으로 t0, t1 등의 이름이 지정된 중간 변수를 사용하여 코드를 최적화합니다.

File 이름-값 인수 없거나 파일 경로가 빈 문자형 벡터로 지정된 matlabFunction을 사용하면 함수 핸들이 만들어집니다. 이 경우 코드가 기본적으로 최적화되지 않습니다. Optimizetrue로 설정하여 코드 최적화를 강제로 적용하려고 하면 matlabFunction에서 오류가 발생합니다.

코드 최적화 비활성화하기 항목을 참조하십시오.

희소 행렬 생성을 사용할지 여부로, 논리값 0(false) 또는 1(true)로 지정됩니다. Sparse는 기본적으로 false이므로 생성된 MATLAB 함수는 조밀한 숫자형 행렬을 가진 기호 행렬을 나타냅니다. Sparsetrue로 지정하면, 생성된 MATLAB 함수는 희소 숫자형 행렬을 가진 기호 행렬을 나타냅니다. 0인 요소를 많이 포함하는 기호 행렬을 변환할 때는 Sparsetrue로 지정하십시오. 희소 행렬에 대한 연산이 조밀 행렬에 대한 동일한 연산보다 효율적인 경우가 많습니다.

희소 행렬 생성하기 항목을 참조하십시오.

생성된 MATLAB 함수의 입력 변수 또는 입력 벡터의 순서로, 문자형 벡터, 기호 변수로 구성된 벡터 또는 문자형 벡터, 기호 변수, 기호 변수의 벡터로 구성된 1차원 셀형 배열로 지정됩니다.

지정한 입력 변수의 개수는 f에서 기호 변수의 개수보다 크거나 같아야 합니다. Vars로 지정한 입력 변수와 Outputs로 지정한 출력 변수에 같은 이름을 사용하지 마십시오.

기본적으로 변수 이름에 소문자만 포함된 기호 표현식을 변환하는 경우, 입력 변수의 순서는 사전순입니다. 기호 함수를 변환할 때 입력 인수는 다른 변수 앞에 표시되고 다른 모든 변수는 사전순으로 정렬됩니다.

스칼라 변수를 입력 인수로 사용하는 MATLAB 함수를 생성하려면 Vars를 벡터로 지정합니다. 스칼라 변수와 벡터 변수의 조합을 입력 인수로 사용하는 MATLAB 함수를 생성하려면 Vars를 셀형 배열로 지정합니다.

생성된 함수에 대한 입력 인수 지정하기 항목을 참조하십시오.

출력 변수의 이름으로, 문자형 벡터로 구성된 1차원 셀형 배열로 지정됩니다.

출력 변수 이름을 지정하지 않으면 matlabFunction을 호출할 때 사용한 이름과 동일하게 지정됩니다. 개별 변수 대신 표현식을 사용하여 matlabFunction을 호출한 경우 출력 변수의 디폴트 이름은 단어 out과 그 뒤에 오는 숫자(예: out3)로 구성됩니다.

Vars로 지정한 입력 변수와 Outputs로 지정한 출력 변수에 같은 이름을 사용하지 마십시오.

File 이름-값 인수가 없거나 파일 경로가 빈 문자형 벡터로 지정된 matlabFunction은 함수 핸들을 만듭니다. 이 경우 matlabFunctionOutputs 이름-값 인수를 무시합니다.

출력 변수 지정하기 항목을 참조하십시오.

출력 인수

모두 축소

MATLAB 함수 핸들입니다. 이 함수 핸들을 사용하여 Symbolic Math Toolbox 없이 사용할 수 있는 수치 결과를 반환할 수 있습니다.

제한 사항

  • simplify, solve처럼 double 데이터형에서 연산을 수행하는, 상응하는 MATLAB 함수가 없는 일부 기호 함수는 변환된 MATLAB 함수 핸들 또는 파일에서 기호 함수로 유지됩니다. 이러한 함수로 구성된 변환된 파일은 MATLAB Coder™ 또는 MATLAB Compiler™를 사용하여 배포할 수 없습니다. 이러한 기호 함수를 바꾸려면 double 데이터형의 고유한 함수를 만들어야 합니다. 배포할 수 없는 기호 함수에 대해 관심이 있는 경우 MathWorks 기술 지원팀에 문의하십시오.

  • File 이름-값 인수를 사용하는 경우, rehash를 사용하면 생성된 함수를 즉시 사용할 수 있습니다. rehash는 알려진 파일들의 MATLAB 목록을 검색 경로의 디렉터리에서 업데이트합니다.

  • File 이름-값 인수가 비어 있으면 MATLAB 함수는 익명 함수를 반환합니다.

  • 기호 표현식에 조각별 조건과 같은 조건문이 포함되어 있는 경우 matlabFunction은 이러한 표현식을 익명 함수가 아닌 MATLAB 파일로 변환할 수 있습니다. 생성된 파일의 함수는 스칼라 입력값만 받을 수 있습니다. 예를 들어 조각별 조건을 piecewiseFunc라는 이름의 MATLAB 파일로 변환합니다.

    syms x
    p = piecewise(x<0, x^2-8, x>=0, -x)
    matlabFunction(p,"File","piecewiseFunc")
    y1 = piecewiseFunc(0)
    y2 = piecewiseFunc(-2)
  • matlabFunction을 사용하여 하나 이상의 기호 표현식을 MATLAB 함수로 변환하고 그 결과 함수를 M 파일에 작성할 수 있습니다. 그런 다음 생성된 M 파일을 사용해 MATLAB Compiler로 독립 실행형 응용 프로그램과 웹 앱을 만들 수 있습니다. 예제는 Deploy Generated MATLAB Functions from Symbolic Expressions with MATLAB Compiler 항목을 참조하십시오.

    또한 생성된 M 파일을 사용해 MATLAB Coder 앱으로 C 코드 또는 C++ 코드를 만들 수 있습니다. 예제는 Generate C Code from Symbolic Expressions Using the MATLAB Coder App 항목을 참조하십시오.

  • 스칼라 변수와 벡터 변수의 조합을 입력 인수로 사용하는 MATLAB 함수를 생성하려면 Vars 이름-값 인수를 셀형 배열로 지정합니다. 예제는 생성된 함수에 대한 입력 인수 지정하기 항목과 벡터 입력 인수를 사용하는 함수 생성하기 항목을 참조하십시오.

버전 내역

R2008b에 개발됨