太原理工计算机数值方法实验报告_第1页
太原理工计算机数值方法实验报告_第2页
太原理工计算机数值方法实验报告_第3页
太原理工计算机数值方法实验报告_第4页
太原理工计算机数值方法实验报告_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、本科实验报告课程名称: 计算机数值方法 实验项目:1方程求根 2线性方程组的直接解法 3线性方程组的迭代解法 4代数插值和最小二乘拟合多项式实验地点: 专业班级: 学号: 学生姓名: 指导教师: 2015年 6 月 3 日学生姓名实验成绩实验名称 实验一 方程求根实验内容和要求熟悉使用二分法、迭代法、牛顿法、割线法等方法对给定的方程进行根的求解。选择上述方法中的两种方法求方程:f(x)=x3+4x2-10=0在1,2内的一个实根,且要求满足精度|x*-xn10-5实验原理使用二分法,首先判断是否满足精度,然后找到区间中点,将其值代入方程与左右端点值相乘判断正负,根据情况替换掉左端点或右端点,直

2、到满足要求。使用牛顿法,根据书上公式进行循环迭代,误差为迭代前后值得差,最终给出结果。主要仪器设备笔记本计算机实验记录实验数据记录和处理;package 实验1;public class Twoswift static double f(double x)return x*x*x+4*x*x-10;public static void main(String args)double a=1,b=2,c=1.5;for(;)if(b-a)/2=0.000005)if(f(a)*f(c)=0)break;else if(f(a)*f(c)0) /替换左端点a=c;c=(a+b)/2;else br

3、eak;System.out.println(a=+a+b=+b+二分结果为+c+误差=+(b-a)/2);开始a=0,b=1,c=1for?f(a)*f(c)=0?f(a)*f(c)0?breakc=(a+b)/2结束package 实验2方法2;public class Niunun public static void main(String args)double a=0,b=1.5,c = 1;while00005)a=b-(b*b*b+4*b*b-10)/(3*b*b+8*b);c=Math.abs(a-b); /误差记录点b=a;System.out.println(二分结果为+

4、a+误差=+c);开始a=0,b=1.5 c=100005a=b-(b*b*b+4*b*b-10)/(3*b*b+8*b)c=Math.abs(a-b)b=a结束实验结果和分析方法1:方法2: 根据误差大小来看,方法二的误差更小,但是方法二要求利用公式,方法一则直接可以对数字进行操作,更加简洁易懂。心得体会 在二分法中,只需要搞清楚和判断的条件,就能轻松写出程序,在牛顿法中,我则先手算出函数的一阶导数,然后利用公式进行计算,实验较为简单易懂,但是要注意误差的判定,即循环跳出的条件。实验名称 实验二 线性方程组的直接求解实验内容和要求利用Gauss消元法求解下列方程组:实验原理根据书上的高斯消元

5、法的公司把方程按行按列处理,将方程组依次消元,得出上三角矩阵,随后经过回代,则可以得出答案。主要仪器设备台式或笔记本计算机实验记录(写出实验内容中的程序代码和运行结果)(可分栏或加页)package 实验2高斯消元法;import ;import ; import java.util.Scanner;public class Gauss public static void Gauss1(double a)double b=new double3;double s;int i,j,k;for(k=0;k3;k+) /i代表行for(i=k;i=0;j-)ai+1j=ai+1j-akj*ai+1

6、k/akk; /将矩阵化简为三角矩阵System.out.println(上三角矩阵为:);for(i=0;i3;i+)for(j=0;j=0;i-) s=0; for(j=2;ji;j-) s=aij*bj+s; /把计算出来的值累加 bi=(ai3-s)/aii; for(i=0;i3;i+) System.out.println(x(+(i+1)+)=+bi); public static void main(String args)Scanner sc=new Scanner(System.in); double a=new double34;int i,j;System.out.pr

7、intln(输入系数及常数项矩阵:);for(i=0;i3;i+)for(j=0;j=3;j+)aij=sc.nextInt();Gauss1(a);实验结果和分析 此方程组适合用高斯消元法进行求解,要根据不同的方程组选用不同的方式才能使计算简化。心得体会(遇到的问题和解决方法) 编写过程中难点主要在于求上三角矩阵和回代求解,尤其是对循环语句出口条件的建立,多一个或少一个都有可能造成错误,同时要利用好公式进行计算,记录回代过程中的x值。实验名称 实验三 线性方程组的迭代求解实验内容和要求使用雅可比迭代法或高斯-赛德尔迭代法对下列方程组进行求解。实验原理高斯-赛德尔迭代法,利用给定的初值通过多次

8、迭代代入来逼近真实值主要仪器设备台式或笔记本计算机实验记录(写出实验内容中的程序代码和运行结果)(可分栏或加页)package 实验3高斯赛德尔迭代法;import java.util.Scanner;public class GussSder public static void main(String args)Scanner sc=new Scanner(System.in); double a=new double34;/方程组 double b=new double3; /近似解 double c=new double3; /c为记录前一次的结果 double s; int i,j;

9、 System.out.println(输入系数及常熟项矩阵:); for(i=0;i3;i+)for(j=0;j=3;j+)aij=sc.nextDouble(); System.out.println(输入解的初值:); for(i=0;i3;i+) bi=sc.nextInt(); System.out.println(迭代过程如下:); do for(i=0;i3;i+) ci=bi; /记录前一次结果 for(i=0;i3;i+) s=0; for(j=0;j3;j+) if(i!=j) s=s+aij*bj; /计算除了当前x值以外的值 bi=(ai3-s)/aii; /替代原有x

10、值 for(j=0;j0.00005&Math.abs(c1-b1)0.00005&Math.abs(c2-b2)0.00005);实验结果和分析 雅克比迭代法计算完成一组才会改变x的值,然后代入计算下一组,随后得出结论,而高斯赛德尔迭代法则完成一次计算就改变x的值,速度更快,但是有时候会造成函数的发散。心得体会 用高斯赛德尔迭代法相较于雅克比迭代法在编程上可省略一些步骤,比如计算一次以后的值直接更新,而不用记录一组数字以后再更新使用,编写起来容易。同时程序中利用dowhile循环首先将数组b里的值填满,省的赋予初值。实验名称 实验四 代数插值和最小二乘法拟合实验内容和要求给定数据点(xi ,

11、yi)如下:xi0yi1(1) 使用拉格朗日插值法或牛顿插值法, 求f(0.856)的近似值.(2) 用最小二乘法拟合数据的(n次)多项式,求f(0.856)的近似值.(3) 对比、分析上两结果。实验原理拉格朗日插值法:根据输入的点确定多个基函数,再利用基函数确定所要求的值。最小二乘法拟合:根据给定点,确定建立正规方程组: (xij+k)ak=xij (yi ,j=0,1,n) ,解方程组得到拟合多项式。主要仪器设备台式或笔记本计算机实验记录(写出实验内容中的程序代码和运行结果)(可分栏或加页)package 实验4代数插值;import java.util.Scanner;public cl

12、ass Dscz public static final int N=7;public static void main(String args)Scanner sc=new Scanner(System.in);int i,j;double x=new doubleN; /x值 double y=new doubleN; /y值 double lx=new doubleN; /基函数 double Xi,Lx; /Xi为给定值,Lx为对应结果 System.out.println(输入(x,f(x):); for(i=0;iN;i+) /输入给定点 xi=sc.nextDouble(); y

13、i=sc.nextDouble(); System.out.println(输入要求的Xi:); Xi=sc.nextDouble(); System.out.println(输出每个基函数的值:); for(i=0;iN;i+) /求基函数 lxi=1; /设定初值无意义 for(j=0;jN;j+) if(xi-xj!=0) lxi=(Xi-xj)/(xi-xj)*lxi;/跳过相差为0的值 System.out.println(lx+i+=+lxi); Lx=0; for(i=0;iN;i+) /求y*lx的值 Lx=yi*lxi+Lx; System.out.println(结果为:+

14、Lx);package 实验4最小二乘法拟合;import java.util.Scanner;public class Min public static final int N=7;public static final int M=3;public static void Gauss1(double a,double b)/用高斯消元法解方程double s;int i,j,k;for(k=0;kM;k+)for(i=k;i=0;j-)ai+1j=ai+1j-akj*ai+1k/akk;System.out.println(上三角矩阵为:);for(i=0;iM;i+)for(j=0;j

15、=0;i-) s=0; for(j=M-1;ji;j-) s=aij*bj+s; bi=(ai3-s)/aii; for(i=0;iM;i+) System.out.println(x(+(i+1)+)=+bi); public static void main(String args)double b=new doubleM;Scanner sc=new Scanner(System.in); double a=new doubleMM+1; double x=new doubleN; double y=new doubleN;int i,j,k,l;double t;System.out.

16、println(输入(x,f(x):);for(i=0;iN;i+) /输入给定点 xi=sc.nextDouble(); yi=sc.nextDouble(); for(i=0;iM;i+) /*计算正规方程组*/ for(j=0;j=M;j+) if(jM) /计算x的值 aij=0; for(l=0;lN;l+) t=1; for(k=0;kj+i;k+)/根据i和j的值确定x的次数 t=t*xl; aij=aij+t;/改变系数矩阵的值 if(j=M) /计算y的值 aij=0; for(l=0;lN;l+) t=yl; for(k=0;ki;k+)/根据i和j的值确定y乘x的几次 t=t*xl; aij=aij+t;/改变右边结果的值 System.out.println(输出正规矩阵:); for(i=0;iM;i+) /*输出正规系数常数项矩阵*/ for(j=0;j=M;j+) System.out.print(aij+ ); System.out.println(); Gauss1(a,b); System.out.println(输出拟合曲线方程

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论