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
Tags:
Phương Pháp Tính