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

c言語でsinx=0(0<x<5)をニュートン法で解くプログラムを教えてください。
全く意味がわかりません。

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

  • ニュートン法についてはしっていますが、プログラムの立て方がよくわかりません

      補足日時:2020/11/29 18:48

A 回答 (4件)

> 全く意味がわかりません。



と仰るのは無理もない。なぜなら

> sinx=0(0<x<5)をニュートン法で解く

とか言ってるが、sin x = 0の解は x = nπ だから、(0<x<5)を満たす解は x=π だけだと、最初から分かっている。

 これをあえて「ニュートン法で解く」ということは、「三角関数のライブラリを使ってπを計算する」ということ。そりゃアホ臭いと思うだろう。
  x[0] = πの近くの適当な値
  x[k+1] = x[k]-tan(x[k])
という漸化式を、「満足が行く」ところまで計算する、ということなのだが、しかしここで「πの近くの適当な値」の選び方がポイントです。
 0に近いところを選ぶと0に収束するし、5に近ければ2πに収束する。もっと重要なのは、π/2とか3π/2のごく近くを選ぶとトンデモナイ値にぶっ飛んで行って、オーバーフローすることもあれば、どこか遠くの解(例えば -100πとか)に収束するかも知れないということ。
 つまり「この計算はπを計算しているのであり、πはおよそ3。だからx[0]は『およそ3』が良い。0近辺とか、5近辺とか、4.5近辺とか、1.5近辺とかはダメだ」という知識なしには、成功しない。

 なので、「いろんなx[0]で実験してみて、どうしてそういう結果になるか考えてみろ。そしてニュートン法の弱点を論じろ」という課題だと思えば、ソレナリの意義があると思う。
    • good
    • 0

アルゴリズムをpython で書くと



import math
x = 4
while True :
 xx = x - math.sin(x)/math.cos(x)
 if abs((xx-x)/x) < 1e-12:
  break
 x = xx
print(xx)
    • good
    • 0

解く対象の関数 f を定義し、


f の導関数 "f(x+h) - f(x)) / h" を計算する関数 g を用意し、
初期値 x[0] を決め、
漸化式 "x[n+1] = x[n] - f(x)/g(x)" を x[1] から x[10] まで順に求め、
"x[n+1] == x[n]" の条件が満たされれば、
収束とみなして x[n] を解とする。
    • good
    • 0

ニュートン法を知っていれば意味は解ります。


意味不明では話にならないので
まずニュートン法を学びましょう。
    • good
    • 0

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