C ++
 Computer >> コンピューター >  >> プログラミング >> C ++

二分法のための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

二分法のためのC++プログラム

制限の分割後、下の図に示すように新しい間隔が生成されます

二分法のためのC++プログラム

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

  1. C++での十二面体の表面積のプログラム

    十二面体とは何ですか? 「十二面体」という言葉はギリシャ語に由来し、十二面体は「12」を意味し、ヘドロンは「顔」を意味します。幾何学的な12面体は、12の平面を持つ3Dプラトニックまたは正多角形です。同様に、他の図の12面体にもプロパティがあり、それらは- 20の多面体頂点 30個の多面体エッジ 五角形は5面のポリゴンであるため、12個の五角形の面 以下に示すのは12面体の図です 問題 エッジが与えられた場合、プログラムは十二面体の表面積を見つける必要があります。表面積は、与えられた図形の面が占める総スペースです。 十二面体の表面積を計算するには、次の式があります- 例

  2. QuickSort用のC++プログラム?

    クイックソートは、比較を使用してソートされていないリスト(配列)をソートするソート手法です。クイックソートは、パーティション交換ソートとも呼ばれます。 等しいソート項目の相対的な順序が保持されないため、安定したソートではありません。クイックソートは配列を操作できるため、ソートを実行するために少量の追加メモリが必要です。常に最悪の場合のパーティションを選択するわけではないことを除いて、選択ソートと非常によく似ています。したがって、選択ソートのより適切な形式と見なすことができます。 QuickSortは、最も効率的な並べ替えアルゴリズムの1つであり、配列を小さい配列に分割することに基づいていま