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();
}
3.LU分解法
#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;ifor(j=0;jscanf("%f",&a[i][j]);
for(l=0;lfor(k=l+1;kb[k][l]=a[k][l]/a[l][l];
z=a[k][l]/a[l][l];
printf("b[%d][%d]=%f\nz=%f\n",k,l,b[k][l],z);
if(b[k][l]!
=0);
for(j=0;ja[k][j]=a[k][j]-b[k][l]*a[l][j];
}
for(i=0;ib[i][i]=1;
for(i=0;ifor(j=0;jif(ib[i][j]=0;
for(m=0;mfor(i=0;iw[m]=w[m]+b[n][0]*y[n];
for(i=0;ifor(j=0;jprintf("%f",a[i][j]);
printf("\n");
}
printf("\n");
for(i=0;ifor(j=0;jprintf("%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("zgf.txt","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]=%lf\n",i,d[i]);
getch();
}
实验地点
综合楼六层606室
指导教师
王丽娟
本科实验报告
课程名称:
计算机数值方法
实验项目:
雅克比迭代法以及高斯赛德尔法
实验地点:
学院楼606
专业班级:
学号:
学生姓名:
指导教师:
王丽娟
年5月8日
太原理工大学学生实验报告
学院名称
计算机科学与技术
专业班级
学号
学生姓名
实验日期
5月8日
成绩
课程名称
计算机数值方法
实验题目
雅克比迭代法
1、实验目的和要求(必填)
线性方程组的迭代解法
使用雅可比迭代法或高斯-赛德尔迭代法对下列方程组进行求解。
2、实验内容和原理(必填)
雅克比迭代法:
设线性方程组
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。
3、主要仪器设备(必填)
4、PC,vc6.0
5、操作方法与实验步骤(可选)
#include"stdafx.h"
main()
{floata[15][15],x[15],sum=0;
intb=0,i,j,m,n;
printf("请输入行列:
");
scanf("%d%d",&m,&n);
printf("请输入系数\n");
for(i=0;ifor(j=0;jscanf("%f",&a[i][j]);
printf("请输入x的初始值");
for(i=0;iscanf("%f",&x[i]);
while(b<8)
{for(i=0;i{sum=0;
for(j=0;jif(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");
}
}
6、实验结果与分析(必填)
使用高斯-赛德尔和雅克比迭代都可以求出方程组的解,但是利用高斯-赛德尔迭代法所需的迭代次数比雅克比迭代少,能够更早的达到精度要求。
实验地点
综合楼六层606室
指导教师
王丽娟
本科实验报告
课程名称:
计算机数值方法
实验项目:
幂法
实验地点:
学院楼606
专业班级:
学号:
学生姓名:
指导教师:
王丽娟
年5月8日
太原理工大学学生实验报告
学院名称
计算机科学与技术
专业班级
学号
学生姓名
实验日期
5月8日
成绩
课程名称
计算机数值方法
实验题目
幂法求特征向量
1、实验目的和要求(必填)
矩阵特征值与特征向量问题
使用幂法求A模为最大的特征值及其相应的特征向量。
2、实验内容和原理(必填)
幂法:
由已知的非零向量x0和矩阵A的乘幂构造向量序列{xn}以计算矩阵A的按模最大特征值及其特征向量的方法,称为幂法。
迭代公式:
结果可取
3、主要仪器设备(必填)
PC,DEV-C
4、操作方法与实验步骤(可选)
#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("请输入初始矩阵X\n");
for(i=0;iscanf("%f",&x[i]);
printf("请输入矩阵A\n");
for(i=0;ifor(j=0;jscanf("%f",&a[i][j]);
for(f=0;f<8;f++){
for(i=0;iy[i]=0;
for(j=0;jy[i]+=a[i][j]*x[j];
}
s=y[0];
for(i=0;iif(abs(y[i])>abs(s))
s=y[i];
mk[f]=s;
printf("%f",mk[f]);
for(i=0;ix[i]=y[i]/mk[f];
printf("%f",x[i]);
}
printf("\n");
}
getch();
}
5、实验结果与分析(必填)
幂法是一种求任意矩阵A的按模最大特征值及其对应特征向量的迭代算法。
该方法的最大优点是计算简单,容易在计算机上实现,对稀疏矩阵较为适合,但有时收敛速度很慢。
实验地点
综合楼六层606室
指导教师
王丽娟
本科实验报告
课程名称:
计算机数值方法
实验项目:
拉格朗日插值法牛顿插值法
实验地点:
学院楼606
专业班级:
学号
学生姓名:
指导教师:
王丽娟
2013年5月8日
太原理工大学学生实验报告
学院名称
计算机科学与技术
专业班级
学号
学生姓名
实验日期
5月8日
成绩
课程名称
计算机数值方法
实验题目
拉格朗日差值法
1、实验目的和要求(必填)
代数插值
使用拉格朗日插值法或牛顿插值法求解:
已知f(x)在6个点的函数值如下表所示,运用插值方法,求f(0.596)的近似值。
x
0.40
0.55
0.65
0.80
0.90
1.05
f(x)
0.41075
0.57815
0.69675
0.88811
1.02652
1.25386
2、实验内容和原理(必填)
设函数在区间[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)
3、主要仪器设备(必填)
PC,DEV-C++
4、操作方法与实验步骤(可选)
#include
intmain(){
floatx,s=0;
intn,i,j;
printf("请输入为过几个点的差值多项式\n");
scanf("%d",&n);
floata[n][2],b[n];
printf("请依次输入各个点\n");
for(i=0;ifor(j=0;j<2;j++)
scanf("%f",&a[n][j]);
printf("请输入x\n");
scanf("%f",&x);
for(i=0;ib[i]=1;
for(j=0;jif(i==j)
b[i]=b[i];
else
b[i]=b[i]*(x-a[j][0])/(a[i][0]-a[j][0]);
}
}
for(i=0;iprintf("%f",b[i]);
for(i=0;is+=b[i]*a[i][1];
printf("%f",s);
getch();
}
5、实验数据记录和处理(可选)
六、实验结果与分析(必填)
拉格朗日插值的优点是插值多项式特别容易建立,缺点是增加节点是原有多项式不能利用,必须重新建立,即所有基函数都要重新计算,这就造成计算量的浪费。
实验地点
综合楼六层606室
指导教师
王丽娟
本科实验报告
课程名称:
计算机数值方法
实验项目:
最小二乘法拟合
实验地点:
学院楼606
专业班级:
学号:
学生姓名:
指导教师:
王丽娟
2013年5月8日
太原理工大学学生实验报告
学院名称
计算机科学与技术
专业班级
学号
学生姓名
实验日期
5月8日
成绩
课程名称
计算机数值方法
实验题目
最小二乘法
1、实验目的和要求(必填)
最小二乘法拟合多项式
给定数据点(xi,yi),用最小二乘法拟合数据的多项式,并求平方误差。
xi
0
0.5
0.6
0.7
0.8
0.9
1.0
yi
1
1.75
1.96
2.19
2.44
2.71
3.00
2、实验内容和原理(必填)
建立正规方程组:
∑(∑xij+k)ak=∑xijyi,j=0,1,…,n
平方误差:
I=∑(∑akxik-yi)2
3、主要仪器设备(必填)
PC,DEV-C
4、操作方法与实验步骤(可选)
5、#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;iscanf("%f",&x[i]);
printf("请依次输入Y的坐标\n");
for(i=0;iscanf("%f",&y[i]);
for(i=0;is+=x[i];
w+=y[i];
a+=x[i]*x[i];
b+=x[i]*y[i];
}
printf("%f%f%f%f\n",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][