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
高階関数を多用すると計算速度は遅くなるのかもしれない。