PHƯƠNG PHÁP CHIA ĐÔI CUNG



PHƯƠNG PHÁP CHIA ĐÔI CUNG


 
             
                                                                            
           Giả sử cho phương trình f(x) = 0 với f(x) liên tục trên đoạn [a, b] và f(a).f(b) < 0. Chia đoạn [a, b]  thành 2 phần bởi chính điểm chia (a + b)/2.
                1.  Nếu f((a+b)/2) = 0 thì x = (a+b)/2
                2. Nếu f((a + b)/2) ¹ 0 thì chọn  [a,(a+b)/2] hay [(a + b)/2, b] mà giá trị hàm hai đầu trái dấu và kí hiệu là [a1,b1].Đối với [a1, b1] ta lại tiến hành như [a, b]
Cách làm trên được mô tả trong chương trình sau dùng để tìm nghiệm của phương trình:
                                x4 + 2x3 - x - 1 = 0
trên đoạn [0, 1]


 

 

Chương trình 2-3


//chia doi cung
#include <conio.h>
#include <stdio.h>
#include <math.h>
#define  epsi  0.00001
void main()
  {
                float x0,x1,x2;
                float y0,y1,y2;
    float f(float);
                int maxlap,demlap;

    clrscr();
                printf("Tim nghiem cua phuong trinh phi tuyen");
                printf("\nbang cach chia doi cung\n");
                printf("Cho cac gia tri x0,x1,maxlap\n");
                printf("Cho gia tri  x0 = ");
                scanf("%f",&x0);
                printf("Cho gia tri  x1 =  ");
                scanf("%f",&x1);
                printf("Cho so lan lap maxlap =  ");
                scanf("%d",&maxlap);
                y0=f(x0);
                y1=f(x1);
                if ((y0*y1)>0)
                  {
                                printf("Nghiem khong nam trong doan x0 - x1\n");
                                printf(" x0 = %.2f\n",x0);
                                printf(" x1 = %.2f\n",x1);
                                printf(" f(x0) = %.2f\n",y0);
                                printf(" f(x1) = %.2f\n",y1);
                  }
                demlap=0;
                do
                  {
                                x2=(x0+x1)/2;
                                y2=f(x2);
                                y0=f(x0);
                                if (y0*y2>0)
                                  x0=x2;
                                else
                                  x1=x2;
                                demlap=demlap+1;
      }
                while(((abs((y2-y0))>epsi)||(demlap<maxlap)));
                if (demlap>maxlap)
                  {
                                printf("Phep lap khong hoi tu sau %d lan lap ",maxlap);
                                printf(" x0 = %.2f\n",x0);
                                printf(" x1 = %.2f\n",x1);
                                printf(" f(x2) = %.2f\n",y2);
                  }
                else
                  {
                                printf("Phep lap hoi tu sau %d lan lap\n",demlap);
                                printf("Nghiem x = %.2f",x2);
                  }
                getch();
  }

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

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

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

Post a Comment

Previous Post Next Post