関数のセットがある場合
f = @(x1,x2) ([x1 + x2; x1^2 + x2^2])
そして、私は2番目の行列を持っています
b = [x1,x2]
評価方法はf([b])
?私が知っている唯一の方法は言うf(b(1),b(2))
ことですが、変数の量が最大 n になる可能性があるため、それを自動化する方法がわかりません。また、個別に行ってプラグインするよりも良い方法があるかどうかも疑問に思っています.
関数のセットがある場合
f = @(x1,x2) ([x1 + x2; x1^2 + x2^2])
そして、私は2番目の行列を持っています
b = [x1,x2]
評価方法はf([b])
?私が知っている唯一の方法は言うf(b(1),b(2))
ことですが、変数の量が最大 n になる可能性があるため、それを自動化する方法がわかりません。また、個別に行ってプラグインするよりも良い方法があるかどうかも疑問に思っています.
これがN行2列の行列であるとすると、次のように値のすべてのペアに対してb
呼び出すことができます。f
b
cell2mat(arrayfun(f, b(:, 1), b(:, 2), 'UniformOutput', 0)')'
結果は、N行2列の行列にもなります。
または、変更が許可されている場合はf
、ベクトルを入力として受け入れるように再定義して、次を呼び出すだけで結果全体を取得できるようにすることができますf(b)
。
f = @(x)[sum(x, 2), sum(x .^ 2, 2)]
ベクトルを入力として受け取るように関数を書き直すことができます。
f = @(b)[b(1) + b(2); b(1)^2 + b(2)^2]
次に、たとえば、b=[2 3]
呼び出しf(b)
は を返します[2+3; 2^2+3^2]=[5; 13]
。
convertToAcceptArray.m:
function f = convertToAcceptArray(old_f)
function r = new_f(X)
X = num2cell(X);
r = old_f(X{:});
end
f = @new_f
end
使用法.m:
f = @(x1,x2) ([x1 + x2; x1^2 + x2^2])
f2 = convertToAcceptArray(f);
f2([1 5])