2016-03-31 15 views
1

に私は、このフォーム足りません入力引数は、関数

function [g] = g(i,j) 
    k=1; 

    if i==0 
     g=0; 
    elseif i==k 
     g=j; 
    end 

の機能を持っていると私は、コードの2行目を望んでいません。代わりに、メインプログラムからkを読み込む関数が必要です。このように、私は、メインプログラムのコードでI、J、Kの関数としてグラムを記述する必要がありますので、私は、代わりに

function [g] = g(i,j,k) 

を書きたくはありません。別の方法がありますか?

+0

'G(i、j、k)は、あなたが関数にあなたの入力が何であるかを知っているように、'であるとあなたの関数を呼び出すための全体の理由今、あなたはこれを避けたいですか?あなたにはどんな良い理由がありますか?代わりに、メインプログラムのkをどのように関数に入れたかを入れて、kを再計算することができます。 – GameOfThrows

+0

@GameOfTは、関数を一般的に保っているメインプログラムで定義されている '' k ''を持つ方が理にかなっているかもしれませんが、毎回呼び出すのは面倒です。そうでなければ、余分な '、k'を追加することはあなたの方法で回避することはほとんどありませんが、ここではたくさんの時間と呼ばれると思います。 – Dan

+0

@Danあなたは正しいです、あなたの答えは代案ですが、これはあまり働かないし、関数呼び出しに '、k'を追加することは実際には分かりません。それは記憶スペースを節約すると推測し、バイトはバイトであり、それは関係なく良い選択肢です。 – GameOfThrows

答えて

3

匿名関数を使用してclosureを作成することができます。

function [g] = g(i,j,k) 
    if i==0 
     g=0; 
    elseif i==k 
     g=j; 
    end 
end 

としてあなたの関数を定義し、あなたの主なスクリプトで、あなたは

k=1; 
g2 = @(i,j)g(i,j,k); 

ような何かを行うことができますそして今、あなたはあなたが前gを呼んでいた道g2を呼び出すことができますが、k1になり、それがします関数内ではなくメインスクリプトで定義することができます。

それともあなたも完全にkをスキップして定義することができます。

g1 = @(i,j)g(i,j,1) 
+0

ありがとう!完璧に働いた。まさに私が必要なもの。 – ourania

関連する問題