0
double a = 1, Lspan = 30, Lcable = 33, fn, fdn, dfn, j;

fn = (2 * a * (Math.Sinh(Lspan / 2 * a))) - Lcable;

fdn = (2 * (Math.Sinh(Lspan / 2 * a)) - ((Lspan / 2 * a) * Math.Cosh(Lspan / 2 * a)));

dfn = -fn / fdn;

do
    j = a + dfn;
while (dfn > 0.00000000001);

それが私のコードです。私はそれが非常にひどく書かれていることを知っています!私は初心者です。だからここに私の質問があります.上から私がやろうとしていることはニュートンラフソン法です..

x n+1 = x n - f(x n )/f'(x n )

上記のように f(x n )/f'(x n )を計算する方法はわかりましたが、問題があるのは x nの部分です。

知らない人のために説明すると、ニュートン ラフソンを使用して、x nの推定値を与えます。1 と言って、それを埋めます。その後、得られた新しい答えは方程式のx nになり、それを次のように埋めます。あなたは限界に達します。あなたがそれに従うことができれば、正直に言うと非常に悪いことが書かれています! それでは、お願いします、あなたの助けが必要です!

4

2 に答える 2

3

ニュートン・ラフソンが使っていると思います

x n+1 = x n - f(x n )/f'(x n )

+1 の書式設定が間違っている可能性があります (現在は修正されています)。

この場合、x nを更新しながら十分に近づくまでループします。あなたのコードはこれを使用しようとしていると思いjますax退屈して代わりに使用しましょう:

double x = 1, Lspan = 30, Lcable = 33, fn, fdn, dfn;

do
{
    fn = (2 * x * (Math.Sinh(Lspan / 2 * x))) - Lcable;

    fdn = (2 * (Math.Sinh(Lspan / 2 * x)) - ((Lspan / 2 * x) * Math.Cosh(Lspan / 2 * x)));

    dfn = -fn / fdn;

    x += dfn;
}
while (dfn > 0.00000000001);

注 - これにより、ループする場所の問題が解決されます。条件について考える必要がありwhileます-おそらく絶対値を確認する必要があります。最初から -1000 だとどうなるでしょうか?

于 2013-11-27T14:23:15.760 に答える