1

Ok。だから私はMatLabにお互いを呼び出している2つの関数を持っています。

Riemann.m

function I = Riemann(f, dx, a, b)
   x = a:dx:b;
   fx = f(x).*dx;
   I = sum(fx);

およびmyfunc.m

function f = myfunc(x)
   f = sin(1./x);
   for n=1:100
        I = Riemann(@myfunc, 0.001, 1/n, 1);
   end
   plot(I)

問題はそれを実行させることです。myfuncを呼び出して、そこから何かを引き出すにはどうすればよいですか。私が試したものはすべて、無限の再帰呼び出しスタックになります(これは理にかなっています)。

4

3 に答える 3

4

問題は関数の定義にあります。再帰的定義を使用できるようにするには、少なくとも一部の値について、2つの関数の少なくとも1つを他の関数なしで計算できる必要があります。また、すべての計算が、再帰なしで取得できるこれらの結果に依存することになることを確認する必要があります。

あなたの特定の問題については、関数f(x)= sin(1./x)を統合したいと思います。その場合、2番目の関数のコードは次のようになります。

function f = myfunc(x)
   fct = @(x) sin(1./x);
   f = fct(x);
   for n=1:100
        I = Riemann(fct, 0.001, 1/n, 1);
   end
   plot(I)
于 2009-06-02T10:30:07.943 に答える
0

myFuncがRiemannの呼び出しを停止したときに、入力xの最終条件が必要です。また、myFuncを呼び出すよりも、実際の関数(この場合はsin)をRiemannに送信することをお勧めします。

于 2009-06-02T10:27:47.853 に答える
0

関数myfuncは、本来f = sin(1./x);あるべき場所の後で終了しません。そこで関数を終了し、他の場所(別のファイル)からプロットコードを呼び出します。

マニュアルから:endステートメントを使用して任意の関数を終了できますが、ほとんどの場合、これはオプションです。endステートメントは、1つ以上のネストされた関数を使用するMファイルでのみ必要です。このようなMファイル内では、すべての関数(primary、nested、private、およびsubfunctionsを含む)をendステートメントで終了する必要があります。endで任意の関数型を終了できますが、Mファイルにネストされた関数が含まれていない限り、終了する必要はありません。

于 2009-06-02T10:30:00.987 に答える