`
qq123zhz
  • 浏览: 534429 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

10个重要的算法C语言实现源代码(留着以后看)

    博客分类:
  • java
阅读更多

包括拉格朗日,牛顿插值,高斯,龙贝格,牛顿迭代,牛顿-科特斯,雅克比,秦九昭,幂法,高斯塞德尔 。都是经典的数学算法,希望能开托您的思路。转自kunli.info

1.拉格朗日插值多项式 ,用于离散数据的拟合

 

<!-- Code highlighting produced by Actipro CodeHighlighter (freeware) http://www.CodeHighlighter.com/ -->#include <stdio.h> #include <conio.h> #include <alloc.h> float lagrange(float *x,float *y,float xx,int n) /*拉格朗日插值算法*/ { int i,j; float *a,yy=0.0; /*a作为临时变量,记录拉格朗日插值多项式*/ a=(float *)malloc(n*sizeof(float)); for(i=0;i<=n-1;i++) { a[i]=y[i]; for(j=0;j<=n-1;j++) if(j!=i) a[i]*=(xx-x[j])/(x[i]-x[j]); yy+=a[i]; } free(a); return yy; } main() { int i,n; float x[20],y[20],xx,yy; printf("Input n:"); scanf("%d",&n); if(n>=20) {printf("Error!The value of n must in (0,20)."); getch();return 1;} if(n<=0) {printf("Error! The value of n must in (0,20)."); getch(); return 1;} for(i=0;i<=n-1;i++) { printf("x[%d]:",i); scanf("%f",&x[i]); } printf("\n"); for(i=0;i<=n-1;i++) { printf("y[%d]:",i);scanf("%f",&y[i]);} printf("\n"); printf("Input xx:"); scanf("%f",&xx); yy=lagrange(x,y,xx,n); printf("x=%f,y=%f\n",xx,yy); getch(); }

 

2.牛顿插值多项式,用于离散数据的拟合

C/C++ code
<!-- Code highlighting produced by Actipro CodeHighlighter (freeware) http://www.CodeHighlighter.com/ -->#include <stdio.h> #include <conio.h> #include <alloc.h> void difference(float *x,float *y,int n) { float *f; int k,i; f=(float *)malloc(n*sizeof(float)); for(k=1;k<=n;k++) { f[0]=y[k]; for(i=0;i<k;i++) f[i+1]=(f[i]-y[i])/(x[k]-x[i]); y[k]=f[k]; } return; } main() { int i,n; float x[20],y[20],xx,yy; printf("Input n:"); scanf("%d",&n); if(n>=20) {printf("Error! The value of n must in (0,20)."); getch(); return 1;} if(n<=0) {printf("Error! The value of n must in (0,20).");getch(); return 1;} for(i=0;i<=n-1;i++) { printf("x[%d]:",i); scanf("%f",&x[i]); } printf("\n"); for(i=0;i<=n-1;i++) { printf("y[%d]:",i);scanf("%f",&y[i]);} printf("\n"); difference(x,(float *)y,n); printf("Input xx:"); scanf("%f",&xx); yy=y[20]; for(i=n-1;i>=0;i--) yy=yy*(xx-x[i])+y[i]; printf("NewtonInter(%f)=%f",xx,yy); getch(); }

3.高斯列主元消去法,求解其次线性方程组

C/C++ code
<!-- Code highlighting produced by Actipro CodeHighlighter (freeware) http://www.CodeHighlighter.com/ -->#include<stdio.h> #include <math.h> #define N 20 int main() { int n,i,j,k; int mi,tmp,mx; float a[N][N],b[N],x[N]; printf("\nInput n:"); scanf("%d",&n); if(n>N) { printf("The input n should in(0,N)!\n"); getch(); return 1; } if(n<=0) { printf("The input n should in(0,N)!\n"); getch(); return 1; } printf("Now 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("Now input b(i),i,j=0...%d:\n",n-1); for(i=0;i<n;i++) scanf("%f",&b[i]); for(i=0;i<n-2;i++) { for(j=i+1,mi=i,mx=fabs(a[i][j]);j<n-1;j++) if(fabs(a[j][i])>mx) { mi=j; mx=fabs(a[j][i]); } if(i<mi) { tmp=b[i];b[i]=b[mi];b[mi]=tmp; for(j=i;j<n;j++) { tmp=a[i][j]; a[i][j]=a[mi][j]; a[mi][j]=tmp; } } for(j=i+1;j<n;j++) { tmp=-a[j][i]/a[i][i]; b[j]+=b[i]*tmp; for(k=i;k<n;k++) a[j][k]+=a[i][k]*tmp; } } x[n-1]=b[n-1]/a[n-1][n-1]; for(i=n-2;i>=0;i--) { x[i]=b[i]; for(j=i+1;j<n;j++) x[i]-=a[i][j]*x[j]; x[i]/=a[i][i]; } for(i=0;i<n;i++) printf("Answer:\n x[%d]=%f\n",i,x[i]); getch(); return 0; } #include<math.h> #include<stdio.h> #define NUMBER 20 #define Esc 0x1b #define Enter 0x0d float A[NUMBER][NUMBER+1] ,ark; int flag,n; exchange(int r,int k); float max(int k); message(); main() { float x[NUMBER]; int r,k,i,j; char celect; clrscr(); printf("\n\nUse Gauss."); printf("\n\n1.Jie please press Enter."); printf("\n\n2.Exit press Esc."); celect=getch(); if(celect==Esc) exit(0); printf("\n\n input n="); scanf("%d",&n); printf(" \n\nInput matrix A and B:"); for(i=1;i<=n;i++) { printf("\n\nInput a%d1--a%d%d and b%d:",i,i,n,i); for(j=1;j<=n+1;j++) scanf("%f",&A[i][j]); } for(k=1;k<=n-1;k++) { ark=max(k); if(ark==0) { printf("\n\nIt's wrong!");message(); } else if(flag!=k) exchange(flag,k); for(i=k+1;i<=n;i++) for(j=k+1;j<=n+1;j++) A[i][j]=A[i][j]-A[k][j]*A[i][k]/A[k][k]; } x[n]=A[n][n+1]/A[n][n]; for( k=n-1;k>=1;k--) { float me=0; for(j=k+1;j<=n;j++) { me=me+A[k][j]*x[j]; } x[k]=(A[k][n+1]-me)/A[k][k]; } for(i=1;i<=n;i++) { printf(" \n\nx%d=%f",i,x[i]); } message(); } exchange(int r,int k) { int i; for(i=1;i<=n+1;i++) A[0][i]=A[r][i]; for(i=1;i<=n+1;i++) A[r][i]=A[k][i]; for(i=1;i<=n+1;i++) A[k][i]=A[0][i]; } float max(int k) { int i; float temp=0; for(i=k;i<=n;i++) if(fabs(A[i][k])>temp) { temp=fabs(A[i][k]); flag=i; } return temp; } message() { printf("\n\n Go on Enter ,Exit press Esc!"); switch(getch()) { case Enter: main(); case Esc: exit(0); default:{printf("\n\nInput error!");message();} } }

4.龙贝格求积公式,求解定积分

C/C++ code
<!-- Code highlighting produced by Actipro CodeHighlighter (freeware) http://www.CodeHighlighter.com/ -->#include<stdio.h> #include<math.h> #define f(x) (sin(x)/x) #define N 20 #define MAX 20 #define a 2 #define b 4 #define e 0.00001 float LBG(float p,float q,int n) { int i; float sum=0,h=(q-p)/n; for (i=1;i<n;i++) sum+=f(p+i*h); sum+=(f(p)+f(q))/2; return(h*sum); } void main() { int i; int n=N,m=0; float T[MAX+1][2]; T[0][1]=LBG(a,b,n); n*=2; for(m=1;m<MAX;m++) { for(i=0;i<m;i++) T[i][0]=T[i][1]; T[0][1]=LBG(a,b,n); n*=2; for(i=1;i<=m;i++) T[i][1]=T[i-1][1]+(T[i-1][1]-T[i-1][0])/(pow(2,2*m)-1); if((T[m-1][1]<T[m][1]+e)&&(T[m-1][1]>T[m][1]-e)) { printf("Answer=%f\n",T[m][1]); getch(); return ; } } }
C/C++ code
<!-- Code highlighting produced by Actipro CodeHighlighter (freeware) http://www.CodeHighlighter.com/ -->5.牛顿迭代公式,求方程的近似解
C/C++ code
<!-- Code highlighting produced by Actipro CodeHighlighter (freeware) http://www.CodeHighlighter.com/ -->#include<stdio.h> #include<math.h> #include<conio.h> #define N 100 #define PS 1e-5 #define TA 1e-5 float Newton(float (*f)(float),float(*f1)(float),float x0 ) { float x1,d=0; int k=0; do { x1= x0-f(x0)/f1(x0); if((k++>N)||(fabs(f1(x1))<PS)) { printf("\nFailed!"); getch(); exit(); } d=(fabs(x1)<1?x1-x0:(x1-x0)/x1); x0=x1; printf("x(%d)=%f\n",k,x0); } while((fabs(d))>PS&&fabs(f(x1))>TA) ; return x1; } float f(float x) { return x*x*x+x*x-3*x-3; } float f1(float x) { return 3.0*x*x+2*x-3; } void main() { float f(float); float f1(float); float x0,y0; printf("Input x0: "); scanf("%f",&x0); printf("x(0)=%f\n",x0); y0=Newton(f,f1,x0); printf("\nThe root is x=%f\n",y0); getch(); }
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
分享到:
评论

相关推荐

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

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

    典型密码算法C语言实现_附录代码

    典型密码算法及其C语言实现共13章节,详细讲述了一些典型密码算法的算法原理及C语言实现。密码算法包括:序列密码、分组密码、公钥密码和Hash算法。其中序列密码有祖冲之算法,分组密码有DES、3DES和SMS4算法,公钥...

    数据结构算法实现 C语言源代码

    这个压缩包文件包含的C语言源代码提供了丰富的实践机会,帮助初学者深入理解这些概念。 首先,我们要讨论数据结构。数据结构是用来组织、管理和存储数据的方式,它定义了数据之间的关系和操作。常见的数据结构包括...

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

    在本文中,我们将深入探讨两种重要的插值算法和一种求解线性方程组的方法的C语言实现。这些算法在数值分析和计算科学中扮演着关键角色,它们分别是: 1. 拉格朗日插值多项式 拉格朗日插值是一种通过已知离散数据点...

    算法:C语言实现(第1~4部分)源代码

    这个压缩包“算法:C语言实现(第1~4部分)源代码”显然包含了使用C语言编写的算法实现,可能是针对数据结构(Data Structures)的基础知识,以及一些基础到进阶的算法。 首先,我们可以从"DS_C"这个压缩包子文件的...

    DES加密解密算法 C语言源代码

    这篇C语言源代码实现了DES加密解密算法,特别适合于资源有限的环境,如STM32或51单片机。STM32系列是基于ARM Cortex-M内核的微控制器,而51单片机则是早期广泛应用的8位微处理器。在这些平台上,由于内存(RAM)资源...

    TDOA定位算法C语言代码

    在"一种残差加权的TDOA定位算法C语言代码"中,我们可以推测这是一个利用改进的TDOA方法来提高定位精度的程序。残差加权通常是为了处理噪声和测量误差,通过迭代优化算法来更新估计的位置,从而获得更准确的结果。...

    算法导论 源代码 C语言实现

    ### 知识点一:《算法导论》与C语言实现 #### 1.1 书籍简介 - **《算法导论》**是一本经典的计算机科学教材,它全面介绍了算法的设计与...同时,学习如何在C语言环境下实现这些算法也是提高编程能力的一个重要途径。

    置换算法C语言实现

    置换算法C语言实现

    RSA算法C语言实现源代码程序

    实现素数验证,加密解密等功能。可以对一串字符进行加密解密等操作,但运算速度较慢。

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

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

    银行家算法C语言源代码

    理解银行家算法并能用C语言实现,对于学习操作系统和解决实际系统中的死锁问题至关重要。银行家算法虽然复杂,但通过合理的数据结构设计和巧妙的算法实现,可以有效地确保系统的安全性。在实际编程中,需要注意的是...

    经典数据结构算法c语言实现代码(大全)

    16进制10进制.txt 32.txt asm.txt Crctable.txt C标志符命名源程序.txt erre.txt erre2.txt ff.txt for循环的.txt list.log N皇后问题回溯算法.txt ping.txt re.txt source.txt winsock2.txt ww.txt ...

    典型密码算法及其C语言实现——附录代码

    C语言实现AES需要理解和实现SubBytes、ShiftRows、MixColumns和AddRoundKey四个核心步骤。 3. **RSA(Rivest-Shamir-Adleman)公钥密码体制**:RSA是一种非对称加密算法,它基于大数因子分解的困难性。RSA包括一对...

    SHA256 哈希密码算法C语言实现

    标签中的“C语言实现”意味着源代码使用C语言编写,这种实现通常更注重性能和跨平台兼容性。C语言的低级特性允许直接访问内存和执行高效的位操作,这对于哈希算法的实现至关重要。 压缩包中的文件"SHA256"可能包含...

    A星算法 c语言实现 a*算法

    `Subpaylist.cpp`可能是实现这些功能的源代码文件,它可能包含了节点结构体的定义、优先级队列的操作以及A*算法的主体逻辑。而`route.txt`文件可能是一个输入文件,包含地图信息或者用于测试算法的初始和目标位置。 ...

    经典算法 C语言实现

    总的来说,"经典算法 C语言实现"是一个极好的学习资源,它将理论知识与实践相结合,可以帮助IT从业者巩固基础,提升技能,同时也适合作为面试准备和项目开发的参考材料。无论是初学者还是有经验的开发者,都能从中...

    机器学习C4.5算法C语言实现

    总之,C4.5算法在机器学习中扮演着重要角色,它的C语言实现涉及到数据预处理、决策树构建、连续属性处理、缺失值处理、剪枝策略以及模型评估等多个方面。理解和掌握这些关键点对于理解和实现C4.5算法至关重要。在...

Global site tag (gtag.js) - Google Analytics