PHƯƠNG PHÁP DÂY CUNG





PHƯƠNG PHÁP DÂY CUNG



                Giả sử f(x) liên tục trên trên đoạn [a, b] và f(a).f(b) < 0. Cần tìm nghiệm của f(x) = 0. Để xác định ta xem f(a) < 0 và f(b) > 0. Khi đó thay vì chia đôi đoạn [a, b] ta chia [a, b] theo tỉ lệ -f(a)/f(b). Điều đó cho ta nghiệm gần đúng :

                      x1 = a + h1
Trong đó
         
                Tiếp theo dùng cách đó với đoạn [ a, x1] hay [x1, b] mà hai đầu hàm nhận giá trị trái dấu ta được nghiệm gần đúng x2 v.v.
Về mặt hình học, phương pháp này có nghĩa là kẻ dây cung của đường cong f(x) qua hai điểm A[a, f(a)] và B[b, f(b)]. Thật vậy phương trình dây cung AB có dạng:


   
                                      
    
        
Cho x = x1 y = 0  ta có
       
Trên cơ sở của phương pháp ta có chương trình tính nghiệm  của phương trình
                                                x4 + 2x3 - x - 1 = 0
trên đoạn [0,1]

Chương trình 2-4


//phuong phap day cung
#include <conio.h>
#include <stdio.h>
#include <math.h>
#define epsi  0.00001

void main()
  {
                float a,b,fa,fb,dx,x;
                float f(float);

                clrscr();
                printf("Tim nghiem cua phuong trinh phi tuyen\n");
                printf("bang phuong phap day cung\n");
                printf("Cho cac gia tri a,b\n");
                printf("Cho gia tri cua a = ");
                scanf("%f",&a);
                printf("Cho gia tri cua b = ");
                scanf("%f",&b);
                fa=f(a);
                fb=f(b);
                dx=fa*(b-a)/(fa-fb);
                while (fabs(dx)>epsi)
                  {
                                x=a+dx;
                                fa=f(x);
                                if((fa*fb)<=0)
                                  a=x;
                                else
                                  b=x;
                                fa=f(a);
                                fb=f(b);
                                dx=fa*(b-a)/(fa-fb);
                  }
                printf("Nghiem x = %.3f",x);
                getch();
  }

float f(float x)
  {
                float e=x*x*x*x+2*x*x*x-x-1;
                return(e);
  }

                Kết quả tính cho  nghiệm: x = 0.876
Ntech Developers

Programs must be written for people to read, and only incidentally for machines to execute.

Post a Comment

Previous Post Next Post