MATLAB:可変パラメーターを使用して関数をすばやく呼び出す方法-パラメーター化された関数(ネストされた関数のパラメーター化、無名関数のパラメーター化)

パラメータ化された関数

  • 概要このトピックでは、MATLAB®関数の数学関数(fzeroやintegralなど)に渡される追加のパラメーターを格納またはアクセスする方法を示します。

  • MATLAB関数関数は、値の範囲に基づいて数式を計算します。これらの関数は
    、関数ハンドル(関数へのポインター)を入力として受け入れる関数であるため、関数関数と呼ばれます。これらの各関数では、目的関数に特定の数の入力変数が必要です。たとえば、fzeroと
    integralは、入力変数が1つだけの関数へのハンドルを受け入れます。

    係数bとcの値が異なる場合に、3次多項式x3 + bx + cのゼロ点を計算する必要があるとします。3つの入力変数(x、b、およびc)を受け入れる関数を作成することはできますが、3つすべての入力を必要とする関数ハンドルをfzeroに渡すことはできません。ただし、無名関数またはネストされた関数の属性を使用して、他の入力値を定義できます。

1.入れ子関数のパラメーター化を使用する

パラメータを定義する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の場合、多項式のゼロ点が必要です。開始点x0 = 0を使用する場合は、コマンドラインからfindzeroを呼び出すことができます。

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

2.
パラメーター化に無名関数を使用する追加のパラメーターにアクセスする別の方法は、無名関数を使用することです。匿名関数は、個別のプログラムファイルを作成せずに1つのコマンドで定義できる関数です。これらの関数は、現在のワークスペースで使用可能な任意の変数を使用できます。

たとえば、3次多項式を記述する無名関数へのハンドルを作成し、ゼロ点を見つけます。

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

変数cubicpolyは、入力xを持つ無名関数の関数ハンドルです。匿名関数の入力は括弧内に示され、関数ハンドルの作成に使用される@記号の直後に表示されます。キュービックポリを作成するときにbとcがワークスペースにあるため、無名関数はこれらの係数の入力を必要としません。

無名関数の中間変数cubicpolyを作成する必要はありません。関数ハンドルの定義全体を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