h-b-z-d-j-s-m 发表于 2022-11-23 15:41:42

牛顿法求解

#include<stdio.h>
#include<math.h>
#define PI 3.1415
double f(double x0)
{
        double x1;
        x1=(cos(x0)-x0)/(sin(x0)+1);
        x1=x1+x0;
        return x1;
}
int main()
{
        int t=0,k=100,n=0;
        double x0=PI/4,x1;
        while(n<k)
        {
                x1=f(x0);
                if(fabs(x0-x1)<0.001)
                {
                        t=1;
                        break;
                }
                else
                {
                        x0=x1;
                        n=n+1;
                }
                if(t==1)
                        printf("%10.5f",x1);
                else
                        printf("not found");
                return 0;
        }
}
这个答案是不是有问题啊,中间符号都不对

jackz007 发表于 2022-11-23 17:11:31

本帖最后由 jackz007 于 2022-11-23 17:36 编辑

      验证计算结果是否正确的方法很简单,在输出 x1 的值后,多添加一句:
      printf("%.4f\n" , x1 - cos(x1)) ;// 看看输出是不是 0 值就可以了。
      这是我写的代码
#include <stdio.h>
#include <math.h>

#define PI 3.1415

double f(double x)
{
      return x + (cos(x) - x) / (sin(x) + 1) ;
}

int main(void)
{
      int t = 0 , k = 100 , n = 0 ;
      double x0 = PI / 4 , x1   ;
      while(n < k) {
                x1 = f(x0)          ;
                if(fabs(x0 - x1) < 1e-14) {
                        t = 1       ;
                        break       ;
                } else {
                        x0 = x1   ;
                        n = n + 1   ;
                }
      }
      if(t == 1) printf("\nFengcheng geng is %10.5f\n" , x1) ;
      else printf("\nSorry,not found!\n")                  ;
}
       编译运行实况:
D:\\C>g++ -o x x.c

D:\\C>x

Fengcheng geng is    0.73909

D:\\C>
页: [1]
查看完整版本: 牛顿法求解