MATLAB : 가변 매개 변수 매개 변수화 함수 (중첩 함수 매개 변수화, 익명 함수 매개 변수화)를 사용하여 함수를 빠르게 호출하는 방법

매개 변수화 된 기능

  • 개요 이 어떻게 저장하는 항목을 표시하거나 (예 : fzero 또는 통합 등) 수학 함수의 MATLAB 함수에 전달 액세스 추가 매개 변수를.

  • MATLAB 함수 함수는 값 범위를 기반으로 수학 식을 계산합니다. 이러한 함수는
    함수 핸들 (함수에 대한 포인터)을 입력으로받는 함수이기 때문에 함수 함수 라고합니다 . 이러한 각 함수에는 목적 함수가 특정 개수의 입력 변수를 포함해야합니다. 예를 들어, fzero 및
    적분은 정확히 하나의 입력 변수가있는 함수에 대한 핸들을 허용합니다.

    계수 b와 c가 다른 값을 가질 때 3 차 다항식 x3 + bx + c의 영점을 계산해야한다고 가정합니다. 세 개의 입력 변수 (x, b, c)를 받아들이는 함수를 만들 수 있지만 세 입력이 모두 필요한 함수 핸들을 fzero에 전달할 수는 없습니다. 그러나 익명 함수 또는 중첩 함수의 속성을 사용하여 다른 입력 값을 정의 할 수 있습니다.

1. 중첩 함수 매개 변수화 사용

매개 변수를 정의하는 한 가지 방법은 프로그램 파일의 다른 함수 내에 완전히 포함 된 중첩 함수를 사용하는 것입니다. 이 예에서는 상위 함수 findzero 및 중첩 함수 poly를 포함하는 findzero.m이라는 파일이 생성됩니다.

function y = findzero(b,c,x0)

y = fzero(@poly,x0);

   function y = poly(x)
   y = x^3 + b*x + c;
   end
end

이 중첩 함수는 입력 변수 x를 사용하여 3 차 다항식을 정의합니다. 상위 함수는 매개 변수 b와 c를 입력 값으로받습니다. findzero 내에서 poly를 중첩하는 이유는 중첩 함수가 부모 함수의 작업 공간을 공유하기 때문입니다. 따라서 poly 함수는 findzero에 전달하는 b 및 c의 값에 액세스 할 수 있습니다.

b = 2 및 c = 3.5 인 경우 다항식의 0 점이 필요합니다. 시작점 x0 = 0을 사용하는 경우 명령 줄에서 findzero를 호출 할 수 있습니다.

x = findzero(2,3.5,0)
x =
   -1.0945

2. 매개 변수화에 익명 함수 사용
추가 매개 변수에 액세스하는 또 다른 방법은 익명 함수를 사용하는 것입니다. 익명 함수 는 별도의 프로그램 파일을 만들지 않고 단일 명령으로 정의 할 수있는 함수 입니다. 이러한 함수는 현재 작업 공간에서 사용 가능한 모든 변수를 사용할 수 있습니다.

예를 들어, 3 차 다항식을 설명하는 익명 함수에 대한 핸들을 만들고 0 점을 찾습니다.

b = 2;
c = 3.5;
cubicpoly = @(x) x^3 + b*x + c;
x = fzero(cubicpoly,0)
x =
   -1.0945

cubicpoly 변수는 입력 x가있는 익명 함수의 함수 핸들입니다. 익명 함수의 입력은 함수 핸들을 만드는 데 사용 된 @ 기호 바로 뒤에 괄호 안에 표시됩니다. cubicpoly를 만들 때 b와 c가 작업 공간에 있으므로 익명 함수는 이러한 계수를 입력 할 필요가 없습니다.

익명 함수에 대해 중간 변수 큐빅 폴리를 만들 필요가 없습니다. 함수 핸들의 전체 정의는 fzero 호출에 포함될 수 있습니다.

b = 2;
c = 3.5;
x = fzero(@(x) x^3 + b*x + c,0)
x =
   -1.0945

익명 함수를 사용하여 함수 파일에 정의 된 더 복잡한 대상 함수를 호출 할 수도 있습니다. 예를 들어, 다음 함수 정의가있는 cubicpoly.m이라는 파일이 있다고 가정하십시오.

function y = cubicpoly(x,b,c)
y = x^3 + b*x + c;
end

명령 줄에서 b와 c를 정의한 다음 cubicpoly를 호출하는 익명 함수를 사용하여 fzero를 호출합니다.

b = 2;
c = 3.5;
x = fzero(@(x) cubicpoly(x,b,c),0)
x =
   -1.0945

노트

매개 변수 값을 변경하려면 새로운 익명 함수를 만들어야합니다. 예 :

b = 10;
c = 25;
x = fzero(@(x) x^3 + b*x + c,0);

추천

출처blog.csdn.net/qq_40797015/article/details/108071700