华北电力大学科技学院数值计算方法上机报告.docx
- 文档编号:6096719
- 上传时间:2023-01-03
- 格式:DOCX
- 页数:24
- 大小:1.41MB
华北电力大学科技学院数值计算方法上机报告.docx
《华北电力大学科技学院数值计算方法上机报告.docx》由会员分享,可在线阅读,更多相关《华北电力大学科技学院数值计算方法上机报告.docx(24页珍藏版)》请在冰豆网上搜索。
华北电力大学科技学院数值计算方法上机报告
华北电力大学科技学院数值计算方法上机报告
华北电力大学科技学院
数值计算方法上机报告
姓名:
G&P
班级:
农电12K1
学号:
2014年11月28日
实验程序为
实验一
#include"stdio.h"
#include"math.h"
#defineN30
voidmain()
{
inti;
floatx[N],c;
scanf("%f",&c);
scanf("%f",&x[0]);//初值
printf("****倒数表****\n");
for(i=0;i { x[i+1]=x[i]*x[i]*c/(2*c*x[i]-1); printf("k=%d\tx(%d)=%.5f\n",i,i,x[i]); if(fabs(x[i+1]-x[i])<=0.0005) break; else continue; printf("k=%d\tx(%d)=%.5f\n",i+1,i+1,x[i]); printf("\n计算结果: \n1/%f=%.3f\n\n",c,x[i+1]); } } 实验二#include"stdio.h" #include"math.h" #defineN10 voidmain() {inti,j,k,l,n; floatb[N],a[N][N],t,d,det=1.0; //***数据输入*/ printf("输入n\n"); scanf("%d",&n); printf("输入Ai\n"); for(i=0;i for(j=0;j scanf("%f",&a[i][j]); printf("输入bi\n"); for(i=0;i scanf("%f",&b[i]); //***数据输入*/ //***************************高斯消去*/ //************************消元*/ //****************************列选主元函数*/ for(k=0;k { d=a[k][k];l=k; for(i=k+1;i { if(fabs(a[i][k])>fabs(d)) {d=a[i][k];i=l;} } if(i==n)//判断是否奇异,不奇异进行行交换 { if(d==0) printf("奇异");//如果所有行的"首列"都为0,为奇异 else { if(l! =k)//如果第k行的"首列"并不是最大 { det=det*(-1); for(j=k;j<=n;j++)//交换系数矩阵中的两行 {t=a[l][j];a[l][j]=a[k][j];a[k][j]=t;} t=b[l];b[l]=b[k];b[k]=t;//交换右端常向量中的两行 } } } //************列选主元函数*/ for(i=k+1;i { a[i][k]=a[i][k]/a[k][k]; for(j=k+1;j { a[i][j]=a[i][j]-a[i][k]*a[k][j]; } b[i]=b[i]-a[i][k]*b[k];//右端常向量 } } //*****************消元*/ //*回代*/ b[n-1]=b[n-1]/a[n-1][n-1];//计算x(N)的解 for(i=n-2;i>=0;i--)//从倒数第二项开始依次回代N-1次 { t=0; for(j=i+1;j {t=t+a[i][j]*b[j];} b[i]=(b[i]-t)/a[i][i]; } //*************高斯消去*/ //*******************数据输出*/ for(i=0;i printf("x(%d)=%.4f\n",i+1,b[i]); for(i=0;i det=det*a[i][i]; printf("detA=%.4f\n",det);//输出系数矩阵行列式的值 //**********************数据输出*/ } 实验三//例3-10 #include"iostream" #include"cmath" #defineN30 voidmain() { inti,j,r,k,n; floata[N][N]={0},s; //***数据输入*/ printf("输入n\n"); scanf("%d",&n); printf("输入矩阵\n"); for(i=0;i for(j=0;j scanf("%f",&a[i][j]); for(i=0;i { j=i+n; a[i][j]=1; } //***数据输入*/ //***************************LU分解*/ for(i=1;i "1"区间不变化,"2"区间变化。 a[i][0]=a[i][0]/a[0][0]; for(i=1;i { for(j=i;j<2*n;j++)//第"2(r+1)-1"区间的变化行 { s=0.0; for(k=0;k s+=a[i][k]*a[k][j]; a[i][j]=a[i][j]-s; } for(j=i+1;j { s=0.0; for(k=0;k s+=a[k][i]*a[j][k]; a[j][i]=(a[j][i]-s)/a[i][i]; } }//现在已将AI--->LUY //**************************************LU分解*/ //************************************高斯约当法解Ux=Y*/ //********************提取UY减少计算*/ for(i=1;i for(j=0;j //*************************提取UY减少计算*/ //***************消元*/ for(j=0;j<2*n;j++)//首行归一化 { a[0][j]=a[0][j]/a[0][0]; } a[0][0]=1;//第一列其余行已为零 for(i=1;i { for(j=i+1;j<2*n;j++)//第i+1行的各列进行归一化 a[i][j]=a[i][j]/a[i][i]; a[i][i]=1; for(r=0;r { for(j=r+2;j<2*n;j++)//r行的各列与第r+1行的对应列进行减法运算 a[r][j]=a[r][j]-a[i][j]*a[r][r+1];//第r+1行归一后,乘数即为要置零处的值 a[r][r+1]=0;//乘数用完之后置零即可 } } //*****************************************消元*/ //********************高斯约当法解Ux=Y*/ //************************************数据输出*/ printf("A的逆矩阵为\n"); for(i=0;i {printf("|"); for(j=0;j printf("%.4f",a[i][j+n]); printf("|\n"); } //************************************数据输出*/ } 实验四 //例4-6 #include"stdio.h" #include"math.h" #defineN50 intn,i,j,k; floatxx=0.0,yy=0.0,t,x[N],y[N],c[N],A[N]; voidmain() {printf("输入n\n"); scanf("%d",&n);//n=4 printf("输入x\n"); for(i=0;i scanf("%f,%f",&x[i]); printf("输入f(x)\n"); for(i=0;i scanf("%f,%f",&y[i]); printf("输入待求数\n"); scanf("%f",&xx);//要计算的值 for(k=0;k { t=1.0; for(j=0;j t=(xx-x[j])*t/(x[k]-x[j]); for(j=k+1;j t=(xx-x[j])*t/(x[k]-x[j]); yy=yy+t*y[k]; } printf("\nx=%.7f处的函数值为: y=%.7f\n",xx,yy); } 实验五 //习题5-2 #include"stdio.h" #include"math.h" #defineN30 voidmain() { inti,n,k,j,l; floatx[N],y[N],z[N];//定义输入变量 floatAT[3][N];//定义A的转置 floatX[3][3],Y[3];//定义中间变量ATA和ATy floats,t,d; //***数据输入*/ printf("输入n: \n"); scanf("%d",&n); printf("依次输入X\n"); for(i=0;i scanf("%f",&x[i]); printf("依次输入Y\n"); for(i=0;i scanf("%f",&y[i]); printf("依次输入Z\n"); for(i=0;i scanf("%f",&z[i]); //***数据输入*/ // for(i=0;i { AT[0][i]=1; AT[1][i]=x[i]; AT[2][i]=y[i]; } for(k=0;k<3;k++)//中间变量ATA for(j=0;j<3;j++) { s=0.0; for(i=0;i s+=AT[k][i]*AT[j][i]; X[k][j]=s; } for(k=0;k<3;k++)//中间变量ATy { s=0.0; for(i=0;i {s+=AT[k][i]*z[i];} Y[k]=s; } //****************************计算 //*****************************************高斯消去*/ //*****************************************消元*/ //****************************列选主元函数*/ n=3; for(k=0;k { d=X[k][k];l=k; for(i=k+1;i { if(fabs(X[i][k])>fabs(d)) {d=X[i][k];i=l;} } if(i==n)//判断是否奇异,不奇异进行行交换 { if(d==0) printf("奇异");//如果所有行的"首列"都为0,为奇异 else { for(j=k;j<=n;j++)//交换系数矩阵中的两行 {t=X[l][j];X[l][j]=X[k][j];X[k][j]=t;} t=Y[l];Y[l]=Y[k];Y[k]=t;//交换右端常向量中的两行 } } //****************************列选主元函数*/ for(i=k+1;i { X[i][k]=X[i][k]/X[k][k]; for(j=k+1;j {X[i][j]=X[i][j]-X[i][k]*X[k][j];} Y[i]=Y[i]-X[i][k]*Y[k];//右端常向量 } } //*****************************************消元*/ //*回代*/ Y[n-1]=Y[n-1]/X[n-1][n-1];//计算x(N)的解 for(i=n-2;i>=0;i--)//从倒数第二项开始依次回代N-1次 { t=0; for(j=i+1;j {t=t+X[i][j]*Y[j];} Y[i]=(Y[i]-t)/X[i][i]; } //***************************高斯消去*/ //****************************计算 printf("所求参数为: \na=%.4f\nb=%.4f\nc=%.4f\n",Y[1],Y[2],Y[0]); }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 华北 电力大学 科技学院 数值 计算方法 上机 报告