10个重要的算法C语言实现源代码(其6和7--牛顿-科特斯和雅克比)

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();
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值