大学の課題でニュートン法のプログラミングをやっているのですが
よくわからないので教えてください
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より小さくなるまでです。
回数は数えません。
よろしくお願いします
No.3
- 回答日時:
で、その問題文の中で、具体的にどこがわからないのでしょうか?
以下は、問題文を分割して、ちょっとだけ補足修正したものです。
それぞれ、わかるのか、わからないのか、わからないなら具体的にどこがわからないのか、考えてみましょう。
・初期値を与えて、現在の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 …
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# c言語でユーザ関数を利用して複素数のべき乗と絶対値の数列を計算するプログラムが作りたいです。 3 2023/01/29 22:13
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- C言語・C++・C# 宣言する関数の形が決まっている状態で、 str1とstr2の文字列をこの順に引っ付けてstrに保存し 2 2022/05/30 18:21
- C言語・C++・C# 10個の実数に対する降順ソート結果を出力するプログラムを作りたいのですが、以下のプログラムをどう直せ 1 2022/07/09 22:16
- C言語・C++・C# C言語: ポインタ 5 2022/06/01 08:33
- C言語・C++・C# 至急教えてください!プログラミングの問題です。 割られる整数と割る整数を受け取って、商と余りを出力す 3 2022/07/05 10:23
- C言語・C++・C# 至急教えてください! プログラミングの問題です! お願いします! 出力2と全く同じ出力をするように、 2 2022/06/22 23:10
- C言語・C++・C# プログラミングの授業のペーパーテスト 実行結果を答えろ #include int x[ ] = {1 3 2022/06/16 20:08
- C言語・C++・C# C言語の課題が出たのですが自力でやっても分かりませんでした。 要素数がnであるint型の配列v2の並 3 2022/11/19 17:41
- C言語・C++・C# C言語(構造体) 3 2022/07/05 20:08
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
構文エラー";"が型の前にあり...
-
#if 1 #elseの意味について
-
配列を使って魔方陣
-
while文について、c言語...
-
入力した数値を0~3乗するプロ...
-
C++での乱射ショットについて教...
-
for文の中にswitch文はいれられ...
-
直角三角形を表示するプログラム
-
c言語のプログラムで
-
getcの改行判定
-
C言語の二分法のプログラムにつ...
-
ガウスの消去法のプログラムが...
-
while文を使った問題なのですが...
-
c言語のwhile文を使った計算で...
-
c言語についての質問です。
-
プログラミングで二番目に大き...
-
プログラミングに関して
-
C言語で電卓を作成する。
-
C言語でのトランプシャッフルに...
-
c++でテンプレートのコードでわ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
構文エラー";"が型の前にあり...
-
for文の中にswitch文はいれられ...
-
#if 1 #elseの意味について
-
プログラミングで二番目に大き...
-
getcの改行判定
-
C言語プログラムが理解できなくて…
-
C言語 数字以外を入力させない...
-
配列を関数に渡す方法
-
配列を使って魔方陣
-
初心者です。for文、if文を使っ...
-
c言語for文
-
c言語で平均をだす
-
while文について、c言語...
-
scanf関数を用いての加減乗除%...
-
行列をべき乗させるプログラム
-
c言語プログラミングで1から100...
-
C言語階乗の総和を求める
-
scanfが実行されません
-
階乗のプログラム!!
-
C言語の二分法のプログラムにつ...
おすすめ情報
初期値を与えてその時のfxと微係数dfxを求めて、残差をRとするとR=0- fxとなる。この残差が許容範囲1.0e-9に収まらなければx1=x0- fx/dfxとして次のxを求め、残差が許容範囲に収まるまで試行を続ける。最後に何回試行したかと近似解、その時の範囲を出す。
これをプログラミングで表すことができないんです。
先生から配布されたやつに上の足して提出します。
それと配布されたやつにあるprintのeg, 1.0E-8というものが何を意味するのかわかりません。
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;
}
配布されたやつです。
残差が許容範囲に収まらなければ次のxを求めるというところです。
プログラミムを作ってみても次のxの値が出てこないんですよね。xの値が初期値のままで次のx2が現れないというか
説明はわからないと思いますがここの部分がわかりません
あと許容範囲に収まらなければってところもわかりません。
条件をRが許容範囲より大きかったら繰り返すとすればいいことはわかりました。しかしその残差R=0-fxと置くとfxが初期値xの時のfxとなりループしない?みたいな感じで、、、
条件式(R>許容範囲)
次のx=〜〜
とやったんですけど、これだと条件の部分は初期値xのままなんですよね
すみません、説明がちゃんとできなくて
ループの外に書いてました。ループの中に書けばいいんですか?
その時の条件式はどうすればいいのでしょうか。残差Rが必要になると思うんですけど