`
izuoyan
  • 浏览: 9223400 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

10个重要的算法C语言实现源代码:拉格朗日,牛顿插值,高斯,龙贝格,牛顿迭代,牛顿-科特斯,雅克比,秦九昭,幂法,高斯塞德尔

阅读更多

6.牛顿-科特斯求积公式,求定积分

C/C++ code
<!--code highlighting produced by actipro codehighlighter (freeware)http://www.codehighlighter.com/-->#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;elsenn=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.雅克比迭代,求解方程近似解

C/C++ code
<!--code highlighting produced by actipro codehighlighter (freeware)http://www.codehighlighter.com/-->#include <stdio.h>#include <math.h>#define N 20#define MAX 100#define e 0.00001int 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();}



8.秦九昭算法

C/C++ code
<!--code highlighting produced by actipro codehighlighter (freeware)http://www.codehighlighter.com/-->#include <math.h>float qin(float a[],int n,float x){ float r=0; int i; for(i=n;i>=0;i--) r=r*x+a[i]; return r;}main(){ float a[50],x,r=0; int n,i; do { printf("Input frequency:"); scanf("%d",&n); } while(n<1); printf("Input value:"); for(i=0;i<=n;i++) scanf("%f",&a[i]); printf("Input frequency:"); scanf("%f",&x); r=qin(a,n,x); printf("Answer:%f",r); getch();}



9.幂法

C/C++ code
<!--code highlighting produced by actipro codehighlighter (freeware)http://www.codehighlighter.com/-->#include<stdio.h>#include<math.h>#define N 100#define e 0.00001#define n 3float x[n]={0,0,1};float a[n][n]={{2,3,2},{10,3,4},{3,6,1}};float y[n];main(){ int i,j,k; float xm,oxm; oxm=0; for(k=0;k<N;k++) { for(j=0;j<n;j++) { y[j]=0; for(i=0;i<n;i++) y[j]+=a[j][i]*x[i]; } xm=0; for(j=0;j<n;j++) if(fabs(y[j])>xm) xm=fabs(y[j]); for(j=0;j<n;j++) y[j]/=xm; for(j=0;j<n;j++) x[j]=y[j]; if(fabs(xm-oxm)<e) { printf("max:%f\n\n",xm); printf("v[i]:\n"); for(k=0;k<n;k++) printf("%f\n",y[k]); break; } oxm=xm; } getch();}



10.高斯塞德尔

C/C++ code
<!--code highlighting produced by actipro codehighlighter (freeware)http://www.codehighlighter.com/-->#include<math.h>#include<stdio.h>#define N 20#define M 99float a[N][N];float b[N];int main(){ int i,j,k,n; float sum,no,d,s,x[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 b[i],i=0…%d:\n",n-1); for(i=0;i<n;i++) scanf("%f",&b[i]); for(i=0;i<n;i++) x[i]=0; k=0; printf("\nk=%dx=",k); for(i=0;i<n;i++) printf("%12.8f",x[i]); do { k++; if(k>M){printf("\nError!\n”);getch();} break; } no=0.0; for(i=0;i<n;i++) { s=x[i]; sum=0.0; for(j=0;j<n;j++) if (j!=i) sum=sum+a[i][j]*x[j]; x[i]=(b[i]-sum)/a[i][i]; d=fabs(x[i]-s); if (no<d) no=d; } printf("\nk=%2dx=",k); for(i=0;i<n;i++) printf("%f",x[i]);}while (no>=0.1e-6);if(no<0.1e-6){ printf("\n\n answer=\n"); printf("\nk=%d",k); for (i=0;i<n;i++) printf("\n x[%d]=%12.8f",i,x[i]);}getch();}

注:本文转自:http://topic.csdn.net/u/20080509/13/d4500a19-10aa-4fdf-b876-8e30f4daa331.html?seed=880334510

分享到:
评论

相关推荐

    10个重要的算法C语言实现源代码

    这篇文章.share了10个重要的算法的C语言实现源代码,涵盖了拉格朗日插值、牛顿插值、高斯列主元消去法、龙贝格积分、牛顿迭代、牛顿-科特斯方法、雅克比矩阵、秦九昭算法、幂法、高斯塞德尔迭代等多种算法。...

    10个重要的算法C语言实现

    本资源主要介绍了十种经典的数学算法的C语言实现,包括拉格朗日插值、牛顿插值、 高斯列主元消去法、龙贝格积分、牛顿迭代、牛顿-科特斯方法、雅克比迭代、秦九昭算法、幂法和高斯塞德尔迭代。这些算法都是数学领域...

    重要的C用语言实现源代码

    根据给定文件的信息,本文将详细介绍10个重要的算法及其C语言实现源代码,这些算法包括拉格朗日插值、牛顿插值、高斯列主元消去法、龙贝格积分、牛顿迭代法、牛顿-科特斯公式、雅克比迭代法、秦九韶算法、幂法以及...

    math_code

    【算法C语言】是本文的核心话题,涉及到一系列在C语言中实现的重要算法,这些算法广泛应用于数值计算和数据拟合领域。以下是这些算法的详细解释: 1. **拉格朗日插值多项式**: 拉格朗日插值是一种通过一组离散点...

    数值分析中的各种公式的c代码(太长,详细见资源描述)

    - **拉格朗日插值、牛顿插值**:插值多项式的方法。 - **龙贝格积分、牛顿迭代**:数值积分与非线性方程求根的方法。 - **牛顿-科特斯公式**:用于数值积分的通用公式。 - **雅克比迭代法**:求解线性方程组的另一种...

    C代码_C++_

    C++ 学习入门代码1.拉格朗日插值多项式 ,用于离散数据的拟合 2.牛顿插值多项式,用于离散数据的拟合 3.高斯列主元消去法求解其次线性方程组 4.龙贝格求积公式,求解定积分 5.牛顿迭代公式,求方程的近似解6. 牛顿-...

Global site tag (gtag.js) - Google Analytics