首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用二分法计算两根间的差异。

用二分法计算两根间的差异。
EN

Stack Overflow用户
提问于 2015-12-19 19:50:05
回答 2查看 168关注 0票数 3

我编写了这个C代码,用二分法比较两个函数的根。我的第一个函数(g(x))执行正确,但是第二个函数(h(x))在屏幕上输出"#1QO“。我在密码里找不到我做错了什么。

你能解释一下吗?任何形式的帮助都会非常感谢。谢谢!

代码语言:javascript
复制
#include <stdio.h>
#include <math.h>

typedef double (*DFD) (double);

double g (double x) 
{
   double y;
   y = pow (x,3) - pow (x,2)-1;
   return y;
}

double h (double x)
{
  double k;
  k = 1.0 + (1.0/x) + (1.0 /pow (x,2));
  return k;
}

double bisection (DFD f, double x0, double x1,double tol)
{
   int i;
   double middle;
     for (i=1;i<=50;) {
     middle = (x0+x1)/2.0;
     if (fabs (middle - x0) <tol) return middle;
     if (f(middle)* f(x0) <0.0) x1 = middle;
     else x0 = middle;
     }
 }

 int main () {
 double root_gx, root_hx = 0.0;

 root_gx = bisection (g,0,2,0.0005);
 printf ("Root found using g(x) = %.3lf\n",root_gx);

 root_hx = bisection (h,1,2,0.0005);
 printf ("Root found using h(x) = %.3lf\n",root_hx);

 printf ("Difference between the two roots = %.3lf\n", (fabs (root_gx- root_hx)));

return 0;

} 

编辑:以二分法初始化i=1,并将bisection (h,0,2,0.0005)改为bisection (h,1,2,0.0005),谢谢大家!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-12-19 22:56:33

值未初始化,导致未定义的行为。被设定为某种价值。

代码语言:javascript
复制
// int i;
int i = 0;
...
for (;i<=50;) {

i从不递增。

50是任意的。

建议使用double的二进制精度,因为bisection()将每次迭代减半。

代码语言:javascript
复制
for (i=0; i <= DBL_MANT_DIG; i++) {
  ...
}
return middle;

还建议对算法进行更改,以允许更改小于0.0,以满足0.0的容忍度。

代码语言:javascript
复制
// if (fabs (middle - x0) <tol) return middle;
if (fabs (middle - x0) <= tol) return middle;
票数 4
EN

Stack Overflow用户

发布于 2015-12-19 19:56:33

代码语言:javascript
复制
double h (double x)
{
  double k;
  k = 1.0 + (1.0/x) + (1.0 /pow (x,2));
  return k;
}

如果x==0.0,则除法为零。当您调用bisection (h,0,2,0.0005);时就会这样做,后者调用f(x0),在本例中是h(0.0);

如果在函数中除以输入参数,则应始终检查输入参数的实际值是否等于0.0

代码语言:javascript
复制
double h (double x)
{
  if ( x == 0.0 ) return 1e99; // infinite
  double k;
  k = 1.0 + (1.0/x) + (1.0 /pow (x,2));
  return k;
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34374709

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档