2012-02-01 17 views
1
私は関数に関数ハンドルを作成したい

短縮長い表現

f = @(x) (x-1)*(x-2)*...*(x-50); 
私はすべての50点の条件を入力せずにMATLABでこれを行うことができますどのように

答えて

5

を定義することができ、y = myfunc(x, 50)を使用したりできるよう、50の用語のため、この結果を計算したいあなたのケースで

はベクトル化ソリューションです。 :

y = prod((x-[1:50])) 

それとも、匿名関数をしたい場合:

f = @(x) (prod((x-[1:50]))) 

BそれはMatlab JIT-Acceleratorのおかげで、@Chrisの解決策(これは良いことですが、私はそれを上書きしました)よりも速くないかもしれません。

+0

'f = @(x- [1:50])'が働いていて、 'f = @(x)prod(x-1:50)'が何かを作り出しています。 –

1

関数にラップすることができます。たとえば、あなたが定義した

function y = myfunc(x, n) 
    y = 1.; 
    for i = 1:n 
     y = y*(x-i); 
    end 
end 

機能は、基本的には自明forループとして書かれているproduct of a sequence、です。あなたはちょうどあなたが、これは関数ハンドルになりたい場合は、あなたがここで

f = @(x) myfunc(x, 50);