⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 erfengfa.txt

📁 c语言实现二分法
💻 TXT
字号:
二分法:
#include<stdio.h>
#include<math.h>

float f(float x)
{float y;
 y=x*x+2*x+1;
 return y;
}

main()
{float a,b,c,x;
 printf("%s","input three numbers:\n");
 scanf("%f%f%f",&a,&b,&c);
 while(fabs(b-a)>=c)
  {x=(a+b)/2;
   if(f(x)!=0)
    {if(f(a)*f(x)<0)
      b=x;
     else a=x;}
   else a=x,b=x;
  }
 printf("%f\n",(a+b)/2);
}


龙贝格算法
#include<stdio.h>
#include<math.h>
#define f(x) 4/(1+(x)*(x))
float g(int k)
{int i,total;
 total=1;
 for(i=1;i<=k;i++)
  total*=2;
 return total;
}

main()
{int k0,k1,k,tag,i;
 float a,b,e,e1,t[50],s[50],c[50],r[50],sum;
 scanf("%f,%f,%f,%d,%d",&a,&b,&e,&k0,&k1);
 t[0]=(b-a)*(f(0)+f(1))/2;
 k=1;
 tag=0;
 do{if(k==1)
     {t[1]=t[0]/2+(b-a)*f(a+(b-a)/2)/2;
      s[0]=(4*t[1]-t[0])/3;
     }
    if(k==2)
     {t[2]=t[1]/2+(b-a)*(f(a+(b-a)/4)+f(a+3*(b-a)/4))/4;
      s[1]=(4*t[2]-t[1])/3;
      c[0]=(16*s[1]-s[0])/15;
     }
    if(k>=3)
     {sum=0;
      for(i=1;i<=g(k-1);i++)
       sum+=f(a+(2*i-1)*(b-a)/g(k));
      t[k]=t[k-1]/2+(b-a)*sum/g(k);
      s[k-1]=(4*t[k]-t[k-1])/3;
      c[k-2]=(16*s[k-1]-s[k-2])/15;
      r[k-3]=(64*c[k-2]-c[k-3])/63;
     }
    if(k>=k1)
     {e1=fabs(r[k-3]-r[k-4]);
      if(e1<e)
       {printf("k=%d,T=%f\n",k,r[k-3]);
 tag=1;
       }
     }
    k++;
   }while(tag==0&&k<k0);
  if(tag==0||k>=k0)
   printf("error!\n");
}


高斯消去法:

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

main()
{float a[10][10],b[10],m[10][10],x[10],sum;
 int i,j,k,n;
 printf("the top exp:");
 scanf("%d",&n);
 printf("\n");
 for(i=0;i<n;i++)
  for(j=0;j<n;j++)
   scanf("%f",&a[j]);
    for(i=0;i<n;i++)
     scanf("%f",&b);
      for(k=0;k<n-1;k++)
      {if(a[k][k]==0)
       printf("error");
 else for(i=k+1;i<n;i++)
      {m[k]=a[k]/a[k][k];
       a[k]=m[k];
       b=b-m[k]*b[k];
  for(j=k+1;j<n;j++)
   a[j]=a[j]-m[k]*a[k][j];
      }}
 if(a[n-1][n-1]==0)
  printf("error");
 else x[n-1]=b[n-1]/a[n-1][n-1];
 b[n-1]=x[n-1];
 for(i=n-2;i>=0;i--)
 {sum=0;
  for(j=i+1;j<n;j++)
   {sum+=a[j]*x[j];}
    x=(b-sum)/a;
    b=x;
   }
 for(i=0;i<n;i++)
 printf("%f\n",x);
}


龙格库塔方法:

#include<stdio.h>
#include<math.h>
#define f(x,y) (x)-(y)+1

main()
{int n,k;
 float a,b,y0,h,x,y,t[4];
 scanf("%f,%f,%f,%d",&a,&b,&y0,&n);
 h=(b-a)/n;
 x=a;y=y0;
 printf("%f,%f\n",x,y);
 k=1;
 do{t[0]=f(x,y);
    x=x+h/2;
    t[1]=f(x,y+h*t[0]/2);
    t[2]=f(x,y+h*t[1]/2);
    x=x+h/2;
    t[3]=f(x,y+h*t[2]);
    y=y+h*(t[0]+2*t[1]+2*t[2]+t[3])/6;
    printf("%f,%f\n",x,y);
    k++;
   }while(k<=n);
}


牛顿插值多项式:

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

main()
{int i,j,k,n;
 float x[10],y[10],a,b,p;
 printf("input n\n");
 scanf("%d",&n);
 printf("input X\n");
 for(i=0;i<=n;i++)
  scanf("%f",&x);
 printf("input Y\n");
 for(i=0;i<=n;i++)
  scanf("%f",&y);
 printf("input x\n");
 scanf("%f",&a);
 b=0;
 k=0;
 do{p=1;
    j=0;
    do
    {if(j!=k)
     p=p*(a-x[j])/(x[k]-x[j]);
     j++;
    }while(j<n);
    b=b+p*y[k];
    k++;
   }while(k<n);
 printf("x=%f,y=%f",a,b);
}


雅可比迭代:

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

main()
{float a[10][10],b[10],x[10],y[10],e,sum,c;
 int i,j,n,l;
 printf("The top exp is ");
 scanf("%d",&n);
 printf("Now input array A\n");
 for(i=0;i<n;i++)
  for(j=0;j<n;j++)
   scanf("%f",&a[j]);
 printf("Now input array B first and then array X\n");
 for(i=0;i<n;i++)
  scanf("%f,%f",&b,&x);
 printf("Now input e\n");
 scanf("%f",&e);
 l=0;
 do{for(i=0;i<n;i++)
     {sum=0;
      for(j=0;j<i;j++)
       sum+=a[j]*x[j];
      for(j=i+1;j<n;j++)
       sum+=a[j]*x[j];
      y=(b-sum)/a;
      l+=1;
     }
     c=fabs(x[0]-y[0]);
     for(i=0;i<n;i++)
      if(c<fabs(x-y))
       c=fabs(x-y);
     for(i=0;i<n;i++)
      x=y;
   }while(c<e);
 printf("%d\n",l);
 for(i=0;i<n;i++)
  printf("%f\n",y);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -