二分法のためのC++プログラム
数値aとbを持つ関数f(x)で与えられます。ここで、f(a)* f(b)> 0であり、関数f(x)はaとbの間にある必要があります。つまりf(x)=[a、b ]。タスクは、二分法を使用して、関数f(x)の区間aとbの間にあるルートの値を見つけることです。
二分法とは何ですか?
二分法は、「a」と「b」で定義された指定された制限内の関数f(x)の根の値を見つけるために使用されます。関数の根は、f(a)=0となるような値aとして定義できます。
例
Quadratic equation F(x) = - 8 This equation is equals to 0 when the value of x will be 2 i.e. - 8 = 0 So, root of this quadratic function F(x) will be 2.
ここで、関数f(x)が指定された区間[a..b]で連続であり、f(a)の符号≠f(b)の符号である場合、区間aに属する値mが存在します。 f(m)=0
となるようなb値m[a..b]f(m)=0
となるようにつまりmは複数のルートの値です
以下に示すのは、間隔f(a)とf(b)を示している図です。これらの間隔の間のルートを見つけるために、制限は部分に分割され、変数mに格納されます。つまり
m =(a + b)/ 2
制限の分割後、下の図に示すように新しい間隔が生成されます
例
Input-: x^3 - x^2 + 2 ; a =-500 and b = 100 Output-: The value of root is : -0.991821 Input-: x^3 - x^2 + 2 ; a =-200 and b = 300 Output-: The value of root is : -1.0025
以下のプログラムで使用しているアプローチは次のとおりです-
- 方程式と間隔aおよびbの値を入力します
- 間隔を次のように分割します:m =(a + b)/ 2
- Printmがルートです
- f(m)≠0の場合
- f(a)* f(m)<0かどうかを確認します
- その場合、ルートはaとmの間にあります
- f(b)* f(m)<0かどうかを確認します
- その場合、ルートはbとmの間にあります
アルゴリズム
Start Step 1-> In function double solution(double x) Return x*x*x - x*x + 2 Step 2-> In function bisection(double a, double b) If solution(a) * solution(b) >= 0 then, Print "You have not assumed right a and b " Return End If Set c = a Loop While (b-a) >= EP Set c = (a+b)/2 If solution(c) == 0.0 Break End If Else if solution(c)*solution(a) < 0 Set b = c End Else If Else Set a = c End Else End Print "The value of root” Step 3-> In function int main() Declare and Initialize inputs a =-500, b = 100 Call function bisection(a, b) Stop
例
#include <iostream> using namespace std; #define EP 0.01 // An example function whose solution is determined using // Bisection Method. The function is x^3 - x^2 + 2 double solution(double x) { return x*x*x - x*x + 2; } // Prints root of solution(x) with error in EPSILON void bisection(double a, double b) { if (solution(a) * solution(b) >= 0) { cout << "You have not assumed right a and b\n"; return; } double c = a; while ((b-a) >= EP) { // Find middle point c = (a+b)/2; // Check if middle point is root if (solution(c) == 0.0) break; // Decide the side to repeat the steps else if (solution(c)*solution(a) < 0) b = c; else a = c; } cout << "The value of root is : " << c; } // main function int main() { double a =-500, b = 100; bisection(a, b); return 0; }
出力
The value of root is : -0.991821
-
C++での十二面体の表面積のプログラム
十二面体とは何ですか? 「十二面体」という言葉はギリシャ語に由来し、十二面体は「12」を意味し、ヘドロンは「顔」を意味します。幾何学的な12面体は、12の平面を持つ3Dプラトニックまたは正多角形です。同様に、他の図の12面体にもプロパティがあり、それらは- 20の多面体頂点 30個の多面体エッジ 五角形は5面のポリゴンであるため、12個の五角形の面 以下に示すのは12面体の図です 問題 エッジが与えられた場合、プログラムは十二面体の表面積を見つける必要があります。表面積は、与えられた図形の面が占める総スペースです。 十二面体の表面積を計算するには、次の式があります- 例
-
QuickSort用のC++プログラム?
クイックソートは、比較を使用してソートされていないリスト(配列)をソートするソート手法です。クイックソートは、パーティション交換ソートとも呼ばれます。 等しいソート項目の相対的な順序が保持されないため、安定したソートではありません。クイックソートは配列を操作できるため、ソートを実行するために少量の追加メモリが必要です。常に最悪の場合のパーティションを選択するわけではないことを除いて、選択ソートと非常によく似ています。したがって、選択ソートのより適切な形式と見なすことができます。 QuickSortは、最も効率的な並べ替えアルゴリズムの1つであり、配列を小さい配列に分割することに基づいていま