ニュートン法(Newton’s Method)

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

ニュートン法(Newton’s Method)

#1

投稿記事 by 松島1127 » 3年前

C言語初学者です。初めての質問のため、不足ありましたら教えてください。
(大学の授業の課題です)

ニュートン法(Newton’s Method)によりある数の逆数を反復計算で求めるプログラムを作成したいです。ある数Aに対してニュートン法で逆数を計算するための漸化式は下に書いてあるものです。条件は0<A<1, X1=1です。

X(n+1)=2Xn-A∙(Xn )^2

A=0.24のときの反復計算例も載っていたので記載しておきます。
1回目:X_1=1,X_2=2X_1-A∙(X_1 )^2=1.76
2回目:X_2=1.76,X_3=2X_2-A∙(X_2 )^2=2.77
3回目:X_3=2.77,X_4=2X_3-A∙(X_3 )^2=3.70

そして0<A<1となる数値Aをキーボードから入力、20回の反復計算で逆数1/Aを求めるものを作りたいです。
私が書いたコードが下の通りです。

[cord]#include <stdio.h>

int main(void)
{
int i;
double num;
double X = 1;

printf("0<A<1を満たす数値Aを入力して下さい。\n");
scanf("%lf", &num);

  for (i = 1; i < 20; i++) {
  X[i + 1] = 2 * X -A* X*X;
}

X=X[i+1];

printf("逆数1/Aは%fです。\n", X);

return 0;
}
[/code]

paiza.IOというサイトを使っています。出てくるエラーは
Main.c:12:1: warning: treating Unicode character as whitespace [-Wunicode-whitespace]
  for (i = 1; i < 20; i++) {
^~
Main.c:12:4: warning: treating Unicode character as whitespace [-Wunicode-whitespace]
  for (i = 1; i < 20; i++) {
^~
Main.c:13:1: warning: treating Unicode character as whitespace [-Wunicode-whitespace]
  X[i + 1] = 2 * X -A* X*X;
^~
Main.c:13:4: warning: treating Unicode character as whitespace [-Wunicode-whitespace]
  X[i + 1] = 2 * X -A* X*X;
^~
Main.c:13:8: error: subscripted value is not an array, pointer, or vector
  X[i + 1] = 2 * X -A* X*X;
~^~~~~~
Main.c:13:29: error: subscripted value is not an array, pointer, or vector
  X[i + 1] = 2 * X -A* X*X;
~^~
Main.c:13:25: error: use of undeclared identifier 'A'
  X[i + 1] = 2 * X -A* X[i]*X[i];
^
Main.c:13:34: error: subscripted value is not an array, pointer, or vector
  X[i + 1] = 2 * X -A* X[i]*X[i];
~^~
Main.c:16:4: error: subscripted value is not an array, pointer, or vector
X=X[i+1];
~^~~~
4 warnings and 5 errors generated.

です。

おそらく変数初期化ができてないからだというところまでは分かったのですがその方法がわからず、手を出せなくなってしまいました。

初歩的な質問で申し訳ないです。不足部分があれば教えてください。

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

Re: ニュートン法(Newton’s Method)

#2

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

・標準では使えない全角スペースがコードに含まれている
・入力を受けるのはnumなのに、式中ではAを使おうとしている
・Xを普通の変数として使うのか配列として使うのかが統一されていない
という問題があります。
全角スペースを半角スペースに置換し、変数の名前や使い方を統一しましょう。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

松島1127
記事: 4
登録日時: 4年前

Re: ニュートン法(Newton’s Method)

#3

投稿記事 by 松島1127 » 3年前

アドバイスありがとうございます!
修正結果、うまくいきました。
早い返信本当にありがとうございます。

返信

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