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
Không có nhận xét nào:
Đăng nhận xét