Symbolic mathではシンボリック関数の配列が作成できる。微分もできる。

使い方次第だと思うが、面白い機能なので覚書。

 

シンボリック関数はsymfunで作ることができる(フォーマルなやり方)。簡易なやり方としてsym f(x,y)のようにすることもできる(xxとyyは自動生成される)。

 

syms phi1(xx) phi2(xx);

phi1(xx) = xx;
phi2(xx) = xx^2;

funcArray = symfun([1, phi1(xx), phi2(xx)], xx);

 

funcArray(xx) = [ 1, xx, xx^2] 

 

使い方:funcArray(2)とするとans = [ 1, 2, 4]が返ってくる。

 

補足:2変数関数にもできる

clear;

syms phi1(xx, yy) phi2(xx, yy);  % xxとyyは自動生成される

phi1(xx, yy) = xx*yy;
phi2(xx, yy) = xx^2 * yy^2;

funcArray = symfun([1, phi1(xx, yy), phi2(xx, yy)], [xx, yy]);

 

funcArray(xx, yy) = [ 1, xx*yy, xx^2*yy^2] 

 

 使い方:funcArray(2, 2)とするとans = [ 1, 4, 16]が返ってくる。

 

さらにその「シンボリック関数の配列」を(まるで普通の関数のように)微分することもできる。

chebVec(x, y) = chebyshevT([0, 1, 2], x) .* chebyshevT([0, 1, 2], y)

chebVec(x, y)  = [ 1, x*y, (2*x^2 - 1)*(2*y^2 - 1)]

diff(chebVec, x)

ans(x, y) = [ 0, y, 4*x*(2*y^2 - 1)]

 

公式ページのマニュアルだと少しわかりにくい。

参考:

jp.mathworks.com

jp.mathworks.com