弦截法求根

Rookiekk 2017-03-21 04:37:06
#include<stdio.h>
#include<math.h>
float fun(float x)
{
return x*x+2*x;
}
int main()
{
float x1,x2,x,precision=1e-2;

while(1){
printf("enter two num:");
scanf("%f %f",&x1,&x2);
if(fun(x1)*fun(x2)<0) break;
}
while(fabs(x1-x2)>precision)
{
printf("there\n");
x=x1-fun(x1)*(x1-x2)/(fun(x1)-fun(x2));
if(fun(x1)*fun(x)>0)
x1=x;
else x2=x;
}
printf("root :%f\n",x);
}

哪里有问题啊,为什么输入-1 1能返回正确的0,-10 -1 不能返回-2 呢?求大神指点
...全文
448 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
两张图分别是输入输入-1 1和输入-10 -1的的结果,散列数分别是计算次数,x,和x1-x2。从第一张图可以看出,x从0的左侧无限趋近于0,这时x1=x=(-0),-0表示0的左极限,所以|x1-x2|=(+1),所以一直不能跳出循环,直到x=(+0)才结束。当输入-10 -1 时,x一直等于-2的左极限,所以|x1-x2|=(+8),同样不能结束循环。建议你把收敛条件换成fun(X)与0的差值或者两次计算前后x的差值试试。

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧