Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

โปรแกรม C++ สำหรับวิธี Bisection


กำหนดด้วยฟังก์ชัน f(x) โดยมีตัวเลข a และ b โดยที่ f(a) * f(b)> 0 และฟังก์ชัน f(x) ควรอยู่ระหว่าง a และ b เช่น f(x) =[a, b ]. ภารกิจคือการค้นหาค่าของรูทที่อยู่ระหว่างช่วง a และ b ในฟังก์ชัน f(x) โดยใช้วิธีแยกสองส่วน

วิธีแบ่งเป็นสองส่วนคืออะไร

วิธี Bisection ใช้เพื่อค้นหาค่าของรูทในฟังก์ชัน f(x) ภายในขีดจำกัดที่กำหนดโดย 'a' และ 'b' รากของฟังก์ชันสามารถกำหนดเป็นค่า a ที่ f(a) =0 ได้

ตัวอย่าง

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) ก็จะมีค่า m ซึ่งเป็นของช่วง a และ b ทำให้ f(m) =0

ค่า m [a..b] เช่นนั้น f(m) =0

เช่น. m คือค่าของรูทซึ่งสามารถเป็นค่าได้หลายค่า

รับด้านล่างเป็นตัวเลขที่แสดงช่วงเวลา f(a) และ f(b) ในการค้นหารูทระหว่างช่วงเวลาเหล่านี้ ขีดจำกัดจะถูกแบ่งออกเป็นส่วนๆ และเก็บไว้ในตัวแปร m i.e.

m =(a + b) / 2

โปรแกรม C++ สำหรับวิธี Bisection

หลังจากแบ่งลิมิต ช่วงเวลาใหม่จะถูกสร้างขึ้นดังรูปด้านล่าง

โปรแกรม C++ สำหรับวิธี Bisection

ตัวอย่าง

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
    • พิมพ์ m คือรูท
  • ถ้า 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