当前位置:文档之家› 数值分析-课程设计doc

数值分析-课程设计doc

课程设计报告课程名称数值分析课题名称数值积分专业信息与计算科学班级学号姓名指导教师2015 年12 月20 日湖南工程学院课程设计任务书课程名称数值分析课题数值积分专业班级信息与计算科学0901班学生姓名学号指导老师辉审批任务书下达日期2015 年12 月7 日任务完成日期2015 年12 月20日设计内容与设计要求1. 设计内容:非奇异矩阵矩阵A ∈R n*n ,已知A -1的一个近似矩阵D (0)∈R n*n ,则由矩阵公式:⎪⎩⎪⎨⎧+=-=--)()1()1(KK KK KF I DD ADI F , K=0,1,2,3...........(1).已知矩阵A 及其逆矩阵的一个近似D (k)为:A=⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡--------7.49.43.49.19.47.11.88.78.26.21.27.07.37.08.38.1D= ⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡---------185.0061.0388.0293.0199.0009.0046.0230.0089.0016.0169.0035.0270.0163.0460.0211.0 用以上方法计算序列{D (k)}迭代次数超过100次时结束。

(2)分析最后得到的D (k)是否A 的一个较好的近似逆矩阵2.设计要求:● 课程设计报告正文内容a. 问题的描述及算法设计;b. 算法的流程图(要求画出模块图);c. 算法的理论依据及其推导;d. 相关的数值结果(通过程序调试),;e. 数值计算结果的分析;f. 附件(所有程序的原代码,要求对程序写出必要的注释)。

● 书写格式a.要求用A4纸打印成册b.正文格式:一级标题用3号黑体,二级标题用四号宋体加粗,正文用小四号宋体;行距为22。

c.正文的内容:正文总字数要求在3000字左右(不含程序原代码)。

d.封面格式如下页。

●考核方式指导老师负责验收程序的运行结果,并结合学生的工作态度、实际动手能力、创新精神和设计报告等进行综合考评,并按优秀、良好、中等、及格和不及格五个等级给出每位同学的课程设计成绩。

具体考核标准包含以下几个部分:a.平时出勤(占10%)b.系统需求分析、功能设计、数据结构设计及程序总体结构合理与否(占10%)c.程序能否完整、准确地运行,个人能否独立、熟练地调试程序(占40%)d.设计报告(占30%)注意:不得抄袭他人的报告(或给他人抄袭),一旦发现,成绩为零分。

e.独立完成情况(占10%)。

●课程设计验收要求基本要求:黑板上的文字说明。

a.判定算法设计的合理性,运行相关程序,获得正确的数值结果。

b.回答有关问题。

c.提交课程设计报告。

d.提交文档(源程序、设计报告文档)。

e.依内容的创新程度,完善程序情况及对程序讲解情况打分。

目录任务书 (1)目录 (5)问题提出 (6)问题分析 (10)程序代码 (21)程序界面 (23)程序结果 (24)心得 (24)课程设计评分表 (25)摘要:在数值分析中,数值积分在实际生活运用当中十分广泛,比如在大气科学和动力气象学中有着举足轻重的地位。

本文举了两个例子,一阶积分和二阶积分。

在一阶积分中我们使用复合梯形法、复合辛普森法、复合高斯法、龙贝格法;在二阶积分中我们使用复合梯形法、复合辛普森法、复合高斯法。

以上算法都是用C 语言来实现的。

关键词:数值积分; 复化求积公式;程序设计一、所求解问题及其背景描述非奇异矩阵矩阵A ∈R n*n ,已知A -1的一个近似矩阵D (0)∈R n*n ,则由矩阵公式:⎪⎩⎪⎨⎧+=-=--)()1()1(KK KK KF I DD ADI F , K=0,1,2,3...........(2).已知矩阵A 及其逆矩阵的一个近似D (k)为:A=⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡--------7.49.43.49.19.47.11.88.78.26.21.27.07.37.08.38.1D= ⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡---------185.0061.0388.0293.0199.0009.0046.0230.0089.0016.0169.0035.0270.0163.0460.0211.0 用以上方法计算序列{D (k)}迭代次数超过100次时结束。

(2)分析最后得到的D (k)是否A 的一个较好的近似逆矩阵。

二、问题分析与算法描述这是一个矩阵迭代问题,程序包括两个读取数组的代码,一组输入语句和运行公式的代码。

以下是程序代码。

三、程序代码package .hekai;import java.util.Scanner;import com.sun.jndi.url.iiopname.iiopnameURLContextFactory;public class Test {/*** @param args*/public static void main(String[] args) {Scanner scanner = new Scanner(System.in);System.out.println("请输入行:");int row = scanner.nextInt();System.out.println("请输入列:");int list = scanner.nextInt();System.out.println("请输入迭代次数:");int num = scanner.nextInt();FileRead frFileRead = new FileRead("c.txt");double [] array = frFileRead.getArray();double[][] A = new double[row][list];int k1 = 0 ;for (int i = 0; i <row; i++) {for (int j = 0; j < list; j++) {A[i][j] = array[k1];k1++;}}FileRead fr = new FileRead("d.txt");double [] array2 = fr.getArray();double[][][] D = new double[row][list][1000];int k2 = 0 ;for (int i = 0; i <row; i++) {for (int j = 0; j < list; j++) {D[i][j][0] = array2[k2];k2++;}}//读取数组double [][] I = new double[row][list];for (int j = 0; j < row; j++) {for (int j2 = 0; j2 < list; j2++) {if (j == j2) {I[j][j2]=1;}else {I[j][j2]=0;}}}//读取数组double [][][] F = new double[row][list][1000];for (int k = 0; k < num; k++) {double [][] s = new double[row][list];for(int i=0;i<row;i++){for(int k11=0;k11<list;k11++){for(int j=0;j<row;j++){s[i][k11]+=A[i][j]*D[j][k11][k];}//公式计算}}for (int j = 0; j < row; j++) {for (int j2 = 0; j2 < list; j2++) {F[j][j2][k+1] = I[j][j2]-s[j][j2];} //公式计算}double [][] s1 =new double[row][list];for (int j = 0; j < row; j++) {for (int j2 = 0; j2 <list; j2++) {s1[j][j2] = I[j][j2]+F[j][j2][k+1];}//公式计算}for(int i=0;i<row;i++){for(int k11=0;k11<list;k11++){for(int j=0;j<list;j++){D[i][k11][k+1]+=D[i][j][k]*s1[j][k11];}//行列式相乘}}}for (int j = 0; j < row; j++) {for (int j2 = 0; j2 < list; j2++) {System.out.print(F[j][j2][num]+" ");}//输出F矩阵System.out.println();}System.out.println();System.out.println();for (int j = 0; j < row; j++) {for (int j2 = 0; j2 < list; j2++) {System.out.print(D[j][j2][num]+" ");}//输出D矩阵System.out.println();}}}2.测试类:package .hekai;import java.util.Scanner;import org.w3c.dom.ls.LSException;public class Test1 {/*** @param args*/public static void main(String[] args) {Scanner scanner = new Scanner(System.in);System.out.println("请输入行:");int row = scanner.nextInt();System.out.println("请输入列:");int list = scanner.nextInt();FileRead frFileRead = new FileRead("c.txt");double [] array = frFileRead.getArray();double[][] A = new double[row][list];int k1 = 0 ;for (int i = 0; i <row; i++) {for (int j = 0; j < list; j++) {A[i][j] = array[k1];k1++;}}FileRead fr = new FileRead("e.txt");double [] array2 = fr.getArray();double[][][] D = new double[row][list][1000];int k2 = 0 ;for (int i = 0; i <row; i++) {for (int j = 0; j < list; j++) {D[i][j][0] = array2[k2];k2++;}}double [][] s =new double[row][list];for(int i=0;i<row;i++){for(int k=0;k<list;k++){for(int j=0;j<list;j++){s[i][k]+=A[i][j]*D[j][k][0];}}}for (int j = 0; j < row; j++) {for (int j2 = 0; j2 < list; j2++) {System.out.print(s[j][j2]+" ");}System.out.println();}}}五、程序结果六、课程设计心得:这个题目最重要的地方就是公式代码的构建,虽然花费了很多时间,但是到做出来的那一刻感觉还是很值得的。

相关主题