我是靠谱客的博主 奋斗中心,最近开发中收集的这篇文章主要介绍数值计算方法 牛顿迭代,简单迭代,二分法,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

#include <stdio.h>
#include <math.h>
#include <stdlib.h>

double f1(double x);

void erfenfa(double a,double b)
{
 double root,fa,fb,froot;
 int i,act_b;
 fa=f1(a);
 fb=f1(b);
 if(fa*fb>0)
  {
   printf("方法错误。");
   exit(0);
  }
 for(i=1;i<=50;i++)
  {
   root=(a+b)/2;
   froot=f1(root);
   if(froot==0)
   {
    a=root;
    b=root;
   }
   else if(fb*froot>0)
   {
    b=root;
    fb=froot;
   }
   else
   {
    a=root;
    fa=froot;
   }
   if(fabs(b-a)<0.000001)
    break;
  }
  root=(a+b)/2;
  froot=f1(root);
  act_b=i;
  printf("root=%f  次数=%d",root,i);
 }

double g(double x)
 {
  return (pow((x+1),1.0/3.0));
 }

void iterate(double a,double b,double x0)
 {
  int k=1;
  double x1;
  while(k<=50)
  {
   x1=g(x0);
   if((x1<a)||(x1>b))
   {
    printf("有错误。");
    exit(0);
   }
   if(fabs(x1-x0)<0.00001)
   {
    //printf("成功。");
    printf("root=%10.6lf   ",x1);
    break;
   }
   x0=x1;
   k++;
  }
  printf("次数=%d/n",k);
  if(k>50)
   printf("方法错误。");
 }

double f1(double x)
 {
  return (x*x*x-x-1);
 }

double fdao(double x)
 {
  return (3*x*x-1);
 }

void f(double a,double b)
 {
  int k=1;
  double x,x0=1.5,temp1,tempd;
  while(k<=50)
  {
   temp1=f1(x0);
   tempd=fdao(x0);
   x=(x0-temp1/tempd);
   if(x<a||x>b)
   {
    printf("请另选值。");
    exit(0);
   }
   if(fabs(x-x0)<0.00001)
   {
    printf("%lf  次数=%d",x,k);
    break;
   }
   x0=x;
   k++;
  }

  if(k>50)
   printf("迭代次数达到上界,不收敛。/n");
  }
int main()
   {
   double a=0,b=2.0;
   int maxs=50;
   printf("二分法:");
   erfenfa(1,2);//二分法
   printf("/n");
   double a_jd=1.0,b_jd=2.0,x0=(a_jd+b_jd)/2;
   printf("简单迭代:");
   iterate(a_jd,b_jd,x0);//简单迭代
   printf("牛顿迭代:");
   f(1,2);//牛顿迭代
   printf("/n");
   return 0;
   } 

最后

以上就是奋斗中心为你收集整理的数值计算方法 牛顿迭代,简单迭代,二分法的全部内容,希望文章能够帮你解决数值计算方法 牛顿迭代,简单迭代,二分法所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(36)

评论列表共有 0 条评论

立即
投稿
返回
顶部