华北电力大学科技学院数值计算方法上机报告.docx

上传人:b****5 文档编号:6096719 上传时间:2023-01-03 格式:DOCX 页数:24 大小:1.41MB
下载 相关 举报
华北电力大学科技学院数值计算方法上机报告.docx_第1页
第1页 / 共24页
华北电力大学科技学院数值计算方法上机报告.docx_第2页
第2页 / 共24页
华北电力大学科技学院数值计算方法上机报告.docx_第3页
第3页 / 共24页
华北电力大学科技学院数值计算方法上机报告.docx_第4页
第4页 / 共24页
华北电力大学科技学院数值计算方法上机报告.docx_第5页
第5页 / 共24页
点击查看更多>>
下载资源
资源描述

华北电力大学科技学院数值计算方法上机报告.docx

《华北电力大学科技学院数值计算方法上机报告.docx》由会员分享,可在线阅读,更多相关《华北电力大学科技学院数值计算方法上机报告.docx(24页珍藏版)》请在冰豆网上搜索。

华北电力大学科技学院数值计算方法上机报告.docx

华北电力大学科技学院数值计算方法上机报告

华北电力大学科技学院数值计算方法上机报告

 

华北电力大学科技学院

 

数值计算方法上机报告

 

姓名:

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]);

}

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 求职职场 > 简历

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1