2016-10-16 6 views
0

私はそれがかのう1つの無名関数にすべてのこれらの機能を追加することでループ追加する無名関数は、MATLAB

for i = 1: n 
f = @(x) x + vec(i) 
end 

を持っています?

ありがとうございました。

+0

私はこの機能が全く意味を成さないとは確信していませんが、あなたが合計したいことを説明しようと思いますか? 'vec'の最初の' n'要素は 'x'だけ増加する必要がありますか?あるいは 'n'個の別々の関数が必要です。それぞれの関数は' vec(i) 'を' x'だけ増やします。 – mpaskov

+0

ので、すべてのループで機能は、私はたい何 X + 1 、 X + 4、 X + 3、 X + 56、 あるが(X + 1)である関数である+(X + 4)+(x + 3)+(x + 56)+ ... – user3532764

+0

異なる数( 'vec'からあらかじめ定義されている)を' x'に追加する異なる関数を 'n 'にします。そして、あなたが 'n'関数を持った後、あなたはそれらのものと一緒に何かを同時にしたいと思っています。 – mpaskov

答えて

0

私が提案できる最善の増分このようなあなたの機能を追加することです:

n = 10; 
vec = rand(1,n); % Random data 
f = @(x)x + vec(1); % Initial function 
for i = 2:n 
    f = @(x)x + vec(i) + f(x); % Add previous sum to next 
end 
x = 2; 
s = f(x) % Evaluate 

あなたが個別に各機能を保存し、その後合計する必要がある場合は、関数ハンドルのcell arrayを作成し、評価するcellfunを使用することができますxの特定の値のためにそれらのすべて:

n = 10; 
vec = rand(1,n); % Random data 
f = cell(1,n); % Pre-allocate cell 
for i = 1:n 
    f{i} = @(x)x + vec(i) % Save a handle to each function in cell array 
end 
x = 2; 
s = sum(cellfun(@(c)c(x),f)) % Evaluate each function at x and sum 

別のオプションは、これはあなたのACに応じて、非常に非効率的かもしれないが、Symbolic Mathを使用して、これを行うことであろうtual機能:

n = 10; 
vec = rand(1,n); % Random data 
syms x; 
f(x) = x+vec; % Create vector function 
x = 2; 
s = double(sum(f(x))); % Evaluate and convert to floating point 

それはあなたの実際の問題が何であるかを知ることは不可能だし、任意のこれらのより詳細な質問せずにあなたのために動作し、そうするかどうか、あなたの特定のアプリケーションのためにかなりそれらを変更する必要があるかもしれません。

関連する問題