太原理工数值实验报告软件13级.docx
- 文档编号:9264686
- 上传时间:2023-02-03
- 格式:DOCX
- 页数:17
- 大小:275.81KB
太原理工数值实验报告软件13级.docx
《太原理工数值实验报告软件13级.docx》由会员分享,可在线阅读,更多相关《太原理工数值实验报告软件13级.docx(17页珍藏版)》请在冰豆网上搜索。
太原理工数值实验报告软件13级
本科实验报告
课程名称:
计算机数值方法
实验项目:
1方程求根2线性方程组的直接解法
3线性方程组的迭代解法
4代数插值和最小二乘拟合多项式
实验地点:
专业班级:
学号:
学生姓名:
指导教师:
2015年6月3日
学生姓名
实验成绩
实验名称
实验一方程求根
实验内容和要求
熟悉使用二分法、迭代法、牛顿法、割线法等方法对给定的方程进行根的求解。
选择上述方法中的两种方法求方程:
f(x)=x3+4x2-10=0在[1,2]内的一个实根,且要求满足精度|x*-xn|<0.5×10-5
实验原理
1.使用二分法,首先判断是否满足精度,然后找到区间中点,将其值代入方程与左右端点值相乘判断正负,根据情况替换掉左端点或右端点,直到满足要求。
2.使用牛顿法,根据书上公式进行循环迭代,误差为迭代前后值得差,最终给出结果。
主要仪器设备
笔记本计算机
实验记录
实验数据记录和处理;
package实验1;
publicclassTwoswift{
staticdoublef(doublex){
returnx*x*x+4*x*x-10;}
publicstaticvoidmain(String[]args){
doublea=1,b=2,c=1.5;
for(;;){
if((b-a)/2>=0.000005){
if(f(a)*f(c)==0)
break;
elseif(f(a)*f(c)<0)//替换右端点
b=c;
elseif(f(a)*f(c)>0)//替换左端点
a=c;
c=(a+b)/2;
}
else
break;}
System.out.println("a="+a+"b="+b+"二分结果为"+c+"误差="+(b-a)/2);
}
}
package实验2方法2;
publicclassNiunun{
publicstaticvoidmain(String[]args){
doublea=0,b=1.5,c=1;
while(c>=0.000005){
a=b-(b*b*b+4*b*b-10)/(3*b*b+8*b);
c=Math.abs(a-b);//误差记录点
b=a;
}
System.out.println("二分结果为"+a+"误差="+c);
}
}
实验结果和分析
方法1:
方法2:
根据误差大小来看,方法二的误差更小,但是方法二要求利用公式,方法一则直接可以对数字进行操作,更加简洁易懂。
心得体会
在二分法中,只需要搞清楚和判断的条件,就能轻松写出程序,在牛顿法中,我则先手算出函数的一阶导数,然后利用公式进行计算,实验较为简单易懂,但是要注意误差的判定,即循环跳出的条件。
实验名称
实验二线性方程组的直接求解
实验内容和要求
利用Gauss消元法求解下列方程组:
实验原理
根据书上的高斯消元法的公司把方程按行按列处理,将方程组依次消元,得出上三角矩阵,随后经过回代,则可以得出答案。
主要仪器设备
台式或笔记本计算机
实验记录(写出实验内容中的程序代码和运行结果)(可分栏或加页)
package实验2高斯消元法;
importjava.util.ArrayList;
importjava.util.Arrays;
importjava.util.Scanner;
publicclassGauss{
publicstaticvoidGauss1(doublea[][]){
double[]b=newdouble[3];
doubles;
inti,j,k;
for(k=0;k<3;k++){//i代表行
for(i=k;i<2;i++){//i控制行,j控制列,对除了1行其他部分进行化简
for(j=3;j>=0;j--){
a[i+1][j]=a[i+1][j]-a[k][j]*a[i+1][k]/a[k][k];
//将矩阵化简为三角矩阵
}
}
}
System.out.println("上三角矩阵为:
");
for(i=0;i<3;i++){
for(j=0;j<=3;j++){
System.out.print(a[i][j]+"");
}
System.out.println();
}
System.out.println("答案为:
");
for(i=2;i>=0;i--){
s=0;
for(j=2;j>i;j--){
s=a[i][j]*b[j]+s;//把计算出来的值累加
}
b[i]=(a[i][3]-s)/a[i][i];
}
for(i=0;i<3;i++){
System.out.println("x("+(i+1)+")="+b[i]);
}
}
publicstaticvoidmain(String[]args){
Scannersc=newScanner(System.in);
double[][]a=newdouble[3][4];
inti,j;
System.out.println("输入系数及常数项矩阵:
");
for(i=0;i<3;i++){
for(j=0;j<=3;j++){
a[i][j]=sc.nextInt();
}
}
Gauss1(a);
}
}
实验结果和分析
此方程组适合用高斯消元法进行求解,要根据不同的方程组选用不同的方式才能使计算简化。
心得体会(遇到的问题和解决方法)
编写过程中难点主要在于求上三角矩阵和回代求解,尤其是对循环语句出口条件的建立,多一个或少一个都有可能造成错误,同时要利用好公式进行计算,记录回代过程中的x值。
实验名称
实验三线性方程组的迭代求解
实验内容和要求
使用雅可比迭代法或高斯-赛德尔迭代法对下列方程组进行求解。
实验原理
高斯-赛德尔迭代法,利用给定的初值通过多次迭代代入来逼近真实值
主要仪器设备
台式或笔记本计算机
实验记录(写出实验内容中的程序代码和运行结果)(可分栏或加页)
package实验3高斯赛德尔迭代法;
importjava.util.Scanner;
publicclassGussSder{
publicstaticvoidmain(String[]args){
Scannersc=newScanner(System.in);
double[][]a=newdouble[3][4];//方程组
double[]b=newdouble[3];//近似解
double[]c=newdouble[3];//c为记录前一次的结果
doubles;
inti,j;
System.out.println("输入系数及常熟项矩阵:
");
for(i=0;i<3;i++){
for(j=0;j<=3;j++){
a[i][j]=sc.nextDouble();
}
}
System.out.println("输入解的初值:
");
for(i=0;i<3;i++){
b[i]=sc.nextInt();
}
System.out.println("迭代过程如下:
");
do{
for(i=0;i<3;i++)
c[i]=b[i];//记录前一次结果
for(i=0;i<3;i++){
s=0;
for(j=0;j<3;j++)
if(i!
=j)
s=s+a[i][j]*b[j];//计算除了当前x值以外的值
b[i]=(a[i][3]-s)/a[i][i];//替代原有x值
}
for(j=0;j<3;j++)
System.out.print(b[j]+"");
System.out.println();
}
while(Math.abs(c[0]-b[0])>0.00005&&Math.abs(c[1]-b[1])>0.00005&&Math.abs(c[2]-b[2])>0.00005);
}
}
实验结果和分析
雅克比迭代法计算完成一组才会改变x的值,然后代入计算下一组,随后得出结论,而高斯赛德尔迭代法则完成一次计算就改变x的值,速度更快,但是有时候会造成函数的发散。
心得体会
用高斯赛德尔迭代法相较于雅克比迭代法在编程上可省略一些步骤,比如计算一次以后的值直接更新,而不用记录一组数字以后再更新使用,编写起来容易。
同时程序中利用dowhile循环首先将数组b里的值填满,省的赋予初值。
实验名称
实验四代数插值和最小二乘法拟合
实验内容和要求
给定数据点(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
(1)使用拉格朗日插值法或牛顿插值法,求f(0.856)的近似值.
(2)用最小二乘法拟合数据的(n次)多项式,求f(0.856)的近似值.
(3)对比、分析上两结果。
实验原理
拉格朗日插值法:
根据输入的点确定多个基函数,再利用基函数确定所要求的值。
最小二乘法拟合:
根据给定点,确定建立正规方程组:
∑(∑xij+k)ak=∑xij(yi,j=0,1,…,n),解方程组得到拟合多项式。
主要仪器设备
台式或笔记本计算机
实验记录(写出实验内容中的程序代码和运行结果)(可分栏或加页)
package实验4代数插值;
importjava.util.Scanner;
publicclassDscz{
publicstaticfinalintN=7;
publicstaticvoidmain(String[]args){
Scannersc=newScanner(System.in);
inti,j;
double[]x=newdouble[N];//x值
double[]y=newdouble[N];//y值
double[]lx=newdouble[N];//基函数
doubleXi,Lx;//Xi为给定值,Lx为对应结果
System.out.println("输入(x,f(x)):
");
for(i=0;i x[i]=sc.nextDouble(); y[i]=sc.nextDouble(); } System.out.println("输入要求的Xi: "); Xi=sc.nextDouble(); System.out.println("输出每个基函数的值: "); for(i=0;i lx[i]=1;//设定初值无意义 for(j=0;j if(x[i]-x[j]! =0) lx[i]=((Xi-x[j])/(x[i]-x[j]))*lx[i];//跳过相差为0的值 } System.out.println("lx"+i+"="+lx[i]); } Lx=0; for(i=0;i Lx=y[i]*lx[i]+Lx; System.out.println("结果为: "+Lx); } } package实验4最小二乘法拟合; importjava.util.Scanner; publicclassMin{ publicstaticfinalintN=7; publicstaticfinalintM=3; publicstaticvoidGauss1(doublea[][],doubleb[]){//用高斯消元法解方程 doubles; inti,j,k; for(k=0;k for(i=k;i for(j=M;j>=0;j--){ a[i+1][j]=a[i+1][j]-a[k][j]*a[i+1][k]/a[k][k]; } } } System.out.println("上三角矩阵为: "); for(i=0;i for(j=0;j<=M;j++){ System.out.print(a[i][j]+""); } System.out.println(); } System.out.println("答案为: "); for(i=M-1;i>=0;i--){ s=0; for(j=M-1;j>i;j--){ s=a[i][j]*b[j]+s; } b[i]=(a[i][3]-s)/a[i][i]; } for(i=0;i System.out.println("x("+(i+1)+")="+b[i]); } } publicstaticvoidmain(String[]args){ double[]b=newdouble[M]; Scannersc=newScanner(System.in); double[][]a=newdouble[M][M+1]; double[]x=newdouble[N]; double[]y=newdouble[N]; inti,j,k,l; doublet; System.out.println("输入(x,f(x)): "); for(i=0;i x[i]=sc.nextDouble(); y[i]=sc.nextDouble(); } for(i=0;i { for(j=0;j<=M;j++){ if(j a[i][j]=0; for(l=0;l t=1; for(k=0;k t=t*x[l]; a[i][j]=a[i][j]+t;//改变系数矩阵的值 } } if(j==M){//计算y的值 a[i][j]=0; for(l=0;l t=y[l]; for(k=0;k t=t*x[l]; a[i][j]=a[i][j]+t;//改变右边结果的值 } } } } System.out.println("输出正规矩阵: "); for(i=0;i { for(j=0;j<=M;j++) System.out.print(a[i][j]+""); System.out.println(); } Gauss1(a,b); System.out.println("输出拟合曲线方程: "); System.out.println("y="+b[0]+"+"+b[1]+"*x+"+b[2]+"*x*x"); System.out.print("代入0.856结果为: "); System.out.println(b[0]+0.856*b[1]+0.856*0.856*b[2]); } } 实验结果和分析 拉格朗日插值法: 最小二乘法拟合: 心得体会(遇到的问题和解决方法) 拉格朗日插值法相对来说简单,只需要根据点来建立基函数,通过计算即可得到结果,而最小二乘法拟合则需要首先得到正规方程组,随后得出拟合多项式,求解结果。 从结果上看,拉格朗日插值法的值看起来更加合理可靠。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 太原理工 数值 实验 报告 软件 13
![提示](https://static.bdocx.com/images/bang_tan.gif)