2016-09-26 4 views

答えて

0

これは、MATLABのode45関数がどのように機能するかを示しています。 ode45(@関数、tの[開始、終了]、yの初期値)

は、したがって、上記の例では、関数は、例1であり、t0は0になり、TN(最後の点)が4 *のPIとなり、Yの初期値は3

ode45は使用の最も重要な部分であります機能を適切に設定しています。関数がdy/dtにどのように設定されているかに注目してください。このため、初期点が与えられると、tの増加に伴ってyの変化を計算できるので、時刻tにyの残りの点を生成することができます。

2

@オペレータは、2つ(多分)異なったtypes of handlesを作成することができます:単純で匿名です。単純な関数ハンドルは、関数ファイルを直接参照し、in-directionの他のレベルを持たないハンドルです。無名関数は、それ自体が(非常に単純な)関数であり、一定の格納、クロージャー、およびその他の目的のための独自の作業領域を持つハンドルです。違いはfunctions機能を使用して見ることができます。

>> f1 = @example1 
f1 = 
    @example1 

>> f2 = @(t,x) example1(t,x) 
f2 = 
    @(t,x)example1(t,x) 

>> functions(f1) 
ans = 
    function: 'example1' 
     type: 'simple' 
     file: 'C:\Development\example1.m' 

>> functions(f2) 
ans = 
      function: '@(t,x)example1(t,x)' 
       type: 'anonymous' 
       file: '' 
      workspace: {[1x1 struct]} 
    within_file_path: '__base_function' 

無名関数が原因彼らは単に関数へのポインタとあなたがparameterizing functionsしている場合にのみので、本当に必要とされているよりも多くあることにオーバーヘッドのビットを追加します。

かかわらず、創造の

ode45とその親族は常にfevalを経由して、あなたがそれを渡すハンドルにty引数のペアを渡そうとするだろう、とあなたは、直接ファイルハンドルに対する無名関数を使用している場合、引数リストがのみ必要です参照。

+0

明白なのは、 '@ '演算子が関数ハンドルの演算子であり、匿名関数ではないということです。 'f = @(x、y)x + y;と同様の無名関数を書くとき、これは実際には関数f(x、y)= x + yを作成し、それを関数ハンドルfに付けることを意味する。これとは別に、素晴らしい答え! +1。 – patrik

+0

@patrikそれは公正な点です。私はしばしば怠け者になり、文脈を区別せず、単なる特殊な演算子と考えるだけです。 – TroyHaskin

関連する問題