✅ 操作成功!

数值计算

发布时间:2023-06-17 作者:admin 来源:文学

数值计算

数值计算

邮政平邮价格-思福迪

2023年3月20日发(作者:补助申请书范文)

本科实验报告

课程名称:计算机数值方法

实验项目:二分法牛顿法迭代法

实验地点:学院楼606

专业班级:学号:

学生姓名:

指导教师:王丽娟

年05月8日

太原理工大学学生实验报告

学院名称计算机科学与技术专业班级学号

学生姓名实验日期5月8日成绩

课程名称数值计算方法实验题目二分法迭代法求解方程

一、实验目的和要求(必填)

熟悉使用二分法、迭代法、牛顿法、割线法等方法对给定的方程进行根的求解。选择

上述方法中的两种方法求方程:f(x)=x3+4x2-10=0在[1,2]内的一个实根,且要求满足精度

|x*-x

n

|<0.5×10-5

二、实验内容和原理(必填)

f(x)在区间(x,y)上连续

先找到a、b属于区间(x,y),使f(a),f(b)异号,说明在区间(a,b)内一定有

零点,然后求f[(a+b)/2],

现在假设f(a)0,a

①如果f[(a+b)/2]=0,该点就是零点,

如果f[(a+b)/2]a,从①开始继

续使用

中点函数值判断。

如果f[(a+b)/2]>0,则在区间(a,(a+b)/2)内有零点,(a+b)/2<=b,从①开始继

续使用

中点函数值判断。

这样就可以不断接近零点。

通过每次把f(x)的零点所在小区间收缩一半的方法,使区间的两个端点逐步迫近

函数的零点,以求得零点的近似值

三、主要仪器设备(必填)

PC,DEV-C

四、操作方法与实验步骤(可选)

1.迭代法

#include

intmain(){

inti=0;

doublea;

doubleb[100];

printf("请输入任意一个在1与2之间的数n");

scanf("%lf",&b[0]);

do{

b[i+1]=b[i]-((b[i]*b[i]*b[i]+4*b[i]*b[i]-10)/(3*b[i]*b[i]+8*b[i]));

i++;

}while(b[i]-b[i+1]>0.000005);

printf("%.8lf",b[i]);

getch();

}

2.牛顿法

#include"stdio.h"

#include"math.h"

main()

{

doublex=1.5,a=0;

while(pow(pow((x-a),2),0.5)/2>0.5*0.00001)

{

a=x;

x=0.5*pow(10-pow(x,3),0.5);

printf("%fn",x);

}

getchar();

}

六、实验结果与分析(必填)

结果与书上的答案一致,编译过程中对do-while循环中条件的存在一定的不合适。。。

实验地点综合楼六层606室指导教师王丽娟

本科实验报告

课程名称:计算机数值方法

实验项目:高斯消元法,LU分解法,追赶法

实验地点:学院楼606

专业班级:学号:

学生姓名:

指导教师:王丽娟

年5月8日

太原理工大学学生实验报告

学院名称计算机科学与技术专业班级学号

学生姓名实验日期5月8日成绩

课程名称计算机数值方法实验题目高斯消元法,LU分解法,追赶法

一、实验目的和要求(必填)

2)线性方程组的直接解法

合理利用Gauss消元法、LU分解法、追赶法求解下列方程组:

13

8

14

142

210

321

3

2

1

x

x

x





2

1

78.46

17.59

1121

2592.11

21130.6291.5

1314.59103.0

4

3

2

1

15

x

x

x

x

3

7

7

2

2011612

6384

10278

5124

4

3

2

1

x

x

x

x

5

5

5

7

21

121

121

12

1

2

1



n

n

x

x

x

x

(n=5,10,100,…)

二、实验内容和原理(必填)

高斯分解法:

⑴将原方程组化为三角形方阵的方程组:

lik=aik/akk

aij=aij-lik*akj

k=1,2,…,n-1

i=k+1,k+2,…,nj=k+1,k+2,…,n+1

⑵由回代过程求得原方程组的解:

xn=ann+1/ann

xk=(akn+1-∑akjxj)/akk

(k=n-1,n-2,…,2,1)

LU分解法:

将系数矩阵A转化为A=L*U,L为单位下三角矩阵,U为普通上三角矩阵,然后

通过解方程组l*y=b,u*x=y,来求解x.

追赶法:

用来求对角方程组;将系数矩阵A转化为A=L*U,L为普通下n-1对角矩阵,U

为单位上n-1对角矩阵,然后通过解方程组l*y=b,u*x=y,来求解x.

三、主要仪器设备(必填)

PC,DEV-C++

四、操作方法与实验步骤(可选)

1.高斯消元法

#include

intmain(){

inti,j;

floatz,b,c,d,x1,x2,x3;

floata[3][4];

printf("请输入矩阵n");

for(i=0;i<3;i++)

for(j=0;j<4;j++)

scanf("%f",&a[i][j]);

z=a[1][0]/a[0][0];

if(z!=0);{

for(j=0;j<4;j++)

a[1][j]=a[1][j]-z*a[0][j];

}

b=a[2][0]/a[0][0];

if(b!=0);{

for(j=0;j<4;j++)

a[2][j]=a[2][j]-b*a[0][j];

}

c=a[2][1]/a[1][1];

if(c!=0);{

for(j=0;j<4;j++)

a[2][j]=a[2][j]-c*a[1][j];

}

for(i=0;i<3;i++){

for(j=0;j<4;j++)

printf("%f",a[i][j]);

printf("n");

}

x3=a[2][3]/a[2][2];

x2=(a[1][3]-x3*a[1][2])/a[1][1];

x1=(a[0][3]-x3*a[0][2]-x2*a[0][1])/a[0][0];

printf("x1=%fx2=%fx3=%f",x1,x2,x3);

getch();

}

2.高斯列主元素消元法

#include

intmain(){

inti,j,n;

floatz,b,c,k,x1,x2,x3,x4;

floata[4][5];

printf("请输入矩阵n");

for(i=0;i<4;i++)

for(j=0;j<5;j++)

scanf("%f",&a[i][j]);

for(i=1;i<4;i++){

if(a[0][0]

for(j=0;j<5;j++){

k=a[0][j];

a[0][j]=a[i][j];

a[i][j]=k;

}

}

for(n=1;n<4;n++){

z=a[n][0]/a[0][0];

if(z!=0);

for(j=0;j<5;j++)

a[n][j]=a[n][j]-z*a[0][j];

}

for(n=2;n<4;n++){

c=a[n][1]/a[1][1];

if(c!=0)

for(j=0;j<5;j++)

a[n][j]=a[n][j]-c*a[1][j];

}

b=a[3][2]/a[2][2];

if(b!=0)

for(j=0;j<5;j++)

a[3][j]=a[3][j]-b*a[2][j];

for(i=0;i<4;i++){

for(j=0;j<5;j++)

printf("%f",a[i][j]);

printf("n");

}

x4=a[3][4]/a[3][3];

x3=(a[2][4]-x4*a[2][3])/a[2][2];

x2=(a[1][4]-x4*a[1][3]-x3*a[1][2])/a[1][1];

x1=(a[0][4]-x4*a[0][3]-x3*a[0][2]-x2*a[0][1])/a[0][0];

printf("%f%f%f",x1,x2,x3);

getch();

}

分解法

#include

intmain(){

intn,i,j,k,l,m;

floata[10][10],b[10][10],c[10][10];

floaty[10],w[10];

floatz;

printf("请输入为几阶矩阵n");

scanf("%d",&n);

printf("请输入矩阵n");

for(i=0;i

for(j=0;j

scanf("%f",&a[i][j]);

for(l=0;l

for(k=l+1;k

b[k][l]=a[k][l]/a[l][l];

z=a[k][l]/a[l][l];

printf("b[%d][%d]=%fnz=%fn",k,l,b[k][l],z);

if(b[k][l]!=0);

for(j=0;j

a[k][j]=a[k][j]-b[k][l]*a[l][j];

}

for(i=0;i

b[i][i]=1;

for(i=0;i

for(j=0;j

if(i

b[i][j]=0;

for(m=0;m

for(i=0;i

w[m]=w[m]+b[n][0]*y[n];

for(i=0;i

for(j=0;j

printf("%f",a[i][j]);

printf("n");

}

printf("n");

for(i=0;i

for(j=0;j

printf("%f",b[i][j]);

printf("n");}

getch();

}

4.追赶法

#include"stdio.h"

main()

{doublea[15],b[15],c[15],d[15];

doublet;

inti,n;

/**********************************************/

//f=fopen("","r");

scanf("%d",&n);

scanf("%lf%lf%lf",&b[1],&c[1],&d[1]);

for(i=2;i<=n-1;i++)

{

scanf("%lf%lf%lf%lf",&a[i],&b[i],&c[i],&d[i]);

}

scanf("%lf%lf%lf",&a[n],&b[n],&d[n]);

//fclose(f);

/*********************************************/

c[1]=c[1]/b[1];

d[1]=d[1]/b[1];

for(i=2;i<=n-1;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]);

for(i=n-1;i>=1;i--)d[i]=d[i]-c[i]*d[i+1];

printf("n********************************n");

for(i=1;i<=n;i++)

printf("d[%2d]=%lfn",i,d[i]);

getch();

}

实验地点综合楼六层606室指导教师王丽娟

本科实验报告

课程名称:计算机数值方法

实验项目:雅克比迭代法以及高斯赛德尔法

实验地点:学院楼606

专业班级:学号:

学生姓名:

指导教师:王丽娟

年5月8日

太原理工大学学生实验报告

学院名称计算机科学与技术专业班级学号

学生姓名实验日期5月8日成绩

课程名称计算机数值方法实验题目雅克比迭代法

一、实验目的和要求(必填)

线性方程组的迭代解法

使用雅可比迭代法或高斯-赛德尔迭代法对下列方程组进行求解。

二、实验内容和原理(必填)

雅克比迭代法:

设线性方程组

Ax=b

的系数矩阵A可逆且主对角元素a11,a22,…,ann

均不为零,令

D=diag(a11,a22,…,ann

)

并将A分解成

A=(A-D)+D

从而线性方程组可写成

Dx=(D-A)x+b

则有迭代公式

x(k+1)=B1x(k)+f1

其中,B1=I-D-1A,f1=D-1b。

三、主要仪器设备(必填)

四、PC,vc6.0

五、操作方法与实验步骤(可选)

#include"stdafx.h"

main()







2.45

3.8210

2.7210

321

321

321

xxx

xxx

xxx

{floata[15][15],x[15],sum=0;

intb=0,i,j,m,n;

printf("请输入行列:");

scanf("%d%d",&m,&n);

printf("请输入系数n");

for(i=0;i

for(j=0;j

scanf("%f",&a[i][j]);

printf("请输入x的初始值");

for(i=0;i

scanf("%f",&x[i]);

while(b<8)

{for(i=0;i

{sum=0;

for(j=0;j

if(j!=i)

sum=sum+x[j]*a[i][j];

x[i]=(a[i][n-1]-sum)/a[i][i];

printf("%f",x[i]);

}

b++;

printf("n");

}

}

六、实验结果与分析(必填)

使用高斯-赛德尔和雅克比迭代都可以求出方程组的解,但是利用高斯-赛德尔迭代法所需的

迭代次数比雅克比迭代少,能够更早的达到精度要求。

实验地点综合楼六层606室指导教师王丽娟

本科实验报告

课程名称:计算机数值方法

实验项目:幂法

实验地点:学院楼606

专业班级:学号:

学生姓名:

指导教师:王丽娟

年5月8日

太原理工大学学生实验报告

学院名称计算机科学与技术专业班级学号

学生姓名实验日期5月8日成绩

课程名称计算机数值方法实验题目幂法求特征向量

一、实验目的和要求(必填)

矩阵特征值与特征向量问题

使用幂法求A模为最大的特征值及其相应的特征向量。

210

121

012

A













二、实验内容和原理(必填)

幂法:由已知的非零向量x0和矩阵A的乘幂构造向量序列{xn}以计算矩阵

A的按模最大特征值及其特征向量的方法,称为幂法。

迭代公式:

1

max(),1,2,...

kk

kk

k

k

k

yAx

myk

y

x

m



结果可取

1

11

k

kk

m

yx





三、主要仪器设备(必填)

PC,DEV-C

四、操作方法与实验步骤(可选)

#include

#include

intmain(){

inti,j,n,f;

floats;

floata[10][10];

printf("请输入为几阶矩阵n");

scanf("%d",&n);

floaty[n],x[n],z[n],mk[10];

printf("请输入初始矩阵Xn");

for(i=0;i

scanf("%f",&x[i]);

printf("请输入矩阵An");

for(i=0;i

for(j=0;j

scanf("%f",&a[i][j]);

for(f=0;f<8;f++){

for(i=0;i

y[i]=0;

for(j=0;j

y[i]+=a[i][j]*x[j];

}

s=y[0];

for(i=0;i

if(abs(y[i])>abs(s))

s=y[i];

mk[f]=s;

printf("%f",mk[f]);

for(i=0;i

x[i]=y[i]/mk[f];

printf("%f",x[i]);

}

printf("n");

}

getch();

}

五、实验结果与分析(必填)

幂法是一种求任意矩阵A的按模最大特征值及其对应特征向量的迭

代算法。该方法的最大优点是计算简单,容易在计算机上实现,对稀疏矩阵

较为适合,但有时收敛速度很慢。

实验地点综合楼六层606室指导教师王丽娟

本科实验报告

课程名称:计算机数值方法

实验项目:拉格朗日插值法牛顿插值法

实验地点:学院楼606

专业班级:学号

学生姓名:

指导教师:王丽娟

2013年5月8日

太原理工大学学生实验报告

学院名称计算机科学与技术专业班级学号

学生姓名实验日期5月8日成绩

课程名称计算机数值方法实验题目拉格朗日差值法

一、实验目的和要求(必填)

代数插值

使用拉格朗日插值法或牛顿插值法求解:已知f(x)在6个点的函数值如下表所示,运

用插值方法,求f(0.596)的近似值。

x0.400.550.650.800.901.05

f(x)0.410750.578150.696750.888111.026521.25386

二、实验内容和原理(必填)

设函数在区间[a,b]上n+1互异节点x0,x1,…,xn

上的函数值分别为

y0,y1,…,yn,求n次插值多项式Pn(x),满足条件

Pn(xj)=yj,j=0,1,…,n

Ln(x)=y0l0(x)+y1l1(x)+…+ynln(x)=∑yili(x)

其中l0(x),l1(x),…,ln(x)为以x0,x1,…,xn

为节点的n次插值基函

数,则Ln(x)是一次数不超过n的多项式,且满足

Ln(xj)=yj,L=0,1,…,n

再由插值多项式的唯一性,得

Pn(x)≡Ln(x)

三、主要仪器设备(必填)

PC,DEV-C++

四、操作方法与实验步骤(可选)

#include

intmain(){

floatx,s=0;

intn,i,j;

printf("请输入为过几个点的差值多项式n");

scanf("%d",&n);

floata[n][2],b[n];

printf("请依次输入各个点n");

for(i=0;i

for(j=0;j<2;j++)

scanf("%f",&a[n][j]);

printf("请输入xn");

scanf("%f",&x);

for(i=0;i

b[i]=1;

for(j=0;j

if(i==j)

b[i]=b[i];

else

b[i]=b[i]*(x-a[j][0])/(a[i][0]-a[j][0]);

}

}

for(i=0;i

printf("%f",b[i]);

for(i=0;i

s+=b[i]*a[i][1];

printf("%f",s);

getch();

}

五、实验数据记录和处理(可选)

六、实验结果与分析(必填)

拉格朗日插值的优点是插值多项式特别容易建立,缺点是增加节点是原有多项

式不能利用,必须重新建立,即所有基函数都要重新计算,这就造成计算量的

浪费。

实验地点综合楼六层606室指导教师王丽娟

本科实验报告

课程名称:计算机数值方法

实验项目:最小二乘法拟合

实验地点:学院楼606

专业班级:学号:

学生姓名:

指导教师:王丽娟

2013年5月8日

太原理工大学学生实验报告

学院名称计算机科学与技术专业班级学号

学生姓名实验日期5月8日成绩

课程名称计算机数值方法实验题目最小二乘法

一、实验目的和要求(必填)

最小二乘法拟合多项式

给定数据点(x

i

,y

i

),用最小二乘法拟合数据的多项式,并求平方误差。

x

i

00.50.60.70.80.91.0

y

i

11.751.962.192.442.713.00

二、实验内容和原理(必填)

建立正规方程组:

∑(∑xi

j+k

)ak=∑xi

jyi,j=0,1,…,n

平方误差:

I=∑(∑akxi

k-yi

2

三、主要仪器设备(必填)

PC,DEV-C

四、操作方法与实验步骤(可选)

五、#include

intmain(){

inti,n;

floats,w,a,b,m,a0,a1,q;

floatz[2][3];

printf("请输入共有多少个坐标点n");

scanf("%d",&n);

floatx[n],y[n],f[n];

printf("请依次输入X的坐标n");

for(i=0;i

scanf("%f",&x[i]);

printf("请依次输入Y的坐标n");

for(i=0;i

scanf("%f",&y[i]);

for(i=0;i

s+=x[i];

w+=y[i];

a+=x[i]*x[i];

b+=x[i]*y[i];

}

printf("%f%f%f%fn",s,w,a,b);

z[0][0]=n;

z[0][1]=s;

z[0][2]=w;

z[1][0]=s;

z[1][1]=a;

z[1][2]=b;

m=z[1][0]/z[0][0];

z[1][1]=z[1][1]-z[0][1]*m;

z[1][2]=z[1][2]-z[0][2]*m;

a1=z[1][2]/z[1][1];

a0=(z[0][2]-a1*z[0][1])/z[0][0];

printf("y=%f+%fxn",a0,a1);

for(i=0;i

f[i]=(a1*x[i]+a0);

q+=((f[i]-y[i])*(f[i]-y[i]));

}

printf("平方误差为n");

printf("%f",q);

getch();

}

#include

intmain(){

inti,n;

floats,w,a,b,m,a0,a1,q;

floatz[2][3];

printf("请输入共有多少个坐标点n");

scanf("%d",&n);

floatx[n],y[n],f[n];

printf("请依次输入X的坐标n");

for(i=0;i

scanf("%f",&x[i]);

printf("请依次输入Y的坐标n");

for(i=0;i

scanf("%f",&y[i]);

for(i=0;i

s+=x[i];

w+=y[i];

a+=x[i]*x[i];

b+=x[i]*y[i];

}

printf("%f%f%f%fn",s,w,a,b);

z[0][0]=n;

z[0][1]=s;

z[0][2]=w;

z[1][0]=s;

z[1][1]=a;

z[1][2]=b;

m=z[1][0]/z[0][0];

z[1][1]=z[1][1]-z[0][1]*m;

z[1][2]=z[1][2]-z[0][2]*m;

a1=z[1][2]/z[1][1];

a0=(z[0][2]-a1*z[0][1])/z[0][0];

printf("y=%f+%fxn",a0,a1);

for(i=0;i

f[i]=(a1*x[i]+a0);

q+=((f[i]-y[i])*(f[i]-y[i]));

}

printf("平方误差为n");

printf("%f",q);

getch();

}

六、实验结果与分析(必填)

数据拟合的具体作法是:对给定的数据(x

i

,y

i

)(i=0,1,…,m),在取定的函数类中,

求p(x)属于此函数类,使误差r

i

=p(x

i

)-y

i

(i=0,1,…,m)的平方和最小,即

∑ri

2

=∑(∑p(xi)-yi

2=min

从几何意义上讲,就是寻求与给定点(x

i

,y

i

)(i=0,1,…,m)的距离平方和为最小

的曲线y=p(x)。

实验地点综合楼六层606室指导教师王丽娟

👁️ 阅读量:0