1

テイラー級数を使用して、関数を解くための数値的に健全なアルゴリズムを開発しようとしています。私はかなり長い間それに取り組んできましたが、まだ運がありません。何が間違っているのかわかりません。

機能は

f(x)=1 + x - sin(x)/ln(1+x)   x~0

また、この関数で精度が失われるのはなぜですか? x がゼロに近い場合、sin(x)/ln(1+x) は x と同じ数にさえ近くありません。どこで重要性が失われているのかさえわかりません。

これを解決するには、sin(x) と ln(1+x) のテイラー展開を使用する必要があると思います。

x - x^3/3! + x^5/5! - x^7/7! + ...

x - x^2/2 + x^3/3 - x^4/4 + ...

それぞれ。分母のようなものを使用して x と sin(x)/ln(1+x) コンポーネントを組み合わせたり、3 つすべてを組み合わせたりしようとしましたが、最終的には何もうまくいかないようです。どんな助けでも大歓迎です。

4

6 に答える 6

3

x ~ 0も 0 に近いため、精度が低下する可能性があるためln(1+x)、非常に小さな数で割ることになります。コンピュータはそれが得意ではありません;-)

テイラー級数をln(1+x)直接使用すると、項の無限級数で除算することになるので、ちょっと面倒です。このような場合、私は通常、定義から関数全体のテイラー級数を計算することを好みます。

f(x) = f(0) + f'(0) x + f''(0) x/2 + f'''(0) x/6 + ...

そこからあなたが得るでしょう

f(x) = 2 + 3x/2 - x^2/4 - x^3/24 - x^4/240 - 23x^5/1440 + 31x^6/2880 ...

(ごまかして Mathematica にプラグインしました ;-) Steve が言うように、この級数はそれほど速く収束しませんが、現時点ではより良い方法を思いつきません。

編集:私は質問を誤解していると思います-あなたがしようとしているのが関数のゼロを見つけることだけなら、テイラー級数を使用するよりも間違いなく良い方法があります.

于 2009-02-12T20:51:51.933 に答える
1

これは宿題なので、正しい方向に向けていくつかの指針を示してみます。

解決策 1

Talyor 級数近似を使用するのではなく、ニュートン ラフソン法、線形補間、または区間二分法などのルート検出アルゴリズムを単純に使用するようにしてください (またはそれらを組み合わせることもできます)。これらは実装が非常に簡単で、開始値を適切に選択することで、ルートを正確な値にすばやく収束させることができます。

解決策 2

なんらかの理由でテイラー級数近似を本当に使用する必要がある場合は、sin(x)、ln(x) などを展開するだけです。(あなたの場合、ln(x) を掛けて分母を削除するとうまくいきます)。次に、ある種の多項式ソルバーを使用する必要があります。合理的な精度が必要な場合は、私が想像する 3 乗または 4 乗を超える必要があります。つまり、単純な分析ソリューションは簡単ではありません。ただし、任意の次数の一般多項式を解くためのDurand-Kerner 法のようなものを調べたい場合があります。それでも、高次の用語を使用する必要がある場合、このアプローチは複雑になるだけなので、解決策 1 をお勧めします。

それが役立つことを願っています...

于 2009-02-12T20:47:25.470 に答える
1

x -->0 として ln(x+1) に何が起こるかを調べる必要があると思います。そうすれば、この関数が x = 0 の近くでうまく動作しない理由がわかります。

于 2009-02-12T20:50:04.433 に答える
0

私はこれをそれほど詳しく調べていませんが、いくつかのテイラー級数は非常にゆっくりと収束することに注意する必要があります。

于 2009-02-12T20:40:15.317 に答える
0

問題で使用されている方法は正しいです。電卓がラジアン モードになっていることを確認してください。

于 2010-03-15T18:24:01.290 に答える
0

f のテイラー級数を直接計算するだけです。

Maximaは私に (x=0 に関する最初の 4 項) を与えます:

(%i1) f(x):=1 + x - sin(x)/log(1+x);
                                           - sin(x)
(%o1)                     f(x) := 1 + x + ----------
                                          log(1 + x)


(%i2) taylor(f(x),x,0,4);
                                2    3    4
                           x   x    x    x
(%o2)/T/                   - + -- + -- + --- + . . .
                           2   4    24   240
于 2009-02-12T20:48:42.457 に答える