C++で割線法(セカント法)を使って方程式の根を求めるプログラム
このチュートリアルでは、C++を使用して割線法(セカント法)により方程式の根を求めるプログラムを紹介します。
割線法は、数値解析における代表的な求根アルゴリズムの一つです。導関数を必要とせず、2つの初期値から反復計算を行うことで解に収束させられるため、ニュートン法の代替手法としても広く利用されています。ここでは、与えられた方程式の根を、この反復的な割線法を用いて求める手順を解説します。
割線法の仕組み
割線法では、まず方程式 f(x) = 0 の解が含まれると期待される2つの初期値 x1 と x2 を選びます。このとき、f(x1) と f(x2) の符号が異なること(f(x1) × f(x2) < 0)が重要な条件となります。
続いて、2点 (x1, f(x1)) と (x2, f(x2)) を通る直線(割線)と x 軸との交点を、次の近似値 x0 として計算します。この操作を、隣接する2つの近似値の差が許容誤差 E より小さくなるまで繰り返すことで、方程式の根を数値的に求めることができます。
C++による実装例
以下のサンプルコードでは、f(x) = x³ + x − 1 の根を、初期値 x1 = 0、x2 = 1、許容誤差 E = 0.0001 の条件で求めています。
#include <bits/stdc++.h>
using namespace std;
float f(float x) {
float f = pow(x, 3) + x - 1;
return f;
}
void secant(float x1, float x2, float E) {
float n = 0, xm, x0, c;
if (f(x1) * f(x2) < 0) {
do {
// 中間値を計算
x0 = (x1 * f(x2) - x2 * f(x1)) / (f(x2) - f(x1));
c = f(x1) * f(x0);
x1 = x2;
x2 = x0;
n++;
if (c == 0)
break;
xm = (x1 * f(x2) - x2 * f(x1)) / (f(x2) - f(x1));
} while (fabs(xm - x0) >= E);
cout << "Root of the given equation=" << x0 << endl;
cout << "No. of iterations = " << n << endl;
} else
cout << "Can not find a root in the given inteval";
}
int main() {
// 初期値の設定
float x1 = 0, x2 = 1, E = 0.0001;
secant(x1, x2, E);
return 0;
}
出力結果
Root of the given equation=0.682326 No. of iterations = 5
コードのポイント
- 関数 f(x):対象となる方程式 f(x) = x³ + x − 1 を定義しています。他の方程式を解きたい場合は、この部分を書き換えるだけで対応できます。
- secant() 関数:割線法の本体となる部分です。最初に f(x1) × f(x2) < 0 を確認し、条件を満たさない場合は指定区間内に根が存在しない可能性があるため、エラーメッセージを表示して終了します。
- 反復処理:割線の公式 x0 = (x1·f(x2) − x2·f(x1)) / (f(x2) − f(x1)) を用いて新しい近似値を算出し、誤差 |xm − x0| が E 未満になるまで do-while ループで繰り返します。
- 反復回数 n:収束までにかかった試行回数を記録し、最終的に結果とともに出力します。
実行結果から、この方程式の根は約 0.682326 であり、わずか5回の反復で十分な精度に収束したことがわかります。割線法は導関数が不要で収束も比較的速いため、実際の数値計算で非常に有用な手法です。
-
C++で楕円の面積を求めるプログラムの作成方法
この記事では、C++を使って楕円(だえん)の面積を求める方法を解説します。楕円にはいくつかの重要な構成要素があり、それぞれの意味を理解しておくと計算の仕組みがより明確になります。楕円の主な構成要素要素説明中心楕円の中心点。2つの焦点を結ぶ線分の中点でもあります。長軸楕円における最も長い直径です。短軸楕円における最も短い直径です。弦楕円上の2点を結ぶ線分のことです。焦点楕円を定義する2つの特別な点。図中に示された2点が該当します。通径焦点を通り、長軸に対して垂直な直線(線分)のことです。楕円の面積の公式楕円の面積は、長半径 a と短半径 b を使って次の式で表されます。面積 = π × a ×
-
C++で2つの数の最大公約数(GCD)を求めるプログラム
最大公約数(GCD)とは最大公約数(GCD: Greatest Common Divisor)とは、2つの整数をどちらも割り切る正の整数のうち、最も大きい数のことです。プログラミングの基礎的なアルゴリズム問題としてよく取り上げられるテーマであり、分数の約分や暗号処理など、さまざまな場面で活用されます。例として、45と27という2つの数を考えてみましょう。45 = 5 × 3 × 327 = 3 × 3 × 3両方の数に共通する素因数は「3 × 3」であるため、45と27の最大公約数は9となります。方法1:ユークリッドの互除法による実装2つの数の最大公約数を求める最も効率的な方法が「ユークリッド