4

SICPに関する以前の講義のいくつかを再視聴しています。固定小数点の概念は、私には少し混乱します。不動点手続き: このように考える必要がありますか? 「これは、与えられた関数の不動点を見つける方法です。」だから与えられたf(2) = 2

また、この講義yで、マップされる新しい関数x / yが不動点であると述べられているのはなぜですか?

4

4 に答える 4

2

ウィキペディアの 定点 (数学) によると:

数学では、関数の固定点 (不変点とも呼ばれる固定点と短縮されることもあります) は、関数によってそれ自体にマップされる関数のドメインの要素です。

あなたが書いたように、はの不動点であるf(2) = 2ことを示します。2f

于 2014-08-18T14:20:46.937 に答える
1

反復関数で前回と同じ結果が得られたときです。それを理解するには、既知のシーケンスの通常の関数を想像してください。

関数を想像してみてくださいf(x) = 2^(n+1)-1。これはメルセンヌ数列と呼ばれ、0 からのインデックスを与えることになっており、数列を作成します1, 3, 7, 15, 31, ... (基本的には、2 の累乗よりも 1 少ない数です)。

関数を反復的に変更することで、同じシーケンスを作成できます。繰り返しバージョンはf(x) = 2x + 1. x はもうインデックスではなく、前の結果になります。あなたは0から始めて、1, 3, 7, 15, 31, ...

この関数を適用した結果は常に引数よりも大きいため、この関数には固定小数点がありません。爆発すると言えます。

あなたの最初の質問に答えるために。SICP ビデオでは、平方根について話しています。n の平方根は、他の関数にマップされないf(x) = n/xため、反復関数の固定小数点です。sqrt(x^2) = x

一般的な固定小数点関数は、固定小数点の定義に似ており、関数に入力する値が次の計算された数値と等しくなる (または十分に近くなる) まで関数を反復します。

これで、メルセンヌから固定点を見つけることができなかったことがわかりました。収束するには減衰を平均n/x化する必要があることがわかりましたが、収束するなど、一部の関数は実際には単独でf(x) = x/4 + 1収束し3/2ます。減衰を平均化しても、3/2固定小数点のない関数だけが永遠にループすることに注意してください。

于 2014-08-18T17:20:46.263 に答える
1

これが私の2セントです。それは確かに混乱する可能性があります。

まず、簡単な定義: 点xは、関数 の "固定点"fですf(x) == x

逆に言えば、x = f(x).

上記は意味がありますか?ありそうもない。結局のところ、定義されている値を使用します。

xただし、必ずしも単純な数ではありません。関数または遅延無限リストにすることができ、それを部分的に定義するf効果を持つことができます。その後、評価を繰り返すことにより、

x = f(x) = f( f(x)) = f( f( f(x))) = f( f( f( f(x)))) = ....

値はますます定義されています。さて、これf(y) = (y + n/y)/2反復計算による不動点を計算する数値例を思い出させます。

n=25; f(1.0)=13.0; f(13.0)=7.4615383; f(7.4615383)=5.406027;
      f(5.406027)=5.0152473, f(5.0152473)=5.0152473; f(5.0152473)=5.0

重要な部分は、評価の無限連鎖が終了するまで待つのではなく (決して終了することはありません)、評価ステップの進行を記録する遅延リストを作成することです。次に、無限リストの値が徐々に定義されます。最初はまったく定義されていません。次に、その最初の (ヘッド) 要素が定義され、残りはまだ定義されていません。次に、最初の 2 つの要素が定義されます。等等:[1.0,13.0,7.4615383,5.406027,5.0152473,5.000023,5.0,5.0,5.0 ...]

そして、数値がある数値に収束し、「最終」値にどんどん近づいていくように (完全に到達することはありませんが、距離はどんどん小さくなっていきます)、結果の無限リストもその最終値に収束します。 、すべての要素が定義された完全に定義された無限リスト (もちろん、まったく不可能な偉業です)、その究極の値に定義がますます近づいています (簡単に言えば、その要素を 1 つずつ定義することですが、数学者はそれが複雑であることを好みます) )。

関数についても同様です。g(h,n) = n<2 -> 1 ; else -> n*h(h,n-1)theng(error)が に対してのみ定義された 1 つの引数の (カリー化された) 関数である場合n < 2、他の引数と同様に発散します (エラーが発生します)。しかしg( g(error))、すべてに対して定義されていn < 3ます。g( g( g(error)))- for alln < 4など。繰り返しになりますが、値の進行がますます定義されています...そして、その進行の限界、「究極の値」、関数の固定点gは、どんなに大きくても。偶然にも、再帰を使用せずに定義された階乗関数です。ff = g(f) n

于 2014-08-27T19:59:42.040 に答える