6. 牛顿-科特斯求积公式,求定积分
-
#include<stdio.h> #include<math.h> int NC(a,h,n,r,f) float (*a)[]; float h; int n,f; float *r; { int nn,i; float ds; if(n>1000||n<2) { if (f) printf("/n Faild! Check if 1<n<1000!/n",n); return(-1); } if(n==2) { *r=0.5*((*a)[0]+(*a)[1])*(h); return(0); } if (n-4==0) { *r=0; *r=*r+0.375*(h)*((*a)[n-4]+3*(*a)[n-3]+3*(*a)[n-2]+(*a)[n-1]); return(0); } if(n/2-(n-1)/2<=0) nn=n; else nn=n-3; ds=(*a)[0]-(*a)[nn-1]; for(i=2;i<=nn;i=i+2) ds=ds+4*(*a)[i-1]+2*(*a)[i]; *r=ds*(h)/3; if(n>nn) *r=*r+0.375*(h)*((*a)[n-4]+3*(*a)[n-3]+3*(*a)[n-2]+(*a)[n-1]); return(0); } main() { float h,r; int n,ntf,f; int i; float a[16]; printf("Input the x[i](16):/n"); for(i=0;i<=15;i++) scanf("%d",&a[i]); h=0.2; f=0; ntf=NC(a,h,n,&r,f); if(ntf==0) printf("/nR=%f/n",r); else printf("/n Wrong!Return code=%d/n",ntf); getch(); }
7.雅克比迭代,求解方程近似解
- #include<stdio.h> #include<math.h> #define N20
#define MAX100
#define e0.00001
int main()
{int n;
int i,j,k;
float t;
float a[N][N],b[N][N],c[N],g[N],x[N],h[N];
printf("/nInput dim of n:"); scanf("%d",&n);
if(n>N)
{ printf("Faild! Check if 0<n<N!/n"); getch();return 1; }
if(n<=0)
{printf("Faild! Check if 0<n<N!/n"); getch();return 1;}
printf("Input a[i,j],i,j=0…%d:/n",n-1);
for(i=0;i<n;i++)
for(j=0;j<n;j++)
scanf("%f",&a[i][j]);
printf("Input c[i],i=0…%d:/n",n-1);
for(i=0;i<n;i++)
scanf("%f",&c[i]);
for(i=0;i<n;i++)
for(j=0;j<n;j++)
{ b[i][j]=-a[i][j]/a[i][i]; g[i]=c[i]/a[i][i]; }
for(i=0;i<MAX;i++)
{for(j=0;j<n;j++)
h[j]=g[j];
{for(k=0;k<n;k++)
{if(j==k)continue; h[j]+=b[j][k]*x[k]; }
}
t=0;
for(j=0;j<n;j++)
if(t<fabs(h[j]-x[j])) t=fabs(h[j]-x[j]);
for(j=0;j<n;j++)
x[j]=h[j];
if(t<e)
{ printf("x_i=/n");
for(i=0;i<n;i++)
printf("x[%d]=%f/n",i,x[i]);
getch();
return 0;
}
printf("after %d repeat , return/n",MAX);
getch();
return 1;
}
getch();
}