哪位高手能帮小弟我解释上关于"二分法"的以上程序
谁能帮我解释下关于"二分法"的以下程序
#include"math.h"
#include"stdio.h"
#define PT 3.14159
main()
{ double x0,x1,root;
x0=3*PT/4;x1=3*PT/2;
root=(x0+x1)/2;
while(fabs(sin(root))>1e-6)
{
if(sin(x1)*sin(root)<0) x0=root;
else x1=root;
root=(x0+x1)/2;
}
printf("solutions:%10.5f\n",root);
}
特别是前三行
------解决方案--------------------
#include"math.h"
#include"stdio.h"
#define PT 3.14159
main()
{ double x0,x1,root;
x0=3*PT/4;x1=3*PT/2;
root=(x0+x1)/2;
while(fabs(sin(root))>1e-6)
{
if(sin(x1)*sin(root)<0) x0=root;
else x1=root;
root=(x0+x1)/2;
}
printf("solutions:%010.8f\n",1e-6);
printf("solutions:%010.8f\n",root);
}
------解决方案--------------------
利用二分法查找一个sin(a)接近于0的值。
一开始的两三行里面,限定了起始弧和结束弧的范围。分别在3PI/4 和3PI/2。然后依次进行逼近。
#include"math.h"
#include"stdio.h"
#define PT 3.14159
main()
{ double x0,x1,root;
x0=3*PT/4;x1=3*PT/2;
root=(x0+x1)/2;
while(fabs(sin(root))>1e-6)
{
if(sin(x1)*sin(root)<0) x0=root;
else x1=root;
root=(x0+x1)/2;
}
printf("solutions:%10.5f\n",root);
}
特别是前三行
------解决方案--------------------
#include"math.h"
#include"stdio.h"
#define PT 3.14159
main()
{ double x0,x1,root;
x0=3*PT/4;x1=3*PT/2;
root=(x0+x1)/2;
while(fabs(sin(root))>1e-6)
{
if(sin(x1)*sin(root)<0) x0=root;
else x1=root;
root=(x0+x1)/2;
}
printf("solutions:%010.8f\n",1e-6);
printf("solutions:%010.8f\n",root);
}
------解决方案--------------------
利用二分法查找一个sin(a)接近于0的值。
一开始的两三行里面,限定了起始弧和结束弧的范围。分别在3PI/4 和3PI/2。然后依次进行逼近。