
C言語での二分法の解法になやんでいます。
f(x)=X2乗-2でf(x)=0の解を2分法により求める場合のプログラムを教えて下さい。
収束条件|ak-bk|<10^-6と|f(ck+1)|<10^-6のいずれかを満足。また、解を求める過程として、k,ak,bk,|ak-bk|, ck+1, f(ck+1) (k=0,1,2,3...)も示してくれないでしょうか。よろしくお願いします。
注:
a,b,cに付属するk,k+1はa,b,cの下側に付く小文字です。(a1,a2... ak, ak+1. b1 b2... bk, bk+1)

No.2ベストアンサー
- 回答日時:
#include <stdio.h>
#include <math.h>
#define DISP_PROCESS
double f(double x) {return x * x - 2;}
double solve(double a, double b, double (*func)(double v))
{
// a と b の間にある、func(c) == 0 となる、c を算出する。
// ただし、a < b であり、かつ、func(a) < 0, func(b) >0 かつ、[a, b] で、func() は、
// 単調に増加するものと仮定している。
const double err = 1.0e-6;
static int k = 0;
double c = (a + b) /2 ;
k++;
#if defined(DISP_PROCESS)
printf("k = %d\na = %f, b = %f , abs(a - b) = %f\nc = %f, func(c) = %f\n\n", k, a, b, fabs(a - b), c, func(c));
#endif
if (fabs(a - b) < err) return c;
if (fabs(func(c)) < err) return c ;
if (f(c) > 0) return solve(a, c, func);
else return solve(c, b, func);
}
int main()
{
printf("ANS = %f", solve(0, 2, f));
return 0;
}
---------------------------------------------------------
solve() をわずかに一般化して、
・a < b
・func(a) と func(b) が異符号
・[a, b] で func() は単調
の条件で、対応可能とした例。
int sign(double v)
{
if (v > 0) return 1;
if (v < 0) return -1;
return 0;
}
double solve(double a, double b, double (*func)(double v))
{
const double err = 1.0e-6;
static int k = 0;
double c = (a + b) /2 ;
k++;
#if defined(DISP_PROCESS)
printf("k = %d\na = %f, b = %f , abs(a - b) = %f\nc = %f, func(c) = %f\n\n", k, a, b, fabs(a - b), c, func(c));
#endif
if (fabs(a - b) < err) return c;
if (fabs(func(c)) < err) return c ;
if (sign(func(a)) == sign(func(c))) return solve(c, b, func);
if (sign(func(b)) == sign(func(c))) return solve(a, c, func);
return c;
}
再帰って美しい。
No.1
- 回答日時:
> C言語での二分法の解法になやんでいます。
C言語じゃない解法には悩んでないのですね?
それをC言語に「翻訳」するだけですが、どこで悩んでいるのでしょう?
繰り返し方、とか、収束条件の判定と成立/不成立での処理方法、とか、途中の表示、とかがわからないなら、C言語の基本なので、最初から復習してください。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 物理学 フーリエ変換の振幅について 1 2022/09/04 08:56
- 数学 高校数学で質問があります。 2 2023/02/13 16:40
- 数学 indicator func 2 2022/12/01 13:53
- 数学 関数のグラフ 5 2023/07/20 23:57
- 数学 大学数学の問題です。 条件 (x/a)^2+(y/b)^2+(z/c)^2=1 のもとで、f(x,y 3 2023/05/01 11:28
- その他(プログラミング・Web制作) このpythonコードの意味教えて下さい! 2 2022/08/26 00:52
- 数学 関数f(x)=x^3+ax^2+bx+cとする。このとき、y=f(x)は以下の条件を満たしている。 1 2023/02/11 14:40
- 数学 ラグランジュの未定乗数法を用いる問題 3 2023/05/15 14:48
- DIY・エクステリア MAXの塗装に特化したAK-L1270E2Pについて 2 2023/03/16 23:58
- 数学 曲線y= f(x)上の任意の点Pで引いた法線とx軸の交点をN、Pからx軸に下ろした垂線の足をHとする 3 2022/12/25 10:45
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・一番好きなみそ汁の具材は?
- ・泣きながら食べたご飯の思い出
- ・「これはヤバかったな」という遅刻エピソード
- ・初めて自分の家と他人の家が違う、と意識した時
- ・いちばん失敗した人決定戦
- ・思い出すきっかけは 音楽?におい?景色?
- ・あなたなりのストレス発散方法を教えてください!
- ・もし10億円当たったら何に使いますか?
- ・何回やってもうまくいかないことは?
- ・今年はじめたいことは?
- ・あなたの人生で一番ピンチに陥った瞬間は?
- ・初めて見た映画を教えてください!
- ・今の日本に期待することはなんですか?
- ・集中するためにやっていること
- ・テレビやラジオに出たことがある人、いますか?
- ・【お題】斜め上を行くスキー場にありがちなこと
- ・人生でいちばんスベッた瞬間
- ・コーピングについて教えてください
- ・あなたの「プチ贅沢」はなんですか?
- ・コンビニでおにぎりを買うときのスタメンはどの具?
- ・おすすめの美術館・博物館、教えてください!
- ・【お題】大変な警告
- ・洋服何着持ってますか?
- ・みんなの【マイ・ベスト積読2024】を教えてください。
- ・「これいらなくない?」という慣習、教えてください
- ・今から楽しみな予定はありますか?
- ・AIツールの活用方法を教えて
- ・最強の防寒、あったか術を教えてください!
- ・歳とったな〜〜と思ったことは?
- ・モテ期を経験した方いらっしゃいますか?
- ・好きな人を振り向かせるためにしたこと
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
プログラムでの数字につく”f”の...
-
doubleの変数にintとintの割り...
-
C 開放してるのにエラー(doubl...
-
たくさんの数の平均を求める方...
-
int とdoubleの比較
-
至急です! マクロ定義で #defi...
-
「割り算」 と 「分数の掛け算」
-
C言語を実行すると-infが出てき...
-
EXE1→DLL→EXE2数値を受け渡す方法
-
C言語のpow関数の不具合
-
ラグランジュの補間法のCプログ...
-
関数プロトタイプ無しで、引数...
-
^この記号を使わない
-
斜辺と角度て底辺と高さを出したい
-
浮動小数点の定数
-
物体が往復する動きを作りたい
-
サンプル遅れ
-
difftime()について
-
long doubleの表示方法
-
VC6における浮動少数点数値につ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
プログラムでの数字につく”f”の...
-
doubleの変数にintとintの割り...
-
C言語を実行すると-infが出てき...
-
C 開放してるのにエラー(doubl...
-
float型とdouble型の変数の違い...
-
c言語で、繰り返し文の中で、0....
-
至急です! マクロ定義で #defi...
-
C言語 関数プロトタイプ宣言の...
-
C言語の型による処理速度の違い
-
2次方程式の解を求めるプログ...
-
関数におけるif文とreturn文に...
-
int とdoubleの比較
-
C++で外積
-
C言語で台形公式を使った二重積...
-
指数の表示
-
C言語のpow関数の不具合
-
(C,C++言語)関数の引数は自動キ...
-
C言語のプログラムで#include<m...
-
数値を指数部と仮数部に分離したい
-
プログラミングでのテイラー展開
おすすめ情報