dポイントプレゼントキャンペーン実施中!

大学の課題でニュートン法のプログラミングをやっているのですが
よくわからないので教えてください
f(x)=exp(-x)-sin(x)=0についてニュートン法で解きたいです。
include <stdio.h>
#include <math.h>

/* Main Routine */
int main(void)
{
/* Define Vaiables */
double dd0,dd, xx;
int ii;


/* Input Data */
printf("INPUT Initial value: "); //DONOT EDIT 1/7
scanf("%lf",&xx); //DONOT EDIT 2/7
printf("INPUT Target residual 'eg, 1.0E-8': "); //DONOT EDIT 3/7
scanf("%lf",&dd0); //DONOT EDIT 4/7

ii = 1;

/* Newton Loop */
printf("Iteration: %5d, Residual: %15.7e,"//DONOT EDIT 5/7
" Solution: %15.7e\n", //DONOT EDIT 6/7
ii, dd, xx); //DONOT EDIT 7/7

return 0;
}
これが先生から配布されていてこれに付け足して完成して提出という形です。
どのくらいの精度までやりたいかというと残差R=0-f(x)が1.0E-9より小さくなるまでです。
回数は数えません。
よろしくお願いします

質問者からの補足コメント

  • 初期値を与えてその時のfxと微係数dfxを求めて、残差をRとするとR=0- fxとなる。この残差が許容範囲1.0e-9に収まらなければx1=x0- fx/dfxとして次のxを求め、残差が許容範囲に収まるまで試行を続ける。最後に何回試行したかと近似解、その時の範囲を出す。

    これをプログラミングで表すことができないんです。

    先生から配布されたやつに上の足して提出します。

    それと配布されたやつにあるprintのeg, 1.0E-8というものが何を意味するのかわかりません。

      補足日時:2018/01/07 03:02
  • include <stdio.h>
    #include <math.h>
    int main(void)
    {
    double dd0,dd, xx;
    int ii;
    /* Input Data */
    printf("INPUT Initial value: ");
    scanf("%lf",&xx);
    printf("INPUT Target residual 'eg, 1.0E-8': ");
    scanf("%lf",&dd0);

    ii = 1;
    printf("Iteration: %5d, Residual: %15.7e,"
    " Solution: %15.7e\n",
    ii, dd, xx);

    return 0;
    }

    配布されたやつです。

      補足日時:2018/01/07 03:22
  • 残差が許容範囲に収まらなければ次のxを求めるというところです。

    プログラミムを作ってみても次のxの値が出てこないんですよね。xの値が初期値のままで次のx2が現れないというか

    説明はわからないと思いますがここの部分がわかりません

      補足日時:2018/01/07 21:24
  • あと許容範囲に収まらなければってところもわかりません。

    条件をRが許容範囲より大きかったら繰り返すとすればいいことはわかりました。しかしその残差R=0-fxと置くとfxが初期値xの時のfxとなりループしない?みたいな感じで、、、
    条件式(R>許容範囲)
    次のx=〜〜

    とやったんですけど、これだと条件の部分は初期値xのままなんですよね

    すみません、説明がちゃんとできなくて

      補足日時:2018/01/07 21:29
  • ループの外に書いてました。ループの中に書けばいいんですか?

    その時の条件式はどうすればいいのでしょうか。残差Rが必要になると思うんですけど

      補足日時:2018/01/07 23:24

A 回答 (4件)

そのうまく動かないプログラムを見ないことには、どこが間違っているかわかりません。





せいいっぱいの想像力と過去の経験を踏まえて予想するに。

fx=exp(-x)-sin(x)
とか
R=0-fx
を「ループの外」に書いてないですか?
こんな風に書iけば、 xの値が変わればfxも変わる、fxが変わればRも変わる、と誤解している人を見たことがあります。
    • good
    • 0
この回答へのお礼

ありがとうございました。ループの中にも書いたら解決しました。

お礼日時:2018/01/24 12:47

で、その問題文の中で、具体的にどこがわからないのでしょうか?



以下は、問題文を分割して、ちょっとだけ補足修正したものです。
それぞれ、わかるのか、わからないのか、わからないなら具体的にどこがわからないのか、考えてみましょう。

・初期値を与えて、現在のx とする。( というところは、プログラムに既に書かれている)
( 許容範囲を入力するところも、プログラムに既に書かれている)
・試行回数は最初は1
・(ここから)
・fxと微係数dfxを求めて
・残差をRとするとR=0- fxとなる。(プログラムではRという変数ではない)
・この残差が (入力した)許容範囲に収まらなければ 「次のx」=「現在のx」- fx/dfx として次のxを求める
 試行回数は+1する。
・残差が許容範囲に収まるまで「(ここから)からの」試行を続ける。
・最後に何回試行したかと近似解、その時の範囲(残差のこと?)を出す。(というところは、プログラムに既に書かれている。)

これを「C言語という外国語」に「直訳」すれば、ほぼ答えになります。

> eg, 1.0E-8というものが何を意味するのかわかりません。
https://dictionary.goo.ne.jp/ej/27081/meaning/m0 …
    • good
    • 0

>1.0E-8



浮動小数点ってやつですね
私は一度も使ったことはありません
    • good
    • 0

なにがわからない?

    • good
    • 1

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!