1.拉格朗日插值多项式 ,用于离散数据的拟合
 #include <stdio.h>
#include <stdio.h>
 #include <conio.h>
 #include <conio.h>
 #include <alloc.h>
 #include <alloc.h>
 float lagrange(float *x,float *y,float xx,int n)     /*拉格朗日插值算法*/
 float lagrange(float *x,float *y,float xx,int n)     /*拉格朗日插值算法*/
 { int i,j;
 { int i,j;
 float *a,yy=0.0;    /*a作为临时变量,记录拉格朗日插值多项式*/
   float *a,yy=0.0;    /*a作为临时变量,记录拉格朗日插值多项式*/
 a=(float *)malloc(n*sizeof(float));
   a=(float *)malloc(n*sizeof(float));
 for(i=0;i<=n-1;i++)
   for(i=0;i<=n-1;i++)
 { a[i]=y[i];
   { a[i]=y[i];
 for(j=0;j<=n-1;j++)
     for(j=0;j<=n-1;j++)
 if(j!=i) a[i]*=(xx-x[j])/(x[i]-x[j]);
     if(j!=i) a[i]*=(xx-x[j])/(x[i]-x[j]);
 yy+=a[i];
     yy+=a[i];
 }
   }
 free(a);
 free(a);
 return yy;
 return yy;
 }
}
 main()
main()
 { int i,n;
{ int i,n;
 float x[20],y[20],xx,yy;
 float x[20],y[20],xx,yy;
 printf("Input n:");
 printf("Input n:");
 scanf("%d",&n);
 scanf("%d",&n);
 if(n>=20) {printf("Error!The value of n must in (0,20)."); getch();return 1;}
 if(n>=20) {printf("Error!The value of n must in (0,20)."); getch();return 1;}
 if(n<=0) {printf("Error! The value of n must in (0,20)."); getch(); return 1;}
 if(n<=0) {printf("Error! The value of n must in (0,20)."); getch(); return 1;}
 for(i=0;i<=n-1;i++)
 for(i=0;i<=n-1;i++)
 { printf("x[%d]:",i);
 { printf("x[%d]:",i);
 scanf("%f",&x[i]);
    scanf("%f",&x[i]);
 }
 }
 printf(" ");
 printf(" ");
 for(i=0;i<=n-1;i++)
 for(i=0;i<=n-1;i++)
 { printf("y[%d]:",i);scanf("%f",&y[i]);}
 { printf("y[%d]:",i);scanf("%f",&y[i]);}
 printf(" ");
 printf(" ");
 printf("Input xx:");
 printf("Input xx:");
 scanf("%f",&xx);
 scanf("%f",&xx);
 yy=lagrange(x,y,xx,n);
 yy=lagrange(x,y,xx,n);
 printf("x=%f,y=%f ",xx,yy);
 printf("x=%f,y=%f ",xx,yy);
 getch();
 getch();
 }
}
2.牛顿插值多项式,离散数据的拟合
 #include <stdio.h>
#include <stdio.h>
 #include <conio.h>
#include <conio.h>
 #include <alloc.h>
#include <alloc.h>
 void difference(float *x,float *y,int n)
void difference(float *x,float *y,int n)
 { float *f;
{ float *f;
 int k,i;
 int k,i;
 f=(float *)malloc(n*sizeof(float));
 f=(float *)malloc(n*sizeof(float));
 for(k=1;k<=n;k++)
 for(k=1;k<=n;k++)
 { f[0]=y[k];
 { f[0]=y[k];
 for(i=0;i<k;i++)
    for(i=0;i<k;i++)
 f[i+1]=(f[i]-y[i])/(x[k]-x[i]);
      f[i+1]=(f[i]-y[i])/(x[k]-x[i]);
 y[k]=f[k];
    y[k]=f[k];
 }
 }
 return;
 return;
 }
}
 main()
main()
 { int i,n;
{ int i,n;
 float x[20],y[20],xx,yy;
 float x[20],y[20],xx,yy;
 printf("Input n:");
 printf("Input n:");
 scanf("%d",&n);
 scanf("%d",&n);
 if(n>=20) {printf("Error! The value of n must in (0,20)."); getch(); return 1;}
 if(n>=20) {printf("Error! The value of n must in (0,20)."); getch(); return 1;}
 if(n<=0) {printf("Error! The value of n must in (0,20).");getch(); return 1;}
 if(n<=0) {printf("Error! The value of n must in (0,20).");getch(); return 1;}
 for(i=0;i<=n-1;i++)
 for(i=0;i<=n-1;i++)
 { printf("x[%d]:",i);
 { printf("x[%d]:",i);
 scanf("%f",&x[i]);
    scanf("%f",&x[i]);
 }
 }
 printf(" ");
   printf(" ");
 for(i=0;i<=n-1;i++)
 for(i=0;i<=n-1;i++)
 { printf("y[%d]:",i);scanf("%f",&y[i]);}
 { printf("y[%d]:",i);scanf("%f",&y[i]);}
 printf(" ");
 printf(" ");
 difference(x,(float *)y,n);
 difference(x,(float *)y,n);
 printf("Input xx:");
 printf("Input xx:");
 scanf("%f",&xx);
 scanf("%f",&xx);
 yy=y[20];
 yy=y[20];
 for(i=n-1;i>=0;i--) yy=yy*(xx-x[i])+y[i];
 for(i=n-1;i>=0;i--) yy=yy*(xx-x[i])+y[i];
 printf("NewtonInter(%f)=%f",xx,yy);
 printf("NewtonInter(%f)=%f",xx,yy);
 getch();
 getch();
 }
}
3.列主元高斯消去法,求解其次线性方程组
 #include<stdio.h>
#include<stdio.h>
 #include <math.h>
#include <math.h>
 #define N 20
#define N 20
 int main()
int main()
 { int n,i,j,k;
{ int n,i,j,k;
 int mi,tmp,mx;
 int mi,tmp,mx;
 float a[N][N],b[N],x[N];
 float a[N][N],b[N],x[N];
 printf(" Input n:");
 printf(" Input n:");
 scanf("%d",&n);
 scanf("%d",&n);
 if(n>N)
 if(n>N)
 { printf("The input n should in(0,N)! ");
 { printf("The input n should in(0,N)! ");
 getch();
    getch();
 return 1;
    return 1;
 }
 }
 if(n<=0)
 if(n<=0)
 { printf("The input n should in(0,N)! ");
 { printf("The input n should in(0,N)! ");
 getch();
    getch();
 return 1;
    return 1;
 }
 }
 printf("Now input a(i,j),i,j=0...%d: ",n-1);
 printf("Now input a(i,j),i,j=0...%d: ",n-1);
 for(i=0;i<n;i++)
 for(i=0;i<n;i++)
 { for(j=0;j<n;j++)
 { for(j=0;j<n;j++)
 scanf("%f",&a[i][j]);}
    scanf("%f",&a[i][j]);}
 printf("Now input b(i),i,j=0...%d: ",n-1);
 printf("Now input b(i),i,j=0...%d: ",n-1);
 for(i=0;i<n;i++)
 for(i=0;i<n;i++)
 scanf("%f",&b[i]);
 scanf("%f",&b[i]);
 for(i=0;i<n-2;i++)
 for(i=0;i<n-2;i++)
 { for(j=i+1,mi=i,mx=fabs(a[i][j]);j<n-1;j++)
 { for(j=i+1,mi=i,mx=fabs(a[i][j]);j<n-1;j++)
 if(fabs(a[j][i])>mx)
    if(fabs(a[j][i])>mx)
 { mi=j;
    { mi=j;
 mx=fabs(a[j][i]);
      mx=fabs(a[j][i]);
 }
    }
 if(i<mi)
    if(i<mi)
 { tmp=b[i];b[i]=b[mi];b[mi]=tmp;
    { tmp=b[i];b[i]=b[mi];b[mi]=tmp;
 for(j=i;j<n;j++)
      for(j=i;j<n;j++)
 { tmp=a[i][j];
      { tmp=a[i][j];
 a[i][j]=a[mi][j];
        a[i][j]=a[mi][j];
 a[mi][j]=tmp;
        a[mi][j]=tmp;
 }
      }
 }
    }
 for(j=i+1;j<n;j++)
    for(j=i+1;j<n;j++)
 { tmp=-a[j][i]/a[i][i];
    { tmp=-a[j][i]/a[i][i];
 b[j]+=b[i]*tmp;
      b[j]+=b[i]*tmp;
 for(k=i;k<n;k++)
      for(k=i;k<n;k++)
 a[j][k]+=a[i][k]*tmp;
      a[j][k]+=a[i][k]*tmp;
 }
    }
 }
 }
 x[n-1]=b[n-1]/a[n-1][n-1];
 x[n-1]=b[n-1]/a[n-1][n-1];
 for(i=n-2;i>=0;i--)
 for(i=n-2;i>=0;i--)
 { x[i]=b[i];
 { x[i]=b[i];
 for(j=i+1;j<n;j++)
    for(j=i+1;j<n;j++)
 x[i]-=a[i][j]*x[j];
    x[i]-=a[i][j]*x[j];
 x[i]/=a[i][i];
    x[i]/=a[i][i];
 }
 }
 for(i=0;i<n;i++)
 for(i=0;i<n;i++)
 printf("Answer:  x[%d]=%f ",i,x[i]);
 printf("Answer:  x[%d]=%f ",i,x[i]);
 getch();
 getch();
 return 0;
 return 0;
 }
}
 
 
 
 
 #include<math.h>
#include<math.h>
 #include<stdio.h>
#include<stdio.h>
 #define NUMBER 20
#define NUMBER 20
 #define Esc   0x1b
#define Esc   0x1b
 #define Enter 0x0d
#define Enter 0x0d
 
 
 float A[NUMBER][NUMBER+1] ,ark;
float A[NUMBER][NUMBER+1] ,ark;
 int flag,n;
int flag,n;
 exchange(int r,int k);
exchange(int r,int k);
 float max(int k);
float max(int k);
 message();
message();
 
 
 main()
main()
 {
{
 float x[NUMBER];
   float x[NUMBER];     
 int r,k,i,j;
   int r,k,i,j;
 char celect;
   char celect;
 clrscr();
   clrscr();
 
  
 printf("  Use Gauss.");
   printf("  Use Gauss.");
 printf("  1.Jie please press Enter.");
   printf("  1.Jie please press Enter.");
 printf("  2.Exit press Esc.");
   printf("  2.Exit press Esc.");
 celect=getch();
   celect=getch();
 if(celect==Esc)
   if(celect==Esc)
 exit(0);
     exit(0);
 printf("   input n=");
   printf("   input n=");
 scanf("%d",&n);
   scanf("%d",&n);
 printf("   Input matrix A and B:");
     printf("   Input matrix A and B:");
 for(i=1;i<=n;i++)
   for(i=1;i<=n;i++)
 {
   {
 printf("  Input a%d1--a%d%d and b%d:",i,i,n,i);
    printf("  Input a%d1--a%d%d and b%d:",i,i,n,i);
 
       
 for(j=1;j<=n+1;j++)        scanf("%f",&A[i][j]);
    for(j=1;j<=n+1;j++)        scanf("%f",&A[i][j]);
 }
   }
 for(k=1;k<=n-1;k++)
   for(k=1;k<=n-1;k++)                      
 {
   {
 ark=max(k);
   ark=max(k);
 if(ark==0)
    if(ark==0)                  
 {
    {
 printf("  It's wrong!");message();
      printf("  It's wrong!");message();
 }
    }
 else if(flag!=k)
    else if(flag!=k)
 exchange(flag,k);
     exchange(flag,k);
 for(i=k+1;i<=n;i++)
     for(i=k+1;i<=n;i++)
 for(j=k+1;j<=n+1;j++)
     for(j=k+1;j<=n+1;j++)
 A[i][j]=A[i][j]-A[k][j]*A[i][k]/A[k][k];
     A[i][j]=A[i][j]-A[k][j]*A[i][k]/A[k][k];
 }
   }
 x[n]=A[n][n+1]/A[n][n];
   x[n]=A[n][n+1]/A[n][n];
 for( k=n-1;k>=1;k--)
   for( k=n-1;k>=1;k--)
 {
   {
 float me=0;
     float me=0;
 for(j=k+1;j<=n;j++)
     for(j=k+1;j<=n;j++)
 {
     {
 me=me+A[k][j]*x[j];
       me=me+A[k][j]*x[j];
 }
     }
 x[k]=(A[k][n+1]-me)/A[k][k];
       x[k]=(A[k][n+1]-me)/A[k][k];
 }
   }
 for(i=1;i<=n;i++)
   for(i=1;i<=n;i++)
 {
   {
 printf("   x%d=%f",i,x[i]);
     printf("   x%d=%f",i,x[i]);
 }
   }
 message();
   message();
 }
}
 
 
 exchange(int r,int k)
exchange(int r,int k)      
 {
{
 int i;
 int i;
 for(i=1;i<=n+1;i++)
 for(i=1;i<=n+1;i++)
 A[0][i]=A[r][i];
    A[0][i]=A[r][i];
 for(i=1;i<=n+1;i++)
 for(i=1;i<=n+1;i++)
 A[r][i]=A[k][i];
    A[r][i]=A[k][i];
 for(i=1;i<=n+1;i++)
 for(i=1;i<=n+1;i++)
 A[k][i]=A[0][i];
    A[k][i]=A[0][i];
 }
}
 
 
 float max(int k)
float max(int k)         
 {
{
 int i;
 int i;
 float temp=0;
 float temp=0;
 for(i=k;i<=n;i++)
 for(i=k;i<=n;i++)
 if(fabs(A[i][k])>temp)
    if(fabs(A[i][k])>temp)
 {
    {
 temp=fabs(A[i][k]);
      temp=fabs(A[i][k]);
 flag=i;
      flag=i;
 }
    }
 return temp;
 return temp;
 }
}
 
 
 message()
message()                                    
 {
{
 printf("   Go on Enter ,Exit press Esc!");
 printf("   Go on Enter ,Exit press Esc!");
 switch(getch())
 switch(getch())
 {
 {
 case Enter: main();
   case Enter: main();
 case Esc: exit(0);
   case Esc: exit(0);
 default:{printf("  Input error!");message();}
   default:{printf("  Input error!");message();}
 }
 }
 }
}
4.龙贝格求积公式Romberg 求解定积分
 #include<stdio.h>
#include<stdio.h>
 #include<math.h>
#include<math.h>
 #define f(x) (sin(x)/x)
#define f(x) (sin(x)/x)
 #define N 20
#define N 20
 #define MAX 20
#define MAX 20      
 #define a 2
#define a 2
 #define b 4
#define b 4
 #define e 0.00001
#define e 0.00001      
 float LBG(float p,float q,int n)
float LBG(float p,float q,int n)
 { int i;
{ int i;
 float sum=0,h=(q-p)/n;
 float sum=0,h=(q-p)/n;
 for (i=1;i<n;i++)
 for (i=1;i<n;i++)
 sum+=f(p+i*h);
 sum+=f(p+i*h);
 sum+=(f(p)+f(q))/2;
 sum+=(f(p)+f(q))/2;
 return(h*sum);
 return(h*sum);
 }
}
 void main()
void main()
 { int i;
 { int i;
 int n=N,m=0;
   int n=N,m=0;
 float T[MAX+1][2];
   float T[MAX+1][2];
 T[0][1]=LBG(a,b,n);
   T[0][1]=LBG(a,b,n);
 n*=2;
   n*=2;
 for(m=1;m<MAX;m++)
   for(m=1;m<MAX;m++)
 { for(i=0;i<m;i++)
   { for(i=0;i<m;i++)
 T[i][0]=T[i][1];
      T[i][0]=T[i][1];
 T[0][1]=LBG(a,b,n);
     T[0][1]=LBG(a,b,n);
 n*=2;
     n*=2;
 for(i=1;i<=m;i++)
     for(i=1;i<=m;i++)
 T[i][1]=T[i-1][1]+(T[i-1][1]-T[i-1][0])/(pow(2,2*m)-1);
     T[i][1]=T[i-1][1]+(T[i-1][1]-T[i-1][0])/(pow(2,2*m)-1);
 if((T[m-1][1]<T[m][1]+e)&&(T[m-1][1]>T[m][1]-e))
     if((T[m-1][1]<T[m][1]+e)&&(T[m-1][1]>T[m][1]-e))
 { printf("Answer=%f ",T[m][1]); getch();
     { printf("Answer=%f ",T[m][1]); getch();
 return ;
      return ;
 }
     }
 }
   }
 }
 }
5.牛顿迭代公式,求解方程的近似解
 #include<stdio.h>
#include<stdio.h>
 #include<math.h>
#include<math.h>
 #include<conio.h>
#include<conio.h>
 #define N 100
#define N 100
 #define PS 1e-5
#define PS 1e-5
 #define TA 1e-5
#define TA 1e-5
 float Newton(float (*f)(float),float(*f1)(float),float x0 )
float Newton(float (*f)(float),float(*f1)(float),float x0 )
 { float x1,d=0;
{ float x1,d=0;
 int k=0;
int k=0;
 do
 do
 { x1= x0-f(x0)/f1(x0);
 { x1= x0-f(x0)/f1(x0);
 if((k++>N)||(fabs(f1(x1))<PS))
    if((k++>N)||(fabs(f1(x1))<PS))
 { printf(" Failed!");
    { printf(" Failed!");
 getch();
      getch();
 exit();
      exit();
 }
    }
 d=(fabs(x1)<1?x1-x0:(x1-x0)/x1);
    d=(fabs(x1)<1?x1-x0:(x1-x0)/x1);
 x0=x1;
    x0=x1;
 printf("x(%d)=%f ",k,x0);
    printf("x(%d)=%f ",k,x0);
 }
 }
 while((fabs(d))>PS&&fabs(f(x1))>TA) ;
 while((fabs(d))>PS&&fabs(f(x1))>TA) ;
 return x1;
 return x1;
 }
}
 float f(float x)
float f(float x)
 { return x*x*x+x*x-3*x-3; }
{ return x*x*x+x*x-3*x-3; }
 float f1(float x)
float f1(float x)
 { return 3.0*x*x+2*x-3; }
{ return 3.0*x*x+2*x-3; }
 void main()
void main()
 { float f(float);
{ float f(float);
 float f1(float);
 float f1(float);
 float x0,y0;
 float x0,y0;
 printf("Input x0: ");
 printf("Input x0: ");
 scanf("%f",&x0);
 scanf("%f",&x0);
 printf("x(0)=%f ",x0);
 printf("x(0)=%f ",x0);
 y0=Newton(f,f1,x0);
 y0=Newton(f,f1,x0);
 printf(" The root is x=%f ",y0);
 printf(" The root is x=%f ",y0);
 getch();
 getch();
 }
}
6.牛顿-科特斯求积公式,求解定积分
 #include<stdio.h>
#include<stdio.h>
 #include<math.h>
#include<math.h>
 int NC(a,h,n,r,f)
int NC(a,h,n,r,f)
 float (*a)[];
float (*a)[];
 float h;
float h;
 int n,f;
int n,f;
 float *r;
float *r;
 { int nn,i;
{ int nn,i;
 float ds;
 float ds;
 if(n>1000||n<2)
 if(n>1000||n<2)
 { if (f)
 { if (f)
 printf("  Faild! Check if 1<n<1000! ",n);
   printf("  Faild! Check if 1<n<1000! ",n);
 return(-1);
   return(-1);
 }
}
 if(n==2)
if(n==2)
 { *r=0.5*((*a)[0]+(*a)[1])*(h);
{ *r=0.5*((*a)[0]+(*a)[1])*(h);
 return(0);
return(0);
 }
}
 if (n-4==0)
if (n-4==0)
 { *r=0;
 { *r=0;
 *r=*r+0.375*(h)*((*a)[n-4]+3*(*a)[n-3]+3*(*a)[n-2]+(*a)[n-1]);
*r=*r+0.375*(h)*((*a)[n-4]+3*(*a)[n-3]+3*(*a)[n-2]+(*a)[n-1]);
 return(0);
return(0);
 }
}
 if(n/2-(n-1)/2<=0)
if(n/2-(n-1)/2<=0)
 nn=n;
nn=n;
 else
else
 nn=n-3;
nn=n-3;
 ds=(*a)[0]-(*a)[nn-1];
ds=(*a)[0]-(*a)[nn-1];
 for(i=2;i<=nn;i=i+2)
for(i=2;i<=nn;i=i+2)
 ds=ds+4*(*a)[i-1]+2*(*a)[i];
ds=ds+4*(*a)[i-1]+2*(*a)[i];
 *r=ds*(h)/3;
*r=ds*(h)/3;
 if(n>nn)
if(n>nn)
 *r=*r+0.375*(h)*((*a)[n-4]+3*(*a)[n-3]+3*(*a)[n-2]+(*a)[n-1]);
*r=*r+0.375*(h)*((*a)[n-4]+3*(*a)[n-3]+3*(*a)[n-2]+(*a)[n-1]);
 return(0);
return(0);
 }
}
 main()
main()
 {
{
 float h,r;
 float h,r;
 int n,ntf,f;
 int n,ntf,f;
 int i;
 int i;
 float a[16];
 float a[16];
 printf("Input the x[i](16): ");
printf("Input the x[i](16): ");
 for(i=0;i<=15;i++)
 for(i=0;i<=15;i++)
 scanf("%d",&a[i]);
 scanf("%d",&a[i]);
 h=0.2;
h=0.2;
 f=0;
f=0;
 ntf=NC(a,h,n,&r,f);
ntf=NC(a,h,n,&r,f);
 if(ntf==0)
if(ntf==0)
 printf(" R=%f ",r);
 printf(" R=%f ",r);
 else
  else
 printf("  Wrong!Return code=%d ",ntf);
 printf("  Wrong!Return code=%d ",ntf);
 getch();
  getch();
 }
}
7.雅克比迭代 Jacobic,求解方程近似解
 #include <stdio.h>
#include <stdio.h>
 #include <math.h>
#include <math.h>
 #define N 20
#define N 20
 #define MAX 100
#define MAX 100
 #define e 0.00001
#define e 0.00001
 int main()
int main()
 { int n;
{ int n;
 int i,j,k;
 int i,j,k;
 float t;
 float t;
 float a[N][N],b[N][N],c[N],g[N],x[N],h[N];
 float a[N][N],b[N][N],c[N],g[N],x[N],h[N];
 printf(" Input dim of n:");   scanf("%d",&n);
 printf(" Input dim of n:");   scanf("%d",&n);
 if(n>N)
 if(n>N)
 { printf("Faild! Check if 0<n<N! "); getch(); return 1; }
 { printf("Faild! Check if 0<n<N! "); getch(); return 1; }
 if(n<=0)
 if(n<=0)
 {printf("Faild! Check if 0<n<N! "); getch(); return 1;}
 {printf("Faild! Check if 0<n<N! "); getch(); return 1;}
 printf("Input a[i,j],i,j=0…%d: ",n-1);
 printf("Input a[i,j],i,j=0…%d: ",n-1);
 for(i=0;i<n;i++)
 for(i=0;i<n;i++)
 for(j=0;j<n;j++)
   for(j=0;j<n;j++)
 scanf("%f",&a[i][j]);
   scanf("%f",&a[i][j]);
 printf("Input c[i],i=0…%d: ",n-1);
 printf("Input c[i],i=0…%d: ",n-1);
 for(i=0;i<n;i++)
 for(i=0;i<n;i++)
 scanf("%f",&c[i]);
scanf("%f",&c[i]);
 for(i=0;i<n;i++)
 for(i=0;i<n;i++)
 for(j=0;j<n;j++)
   for(j=0;j<n;j++)
 { b[i][j]=-a[i][j]/a[i][i];   g[i]=c[i]/a[i][i]; }
   { b[i][j]=-a[i][j]/a[i][i];   g[i]=c[i]/a[i][i]; }
 for(i=0;i<MAX;i++)
  for(i=0;i<MAX;i++)
 { for(j=0;j<n;j++)
   { for(j=0;j<n;j++)
 h[j]=g[j];
     h[j]=g[j];
 { for(k=0;k<n;k++)
     { for(k=0;k<n;k++)
 { if(j==k) continue; h[j]+=b[j][k]*x[k]; }
       { if(j==k) continue; h[j]+=b[j][k]*x[k]; }
 }
     }
 t=0;
     t=0;
 for(j=0;j<n;j++)
     for(j=0;j<n;j++)
 if(t<fabs(h[j]-x[j])) t=fabs(h[j]-x[j]);
     if(t<fabs(h[j]-x[j])) t=fabs(h[j]-x[j]);
 for(j=0;j<n;j++)
     for(j=0;j<n;j++)
 x[j]=h[j];
     x[j]=h[j];
 if(t<e)
     if(t<e)
 { printf("x_i= ");
     { printf("x_i= ");
 for(i=0;i<n;i++)
       for(i=0;i<n;i++)     
 printf("x[%d]=%f ",i,x[i]);
printf("x[%d]=%f ",i,x[i]);
 getch();
       getch();
 return 0;
       return 0;
 }
     }
 printf("after %d repeat , return ",MAX);
     printf("after %d repeat , return ",MAX);
 getch();
     getch();
 return 1;
     return 1;
 }
   }
 getch();
   getch();
 }
}
8.秦九昭算法
 #include <math.h>
#include <math.h>
 float qin(float a[],int n,float x)
float qin(float a[],int n,float x)
 {    float r=0;
{    float r=0;
 int i;
    int i;
 for(i=n;i>=0;i--)
    for(i=n;i>=0;i--)
 r=r*x+a[i];
    r=r*x+a[i];
 return r;
    return r;
 }
}
 main()
main()
 {    float a[50],x,r=0;
{    float a[50],x,r=0;
 int n,i;
    int n,i;
 do
    do
 {    printf("Input frequency:");
    {    printf("Input frequency:");
 scanf("%d",&n);
        scanf("%d",&n);
 }
    }
 while(n<1);
    while(n<1);
 printf("Input value:");
    printf("Input value:");
 for(i=0;i<=n;i++)
    for(i=0;i<=n;i++)
 scanf("%f",&a[i]);
    scanf("%f",&a[i]);
 printf("Input frequency:");
    printf("Input frequency:");
 scanf("%f",&x);
    scanf("%f",&x);
 r=qin(a,n,x);
    r=qin(a,n,x);
 printf("Answer:%f",r);
    printf("Answer:%f",r);
 getch();
    getch();
 }
}
9.幂法
 #include<stdio.h>
#include<stdio.h>
 #include<math.h>
#include<math.h>
 #define N 100
#define N 100
 #define e 0.00001
#define e 0.00001
 #define n 3
#define n 3
 float x[n]={0,0,1};
float x[n]={0,0,1};
 float a[n][n]={{2,3,2},{10,3,4},{3,6,1}};
float a[n][n]={{2,3,2},{10,3,4},{3,6,1}};
 float y[n];
float y[n];
 main()
main()
 { int i,j,k;
{ int i,j,k;
 float xm,oxm;
   float xm,oxm;
 oxm=0;
   oxm=0;
 for(k=0;k<N;k++)
   for(k=0;k<N;k++)
 { for(j=0;j<n;j++)
   { for(j=0;j<n;j++)
 { y[j]=0;
      { y[j]=0;
 for(i=0;i<n;i++)
        for(i=0;i<n;i++)
 y[j]+=a[j][i]*x[i];
        y[j]+=a[j][i]*x[i];
 }
      }
 xm=0;
      xm=0;
 for(j=0;j<n;j++)
      for(j=0;j<n;j++)
 if(fabs(y[j])>xm) xm=fabs(y[j]);
      if(fabs(y[j])>xm) xm=fabs(y[j]);
 for(j=0;j<n;j++)
      for(j=0;j<n;j++)
 y[j]/=xm;
      y[j]/=xm;
 for(j=0;j<n;j++)
      for(j=0;j<n;j++)
 x[j]=y[j];
      x[j]=y[j];
 if(fabs(xm-oxm)<e)
      if(fabs(xm-oxm)<e)
 { printf("max:%f  ",xm);
      { printf("max:%f  ",xm);
 printf("v[i]: ");
       printf("v[i]: ");
 for(k=0;k<n;k++) printf("%f ",y[k]);
        for(k=0;k<n;k++) printf("%f ",y[k]);
 break;
       break;
 }
      }
 oxm=xm;
      oxm=xm;
 }
    }
 getch();
 getch();
 }
}
10.高斯塞德尔
 #include<math.h>
#include<math.h>
 #include<stdio.h>
#include<stdio.h>
 #define N 20
#define N 20
 #define M 99
#define M 99
 float a[N][N];
float a[N][N];
 float b[N];
float b[N];
 int main()
int main()
 {    int i,j,k,n;
{    int i,j,k,n;
 float sum,no,d,s,x[N];
    float sum,no,d,s,x[N];
 printf(" Input dim of n:");
    printf(" Input dim of n:");
 scanf("%d",&n);
 scanf("%d",&n);
 if(n>N)
 if(n>N)
 { printf("Faild! Check if 0<n<N!  "); getch();
 { printf("Faild! Check if 0<n<N!  "); getch();
 return 1;
   return 1;
 }
 }
 if(n<=0)
 if(n<=0)
 { printf("Faild! Check if 0<n<N!  ");getch();return 1;}
 { printf("Faild! Check if 0<n<N!  ");getch();return 1;}
 printf("Input a[i,j],i,j=0…%d: ",n-1);
 printf("Input a[i,j],i,j=0…%d: ",n-1);
 for(i=0;i<n;i++)
 for(i=0;i<n;i++)
 for(j=0;j<n;j++)
 for(j=0;j<n;j++)
 scanf("%f",&a[i][j]);
 scanf("%f",&a[i][j]);
 printf("Input b[i],i=0…%d: ",n-1);
 printf("Input b[i],i=0…%d: ",n-1);
 for(i=0;i<n;i++) scanf("%f",&b[i]);
 for(i=0;i<n;i++) scanf("%f",&b[i]);
 for(i=0;i<n;i++) x[i]=0;
    for(i=0;i<n;i++) x[i]=0;
 k=0;
 k=0;
 printf(" k=%dx=",k);
 printf(" k=%dx=",k);
 for(i=0;i<n;i++) printf("%12.8f",x[i]);
 for(i=0;i<n;i++) printf("%12.8f",x[i]);
 do
 do
 { k++;
 { k++;
 if(k>M){printf(" Error! ”);getch();}
     if(k>M){printf(" Error! ”);getch();}
 break;
     break;
 }
 }
 no=0.0;
 no=0.0;
 for(i=0;i<n;i++)
 for(i=0;i<n;i++)
 { s=x[i];
  { s=x[i];
 sum=0.0;
    sum=0.0;
 for(j=0;j<n;j++)
    for(j=0;j<n;j++)
 if (j!=i) sum=sum+a[i][j]*x[j];
    if (j!=i) sum=sum+a[i][j]*x[j];
 x[i]=(b[i]-sum)/a[i][i];
    x[i]=(b[i]-sum)/a[i][i];
 d=fabs(x[i]-s);
    d=fabs(x[i]-s);
 if (no<d) no=d;
    if (no<d) no=d;
 }
 }
 printf(" k=%2dx=",k);
 printf(" k=%2dx=",k);
 for(i=0;i<n;i++)   printf("%f",x[i]);
 for(i=0;i<n;i++)   printf("%f",x[i]);
 }
}
 while (no>=0.1e-6);
while (no>=0.1e-6);
 if(no<0.1e-6)
if(no<0.1e-6)
 { printf("   answer= ");
{ printf("   answer= ");
 printf(" k=%d",k);
  printf(" k=%d",k);
 for (i=0;i<n;i++)
  for (i=0;i<n;i++)
 printf("  x[%d]=%12.8f",i,x[i]);
  printf("  x[%d]=%12.8f",i,x[i]);
 }
}
 getch();
getch();
                
         #include <stdio.h>
#include <stdio.h> #include <conio.h>
 #include <conio.h> #include <alloc.h>
 #include <alloc.h> float lagrange(float *x,float *y,float xx,int n)     /*拉格朗日插值算法*/
 float lagrange(float *x,float *y,float xx,int n)     /*拉格朗日插值算法*/ { int i,j;
 { int i,j; float *a,yy=0.0;    /*a作为临时变量,记录拉格朗日插值多项式*/
   float *a,yy=0.0;    /*a作为临时变量,记录拉格朗日插值多项式*/ a=(float *)malloc(n*sizeof(float));
   a=(float *)malloc(n*sizeof(float)); for(i=0;i<=n-1;i++)
   for(i=0;i<=n-1;i++) { a[i]=y[i];
   { a[i]=y[i]; for(j=0;j<=n-1;j++)
     for(j=0;j<=n-1;j++) if(j!=i) a[i]*=(xx-x[j])/(x[i]-x[j]);
     if(j!=i) a[i]*=(xx-x[j])/(x[i]-x[j]); yy+=a[i];
     yy+=a[i]; }
   } free(a);
 free(a); return yy;
 return yy; }
} main()
main() { int i,n;
{ int i,n; float x[20],y[20],xx,yy;
 float x[20],y[20],xx,yy; printf("Input n:");
 printf("Input n:"); scanf("%d",&n);
 scanf("%d",&n); if(n>=20) {printf("Error!The value of n must in (0,20)."); getch();return 1;}
 if(n>=20) {printf("Error!The value of n must in (0,20)."); getch();return 1;} if(n<=0) {printf("Error! The value of n must in (0,20)."); getch(); return 1;}
 if(n<=0) {printf("Error! The value of n must in (0,20)."); getch(); return 1;} for(i=0;i<=n-1;i++)
 for(i=0;i<=n-1;i++) { printf("x[%d]:",i);
 { printf("x[%d]:",i); scanf("%f",&x[i]);
    scanf("%f",&x[i]); }
 } printf(" ");
 printf(" "); for(i=0;i<=n-1;i++)
 for(i=0;i<=n-1;i++) { printf("y[%d]:",i);scanf("%f",&y[i]);}
 { printf("y[%d]:",i);scanf("%f",&y[i]);} printf(" ");
 printf(" "); printf("Input xx:");
 printf("Input xx:"); scanf("%f",&xx);
 scanf("%f",&xx); yy=lagrange(x,y,xx,n);
 yy=lagrange(x,y,xx,n); printf("x=%f,y=%f ",xx,yy);
 printf("x=%f,y=%f ",xx,yy); getch();
 getch(); }
}2.牛顿插值多项式,离散数据的拟合
 #include <stdio.h>
#include <stdio.h> #include <conio.h>
#include <conio.h> #include <alloc.h>
#include <alloc.h> void difference(float *x,float *y,int n)
void difference(float *x,float *y,int n) { float *f;
{ float *f; int k,i;
 int k,i; f=(float *)malloc(n*sizeof(float));
 f=(float *)malloc(n*sizeof(float)); for(k=1;k<=n;k++)
 for(k=1;k<=n;k++) { f[0]=y[k];
 { f[0]=y[k]; for(i=0;i<k;i++)
    for(i=0;i<k;i++) f[i+1]=(f[i]-y[i])/(x[k]-x[i]);
      f[i+1]=(f[i]-y[i])/(x[k]-x[i]); y[k]=f[k];
    y[k]=f[k]; }
 } return;
 return; }
} main()
main() { int i,n;
{ int i,n; float x[20],y[20],xx,yy;
 float x[20],y[20],xx,yy; printf("Input n:");
 printf("Input n:"); scanf("%d",&n);
 scanf("%d",&n); if(n>=20) {printf("Error! The value of n must in (0,20)."); getch(); return 1;}
 if(n>=20) {printf("Error! The value of n must in (0,20)."); getch(); return 1;} if(n<=0) {printf("Error! The value of n must in (0,20).");getch(); return 1;}
 if(n<=0) {printf("Error! The value of n must in (0,20).");getch(); return 1;} for(i=0;i<=n-1;i++)
 for(i=0;i<=n-1;i++) { printf("x[%d]:",i);
 { printf("x[%d]:",i); scanf("%f",&x[i]);
    scanf("%f",&x[i]); }
 } printf(" ");
   printf(" "); for(i=0;i<=n-1;i++)
 for(i=0;i<=n-1;i++) { printf("y[%d]:",i);scanf("%f",&y[i]);}
 { printf("y[%d]:",i);scanf("%f",&y[i]);} printf(" ");
 printf(" "); difference(x,(float *)y,n);
 difference(x,(float *)y,n); printf("Input xx:");
 printf("Input xx:"); scanf("%f",&xx);
 scanf("%f",&xx); yy=y[20];
 yy=y[20]; for(i=n-1;i>=0;i--) yy=yy*(xx-x[i])+y[i];
 for(i=n-1;i>=0;i--) yy=yy*(xx-x[i])+y[i]; printf("NewtonInter(%f)=%f",xx,yy);
 printf("NewtonInter(%f)=%f",xx,yy); getch();
 getch(); }
}3.列主元高斯消去法,求解其次线性方程组
 #include<stdio.h>
#include<stdio.h> #include <math.h>
#include <math.h> #define N 20
#define N 20 int main()
int main() { int n,i,j,k;
{ int n,i,j,k; int mi,tmp,mx;
 int mi,tmp,mx; float a[N][N],b[N],x[N];
 float a[N][N],b[N],x[N]; printf(" Input n:");
 printf(" Input n:"); scanf("%d",&n);
 scanf("%d",&n); if(n>N)
 if(n>N) { printf("The input n should in(0,N)! ");
 { printf("The input n should in(0,N)! "); getch();
    getch(); return 1;
    return 1; }
 } if(n<=0)
 if(n<=0) { printf("The input n should in(0,N)! ");
 { printf("The input n should in(0,N)! "); getch();
    getch(); return 1;
    return 1; }
 } printf("Now input a(i,j),i,j=0...%d: ",n-1);
 printf("Now input a(i,j),i,j=0...%d: ",n-1); for(i=0;i<n;i++)
 for(i=0;i<n;i++) { for(j=0;j<n;j++)
 { for(j=0;j<n;j++) scanf("%f",&a[i][j]);}
    scanf("%f",&a[i][j]);} printf("Now input b(i),i,j=0...%d: ",n-1);
 printf("Now input b(i),i,j=0...%d: ",n-1); for(i=0;i<n;i++)
 for(i=0;i<n;i++) scanf("%f",&b[i]);
 scanf("%f",&b[i]); for(i=0;i<n-2;i++)
 for(i=0;i<n-2;i++) { for(j=i+1,mi=i,mx=fabs(a[i][j]);j<n-1;j++)
 { for(j=i+1,mi=i,mx=fabs(a[i][j]);j<n-1;j++) if(fabs(a[j][i])>mx)
    if(fabs(a[j][i])>mx) { mi=j;
    { mi=j; mx=fabs(a[j][i]);
      mx=fabs(a[j][i]); }
    } if(i<mi)
    if(i<mi) { tmp=b[i];b[i]=b[mi];b[mi]=tmp;
    { tmp=b[i];b[i]=b[mi];b[mi]=tmp; for(j=i;j<n;j++)
      for(j=i;j<n;j++) { tmp=a[i][j];
      { tmp=a[i][j]; a[i][j]=a[mi][j];
        a[i][j]=a[mi][j]; a[mi][j]=tmp;
        a[mi][j]=tmp; }
      } }
    } for(j=i+1;j<n;j++)
    for(j=i+1;j<n;j++) { tmp=-a[j][i]/a[i][i];
    { tmp=-a[j][i]/a[i][i]; b[j]+=b[i]*tmp;
      b[j]+=b[i]*tmp; for(k=i;k<n;k++)
      for(k=i;k<n;k++) a[j][k]+=a[i][k]*tmp;
      a[j][k]+=a[i][k]*tmp; }
    } }
 } x[n-1]=b[n-1]/a[n-1][n-1];
 x[n-1]=b[n-1]/a[n-1][n-1]; for(i=n-2;i>=0;i--)
 for(i=n-2;i>=0;i--) { x[i]=b[i];
 { x[i]=b[i]; for(j=i+1;j<n;j++)
    for(j=i+1;j<n;j++) x[i]-=a[i][j]*x[j];
    x[i]-=a[i][j]*x[j]; x[i]/=a[i][i];
    x[i]/=a[i][i]; }
 } for(i=0;i<n;i++)
 for(i=0;i<n;i++) printf("Answer:  x[%d]=%f ",i,x[i]);
 printf("Answer:  x[%d]=%f ",i,x[i]); getch();
 getch(); return 0;
 return 0; }
} 
  
  #include<math.h>
#include<math.h> #include<stdio.h>
#include<stdio.h> #define NUMBER 20
#define NUMBER 20 #define Esc   0x1b
#define Esc   0x1b #define Enter 0x0d
#define Enter 0x0d 
  float A[NUMBER][NUMBER+1] ,ark;
float A[NUMBER][NUMBER+1] ,ark; int flag,n;
int flag,n; exchange(int r,int k);
exchange(int r,int k); float max(int k);
float max(int k); message();
message(); 
  main()
main() {
{ float x[NUMBER];
   float x[NUMBER];      int r,k,i,j;
   int r,k,i,j; char celect;
   char celect; clrscr();
   clrscr(); 
   printf("  Use Gauss.");
   printf("  Use Gauss."); printf("  1.Jie please press Enter.");
   printf("  1.Jie please press Enter."); printf("  2.Exit press Esc.");
   printf("  2.Exit press Esc."); celect=getch();
   celect=getch(); if(celect==Esc)
   if(celect==Esc) exit(0);
     exit(0); printf("   input n=");
   printf("   input n="); scanf("%d",&n);
   scanf("%d",&n); printf("   Input matrix A and B:");
     printf("   Input matrix A and B:"); for(i=1;i<=n;i++)
   for(i=1;i<=n;i++) {
   { printf("  Input a%d1--a%d%d and b%d:",i,i,n,i);
    printf("  Input a%d1--a%d%d and b%d:",i,i,n,i); 
        for(j=1;j<=n+1;j++)        scanf("%f",&A[i][j]);
    for(j=1;j<=n+1;j++)        scanf("%f",&A[i][j]); }
   } for(k=1;k<=n-1;k++)
   for(k=1;k<=n-1;k++)                       {
   { ark=max(k);
   ark=max(k); if(ark==0)
    if(ark==0)                   {
    { printf("  It's wrong!");message();
      printf("  It's wrong!");message(); }
    } else if(flag!=k)
    else if(flag!=k) exchange(flag,k);
     exchange(flag,k); for(i=k+1;i<=n;i++)
     for(i=k+1;i<=n;i++) for(j=k+1;j<=n+1;j++)
     for(j=k+1;j<=n+1;j++) A[i][j]=A[i][j]-A[k][j]*A[i][k]/A[k][k];
     A[i][j]=A[i][j]-A[k][j]*A[i][k]/A[k][k]; }
   } x[n]=A[n][n+1]/A[n][n];
   x[n]=A[n][n+1]/A[n][n]; for( k=n-1;k>=1;k--)
   for( k=n-1;k>=1;k--) {
   { float me=0;
     float me=0; for(j=k+1;j<=n;j++)
     for(j=k+1;j<=n;j++) {
     { me=me+A[k][j]*x[j];
       me=me+A[k][j]*x[j]; }
     } x[k]=(A[k][n+1]-me)/A[k][k];
       x[k]=(A[k][n+1]-me)/A[k][k]; }
   } for(i=1;i<=n;i++)
   for(i=1;i<=n;i++) {
   { printf("   x%d=%f",i,x[i]);
     printf("   x%d=%f",i,x[i]); }
   } message();
   message(); }
} 
  exchange(int r,int k)
exchange(int r,int k)       {
{ int i;
 int i; for(i=1;i<=n+1;i++)
 for(i=1;i<=n+1;i++) A[0][i]=A[r][i];
    A[0][i]=A[r][i]; for(i=1;i<=n+1;i++)
 for(i=1;i<=n+1;i++) A[r][i]=A[k][i];
    A[r][i]=A[k][i]; for(i=1;i<=n+1;i++)
 for(i=1;i<=n+1;i++) A[k][i]=A[0][i];
    A[k][i]=A[0][i]; }
} 
  float max(int k)
float max(int k)          {
{ int i;
 int i; float temp=0;
 float temp=0; for(i=k;i<=n;i++)
 for(i=k;i<=n;i++) if(fabs(A[i][k])>temp)
    if(fabs(A[i][k])>temp) {
    { temp=fabs(A[i][k]);
      temp=fabs(A[i][k]); flag=i;
      flag=i; }
    } return temp;
 return temp; }
} 
  message()
message()                                     {
{ printf("   Go on Enter ,Exit press Esc!");
 printf("   Go on Enter ,Exit press Esc!"); switch(getch())
 switch(getch()) {
 { case Enter: main();
   case Enter: main(); case Esc: exit(0);
   case Esc: exit(0); default:{printf("  Input error!");message();}
   default:{printf("  Input error!");message();} }
 } }
}4.龙贝格求积公式Romberg 求解定积分
 #include<stdio.h>
#include<stdio.h> #include<math.h>
#include<math.h> #define f(x) (sin(x)/x)
#define f(x) (sin(x)/x) #define N 20
#define N 20 #define MAX 20
#define MAX 20       #define a 2
#define a 2 #define b 4
#define b 4 #define e 0.00001
#define e 0.00001       float LBG(float p,float q,int n)
float LBG(float p,float q,int n) { int i;
{ int i; float sum=0,h=(q-p)/n;
 float sum=0,h=(q-p)/n; for (i=1;i<n;i++)
 for (i=1;i<n;i++) sum+=f(p+i*h);
 sum+=f(p+i*h); sum+=(f(p)+f(q))/2;
 sum+=(f(p)+f(q))/2; return(h*sum);
 return(h*sum); }
} void main()
void main() { int i;
 { int i; int n=N,m=0;
   int n=N,m=0; float T[MAX+1][2];
   float T[MAX+1][2]; T[0][1]=LBG(a,b,n);
   T[0][1]=LBG(a,b,n); n*=2;
   n*=2; for(m=1;m<MAX;m++)
   for(m=1;m<MAX;m++) { for(i=0;i<m;i++)
   { for(i=0;i<m;i++) T[i][0]=T[i][1];
      T[i][0]=T[i][1]; T[0][1]=LBG(a,b,n);
     T[0][1]=LBG(a,b,n); n*=2;
     n*=2; for(i=1;i<=m;i++)
     for(i=1;i<=m;i++) T[i][1]=T[i-1][1]+(T[i-1][1]-T[i-1][0])/(pow(2,2*m)-1);
     T[i][1]=T[i-1][1]+(T[i-1][1]-T[i-1][0])/(pow(2,2*m)-1); if((T[m-1][1]<T[m][1]+e)&&(T[m-1][1]>T[m][1]-e))
     if((T[m-1][1]<T[m][1]+e)&&(T[m-1][1]>T[m][1]-e)) { printf("Answer=%f ",T[m][1]); getch();
     { printf("Answer=%f ",T[m][1]); getch(); return ;
      return ; }
     } }
   } }
 }5.牛顿迭代公式,求解方程的近似解
 #include<stdio.h>
#include<stdio.h> #include<math.h>
#include<math.h> #include<conio.h>
#include<conio.h> #define N 100
#define N 100 #define PS 1e-5
#define PS 1e-5 #define TA 1e-5
#define TA 1e-5 float Newton(float (*f)(float),float(*f1)(float),float x0 )
float Newton(float (*f)(float),float(*f1)(float),float x0 ) { float x1,d=0;
{ float x1,d=0; int k=0;
int k=0; do
 do { x1= x0-f(x0)/f1(x0);
 { x1= x0-f(x0)/f1(x0); if((k++>N)||(fabs(f1(x1))<PS))
    if((k++>N)||(fabs(f1(x1))<PS)) { printf(" Failed!");
    { printf(" Failed!"); getch();
      getch(); exit();
      exit(); }
    } d=(fabs(x1)<1?x1-x0:(x1-x0)/x1);
    d=(fabs(x1)<1?x1-x0:(x1-x0)/x1); x0=x1;
    x0=x1; printf("x(%d)=%f ",k,x0);
    printf("x(%d)=%f ",k,x0); }
 } while((fabs(d))>PS&&fabs(f(x1))>TA) ;
 while((fabs(d))>PS&&fabs(f(x1))>TA) ; return x1;
 return x1; }
} float f(float x)
float f(float x) { return x*x*x+x*x-3*x-3; }
{ return x*x*x+x*x-3*x-3; } float f1(float x)
float f1(float x) { return 3.0*x*x+2*x-3; }
{ return 3.0*x*x+2*x-3; } void main()
void main() { float f(float);
{ float f(float); float f1(float);
 float f1(float); float x0,y0;
 float x0,y0; printf("Input x0: ");
 printf("Input x0: "); scanf("%f",&x0);
 scanf("%f",&x0); printf("x(0)=%f ",x0);
 printf("x(0)=%f ",x0); y0=Newton(f,f1,x0);
 y0=Newton(f,f1,x0); printf(" The root is x=%f ",y0);
 printf(" The root is x=%f ",y0); getch();
 getch(); }
}6.牛顿-科特斯求积公式,求解定积分
 #include<stdio.h>
#include<stdio.h> #include<math.h>
#include<math.h> int NC(a,h,n,r,f)
int NC(a,h,n,r,f) float (*a)[];
float (*a)[]; float h;
float h; int n,f;
int n,f; float *r;
float *r; { int nn,i;
{ int nn,i; float ds;
 float ds; if(n>1000||n<2)
 if(n>1000||n<2) { if (f)
 { if (f) printf("  Faild! Check if 1<n<1000! ",n);
   printf("  Faild! Check if 1<n<1000! ",n); return(-1);
   return(-1); }
} if(n==2)
if(n==2) { *r=0.5*((*a)[0]+(*a)[1])*(h);
{ *r=0.5*((*a)[0]+(*a)[1])*(h); return(0);
return(0); }
} if (n-4==0)
if (n-4==0) { *r=0;
 { *r=0; *r=*r+0.375*(h)*((*a)[n-4]+3*(*a)[n-3]+3*(*a)[n-2]+(*a)[n-1]);
*r=*r+0.375*(h)*((*a)[n-4]+3*(*a)[n-3]+3*(*a)[n-2]+(*a)[n-1]); return(0);
return(0); }
} if(n/2-(n-1)/2<=0)
if(n/2-(n-1)/2<=0) nn=n;
nn=n; else
else nn=n-3;
nn=n-3; ds=(*a)[0]-(*a)[nn-1];
ds=(*a)[0]-(*a)[nn-1]; for(i=2;i<=nn;i=i+2)
for(i=2;i<=nn;i=i+2) ds=ds+4*(*a)[i-1]+2*(*a)[i];
ds=ds+4*(*a)[i-1]+2*(*a)[i]; *r=ds*(h)/3;
*r=ds*(h)/3; if(n>nn)
if(n>nn) *r=*r+0.375*(h)*((*a)[n-4]+3*(*a)[n-3]+3*(*a)[n-2]+(*a)[n-1]);
*r=*r+0.375*(h)*((*a)[n-4]+3*(*a)[n-3]+3*(*a)[n-2]+(*a)[n-1]); return(0);
return(0); }
} main()
main() {
{ float h,r;
 float h,r; int n,ntf,f;
 int n,ntf,f; int i;
 int i; float a[16];
 float a[16]; printf("Input the x[i](16): ");
printf("Input the x[i](16): "); for(i=0;i<=15;i++)
 for(i=0;i<=15;i++) scanf("%d",&a[i]);
 scanf("%d",&a[i]); h=0.2;
h=0.2; f=0;
f=0; ntf=NC(a,h,n,&r,f);
ntf=NC(a,h,n,&r,f); if(ntf==0)
if(ntf==0) printf(" R=%f ",r);
 printf(" R=%f ",r); else
  else printf("  Wrong!Return code=%d ",ntf);
 printf("  Wrong!Return code=%d ",ntf); getch();
  getch(); }
}7.雅克比迭代 Jacobic,求解方程近似解
 #include <stdio.h>
#include <stdio.h> #include <math.h>
#include <math.h> #define N 20
#define N 20 #define MAX 100
#define MAX 100 #define e 0.00001
#define e 0.00001 int main()
int main() { int n;
{ int n; int i,j,k;
 int i,j,k; float t;
 float t; float a[N][N],b[N][N],c[N],g[N],x[N],h[N];
 float a[N][N],b[N][N],c[N],g[N],x[N],h[N]; printf(" Input dim of n:");   scanf("%d",&n);
 printf(" Input dim of n:");   scanf("%d",&n); if(n>N)
 if(n>N) { printf("Faild! Check if 0<n<N! "); getch(); return 1; }
 { printf("Faild! Check if 0<n<N! "); getch(); return 1; } if(n<=0)
 if(n<=0) {printf("Faild! Check if 0<n<N! "); getch(); return 1;}
 {printf("Faild! Check if 0<n<N! "); getch(); return 1;} printf("Input a[i,j],i,j=0…%d: ",n-1);
 printf("Input a[i,j],i,j=0…%d: ",n-1); for(i=0;i<n;i++)
 for(i=0;i<n;i++) for(j=0;j<n;j++)
   for(j=0;j<n;j++) scanf("%f",&a[i][j]);
   scanf("%f",&a[i][j]); printf("Input c[i],i=0…%d: ",n-1);
 printf("Input c[i],i=0…%d: ",n-1); for(i=0;i<n;i++)
 for(i=0;i<n;i++) scanf("%f",&c[i]);
scanf("%f",&c[i]); for(i=0;i<n;i++)
 for(i=0;i<n;i++) for(j=0;j<n;j++)
   for(j=0;j<n;j++) { b[i][j]=-a[i][j]/a[i][i];   g[i]=c[i]/a[i][i]; }
   { b[i][j]=-a[i][j]/a[i][i];   g[i]=c[i]/a[i][i]; } for(i=0;i<MAX;i++)
  for(i=0;i<MAX;i++) { for(j=0;j<n;j++)
   { for(j=0;j<n;j++) h[j]=g[j];
     h[j]=g[j]; { for(k=0;k<n;k++)
     { for(k=0;k<n;k++) { if(j==k) continue; h[j]+=b[j][k]*x[k]; }
       { if(j==k) continue; h[j]+=b[j][k]*x[k]; } }
     } t=0;
     t=0; for(j=0;j<n;j++)
     for(j=0;j<n;j++) if(t<fabs(h[j]-x[j])) t=fabs(h[j]-x[j]);
     if(t<fabs(h[j]-x[j])) t=fabs(h[j]-x[j]); for(j=0;j<n;j++)
     for(j=0;j<n;j++) x[j]=h[j];
     x[j]=h[j]; if(t<e)
     if(t<e) { printf("x_i= ");
     { printf("x_i= "); for(i=0;i<n;i++)
       for(i=0;i<n;i++)      printf("x[%d]=%f ",i,x[i]);
printf("x[%d]=%f ",i,x[i]); getch();
       getch(); return 0;
       return 0; }
     } printf("after %d repeat , return ",MAX);
     printf("after %d repeat , return ",MAX); getch();
     getch(); return 1;
     return 1; }
   } getch();
   getch(); }
}8.秦九昭算法
 #include <math.h>
#include <math.h> float qin(float a[],int n,float x)
float qin(float a[],int n,float x) {    float r=0;
{    float r=0; int i;
    int i; for(i=n;i>=0;i--)
    for(i=n;i>=0;i--) r=r*x+a[i];
    r=r*x+a[i]; return r;
    return r; }
} main()
main() {    float a[50],x,r=0;
{    float a[50],x,r=0; int n,i;
    int n,i; do
    do {    printf("Input frequency:");
    {    printf("Input frequency:"); scanf("%d",&n);
        scanf("%d",&n); }
    } while(n<1);
    while(n<1); printf("Input value:");
    printf("Input value:"); for(i=0;i<=n;i++)
    for(i=0;i<=n;i++) scanf("%f",&a[i]);
    scanf("%f",&a[i]); printf("Input frequency:");
    printf("Input frequency:"); scanf("%f",&x);
    scanf("%f",&x); r=qin(a,n,x);
    r=qin(a,n,x); printf("Answer:%f",r);
    printf("Answer:%f",r); getch();
    getch(); }
}9.幂法
 #include<stdio.h>
#include<stdio.h> #include<math.h>
#include<math.h> #define N 100
#define N 100 #define e 0.00001
#define e 0.00001 #define n 3
#define n 3 float x[n]={0,0,1};
float x[n]={0,0,1}; float a[n][n]={{2,3,2},{10,3,4},{3,6,1}};
float a[n][n]={{2,3,2},{10,3,4},{3,6,1}}; float y[n];
float y[n]; main()
main() { int i,j,k;
{ int i,j,k; float xm,oxm;
   float xm,oxm; oxm=0;
   oxm=0; for(k=0;k<N;k++)
   for(k=0;k<N;k++) { for(j=0;j<n;j++)
   { for(j=0;j<n;j++) { y[j]=0;
      { y[j]=0; for(i=0;i<n;i++)
        for(i=0;i<n;i++) y[j]+=a[j][i]*x[i];
        y[j]+=a[j][i]*x[i]; }
      } xm=0;
      xm=0; for(j=0;j<n;j++)
      for(j=0;j<n;j++) if(fabs(y[j])>xm) xm=fabs(y[j]);
      if(fabs(y[j])>xm) xm=fabs(y[j]); for(j=0;j<n;j++)
      for(j=0;j<n;j++) y[j]/=xm;
      y[j]/=xm; for(j=0;j<n;j++)
      for(j=0;j<n;j++) x[j]=y[j];
      x[j]=y[j]; if(fabs(xm-oxm)<e)
      if(fabs(xm-oxm)<e) { printf("max:%f  ",xm);
      { printf("max:%f  ",xm); printf("v[i]: ");
       printf("v[i]: "); for(k=0;k<n;k++) printf("%f ",y[k]);
        for(k=0;k<n;k++) printf("%f ",y[k]); break;
       break; }
      } oxm=xm;
      oxm=xm; }
    } getch();
 getch(); }
}10.高斯塞德尔
 #include<math.h>
#include<math.h> #include<stdio.h>
#include<stdio.h> #define N 20
#define N 20 #define M 99
#define M 99 float a[N][N];
float a[N][N]; float b[N];
float b[N]; int main()
int main() {    int i,j,k,n;
{    int i,j,k,n; float sum,no,d,s,x[N];
    float sum,no,d,s,x[N]; printf(" Input dim of n:");
    printf(" Input dim of n:"); scanf("%d",&n);
 scanf("%d",&n); if(n>N)
 if(n>N) { printf("Faild! Check if 0<n<N!  "); getch();
 { printf("Faild! Check if 0<n<N!  "); getch(); return 1;
   return 1; }
 } if(n<=0)
 if(n<=0) { printf("Faild! Check if 0<n<N!  ");getch();return 1;}
 { printf("Faild! Check if 0<n<N!  ");getch();return 1;} printf("Input a[i,j],i,j=0…%d: ",n-1);
 printf("Input a[i,j],i,j=0…%d: ",n-1); for(i=0;i<n;i++)
 for(i=0;i<n;i++) for(j=0;j<n;j++)
 for(j=0;j<n;j++) scanf("%f",&a[i][j]);
 scanf("%f",&a[i][j]); printf("Input b[i],i=0…%d: ",n-1);
 printf("Input b[i],i=0…%d: ",n-1); for(i=0;i<n;i++) scanf("%f",&b[i]);
 for(i=0;i<n;i++) scanf("%f",&b[i]); for(i=0;i<n;i++) x[i]=0;
    for(i=0;i<n;i++) x[i]=0; k=0;
 k=0; printf(" k=%dx=",k);
 printf(" k=%dx=",k); for(i=0;i<n;i++) printf("%12.8f",x[i]);
 for(i=0;i<n;i++) printf("%12.8f",x[i]); do
 do { k++;
 { k++; if(k>M){printf(" Error! ”);getch();}
     if(k>M){printf(" Error! ”);getch();} break;
     break; }
 } no=0.0;
 no=0.0; for(i=0;i<n;i++)
 for(i=0;i<n;i++) { s=x[i];
  { s=x[i]; sum=0.0;
    sum=0.0; for(j=0;j<n;j++)
    for(j=0;j<n;j++) if (j!=i) sum=sum+a[i][j]*x[j];
    if (j!=i) sum=sum+a[i][j]*x[j]; x[i]=(b[i]-sum)/a[i][i];
    x[i]=(b[i]-sum)/a[i][i]; d=fabs(x[i]-s);
    d=fabs(x[i]-s); if (no<d) no=d;
    if (no<d) no=d; }
 } printf(" k=%2dx=",k);
 printf(" k=%2dx=",k); for(i=0;i<n;i++)   printf("%f",x[i]);
 for(i=0;i<n;i++)   printf("%f",x[i]); }
} while (no>=0.1e-6);
while (no>=0.1e-6); if(no<0.1e-6)
if(no<0.1e-6) { printf("   answer= ");
{ printf("   answer= "); printf(" k=%d",k);
  printf(" k=%d",k); for (i=0;i<n;i++)
  for (i=0;i<n;i++) printf("  x[%d]=%12.8f",i,x[i]);
  printf("  x[%d]=%12.8f",i,x[i]); }
} getch();
getch(); 
                   
                   
                   
                   本文介绍了一系列重要的数值计算方法,包括拉格朗日插值、牛顿插值、高斯消元等经典算法,并提供了每种算法的具体实现示例。这些算法广泛应用于科学计算和工程实践中。
本文介绍了一系列重要的数值计算方法,包括拉格朗日插值、牛顿插值、高斯消元等经典算法,并提供了每种算法的具体实现示例。这些算法广泛应用于科学计算和工程实践中。
           
  
    
       
           
                 
                 
                 
                 
                 
                
               
                 
                 
                 
                 
                
               
                 
                 扫一扫
扫一扫
                     
              
             
                   670
					670
					
 被折叠的  条评论
		 为什么被折叠?
被折叠的  条评论
		 为什么被折叠?
		 
		  到【灌水乐园】发言
到【灌水乐园】发言                                
		 
		 
    
   
    
   
             
            


 
            