Thứ Bảy, 6 tháng 12, 2014

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

Không có nhận xét nào:

Đăng nhận xét

Bài đăng phổ biến