3

MatLabでいろいろな機能やコマンドを学ぼうとしています。gradientコマンドについて質問です。

次のように定義するとします。

x = 0:1:10;

f = @(x) x.^2 + 2*x -1;

h = gradient(f(x))

これにより、次のベクトルが得られます。

h =  3     4     6     8    10    12    14    16    18    20    21

x が 1 ~ 9 の場合は値が正しいことがわかりますが、x = 0 と x = 10 の場合は正しくありません。x = 0 の場合、勾配は 2 であり、x = 10 の場合、勾配は 22 である必要があります。 . では、なぜ MatLab はこれら 2 つの入力値に対して誤った答えを返すのでしょうか?

誰かが私にこれを説明できるなら、私はそれを大いに感謝します!

4

3 に答える 3

4

実際、結果は正しいです。いつ

>> x0 = 0
>> f(x0) 
    -1

勾配が実際に 3 になるx=10ようf(10) = 119にしf(9)=98ます。

これらの結果と解析結果の不一致は、勾配が関連する境界の問題を伴う導関数の数値近似であるためです。

さらに少ないデータ ポイント、たとえば 2 つのポイントのみを指定した場合にどうなるかを考えてみましょう。アルゴリズムは、ポイント間の差を間隔で割った値として勾配を求めます。これが境界で起こっていることです。

于 2012-08-01T20:58:45.320 に答える
1

あなたは境界問題を見ていると思います。展開xすると、正しい答えが得られます。数値計算を実行していることを忘れないでください

于 2012-08-01T21:02:33.830 に答える