计算方法实验汇总
Posted 谦谦君子,陌上其华
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了计算方法实验汇总相关的知识,希望对你有一定的参考价值。
1 #include<stdio.h> 2 #include<math.h> 3 4 float lmd=2; 5 6 float fa(float x) 7 { 8 return x-lmd*(x*x*x-3*x-1)/(3*x*x-3); 9 } 10 11 main() 12 { 13 float x0,x1,x2,eps; 14 int count=0; 15 printf("请输入迭代初值:\\n"); 16 scanf("%f",&x1); 17 printf("请输入精度:\\n"); 18 scanf("%f",&eps); 19 do 20 { 21 lmd/=2; 22 x2=fa(x1); 23 }while(fabs(fa(x2))>=fabs(fa(x1))); 24 do 25 { 26 x0=x1; 27 x1=fa(x0); 28 count++; 29 }while(fabs(x1-x0)>eps); 30 printf("x*=%f\\n",x1); 31 printf("迭代次数:%d\\n",count); 32 }
1 #include<stdio.h> 2 #include<math.h> 3 main() 4 { 5 int i,j,k=1; 6 double sum,max; 7 double a[3][3]={{10,-1,-2},{-1,10,-2},{-1,-1,5}}; 8 double b[3]={7.2,8.3,4.2}; 9 double x[3]={0,0,0},eps; 10 double y[3]; 11 printf("请输入精度:"); 12 scanf("%lf",&eps); 13 while(k<100) 14 { 15 for(i=0;i<3;i++) 16 { 17 sum=0; 18 for(j=0;j<3;j++) 19 if(i!=j) sum+=a[i][j]*x[j]; 20 y[i]=(b[i]-sum)/a[i][i]; 21 } 22 max=0; 23 printf("第%d次迭代结果: ",k); 24 for(i=0;i<3;i++) 25 printf("%f ",y[i]); 26 printf("\\n"); 27 for(j=0;j<3;j++) 28 if(max<fabs(y[j]-x[j])) max=fabs(y[j]-x[j]); 29 if(max<eps) break; 30 else 31 { 32 for(j=0;j<3;j++) 33 x[j]=y[j]; 34 k++; 35 } 36 } 37 if(k==100) printf("error\\n"); 38 }
1 #include<stdio.h> 2 #include<math.h> 3 main() 4 { 5 int i,j,k=1; 6 double sum,max; 7 double a[3][3]={{10,-1,-2},{-1,10,-2},{-1,-1,5}}; 8 double b[3]={7.2,8.3,4.2}; 9 double x[3]={0,0,0},eps; 10 double y[3]={0,0,0}; 11 printf("请输入精度:"); 12 scanf("%lf",&eps); 13 while(k<100) 14 { 15 for(i=0;i<3;i++) 16 { 17 sum=0; 18 for(j=0;j<3;j++) 19 if(i!=j) sum+=a[i][j]*x[j]; 20 x[i]=(b[i]-sum)/a[i][i]; 21 } 22 max=0; 23 printf("第%d次迭代结果: ",k); 24 for(i=0;i<3;i++) 25 printf("%f ",x[i]); 26 printf("\\n"); 27 for(j=0;j<3;j++) 28 if(max<fabs(y[j]-x[j])) max=fabs(y[j]-x[j]); 29 if(max<eps) break; 30 else 31 { 32 for(j=0;j<3;j++) 33 y[j]=x[j]; 34 k++; 35 } 36 } 37 if(k==100) printf("error\\n"); 38 }
1 #include<stdio.h> 2 const int N=5; 3 double x[]={0.4,0.55,0.65,0.80,0.95,1.05}; 4 double y[]={0.41075,0.57815,0.69675,0.90,1.00,1.25382}; 5 6 double Lagrange(double z) 7 { 8 double r=0; 9 int i,j; 10 for(i=0;i<=N;i++) 11 { 12 double m=1; 13 for(j=0;j<=N;j++) 14 { 15 if(j!=i) 16 m*=(z-x[j])/(x[i]-x[j]); 17 } 18 r+=m*y[i]; 19 } 20 return r; 21 } 22 main() 23 { 24 printf("f(0.596)=%f\\n",Lagrange(0.596)); 25 printf("f(0.99)=%f\\n",Lagrange(0.99)); 26 }
1 #include<stdio.h> 2 main() 3 { 4 double a[12][12],b[11],m; 5 int i,j,k; 6 FILE *fp; 7 fp=fopen("D:\\\\Gauss.txt","r"); 8 for(i=1;i<=10;i++) 9 { 10 for(j=1;j<=10;j++) 11 fscanf(fp,"%lf",&a[i][j]); 12 fscanf(fp,"%lf",&b[i]); 13 } 14 fclose(fp); 15 for(j=1;j<=9;j++) 16 { 17 for(i=j+1;i<=10;i++) 18 { 19 m=a[i][j]/a[j][j]; 20 for(k=j;k<=10;k++) 21 { 22 a[i][k]=a[i][k]-m*a[j][k]; 23 } 24 b[i]=b[i]-m*b[j]; 25 } 26 } 27 for(i=10;i>0;i--) 28 { 29 double sum=0; 30 for(j=i+1;j<=10;j++) 31 { 32 sum+=a[i][j]*b[j]; 33 } 34 b[i]=(b[i]-sum)/a[i][i]; 35 } 36 for(i=1;i<=10;i++) 37 printf("x%d=%f\\n",i,b[i]); 38 }
1 #include<stdio.h> 2 #include<math.h> 3 main() 4 { 5 double a[11][11],b[11],m,temp; 6 int i,j,k,max; 7 FILE *fp; 8 fp=fopen("D:\\\\Gauss.txt","r"); 9 for(i=1;i<=10;i++) 10 { 11 for(j=1;j<=10;j++) 12 fscanf(fp,"%lf",&a[i][j]); 13 fscanf(fp,"%lf",&b[i]); 14 } 15 fclose(fp); 16 for(i=1;i<=10;i++) 17 { 18 max=i; 19 for(j=i+1;j<=10;j++) 20 { 21 if(fabs(a[j][i])>fabs(a[i][i])) 22 max=j; 23 } 24 for(j=1;j<=10;j++) 25 { 26 temp=a[i][j]; 27 a[i][j]=a[max][j]; 28 a[max][j]=temp; 29 } 30 temp=b[i]; 31 b[i]=b[max]; 32 b[max]=temp; 33 for(k=i+1;k<=10;k++) 34 { 35 m=a[k][i]/a[i][i]; 36 for(j=i;j<=10;j++) 37 a[k][j]=a[k][j]-m*a[i][j]; 38 b[k]=b[k]-m*b[i]; 39 } 40 } 41 for(i=10;i>0;i--) 42 { 43 double sum=0; 44 for(j=i+1;j<=10;j++) 45 sum+=a[i][j]*b[j]; 46 b[i]=(b[i]-sum)/a[i][i]; 47 } 48 for(i=1;i<=10;i++) 49 printf("x%d=%f\\n",i,b[i]); 50 }
1 #include<stdio.h> 2 #include<math.h> 3 4 #define maxn 1000 5 #define m 3 6 7 double x[]={0,5,10,15,20,25,30,35,40,45,50,55}; 8 double y[]={0,0.000127,0.000216,0.000286,0.000344,0.000387,0.000415,0.000437,0.000451,0.000458,0.000402,0.000464}; 9 double xx[maxn],bb[maxn],gauss[maxn][maxn],temp; 10 double b[maxn]; 11 12 13 main() 14 { 15 int i,j,k,max; 16 double mm; 17 xx[0]=12; 18 for(i=1;i<=6;i++) 19 { 20 xx[i]=0; 21 for(k=0;k<12;k++) 22 { 23 temp=1; 24 for(j=0;j<i;j++) 25 temp*=x[k]; 26 xx[i]+=temp; 27 } 28 } 29 30 for(i=1;i<=m+1;i++) //系数矩阵 31 { 32 b[i]=0; 33 for(k=0;k<12;k++) 34 { 35 temp=1; 36 for(j=0;j<i-1;j++) 37 temp*=x[k]; 38 b[i]+=temp*y[k]; 39 } 40 } 41 42 43 for(i=1;i<=m+1;i++) //建立矩阵 44 { 45 for(j=1;j<=m+1;j++) 46 gauss[i][j]=xx[i-1+j-1]; 47 } 48 49 50 for(i=1;i<=m+1;i++) 51 { 52 max=i; 53 for(j=i+1;j<=m+1;j++) 54 { 55 if(fabs(gauss[j][i])>fabs(gauss[i][i])) 56 max=j; 57 } 58 for(j=1;j<=m+1;j++) 59 { 60 temp=gauss[i][j]; 61 gauss[i][j]=gauss[max][j]; 62 gauss[max][j]=temp; 63 } 64 temp=b[i]; 65 b[i]=b[max]; 66 b[max]=temp; 67 for(k=i+1;k<=m+1;k++) 68 { 69 mm=gauss[k][i]/gauss[i][i]; 70 for(j=i;j<=m+1;j++) 71 gauss[k][j]=gauss[k][j]-mm*gauss[i][j]; 72 b[k]=b[k]-mm*b[i]; 73 } 74 } 75 for(i=m+1;i>0;i--) 76 { 77 double sum=0; 78 for(j=i+1;j<=m+1;j++) 79 sum+=gauss[i][j]*b[j]; 80 b[i]=(b[i]-sum)/gauss[i][i]; 81 } 82 for(i=1;i<=m+1;i++) 83 printf("a%d=%f\\n",i-1,b[i]); 84 }
1 #include<stdio.h> 2 #include<math.h> 3 #define N 250 4 5 double f(double x) 6 { 7 return sqrt(4-sin(x)*sin(x)); 8 } 9 10 void main() 11 { 12 double a=0,b=1/4; 13 double h=(b-a)/N,T=0; 14 int k; 15 for(k=1;k<N;k++) 16 { 17 T+=f(a+k*h);; 18 } 19 T=h/2*(f(a)+2*T+f(b)); 20 printf("%f",T); 21 }
1 #include<stdio.h> 2 #include<math.h> 3 #define N 4000 4 5 double f(double x) 6 { 7 if(x==0) return 1; 8 else return sin(x)/x; 9 } 10 11 void main() 12 { 13 double a=0,b=1; 14 double h=(b-a)/N; 15 double s1=f(a+h/2),s2=0; 16 int k; 17 for(k=0;k<N;k++) 18 { 19 s1+=f(a+k*h+h/2); 20 s2+=f(a+k*h); 21 } 22 s1=h/6*(f(a)+以上是关于计算方法实验汇总的主要内容,如果未能解决你的问题,请参考以下文章