前提・実現したいこと
C言語を用いてニュートン法による非線形方程式の解を求めたいです。
非線形方程式 e^x=3x をニュートン法を用いて求め、その解を出力したいです。
解は約0.6と約1.5となるはずなのですが、初期値を変更しても約0.6の解しか出力されません。
私が考えている理想的な出力結果は
初期値に1を入力:解=約0.6
初期値に2以上を入力:解=約1.5
です。
発生している問題・エラーメッセージ
エラーメッセージではないのですが、初期値を変更しても以下の解しか出力されません。
初期値を入力してください x0= 1 方程式 e^x=3x の解は 0.61906 です
初期値を入力してください x0= 2 方程式 e^x=3x の解は 0.61906 です
該当のソースコード
C
1#include<stdio.h> 2#include<math.h> 3#define eps 0.0001 4 5double f(double x){ 6 return exp(x)-3*x; //求める方程式// 7} 8 9double df(double x){ 10 return exp(x)-3; //求める方程式の1回微分// 11} 12 13int main(void){ 14 double xn,x0; 15 16 printf("初期値を入力してください x0= "); 17 scanf("%lf" ,&x0); 18 19 while(fabs(xn-x0) > eps){ 20 x0 = xn; 21 xn = -1 * f(x0)/df(x0) + x0; //xn+1の式// 22 } 23 24 printf("方程式 e^x=3x の解は %.5f です", xn); 25 26 return(0); 27}
試したこと
初期値を1~10まで変更 → どの初期値でも約0.6の解しか出力されませんでした
補足情報(FW/ツールのバージョンなど)
コンパイル・実行はCygwin64 Terminalを使用しております。
また、質問文や考え方等に至らない点があるかと思いますがよろしくお願いいたします。
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/09/02 03:21