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

本文介绍了使用牛顿-科特斯公式进行数值积分的方法,并通过一个C语言程序实现。此外,还探讨了雅克比迭代法求解线性方程组的近似解的过程,并给出了相应的C语言代码实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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 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、付费专栏及课程。

余额充值