浙大-计算方法作业
浙大-计算方法作业

来自14 级机械专业的《计算方法》课程课本为黄皮小书只有当年作业布置的部分题目 2.4.7.8.10.13.17第2题二分法#include<iostream>#include<math.h>double calculate_y(double n){using namespace std;return exp(n)+10*n-2;}int main(){using namespace std;int k;double a,b,c1;double y1,y2,x,y;cout<<"请依次输入a (左端点),b (右端点),c (控制精度),中间用enter隔开"<<endl;cin>>a>>b>>c1;y1 = calculate_y(a);y2 = calculate_y(b);if(y1*y2<=0);else{do{cout<<"["<<y1<<","<<y2<<"]"<<endl;cout<<" 实根不再此范围内,请重新输入!" <<endl;cin>>a>>b>>c1;y1 = calculate_y(a);y2 = calculate_y(b);}while(y1*y2>0);}k=0;do{k=k+1; x=(a+b)/2; y=calculate_y(x);if(y1*y<0) b=x;else {a=x;y1=y;}}while(b-a>=c1);cout<<"k="<<k<<" x="<<x<<" y="<<y<<endl; cout<<"["<<y1<<","<<y2<<"]"<<" "<<y<<endl<<""<<endl;结果如上,感谢使用!cin.get();cin.get();}迭代法#include<iostream> #include<cmath>int main(){using namespace std;int k=1,N;double x0,c,x1;cout<<"请依次输入N, xO, c"<<endl;cin>>N>>x0>>c;do{k=k+1;x1=(2-exp(xO))/1O; if(fabs(x1-xO)<c){cout<<"k="<<k<<" x"<<k<<"="<<x1<<endl;break;}else{ cout<<"x"<<k<<"="<<x1<<endl; xO=x1;}}while(k<N);if(k<N);elsecout<<" 失败!迭代次数太少,未达到精度要求"<<endl;cin.get();cin.get();return 0;}牛顿法#include<iostream> #include<cmath>double fx(double n1){using namespace std; return exp(n1)+10*n1-2;}double f1x(double n2){using namespace std; return exp(n2)+10;}int main(){using namespace std;int N,k=0,I;double x0,x1,c,f_x0,f1_x0;cout<<"请依次输入x0 (迭代初值),c (精度),N (最大允许迭代次数)"<<endl;cin>>x0>>c>>N;do{k++;f_x0=fx(x0); f1_x0=f1x(x0);if(f1_x0==0){I=-1;break;}elsex1=x0-f_x0/f1_x0;} if(fabs(x1-x0)<c){I=0;cout<<"x"<<k<<"="<<x1<<" k="<<k<<endl;break;}f(x"<<k<<")="<<fx(x1)<<"else x0=x1;}while(k<N); if(k>=N)I=1; cout<<"I="<<I<<endl;cin.get();cin.get();return 0; }第4题顺序消元法#include<iostream> using namespace std;#define N 4int main() {double a[N][N]={{1.1348,3.8326,1.1651,3.4017}, {0.5301,1.7875,2.5330,1.5435},{3.4129,4.9317,8.7643,1.3142},{1.2371,4.9998,10.6721,0.0147}};double b[N]={9.5342,6.3941,18.4231,16.9237}; double m[N][N];double x[N];int k,i,j;for(k=0;k<=N;k++) {for(i=k+1;i<N;i++){m[i][k]=a[i][k]/a[k][k]; for(j=k+1;j<N;j++) {a[i][j]-=m[i][k]*a[k][j];}b[i]-=m[i][k]*b[k];}}for(i=0;i<N;i++){for(j=0;j<N;j++){cout<<a[i][j]<<" ";}cout<<endl;}for(i=0;i<N;i++)cout<<b[i]<<endl;double t=0.0;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];}cout<<" 方程的解依次为"<<endl; for(i=0;i<N;i++){ cout<<"x["<<i+1<<"]="<<x[i]<<endl;}}列主元消元法#include<iostream> #include<cmath> using namespace std;#define N 4 void display(double (*a)[N],double *b){for(int i=0;i<N;i++){for(int j=0;j<N;j++){cout<<a[i][j]<<" ";}cout<<b[i]<<endl;}}int main(){double a[N][N]={{1.1348,3.8326,1.1651,3.4017}, {0.5301,1.7875,2.5330,1.5435},{3.4129,4.9317,8.7643,1.3142},{1.2371,4.9998,10.6721,0.0147}};double b[N]={9.5342,6.3941,18.4231,16.9237};double m[N][N];double x[N];int k,i,j,l;double max;double p;for(k=0;k<N-1;k++){max=a[k][k];l=k;for(i=k+1;i<N;i++){if(fabs(a[i][k])>fabs(max)){max=a[i][k];l=i;}}if(fabs(max)*100000<1)cout<<"det A=0"<<endl;else{if(l!=k){p=b[l];b[l]=b[k];b[k]=p;for(j=0;j<N;j++){p=a[l][j];a[l][j]=a[k][j];a[k][j]=p;}display(a,b); cout<<endl;} for(i=k+1;i<N;i++){m[i][k]=a[i][k]/a[k][k];for(j=k+1;j<N;j++){a[i][j]-=m[i][k]*a[k][j];}b[i]-=m[i][k]*b[k];}display(a,b);cout<<endl;}}if(fabs(a[N-1][N-1])*100000<1)cout<<"det A=0"<<endl;else{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];}}cout<<" 方程的解依次为"<<endl;for(i=0;i<N;i++){cout<<"x["<<i+1<<"]="<<x[i]<<endl;第7题雅可比迭代法#include<iostream>#include<math.h>#include <iomanip> using namespace std;int main(){double s=0;double max(double array[6]); double a[6][6]={{4,-1,0,-1,0,0},{-1,4,-1,0,-1,0},{0,-1,4,-1,0,-1},{-1,0,-1,4,-1,0},{0,-1,0,-1,4,-1},{0,0,-1,0,-1,4,},};double b[6]={0,5,-2,5,-2,6};double c[6]={0,0,0,0,0,0};double x[6]={0,0,0,0,0,0};double x0[6]={0,0,0,0,0,0};int i,k,j;double r,sum=0;cout<<" 输入精度:"<<endl;cin>>s;for(k=1;;k++){for(i=0;i<6;i++){for(j=0;j<6;j++){sum=a[i][j]*x0[j]+sum;}x[i]=x0[i]+((b[i]-sum)/a[i][i]);c[i]=fabs(x[i]-x0[i]);sum=0;r=max(c);if(r<s){for(i=0;i<6;i++)cout<<"x"<<i<<" = "<<x[i]<<setprecision(6)<<endl;cout<<" 迭代次数:"<<k<<endl;return 0;}elsefor(i=0;i<6;i++)x0[i]=x[i];}}double max(double array[6]){double a=array[0];int i;for(i=1;i<6;i++){if(a<array[i])a=array[i];}return a;}高斯-赛德尔迭代法#include<iostream> #include<math.h> #include <iomanip> using namespace std;int main(){double s=0;double max(double array[3]);double a[6][6]={{4,-1,0,-1,0,0},{-1,4,-1,0,-1,0}, {0,-1,4,-1,0,-1},{-1,0,-1,4,-1,0}, {0,-1,0,-1,4,-1},{0,0,-1,0,-1,4},};double b[6]={0,5,-2,5,-2,6};double c[6]={0,0,0,0,0,0};double x[6]={0,0,0,0,0,0};double x0[10]={0,0,0,0,0,0};int i,k,j;double r,sum=0;cout<<" 输入精度:"<<endl;cin>>s;for(k=1;;k++){for(i=0;i<6;i++){for(j=0;j<6;j++){sum=a[i][j]*x0[j]+sum;}x[i]=x0[i]+((b[i]-sum)/a[i][i]);c[i]=x[i]-x0[i];if(c[i]<0)c[i]=-c[i];x0[i]=x[i];sum=0;}r=max(c);if(r<s){for(i=0;i<6;i++)cout<<"x"<<i<<" = "<<x[i]<<setprecision(6)<<endl; cout<<" 迭代次数:"<<k<<endl;return 0;}}}double max(double array[6]) {double a=array[0]; int i; for(i=1;i<6;i++) {if(a<array[i])a=array[i];return a; }SOR迭代法#include<iostream>#include<math.h>#include <iomanip> using namespace std;int main(){double s=0,w=0;double max(double array[3]); double a[6][6]={{4,-1,0,-1,0,0},{-1,4,-1,0,-1,0},{0,-1,4,-1,0,-1},{-1,0,-1,4,-1,0},{0,-1,0,-1,4,-1},{0,0,-1,0,-1,4}};double b[6]={0,5,-2,5,-2,6}; double c[6]={0,0,0};double x[6]={0,0,0,0,0,0};double x0[6]={0,0,0,0,0,0};int i,k,j;double r,sum=0;cout<<" 输入精度:"<<endl; cin>>s;cout<<" 松弛因子:"<<endl; cin>>w;for(k=1;;k++){ for(i=0;i<6;i++) {for(j=0;j<6;j++){ sum=a[i][j]*x0[j]+sum;} x[i]=x0[i]+(w*(b[i]-sum)/a[i][i]);c[i]=x[i]-x0[i];if(c[i]<0)c[i]=-c[i];x0[i]=x[i];sum=0;}r=max(c);if(r<s){for(i=0;i<6;i++)cout<<"x"<<i<<" = "<<x[i]<<setprecision(6)<<endl;cout<<"迭代次数:"<<k<<endl;return 0;}}}double max(double array[6]){double a=array[0];int i; for(i=1;i<6;i++) {if(a<array[i])a=array[i];} return a;}第8题分段线性插值#include<stdio.h>int main(void){int i,j; double a[6],b[6],x,y;printf("Enter x:"); for(i=0;i<6;i++) scanf("%lf",&a[i]); printf("Enter f(x):");for(i=0;i<6;i++) scanf("%lf",&b[i]);for(j=0;j<3;j++){printf("Enter x:");scanf("%lf",&x);for(i=0;x>a[i];i++);y=b[i-1]*(x-a[i])/(a[i-1]-a[i])+b[i]*(x-a[i-1])/(a[i]-a[i-1]); printf("x=%lf , ",x);printf("y=%lf\n",y);}return 0;}分段二次插值#include<stdio.h>int main(void){int i,j;double a[6],b[6],x,y;printf("Enter x:");for(i=0;i<6;i++) scanf("%lf",&a[i]);printf("Enter f(x):");for(i=0;i<6;i++) scanf("%lf",&b[i]);for(j=0;j<3;j++){printf("Enter x:");scanf("%lf",&x);for(i=0;x>a[i];i++);if((a[i+1]-x)<(x-a[i-2])){ y=b[i-1]*(x-a[i])/(a[i-1]-a[i])*(x-a[i+1])/(a[i-1]-a[i+1]); y=y+b[i]*(x-a[i-1])/(a[i]-a[i-1])*(x-a[i+1])/(a[i]-a[i+1]); y=y+b[i+1]*(x-a[i-1])/(a[i+1]-a[i-1])*(x-a[i])/(a[i+1]-a[i]); printf("x=%lf , ",x);printf("y=%lf\n",y);}else{y=b[i-2]*(x-a[i-1])/(a[i-2]-a[i-1])*(x-a[i])/(a[i-2]-a[i]); y=y+b[i-1]*(x-a[i-2])/(a[i-1]-a[i-2])*(x-a[i])/(a[i-1]-a[i]); y=y+b[i]*(x-a[i-2])/(a[i]-a[i-2])*(x-a[i-1])/(a[i]-a[i-1]); printf("x=%lf , ",x);printf("y=%lf\n",y);}}return 0;}全区间上拉格朗日插值#include<stdio.h>int main(void){int i,j,k; double a[6],b[6],x,y,p;printf("Enter x:"); for(i=0;i<6;i++)scanf("%lf",&a[i]); printf("Enter f(x):");for(i=0;i<6;i++) scanf("%lf",&b[i]);for(j=0;j<3;j++) {y=0; printf("Enter x:"); scanf("%lf",&x); for(i=0;i<6;i++){p=1;for(k=0;k<6;k++){ if(k!=i) p=p*(x-a[k])/(a[i]-a[k]);} y=y+p*b[i];}printf("x=%lf , ",x); printf("y=%lf\n",y);} return 0;}第10 题最小二乘法二次回归#include<stdio.h>#include<math.h>#include<conio.h>float cf(int i,float f){ float g=1.0;while(i--)g*=f;return g;}void ColPivot(float a[99][99], int n, float b[99][1],float x[99]){float max,m,temp;int k,q=0,i,j,I;for(k=0;k<n && q==0;k++){ max=a[k][k];for(i=k+1;i<n;i++)if(fabs(max)<fabs(a[i][k])){max=a[i][k];I=i;}if(max==0)q=1;else{ if(I!=k){temp=b[I][0]; b[I][0]=b[k][0]; b[k][0]=temp;for(j=k;j<n;j++){temp=a[I][j]; a[I][j]=a[k][j]; a[k][j]=temp;}} for(i=k+1;i<n;i++){m=a[i][k]/a[k][k];b[i][0]=b[i][0]-b[k][0]*m;for(j=0;j<n;j++)a[i][j]=a[i][j]-a[k][j]*m;}}}for(i=n-1;i>=0;i--){for(j=n-1;j>=i+1;j--) b[i][0]=b[i][0]-a[i][j]*x[j]; x[i]=b[i][0]/a[i][i];}float x0,y0;x0=-x[1]/(2*x[2]);y0=x[0]-x[1]*x[1]/(4*x[2]);printf("\nx0=%f",x0);printf("\ny0=%f",y0);}int main(){float x[99],y[99],z[99],s[99][99],t[99][1]; int n,m,i,j,k;printf("n( 变量数)="); scanf("%d",&n);printf("m (拟合阶数) ="); scanf("%d",&m);printf("x[%]=",n);for(i=0;i<n;i++)scanf("%f",&y[i]); printf("y[%d]=",n);for(i=0;i<n;i++)scanf("%f",&z[i]);for(i=0;i<=m;i++){ for(j=0;j<=m;j++) {s[i][j]=0.0;for(k=0;k<=n-1;k++)s[i][j]+=cf(i+j,y[k]);t[i][0]=0.0;for(j=0;j<=n-1;j++)t[i][0]+=z[j]*cf(i,y[j]);}for(i=0;i<=m;i++)s[i][m+1]=t[i][0];for(i=0;i<=m;i++){for(j=0;j<=m+1;j++) printf("%f\t",s[i][j]); printf("\n");}ColPivot(s,m+1,t,x);printf("\n\n");for(i=0;i<=m;i++) printf("\na[%d]=%f",i,x[i]); printf("\n\n");}第13 题复合梯形递推算法#include<cmath> #include<iostream>/*************** 计算函数值**************/double f(double x)//{using namespace std;double s,e=exp(1);s=sqrt((1-pow(e,-x)))/x;// 预先输入的待积分函数return(s);}************************************************ 算 2八k ***************/double power(int K)//{using namespace std;double P;P=pow(2.0,double(K)); return P;}伴************************************************ 复化梯形公式的递推过程***************/double DTGCH(double a,double b,double precision)// {using namespace std;int i,k;double fa,fb,t1,p,S,X,t;fa=1;fb=f(b);k=1;//h=b-a;t1=(b-a)/2*(fa+fb);// 公式T1=(b-a)/2[f(a)+f(b)] p=precision+1;// 误差值初始化while(p>=precision) {double n;S=0;for(i=1;i<=power(k-1);i++)〃计算公式中:刀(2A(k-1),i=1 ) f[a+(2i-1)(b-a)/2A k]{X=a+(2*i-1)*((b-a)/power(k));S=S+f(X);}t=(t1)/2+(b-a)/power(k)*S;p=fabs(t1-t);// 误差值n=power(k-1);cout<<"步长2A(k-1)为"<<*<"时的"<<"T2A(k-1)="<<t1<<'\t'<<"T2Ak="<<t<<'\t'<<" 差值:"<<p<<endl;t1=t;k++;return(t);}/**************************************************/int main(){using namespace std;double result,a,b,precision;//result 为计算出的积分值、a 为积分下限、b 为积分上限、precision 为要求的精确度cout<<" 需要求解的积分式为f(x)=(1-e(-x))(1/2)/x"<<endl<<" 括号表示次数,因e 取的14 位有效数字,故结果略有偏差。
概率论与数理统计作业课后习题解答(浙大第四版)```

1 1 , P( AB) = P( BC ) = 0, P( AC ) = , 4 8
P( A ∪ B ∪ C ) = P( A) + P( A) + P(C ) − P( AB) − P( BC ) − P( AC ) + P( ABC ) =
其中由 P ( AB ) = P ( BC ) = 0, 而 ABC ⊂ AB 得 P ( ABC ) = 0 。
故
P( B) = 1 − P( B) = 1 −
200 1 199 C1100 C400 C1100 − 200 200 C1500 C1500
------------------------------------------------------------------------------9. 从 5 双不同的鞋子中任取 4 只, 问这 4 只鞋子中至少有两只鞋子配成一双的概率是多少?
0 1 100n , ,..., ,则 n n n
k k = 0,1, 2,⋯ ,100n n
(2)样本空间 S={10,11,…},S 中含有可数无限多个样本点。 (3)设 1 表示正品,0 有示次品,则样本空间为 S={(0,0) , (1,0,0) , (0,1,0,0) , (0,1,0,1) , (0,1,1,0) , (1,1, 0,0) , (1,0,1,0) , (1,0,1,1) , (0,1,1,1) , (1,1,0,1) , (1,1, 1, 0) , (1,1,1,1)} 例如(1,1,0,0)表示第一次与第二次检查到正品,而第三次与第四次检查到次品。 (4)设任取一点的坐标为(x,y) ,则样本空间为 S= ( x, y ) x + y ≤ 1
i=2
浙江大学计算方法大作业第十二题

exp(2*b0*x[i])*a0 + y[i]*exp(b0*x[i]) - a0*exp(2*b0*x[i]); A[1][0] = A[1][0] + 2*a0*x[i]*exp(2*b0*x[i]) - x[i]*y[i]*exp(b0*x[i]); A[1][1] = A[1][1] + 2*a0*a0*x[i]*x[i]*exp(2*b0*x[i]) - a0*x[i]*x[i]*y[i]*exp(b0*x[i]); B[1] = B[1] + (2*a0*x[i]*exp(2*b0*x[i]) - x[i]*y[i]*exp(b0*x[i]))*a0 +
浙江大学计算方法大作业第八题

x f(x) 0.0 0.39894 0.1 0.39695 0.195 0.39142 0.3 0.38138 0.401 0.36812 0.5 0.35206
出发,用下列方法计算 f(0.15),f(0.31),及 f(0.47)的近似值: (1)分段线性插值; (2)分段二次插值; (3)全区间上拉格朗日插值
结果分析:很漂亮的结果,本题基本上完全套书里面的公式,只有第二小问稍麻烦点。
结果很精确,并且可以很明显的看到,三个结果越来越精确。
源程序:
(1) #include<stdio.h> int main(void) { printf("输入表格:\n"); double a[2][6]; int i,j,b; double y,x,x1,x0,y0,y1; for(i=0;i<2;i++) for(j=0;j<6;j++) scanf("%lf",&a[i][j]); for(b=1;b<=3;b++) { printf("x=") ; scanf("%lf",&x); for(j=1;j<6;j++) { if(x<a[0][j])break; } x0=a[0][j-1]; x1=a[0][j]; y0=a[1][j-1]; y1=a[1][j]; y=y0+(y1-y0)*(x-x0)/(x1-x0); printf("f(%.2f)=%.5f\n",x,y); } return 0; } (2) #include<stdio.h> int main(void) { printf("表格就不用输入了,已经初始化了(嘿嘿! )直接输入 x 就好了\n"); double a[2][6]={{0.0,0.1,0.195,0.3,0.401,0.5}, {0.39894,0.39695,0.39142,0.38138,0.36812,0.35206}}; int i,j,b,n; double y,x,x0,x1,x2,y1,y2,y0,o,p,q; for(b=1;b<=3;b++) { printf("x=") ; scanf("%lf",&x);
浙大-经济学在线作业-答案合集

单选题1.下列各项中哪一项会导致一国生产可能性曲线向外移动()• A 失业;• B 通货膨胀;• C 有用性资源增加或者技术进步;• D 消费品生产增加,资本物品生产下降。
正确答案:C单选题2.经济物品是指()• A 有用的物品;• B 稀缺的物品;• C 要用钱购买的物品;• D 有用且稀缺的物品。
正确答案:D单选题3.经济学可以定义为()• A 政府对市场制度的干预;• B 企业取得利润的活动;• C 研究如何最合理地配置稀缺资源于诸多用途;• D 人民靠收入生活。
正确答案:C单选题4.说“资源的稀缺性”是指()• A 世界上大多数人生活在贫困中;• B 相对于资源的需求而言,资源总是不足的;• C 资源必须保留给下一代;• D 世界上资源最终将由于生产更多的物品和劳务而消耗殆尽。
正确答案:B单选题5.已过生产可能性曲线以内的点表示()• A 通货膨胀;• B 失业或者说资源没有被充分利用;• C 该国可利用的资源减少以及技术水平降低;• D 一种生产产品最适度水平。
正确答案:B单选题6.生产可能性曲线凹向原点(即向外凸出)反映了()• A 资源在所有生产活动中都同样有效率;• B 成本递增规律;• C 存在政府政策;• D 失业率高。
正确答案:B单选题7.需求量和价格之所以呈反方向辩护,是因为()• A 替代效应的作用;• B 收入效应的作用;• C 上述两种效应同时发生作用;• D 以上均不正确。
正确答案:C单选题8.在需求和供给同时减少的情况下().• A 均衡价格和均衡交易量都将下降;• B 均衡价格将下降,均衡交易量的变化无法确定;• C 均衡价格的变化无法确定,均衡交易量将减少;• D 均衡价格将上升,均衡交易量将下降。
正确答案:C单选题9.总效用曲线达到顶点时()• A 边际效用达到最大点;• B 边际效用为零;• C 边际效用为正。
正确答案:B单选题10.消费者预期某种物品未来价格要上升,则对该物品当前需求会()• A 减少;• B 增加;• C 不变;• D 前三种情况都有可能。
浙江大学远程教育2015大数据结构与算法在线作业问题详解

您的本次作业分数为:99分1.【第1章第2节】数据结构课程主要研究以下三方面的内容,它们是______。
A 数据、数据元素、数据类型B 数据元素、数据类型、算法实现C 数据元素、数据的逻辑结构、数据的存储结构D 数据的逻辑结构、数据的存储结构、数据的运算正确答案:D2.【第1章第2节】在数据结构中,与所使用的计算机无关的是数据的____结构。
A 存储B 物理C 逻辑D 物理与存储正确答案:C3.【第1章第2节】逻辑结构相同时物理结构也应该相同。
正确错误4.【第1章第3节】计算机算法是指______。
A 计算方法B 排序方法C 调度方法D 解决问题的有限运算序列正确答案:D5.【第1章第3节】设某二维数组A[1..n,1..n],则在该数组中用顺序查找法查找一个元素的时间复杂性的量级为______。
A O(log2n)B O(n)C O(nlog2n)D O(n^2)正确答案:D6.【第1章第3节】所谓时间复杂度是指最坏情况下,估算算法执行时间的一个上界正确错误正确答案: 对7.【第3章第2节】向一个有115个元素的顺序表中插入一个新元素并保持原来顺序不变,平均要移动_____个元素。
A 115B 114C 58D 57正确答案:C8.【第3章第2节】在一个具有n个结点的有序单链表中,插入一个新的结点并使之仍然有序的时间复杂度是______。
A O(n)B O(log2n)C O(1)D O(n^2)正确答案:A9.【第3章第2节】若要求能快速地实现在链表的末尾插入和删除结点的运算,则选择_____最合适。
A 单链表B 带尾指针的单循环链表C 双链表D 双循环链表正确答案:B10.【第3章第2节】在长度为n 的双链表中某结点(已知其地址)之前,插入一个新结点的时间复杂度是_____ 。
A O(n)B O(log2n)C O(1)D O(n^2)正确答案:C11.【第3章第2节】在一个长度为n的顺序表中,在第i个元素(1<=i<=n)之前插入一个新元素时需向后移动_______个元素。
计算方法智慧树知到答案章节测试2023年浙江大学

绪论单元测试1.工科人认知世界的时候,需要认可误差的存在。
A:对B:错答案:A2.不需要掌握很多很好的计算方法,单单凭借计算机强大的能力就可以解决大部分实际问题。
A:错B:对答案:A3.计算方法是一门理论数学课,可以获得寻求数学问题的精确解析解的知识A:错B:对答案:A4.解决某些实际问题时,选择不合适的计算方法有可能无法得到满意的结果。
A:对B:错答案:A5.求解高阶线性方程组(比如,大于150阶),用克莱姆法则来直接求解也是可以接受的。
A:对B:错答案:B第一章测试1.计算机进行乘除运算时按照先舍入后运算的原则。
()A:错B:对答案:A2.相对误差是个无名数,没有量纲。
()A:错B:对答案:B3.两近似值之商的相对误差等于被除数的相对误差与除数的相对误差之差。
()A:错B:对答案:B4.用 1+x近似表示所产生的误差是( )A:模型误差B:截断误差C:舍入误差D:观测误差答案:B5.设某数x,那么x的有四位有效数字且绝对误差限是的近似值是()A:0.006930B:0.6930C:0.06930D:0.693答案:B第二章测试1.若f(a)f(b)<0 ,则f(x)在(a,b)内一定有根。
()A:对B:错答案:B2.如果迭代格式在根的附近导数值的模大于1,则迭代发散。
()A:对B:错答案:A3.若x*是f(x)=0的重根,则牛顿不收敛。
()A:对B:错答案:B4.非线性方程的求根方法中,正割法收敛速度比Newton迭代法快。
()A:对B:错答案:B5.用牛顿迭代法求方程f(x)=在附近的根,第一次迭代值()A:3B:2C:0D:1答案:B6.用简单迭代法求方程f(x)=0的实根,把方程f(x)=0表示成x=g(x),则f(x)=0的根是()A:y=x与x轴交点的横坐标B:y=g(x)与x轴交点的横坐标C:y=x与y=g(x)的交点D:y=x与y=g(x)交点的横坐标答案:D7.以下对非线性方程的求根方法中哪些是线性收敛的?()A:不动点迭代法B:二分法C:牛顿迭代法在重根的情况下D:牛顿迭代法在单根的情况下答案:AC第三章测试1.上面式子,用高斯消去法计算,解为()。
计算方法实验报告习题2(浙大版)

计算方法实验报告实验名称: 实验2 列主元素消去法解方程组 1 引言工程实际问题中,线型方程的系数矩阵一般为低阶稠密矩阵和大型稀疏矩阵。
用高斯消去法解Ax =b 时,可能出现)(k kk a 很小,用作除数会导致中间结果矩阵元素数量级严重增长和舍入误差的扩散,使结果不可靠;采用选主元素的三角分解法可以避免此类问题。
高斯消去法的消去过程,实质上是将A 分解为两个三角矩阵的乘积A =LU ,并求解Ly =b 的过程。
回带过程就是求解上三角方程组Ux =y 。
所以在实际的运算中,矩阵L 和U 可以直接计算出,而不需要任何中间步骤,从而在计算过程中将高斯消去法的步骤进行了进一步的简略,大大提高了运算速度,这就是三角分解法。
采用选主元的方式与列主元高斯消去法一样,也是为了避免除数过小,从而保证了计算的精确度。
2 实验目的和要求通过列主元素消去法求解线性方程组,实现P A =LU 。
要求计算解x ,L ,U ,整形数组IP (i ),(i =1,2,…,)(记录主行信息)。
3 算法原理与流程图(1)原理将A 分解为两个三角矩阵的乘积A =LU 。
对方程组的增广矩阵[]b A A ,=经过k-1步分解后,可变成如下形式:⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎣⎡→-------------n nnnjnkk n n n i in ij ik k i i i k kn kj kk k k k k k n k j k k k k k k k n j k k n j k k b a a a l l l b a a a l l l b a a a l l l y u u u u l l y u u u u u l y u u u u u u A1,211,211,211,1,1,11,12,11,122221,2222111,1,11,11211第k 步分解,为了避免用绝对值很小的数kku 作除数,引进量1111 (,1,,;1,2,,) ()/ (1,2,,;1,2,,)k kj kj km mj m k ik ik im mk kk m u a l u j k k n k n l a l u u i k k n k n -=-=⎧=-=+=⎪⎪⎨⎪=-=++=⎪⎩∑∑11(,1,,)k i ik im mkm s a l u i k k n -==-=+∑,于是有kk u =ks 。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
来自14级机械专业的《计算方法》课程课本为黄皮小书只有当年作业布置的部分题目2.4.7.8.10.13.17第2题二分法#include<iostream>#include<math.h>double calculate_y(double n){using namespace std;return exp(n)+10*n-2;}int main(){using namespace std;int k;double a,b,c1;double y1,y2,x,y;cout<<"请依次输入a(左端点),b(右端点),c(控制精度),中间用enter隔开"<<endl;cin>>a>>b>>c1;y1 = calculate_y(a);y2 = calculate_y(b);if(y1*y2<=0);else{do{cout<<"["<<y1<<","<<y2<<"]"<<endl;cout<<"实根不再此范围内,请重新输入!" <<endl;cin>>a>>b>>c1;y1 = calculate_y(a);y2 = calculate_y(b);}while(y1*y2>0);}k=0;k=k+1;x=(a+b)/2;y=calculate_y(x);if(y1*y<0) b=x;else {a=x;y1=y;}}while(b-a>=c1);cout<<"k="<<k<<" x="<<x<<" y="<<y<<endl;cout<<"["<<y1<<","<<y2<<"]"<<" "<<y<<endl<<"结果如上,感谢使用!"<<endl;cin.get();cin.get();}迭代法#include<iostream>#include<cmath>int main(){using namespace std;int k=1,N;double x0,c,x1;cout<<"请依次输入N,x0,c"<<endl;cin>>N>>x0>>c;do{k=k+1;x1=(2-exp(x0))/10;if(fabs(x1-x0)<c){cout<<"k="<<k<<" x"<<k<<"="<<x1<<endl;break;}else{cout<<"x"<<k<<"="<<x1<<endl;x0=x1;}}while(k<N);elsecout<<"失败!迭代次数太少,未达到精度要求"<<endl;cin.get();cin.get();return 0;}牛顿法#include<iostream>#include<cmath>double fx(double n1){using namespace std;return exp(n1)+10*n1-2;}double f1x(double n2){using namespace std;return exp(n2)+10;}int main(){using namespace std;int N,k=0,I;double x0,x1,c,f_x0,f1_x0;cout<<"请依次输入x0(迭代初值),c(精度),N(最大允许迭代次数)"<<endl;cin>>x0>>c>>N;do{k++;f_x0=fx(x0);f1_x0=f1x(x0);if(f1_x0==0){I=-1;break;}elsex1=x0-f_x0/f1_x0;}if(fabs(x1-x0)<c){I=0;cout<<"x"<<k<<"="<<x1<<" f(x"<<k<<")="<<fx(x1)<<" k="<<k<<endl;break;}elsex0=x1;}while(k<N);if(k>=N)I=1;cout<<"I="<<I<<endl;cin.get();cin.get();return 0;}第4题顺序消元法#include<iostream>using namespace std;#define N 4int main(){double a[N][N]={{1.1348,3.8326,1.1651,3.4017},{0.5301,1.7875,2.5330,1.5435},{3.4129,4.9317,8.7643,1.3142},{1.2371,4.9998,10.6721,0.0147}};double b[N]={9.5342,6.3941,18.4231,16.9237};double m[N][N];double x[N];int k,i,j;for(k=0;k<=N;k++){for(i=k+1;i<N;i++){m[i][k]=a[i][k]/a[k][k];for(j=k+1;j<N;j++){a[i][j]-=m[i][k]*a[k][j];}b[i]-=m[i][k]*b[k];}}for(i=0;i<N;i++){for(j=0;j<N;j++){cout<<a[i][j]<<" ";}cout<<endl;}for(i=0;i<N;i++)cout<<b[i]<<endl;double t=0.0;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];}cout<<"方程的解依次为"<<endl;for(i=0;i<N;i++){cout<<"x["<<i+1<<"]="<<x[i]<<endl;}}列主元消元法#include<iostream>#include<cmath>using namespace std;#define N 4void display(double (*a)[N],double *b){for(int i=0;i<N;i++){for(int j=0;j<N;j++){cout<<a[i][j]<<" ";}cout<<b[i]<<endl;}}int main(){double a[N][N]={{1.1348,3.8326,1.1651,3.4017}, {0.5301,1.7875,2.5330,1.5435},{3.4129,4.9317,8.7643,1.3142},{1.2371,4.9998,10.6721,0.0147}};double b[N]={9.5342,6.3941,18.4231,16.9237};double m[N][N];double x[N];int k,i,j,l;double max;double p;for(k=0;k<N-1;k++){max=a[k][k];l=k;for(i=k+1;i<N;i++){if(fabs(a[i][k])>fabs(max)){max=a[i][k];l=i;}}if(fabs(max)*100000<1)cout<<"det A=0"<<endl;else{if(l!=k){p=b[l];b[l]=b[k];b[k]=p;for(j=0;j<N;j++){p=a[l][j];a[l][j]=a[k][j];a[k][j]=p;}display(a,b);cout<<endl;}for(i=k+1;i<N;i++){m[i][k]=a[i][k]/a[k][k];for(j=k+1;j<N;j++){a[i][j]-=m[i][k]*a[k][j];}b[i]-=m[i][k]*b[k];}display(a,b);cout<<endl;}}if(fabs(a[N-1][N-1])*100000<1)cout<<"det A=0"<<endl;else{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];}}cout<<"方程的解依次为"<<endl;for(i=0;i<N;i++){cout<<"x["<<i+1<<"]="<<x[i]<<endl; }}第7题雅可比迭代法#include<iostream>#include<math.h>#include <iomanip>using namespace std;int main(){double s=0;double max(double array[6]);double a[6][6]={{4,-1,0,-1,0,0},{-1,4,-1,0,-1,0},{0,-1,4,-1,0,-1},{-1,0,-1,4,-1,0},{0,-1,0,-1,4,-1},{0,0,-1,0,-1,4,},};double b[6]={0,5,-2,5,-2,6};double c[6]={0,0,0,0,0,0};double x[6]={0,0,0,0,0,0};double x0[6]={0,0,0,0,0,0};int i,k,j;double r,sum=0;cout<<"输入精度:"<<endl;cin>>s;for(k=1;;k++){for(i=0;i<6;i++){for(j=0;j<6;j++){sum=a[i][j]*x0[j]+sum;}x[i]=x0[i]+((b[i]-sum)/a[i][i]);c[i]=fabs(x[i]-x0[i]);sum=0;}r=max(c);if(r<s){for(i=0;i<6;i++)cout<<"x"<<i<<" = "<<x[i]<<setprecision(6)<<endl; cout<<"迭代次数:"<<k<<endl;return 0;}elsefor(i=0;i<6;i++)x0[i]=x[i];}}double max(double array[6]){double a=array[0];int i;for(i=1;i<6;i++){if(a<array[i])a=array[i];}return a;}高斯-赛德尔迭代法#include<iostream>#include<math.h>#include <iomanip>using namespace std;int main(){double s=0;double max(double array[3]);double a[6][6]={{4,-1,0,-1,0,0},{-1,4,-1,0,-1,0},{0,-1,4,-1,0,-1},{-1,0,-1,4,-1,0},{0,-1,0,-1,4,-1},{0,0,-1,0,-1,4},};double b[6]={0,5,-2,5,-2,6};double c[6]={0,0,0,0,0,0};double x[6]={0,0,0,0,0,0};double x0[10]={0,0,0,0,0,0};int i,k,j;double r,sum=0;cout<<"输入精度:"<<endl;cin>>s;for(k=1;;k++){for(i=0;i<6;i++){for(j=0;j<6;j++){sum=a[i][j]*x0[j]+sum;}x[i]=x0[i]+((b[i]-sum)/a[i][i]);c[i]=x[i]-x0[i];if(c[i]<0)c[i]=-c[i];x0[i]=x[i];sum=0;}r=max(c);if(r<s){for(i=0;i<6;i++)cout<<"x"<<i<<" = "<<x[i]<<setprecision(6)<<endl; cout<<"迭代次数:"<<k<<endl;return 0;}}}double max(double array[6]){double a=array[0];int i;for(i=1;i<6;i++){if(a<array[i])a=array[i];}return a;}SOR迭代法#include<iostream>#include<math.h>#include <iomanip>using namespace std;int main(){double s=0,w=0;double max(double array[3]);double a[6][6]={{4,-1,0,-1,0,0},{-1,4,-1,0,-1,0},{0,-1,4,-1,0,-1},{-1,0,-1,4,-1,0},{0,-1,0,-1,4,-1},{0,0,-1,0,-1,4}};double b[6]={0,5,-2,5,-2,6};double c[6]={0,0,0};double x[6]={0,0,0,0,0,0};double x0[6]={0,0,0,0,0,0};int i,k,j;double r,sum=0;cout<<"输入精度:"<<endl;cin>>s;cout<<"松弛因子:"<<endl;cin>>w;for(k=1;;k++){for(i=0;i<6;i++){for(j=0;j<6;j++){sum=a[i][j]*x0[j]+sum;}x[i]=x0[i]+(w*(b[i]-sum)/a[i][i]);c[i]=x[i]-x0[i];if(c[i]<0)c[i]=-c[i];x0[i]=x[i];sum=0;}r=max(c);if(r<s){for(i=0;i<6;i++)cout<<"x"<<i<<" = "<<x[i]<<setprecision(6)<<endl;cout<<"迭代次数:"<<k<<endl;return 0;}}}double max(double array[6]){double a=array[0];int i;for(i=1;i<6;i++){if(a<array[i])a=array[i];}return a;}第8题分段线性插值#include<stdio.h>int main(void){int i,j;double a[6],b[6],x,y;printf("Enter x:");for(i=0;i<6;i++)scanf("%lf",&a[i]);printf("Enter f(x):");for(i=0;i<6;i++)scanf("%lf",&b[i]);for(j=0;j<3;j++){printf("Enter x:");scanf("%lf",&x);for(i=0;x>a[i];i++);y=b[i-1]*(x-a[i])/(a[i-1]-a[i])+b[i]*(x-a[i-1])/(a[i]-a[i-1]); printf("x=%lf , ",x);printf("y=%lf\n",y);}return 0;}分段二次插值#include<stdio.h>int main(void){int i,j;double a[6],b[6],x,y;printf("Enter x:");for(i=0;i<6;i++)scanf("%lf",&a[i]);printf("Enter f(x):");for(i=0;i<6;i++)scanf("%lf",&b[i]);for(j=0;j<3;j++){printf("Enter x:");scanf("%lf",&x);for(i=0;x>a[i];i++);if((a[i+1]-x)<(x-a[i-2])){y=b[i-1]*(x-a[i])/(a[i-1]-a[i])*(x-a[i+1])/(a[i-1]-a[i+1]);y=y+b[i]*(x-a[i-1])/(a[i]-a[i-1])*(x-a[i+1])/(a[i]-a[i+1]);y=y+b[i+1]*(x-a[i-1])/(a[i+1]-a[i-1])*(x-a[i])/(a[i+1]-a[i]);printf("x=%lf , ",x); printf("y=%lf\n",y);}else{y=b[i-2]*(x-a[i-1])/(a[i-2]-a[i-1])*(x-a[i])/(a[i-2]-a[i]);y=y+b[i-1]*(x-a[i-2])/(a[i-1]-a[i-2])*(x-a[i])/(a[i-1]-a[i]);y=y+b[i]*(x-a[i-2])/(a[i]-a[i-2])*(x-a[i-1])/(a[i]-a[i-1]);printf("x=%lf , ",x); printf("y=%lf\n",y);}}return 0;}全区间上拉格朗日插值#include<stdio.h>int main(void){int i,j,k;double a[6],b[6],x,y,p;printf("Enter x:");for(i=0;i<6;i++)scanf("%lf",&a[i]);printf("Enter f(x):");for(i=0;i<6;i++)scanf("%lf",&b[i]);for(j=0;j<3;j++){y=0;printf("Enter x:");scanf("%lf",&x);for(i=0;i<6;i++){p=1;for(k=0;k<6;k++){if(k!=i)p=p*(x-a[k])/(a[i]-a[k]);}y=y+p*b[i];}printf("x=%lf , ",x); printf("y=%lf\n",y);}return 0;}第10题最小二乘法二次回归#include<stdio.h>#include<math.h>#include<conio.h>float cf(int i,float f){ float g=1.0;while(i--)g*=f;return g;}void ColPivot(float a[99][99], int n, float b[99][1],float x[99]){float max,m,temp;int k,q=0,i,j,I;for(k=0;k<n && q==0;k++){ max=a[k][k];for(i=k+1;i<n;i++)if(fabs(max)<fabs(a[i][k])){max=a[i][k];I=i;}if(max==0)q=1;else{ if(I!=k){temp=b[I][0]; b[I][0]=b[k][0]; b[k][0]=temp;for(j=k;j<n;j++){temp=a[I][j]; a[I][j]=a[k][j]; a[k][j]=temp;}}for(i=k+1;i<n;i++){m=a[i][k]/a[k][k];b[i][0]=b[i][0]-b[k][0]*m;for(j=0;j<n;j++)a[i][j]=a[i][j]-a[k][j]*m;}}}for(i=n-1;i>=0;i--){for(j=n-1;j>=i+1;j--)b[i][0]=b[i][0]-a[i][j]*x[j];x[i]=b[i][0]/a[i][i];}float x0,y0;x0=-x[1]/(2*x[2]);y0=x[0]-x[1]*x[1]/(4*x[2]);printf("\nx0=%f",x0);printf("\ny0=%f",y0);}int main(){float x[99],y[99],z[99],s[99][99],t[99][1];int n,m,i,j,k;printf("n(变量数)=");scanf("%d",&n);printf("m(拟合阶数)=");scanf("%d",&m);printf("x[%]=",n);for(i=0;i<n;i++)scanf("%f",&y[i]);printf("y[%d]=",n);for(i=0;i<n;i++)scanf("%f",&z[i]);for(i=0;i<=m;i++){for(j=0;j<=m;j++){s[i][j]=0.0;for(k=0;k<=n-1;k++)s[i][j]+=cf(i+j,y[k]);}t[i][0]=0.0;for(j=0;j<=n-1;j++)t[i][0]+=z[j]*cf(i,y[j]);}for(i=0;i<=m;i++)s[i][m+1]=t[i][0];for(i=0;i<=m;i++){for(j=0;j<=m+1;j++)printf("%f\t",s[i][j]);printf("\n");}ColPivot(s,m+1,t,x);printf("\n\n");for(i=0;i<=m;i++)printf("\na[%d]=%f",i,x[i]);printf("\n\n");}第13题复合梯形递推算法#include<cmath>#include<iostream>/***************计算函数值**************/double f(double x)//{using namespace std;double s,e=exp(1);s=sqrt((1-pow(e,-x)))/x;//预先输入的待积分函数return(s);}/***************************************//***************计算2^k值***************/double power(int K)//{using namespace std;double P;P=pow(2.0,double(K));return P;}/***************************************//**************复化梯形公式的递推过程***************/double DTGCH(double a,double b,double precision)//{using namespace std;int i,k;double fa,fb,t1,p,S,X,t;fa=1;fb=f(b);k=1;//h=b-a;t1=(b-a)/2*(fa+fb);//公式T1=(b-a)/2[f(a)+f(b)]p=precision+1;//误差值初始化while(p>=precision){double n;S=0;for(i=1;i<=power(k-1);i++)//计算公式中:∑(2^(k-1),i=1)f[a+(2i-1)(b-a)/2^k]{X=a+(2*i-1)*((b-a)/power(k));S=S+f(X);}t=(t1)/2+(b-a)/power(k)*S;p=fabs(t1-t);//误差值n=power(k-1);cout<<"步长2^(k-1)为"<<n<<"时的"<<"T2^(k-1)="<<t1<<'\t'<<"T2^k="<<t<<'\t'<<"误差值:"<<p<<endl;t1=t;k++;}return(t);}/**************************************************/int main(){using namespace std;double result,a,b,precision;//result为计算出的积分值、a为积分下限、b为积分上限、precision为要求的精确度cout<<"需要求解的积分式为f(x)=(1-e(-x))(1/2)/x"<<endl<<"括号表示次数,因e取的14位有效数字,故结果略有偏差。