ニュートン法で方程式をとく

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
kohaA
記事: 10
登録日時: 10年前

ニュートン法で方程式をとく

#1

投稿記事 by kohaA » 10年前

ニュートン方で非線形方程式を解くプログラムを作ったつもりなのですが
まちがえているようで答えがおかしくなってしまいます
x^n+x^(n-1)+…x^2+x-(1/2)=0の式で
nを10、xを3、epsを0.0000000001でやったら3ちょっとくらいになるはずなのですがなりません…

どこがおかしいのでしょうか?

コード:

#include<stdio.h>
#include<math.h>

double f(double x , int n){
  double y=-1/2;
  while(n>=1){
    y += pow(x,n);
    n--;
  }
  return y;
}

double df(double x , int n){
  double y=0;
  while(n>=1){
    y += n*pow(x,n-1);
    n--;
      }
  return y;
}

int main(void)
{
  int i=0,n;
  double x,eps;
  printf("\n  x^n+x^(n-1)+...+x^2+x-(1/2)=0について\n");
  printf("  nの値:");
  scanf("%d",&n);
  printf("  初期値x:");
  scanf("%lf",&x);
  printf("  精度eps:");
  scanf("%lf",&eps);
  
  while(fabs(f(x,n))>eps)
    {
      x = x-f(x,n)/df(x,n);
      i++;
      printf("\n%3d回目    x=%lf    f(x)=%lf\n",i,x,f(x,n));
    } 
}
添付ファイル
ex62.c
(644 バイト) ダウンロード数: 112 回

アバター
みけCAT
記事: 6734
登録日時: 15年前
住所: 千葉県
連絡を取る:

Re: ニュートン法で方程式をとく

#2

投稿記事 by みけCAT » 10年前

kohaA さんが書きました:x^n+x^(n-1)+…x^2+x-(1/2)=0の式で
nを10、xを3、epsを0.0000000001でやったら3ちょっとくらいになるはずなのですがなりません…

どこがおかしいのでしょうか?
  • この予想がおかしいです。3のn乗(nは1以上10以下の整数)を全部足したら明らかに-0.5を超え、方程式は成立しません。
  • 関数fの最初

    コード:

      double y=-1/2;
    は、-1を2で割った商の0をyに代入しています。

    コード:

      double y=-1.0/2.0;
    としてください。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

kohaA
記事: 10
登録日時: 10年前

Re: ニュートン法で方程式をとく

#3

投稿記事 by kohaA » 10年前

ありがとうございます
小数点をつけて書くことの重要さが分かっていませんでした・・・
3ちょいは記憶違いで0.3ちょいでした^^;
毎回ありがとうございます!!!

閉鎖

“C言語何でも質問掲示板” へ戻る