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 N
20
#define MAX 100
#define e 0.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();
}