1

関数のセットがある場合

f = @(x1,x2) ([x1 + x2; x1^2 + x2^2])

そして、私は2番目の行列を持っています

b = [x1,x2]

評価方法はf([b])?私が知っている唯一の方法は言うf(b(1),b(2))ことですが、変数の量が最大 n になる可能性があるため、それを自動化する方法がわかりません。また、個別に行ってプラグインするよりも良い方法があるかどうかも疑問に思っています.

4

3 に答える 3

1

これがN行2列の行列であるとすると、次のように値のすべてのペアに対してb呼び出すことができます。fb

cell2mat(arrayfun(f, b(:, 1), b(:, 2), 'UniformOutput', 0)')'

結果は、N行2列の行列にもなります。

または、変更が許可されている場合はf、ベクトルを入力として受け入れるように再定義して、次を呼び出すだけで結果全体を取得できるようにすることができますf(b)

f = @(x)[sum(x, 2), sum(x .^ 2, 2)]
于 2013-03-10T21:54:10.160 に答える
1

ベクトルを入力として受け取るように関数を書き直すことができます。

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]

于 2013-03-10T20:59:52.263 に答える
1

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])
于 2013-03-10T21:09:27.970 に答える