読者です 読者をやめる 読者になる 読者になる

MATLABで高階関数・クロージャ

MATLAB

JavaScriptやら関数型言語を学んでいたりすると,高階関数やらクロージャやらの概念がすんなり理解できるから嬉しい。
以下は目標値を与えると,「状態を受け取って制御入力を返す関数」を返す関数。

function [func] = input_poly_2d(h0, g0, th0, ph0)
  h1 = h0 * cos(th0);
  h2 = h0 * sin(th0)^2;

  g1 = g0 * cos(ph0);
  g2 = g0 * sin(ph0);
  g3 = sin(ph0) * cos(th0) / sin(th0);

  function [f, g, h] = func(s)
    x = s(1); y = s(2); z = s(3);
    f = 0;
    h = (1-z^2) * h1 - z * h2;
    g = -x * g1 - y * g2 - h * g3;
  end

  func = @func;
end

高階関数を多用すると計算速度は遅くなるのかもしれない。