Computer >> Máy Tính >  >> Lập trình >> C ++

Chương trình C ++ cho Phương pháp Bisection

Cho hàm f (x) với các số a và b trong đó f (a) * f (b)> 0 và hàm f (x) nên nằm giữa a và b tức là f (x) =[a, b ]. Nhiệm vụ là tìm giá trị của căn nằm giữa khoảng a và b trong hàm f (x) bằng phương pháp phân giác.

Phương pháp chia đôi là gì?

Phương pháp phân tách được sử dụng để tìm giá trị của một gốc trong hàm f (x) trong các giới hạn cho trước được xác định bởi ‘a’ và ‘b’. Gốc của hàm có thể được xác định là giá trị a sao cho f (a) =0.

Ví dụ

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.

Bây giờ, Nếu một hàm f (x) liên tục trong khoảng [a..b] đã cho và đồng thời, dấu của f (a) ≠ dấu của f (b) thì sẽ có giá trị m thuộc khoảng a và b sao cho f (m) =0

Giá trị m [a..b] Sao cho f (m) =0

I E. m là giá trị của gốc có thể là nhiều

Cho dưới đây là hình biểu diễn các khoảng f (a) và f (b). Để tìm gốc giữa các khoảng này, giới hạn được chia thành các phần và được lưu trữ trong biến m i.e.

m =(a + b) / 2

Chương trình C ++ cho Phương pháp Bisection

Sau khi phân chia các giới hạn, khoảng thời gian mới sẽ được tạo ra như trong hình bên dưới

Chương trình C ++ cho Phương pháp Bisection

Ví dụ

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

Phương pháp tiếp cận mà chúng tôi đang sử dụng trong chương trình dưới đây như sau -

  • Nhập phương trình và giá trị của các khoảng a và b
  • Chia các khoảng dưới dạng:m =(a + b) / 2
    • In m là gốc
  • Nếu f (m) ≠ 0
    • Kiểm tra xem f (a) * f (m) <0
    • Khi đó, gốc sẽ nằm giữa a và m
    • Kiểm tra xem f (b) * f (m) <0
    • Khi đó gốc sẽ nằm giữa b và m

Thuật toán

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

Ví dụ

#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;
}

Đầu ra

The value of root is : -0.991821