当前位置:首页 >> 工学 >>

数值计算C语言常用小程序


1、 秦九韶算法 2、二分法 3、拉格朗日插值 4、埃特金算法 5、复化梯形法 6、复化辛甫生算法 7、二阶龙格库塔方法 8、四阶龙格库塔方法 9、改进的 欧拉方法 10、迭代法 11、埃特金加速方法:12、牛顿迭代法 13、追赶法 14、雅克比迭代 15、蛋白质设计:17 高斯消去法:

1、 秦九韶算法 P11.3 利用秦九韶算法求多项式 ,在 x=3 时的值。 程序: #include<stdio.h> #include<math.h> void main() {float a[100],v,x; int n,i,k; scanf("%d%f",&n,&x); for(i=0;i<=n;i++) scanf("%f",&a[i]); v=a[n]; k=1; do {v=x*v+a[n-k]; k=k+1; } while(k<=n); printf("v=%f",v);}

运行结果:

2、二分法
1

P11.1 用二分法求方程法 x*x*x-x-1=0 在[1,2]内的近似根,要求误差不超过 #include<stdio.h> #include<math.h> float fun(float); void main() {float a,b,c,x,y,y1; scanf("%f%f%f",&a,&b,&c); y1=fun(a); do {x=(a+b)/2; y=fun(x); {if(y*y1>0) a=x; else b=x;}} while((b-a)>=c); printf("%f,%f\n",x,y); } float fun(float m) {float n; n=m*m*m-m-1; return(n); }

运行结果:

2

3、拉格朗日插值 程序: #include<stdio.h> main() {float a,b,t,x[100],y[100]; int n,i,j,k; scanf("%f%d",&a,&n); for(i=0;i<=n;i++) scanf("%f%f",&x[i],&y[i]); k=0; b=0; for(k=0;k<=n;k++) {t=1; for(j=0;j<=n;j++) {if(j!=k) t=t*(a-x[j])/(x[k]-x[j]);} b=b+t*y[k]; } printf("%f\n",b); }

4、埃特金算法 程序: #include<stdio.h> #include<math.h> main()
3

{float a,b,c,x[100],y[100]; int i,j,n,k; scanf("%d%f",&n,&a); for(i=0;i<=n;i++) scanf("%f%f",&x[i],&y[i]); for(k=1;k<=n;k++) {for(i=k;i<=n;i++) y[i]=y[k-1]+(y[i]-y[k-1])*(a-x[k-1])/(x[i]-x[k-1]);} printf("%f\n",y[n]); } 5、复化梯形法 P95.9 设 ,用复化梯形法求积分 的近似值 程序: #include<stdio.h> #include<math.h> double fun(double); void main() { double a,b,h,s,x,y; int n,k; scanf("%lf%lf%d",&a,&b,&n); h=(b-a)/n; s=0; x=a; y=fun(x); for(k=1;k<=n;k++) {s=s+fun(x);
4

x=x+h; s=s+fun(x); } s=(h/2)*s; printf("s=%lf\n",s); } double fun(double m) {double n; n=exp(-m)*sin(4*m)+1; return(n); } 运行结果:

6、复化辛甫生算法 P95.9 设 ,用复化辛甫生法求积分 的近似值 程序: #include<stdio.h> #include<math.h> double fun(double); void main() { double a,b,h,s,x,y; int n,k; scanf("%lf%lf%d",&a,&b,&n); h=(b-a)/n; s=0;
5

x=a; y=fun(x); for(k=1;k<=n;k++) {s=s+fun(x); x=x+h/2; s=s+4*fun(x); x=x+h/2; s=s+fun(x);} s=(h/6)*s; printf("s=%lf\n",s); } double fun(double m) {double n; n=exp(-m)*sin(4*m)+1; return(n); } 运行结果:

7、二阶龙格库塔方法 求解初值问题:

取 h=0.2 程序: #include<stdio.h> #include<math.h>
6

float fun(float,float); void main() {float h,x0,y0,x1,y1,k1,k2; int n,N; scanf("%f%f%f%d",&x0,&y0,&h,&N); n=1; for(n=1;n<=N;n++) {x1=x0+h; k1=fun(x0,y0); k2=fun(x0+h/2,y0+h/2*k1); y1=y0+h*k2; printf("%f,%f\n",x1,y1); x0=x1;y0=y1;} } float fun(float a,float b) {float m; m=b-2*a/b; return(m); } 运行结果:

8、四阶龙格库塔方法 求解初值问题:

取 h=0.2
7

程序: #include<stdio.h> #include<math.h> float fun(float,float); void main() {float h,x0,y0,x1,y1,k1,k2,k3,k4; int n,N; scanf("%f%f%f%d",&x0,&y0,&h,&N); n=1; for(n=1;n<=N;n++) {x1=x0+h; k1=fun(x0,y0); k2=fun(x0+h/2,y0+h/2*k1); k3=fun(x0+h/2,y0+h/2*k2); k4=fun(x1,y0+h*k3); y1=y0+h/6*(k1+2*k2+2*k3+k4); printf("%f,%f",x1,y1); x0=x1;y0=y1;} } float fun(float a,float b) {float m; m=b-2*a/b; return(m); } 运行结果:

8

9、改进的欧拉方法 求解初值问题:

程序: #include<stdio.h> #include<math.h> float fun(float,float); void main() {float x0,y0,h,x1,y1,yp,yc; int n,N; scanf("%f%f%f%d",&x0,&y0,&h,&N); for(n=1;n<=N;n++) {x1=x0+h; yp=y0+h*fun(x0,y0); yc=y0+h*fun(x1,yp); y1=(yp+yc)/2; printf("%f,%f",x1,y1); x0=x1; y0=y1;} } float fun(float a,float b) {float m; m=b-2*a/b; return(m); } 运行结果:

9

10、迭代法 P131 例 2 用迭代法求方程 在 附近的一个根 ,要求精度为 程序: #include<stdio.h> #include<math.h> float fun(float); void main() {float x0,x1,c; int k,N; scanf("%f%f%d",&x0,&c,&N); for(k=1;k<=N;k++) {x1=fun(x0); printf("%f\n",x1); if(fabs(x1-x0)<c) break; x0=x1; } if(k-1==N) printf("Failure!\n"); } float fun(float m) {float n; n=exp(-m); return(n); }

10

运行结果:

11、埃特金加速方法: 程序: #include<stdio.h> #include<math.h> float fun(float); void main() {float x0,x1,x2,c; int k,N; scanf("%f%f%d",&x0,&c,&N); for(k=1;k<=N;k++) {x1=fun(x0); x2=fun(x1); x2=x2-(x2-x1)*(x2-x1)/(x2-2*x1+x0); if(fabs(x2-x0)<c) {printf("%f\n",x2); break;} x0=x2; } if(k-1==N) printf("Failure!\n"); } float fun(float m) {float n; n=exp(-m);
11

return(n); } 运行结果:

12、牛顿迭代法: 例 5、用牛顿法解方程 牛顿公式为: ,取 x=0.5 程序: #include<stdio.h> #include<math.h> float fun(float); float ff(float); void main() {float x0,x1,c; int k,N; scanf("%f%f%d",&x0,&c,&N); for(k=1;k<=N;k++) {if(ff(x0)!=0) {x1=x0-fun(x0)/ff(x0); printf("%f\n",x1); if(fabs(x1-x0)<c) break; x0=x1; } else printf("****"); } if(k==N)
12

printf("Failure!\n"); } float fun(float m) {float n; n=m-exp(-m); return(n); } float ff(float m) {float n; n=1+m; return(n); } 运行结果:

13、追赶法:

P198.3.用追赶法求解下列方程组:

程序: #include<stdio.h> #include<math.h> void main() {float a[100],b[100],c[100],d[100],t; int i,n; scanf("%d",&n);
13

for(i=2;i<=n;i++) scanf("%f",&a[i]); for(i=1;i<=n;i++) scanf("%f",&b[i]); for(i=1;i<=n-1;i++) scanf("%f",&c[i]); for(i=1;i<=n;i++) scanf("%f",&d[i]); c[1]=c[1]/b[1]; d[1]=d[1]/b[1]; for(i=2;i<n;i++) {t=b[i]-c[i-1]*a[i]; c[i]=c[i]/t; d[i]=(d[i]-d[i-1]*a[i])/t;} d[n]=(d[n]-d[n-1]*a[n])/(b[n]-c[n-1]*a[n]); printf("%f\n",d[n]); for(i=n-1;i>=1;i--) {d[i]=d[i]-c[i]*d[i+1]; printf("%f\n",d[i]);} }

运行结果: 14、雅克比迭代 程序: #include<stdio.h> #include<math.h> #define N 50
14

#define M 4 void main() {double x[M],y[M],a[M][M],b[M],d[M],c,t; double ff(double [],int); int k,i,j,n; n=M-1; scanf("%lf",&c); for(i=0;i<=n;i++) {scanf("%lf",&x[i]); scanf("%lf",&b[i]);} for(i=0;i<=n;i++) for(j=0;j<=n;j++) scanf("%lf",&a[0][i*M+j]); for(k=1;k<=N;k++) {for(i=1;i<=n;i++) {for(j=1,t=0;j<=n;j++) {if(j==i) continue; else t=t+a[i][j]*x[j];} y[i]=(b[i]-t)/a[i][i]; } for(i=1;i<=n;i++) d[i]=fabs(x[i]-y[i]); t=ff(d,n+1); if(t<c) break; else
15

for(i=1;i<=n;i++) x[i]=y[i]; } if(k==N) printf("Failure!\n"); if(k<N) {printf("k=%d\n",k); for(i=1;i<=n;i++) printf("y[i]=%f\n",y[i]);} } double ff(double a[],int n) {double p; int t; p=a[1]; for(t=2;t<n;t++) {if(p<a[t]) p=a[t];} return(p); } 运行结果:

15、蛋白质设计:

程序: #include <stdio.h>
16

#include <stdlib.h> #include <math.h> void main() {printf("横坐标 FILE *fp; char c[100],x[3000][7],y[3000][7],z[3000][7]; float a[3000],b[3000],d[3000],r[3000]; int i,k=0,j,n=0,m,p; float X[3000],Y[3000],Z[3000],s1=0,s2=0,s3=0,av_x,av_y,av_z; fp=fopen("1a1c.pdb","r"); for(i=0;i<=10000;i++) { fgets(c,81,fp); if(c[0]=='A'&&c[1]=='T'&&c[2]=='O'&&c[3]=='M') { for(j=0;j<6;j++) {x[k][j]=c[32+j]; printf("%c",x[k][j]); } printf(" "); 纵坐标 竖坐标\n");

for(j=0;j<6;j++) {y[k][j]=c[40+j]; printf("%c",y[k][j]);} printf(" ");

for(j=0;j<6;j++) {z[k][j]=c[48+j]; printf("%c",z[k][j]);
17

} printf(" ");

X[k]=atof(x[k]); s1+=X[k]; Y[k]=atof(y[k]); s2+=Y[k]; Z[k]=atof(z[k]); s3+=Z[k]; printf("\n"); k++; if(c[77]=='C') n++; } } av_x=s1/k; av_y=s2/k; av_z=s3/k; printf("共有:%d\n",k+1); printf("av_x=%f,av_y=%f,av_z=%f\n",av_x,av_y,av_z); printf("C 原子个数为:%d\n",n); printf("平移原点后的坐标:\n"); for(m=0;m<k;m++) {a[m]=X[m]-av_x;printf("%f b[m]=Y[m]-av_y;printf("%f d[m]=Z[m]-av_z;printf("%f ",a[m]); ",b[m]); ",d[m]); ",r[m]);

r[m]=sqrt(a[m]*a[m]+b[m]*b[m]+d[m]*d[m]);printf("%f printf("\n"); }
18

} 17 高斯消去法:

#include "stdio.h" #include"math.h" main() {double a[3][3]={1,1,1,0,4,-1,2,-2,1},b[3]={6,5,1},x[10]={0}; int i,j,k,n=3; for(k=0;k<n-1;k++) { for(i=k+1;i<n;i++) { for(j=k+1;j<n;j++) { } b[i]=b[i]-b[k]*a[i][k]/a[k][k]; } } x[n-1]=b[n-1]/a[n-1][n-1]; for(i=2;i<=n;i++) { k=n-i; for(j=k+1;j<n;j++) { } x[k]=(b[k]-x[k])/a[k][k]; } for(k=0;k<n;k++) printf("x[%d]=%f",k,x[k]); }
19

a[i][j]=a[i][j]-a[k][j]*a[i][k]/a[k][k];

x[k]+=a[k][j]*x[j];


相关文章:
数值计算C语言常用小程序.doc
数值计算C语言常用小程序 - 1、 秦九韶算法 2、二分法 3、拉格朗日插值 4
c语言编程一些常见小程序.pdf
c语言编程一些常见小程序_计算机软件及应用_IT/计算机_专业资料。实验 02 数据类型、运算符和简单的输入输出 1. 实验目的 (1) 掌握 C 语言数据类型,了解字符型...
C语言常用的小程序代码.doc
C语言常用小程序代码 - 里面都是一些c语言中经常遇到的一些小程序,希望可以帮
c语言10个经典小程序.doc
c语言10个经典小程序_计算机软件及应用_IT/计算机_...程序分析:可填在百位、十位、个位的数字都是 1、...(month)/*先计算某月以前月份的总天数*/ { case...
C语言中常见的一些小程序.pdf
C语言常见的一些小程序 - #include<stdio.h> v
c语言入门的10个经典小程序,小程序成功案例不可不看.doc
c语言入门的10个经典小程序,小程序成功案例不可不...1、 题目: 有 1、 2、 3、 4 个数字, 能...(month)/*先计算某月以前月份的总天数*/ { case...
c语言10个经典小程序.doc
c语言10个经典小程序 - 【程序 1】 题目:有 1、2、3、4 个数字,能组成多少个互不相同且无重复数字的三位数?都是多少? 1.程序分析:可填在百位、十位、...
一些基本的C语言小程序.doc
一些基本C语言小程序_计算机软件及应用_IT/计算机...("请输入数据\n"); for(i=0;i<=4;i++) ...2018 Baidu |由 百度云 提供计算服务 | 使用...
C语言基本小程序.doc
C语言基本小程序 - C 语言基本小程序 1.阶乘(n!) #include&l
c语言-简单小程序-简单算法.doc
c语言-简单小程序-简单算法_IT/计算机_专业资料。一些简单程序,包括九宫格、...10种简单的数字滤波C语言... 4页 免费 C语言 程序的简单算法制... 暂无...
c语言中常见的一些小程序.doc
c语言常见的一些小程序_工学_高等教育_教育专区...(a>c) {t=a; a=c; c=t;} if(b>c) {t...2018 Baidu |由 百度云 提供计算服务 | 使用...
c语言10个经典小程序.doc
c 语言 10 个经典小程序出处: 作者: 发布时间:2006-8-18 【程序 1】 题目:有 1,2,3,4 个数字,能组成多少个互不相同且无重复数字的三位数?都 是多少?...
C语言 简单小程序 简单算法.pdf
以下小程序都在 TC2.0 中运行通过,程序没来得及加注释。程序比较简单,都是一些...10种简单的数字滤波C语言... 4页 免费 C语言 程序的简单法制... 暂无评价...
C语言经典小程序.doc
C语言经典小程序 - #include<stdio.h> doubl
C语言经典小程序.pdf
C语言经典小程序 - c 语言程序设计 学习资料 2009-03-07 20:39:16 阅读 37 评论 0 中小 订阅 /*计算 e=1+1/2+1/(1+2)+'''+1/(1+2+'...
C语言的几个小程序.txt
求一批整数中出现最多的个位数字 #include <stdio.h> #include <math.h> #...C语言常用的几个问题的算... 4页 1下载券 几个C语言程序 2页 5下载券...
C语言程序设计_100个小程序代码.pdf
C语言程序设计_100个小程序代码 - 1.素数 1. [100,999]范围内同时满足以下两个条件的十进制数. ⑴其个位数字与十位数字之和除以 10 15 所得的余数是百位...
100个C语言小程序.txt
100个C语言小程序 - 内容不完全正确,望大家指正。。。... 100个C语言小程序_IT/计算机_专业资料。内容不完全...a:b这是条件运算符的基本例子。 ___...
几个C语言小程序.doc
几个C语言小程序 - 1. 程序设计 (1) 编写一个程序,输入字符 c,如果
C语言程序设计 100个小程序代码.pdf
C语言程序设计 100个小程序代码 - 1.素数 1. [100,999]范围内同时满足以下两个条件的十进制数. ⑴其个位数字与十位数字之和除以 10 15 所得的余数是百位...