数值分析上机实习报告

2024-08-19

数值分析上机实习报告(精选6篇)

数值分析上机实习报告 第1篇

数值分析上机实习报告要求

1.应提交一份完整的实习报告。具体要求如下:

(1)要有封面,封面上要标明姓名、学号、专业和联系电话;

(2)要有序言,说明所用语言及简要优、特点,说明选用的考量;

(3)要有目录,指明题目、程序、计算结果,图标和分析等内容所在位置,作到

信息简明而完全;

(4)要有总结,全方位总结机编程计算的心得体会;

(5)尽量使报告清晰明了,一般可将计算结果、图表及对比分析放在前面,程序

清单作为附录放在后面,程序中关键部分要有中文说明或标注,指明该部分的功能和作用。

2.程序需完好保存到期末考试后的一个星期,以便老师索取用于验证、询问或质疑部分内容。

3.认真完成实验内容,可以达到既学习计算方法又提高计算能力的目的,还可以切身体会书本内容之精妙所在,期间可以得到很多乐趣。

4.拷贝或抄袭他人结果是不良行为,将视为不合格。

5.报告打印后按要求的时间提交给任课老师。

数值分析上机试题 10(选择其中两个题目)

1. 给定三个n阶线性方程组Ax=b,其中A的元素aij(i,j,=1,…,n)与阶数分别为

(1)aij=(i+j-1)2, n=3,4,5,…,9;

(2)aij=(i+j)2, n=3,4,5

(3)aij=1/(i+j-1), n=3,4,5,6;

b的元素bi=ai1+ai2+…,ain,(i=1,2,…,n)

已知其准确解为x=(1,1,...,1)T, 用列主元素法分别求解上列方程组。输出各步主元,解释所遇到的现象。

2.用雅格比法与高斯-赛德尔迭代法解下列方程组Ax=b,研究其收敛性,上机验证理论分析是否正确,比较它们的收敛速度,观察右端项对迭代收敛有无影响。

(1)A行分别为A1=[6,2,-1],A2=[1,4,-2],A3=[-3,1,4]; b1=[-3,2,4]T, b2=[100,-200,345]T,(2)A行分别为A1=[1,0,8,0.8],A2=[0.8,1,0.8],A3=[0.8,0.8,1];b1=[3,2,1] T, b2=[5,0,-10]T,1

(3)A行分别为A1=[1,3],A2=[-7,1];b=[4,6]T,3.松弛因子对SOR法收敛速度的影响。

用SOR法求解方程组Ax=b,其中

41-3141-2-2...,B ....141-2-314

要求程序中不存系数矩阵A,分别对不同的阶数取w=1.1, 1.2,...,1.9进行迭代,记录近似解x(k)达到||x(k)-x(k-1)||<10-6时所用的迭代次数k,观察松弛因子对收敛速度的影响,并观察当w0或w2会有什么影响?

4.某实际问题中两次过程记录测得(x,y)数据点如下:其中yi=f(xi),i=1,…,21

第一次的数据为:

x=[-5.0000-4.5000-4.0000-3.5000-3.0000-2.5000-2.0000

-1.5000-1.0000-0.500000.50001.00001.5000

2.00002.50003.00003.50004.00004.50005.0000];

y =[-0.0000-0.0001-0.0002-0.0003-0.0004-0.0048-0.0366

-0.1581-0.3679-0.389400.38940.36790.1581

0.03660.00480.00040.00030.00020.00010.0000]

第二次的数据为:

x=[-5.0000-4.7000-4.4000-4.1000-3.8000-3.5000-3.2000

-2.9000-2.6000-2.3000-2.0000-1.7000-1.4000-1.1000

-0.8000-0.5000-0.20000.10000.40000.70001.0000

1.30001.60001.90002.20002.50002.80003.1000

3.40003.70004.00004.30004.60004.9000]

y=[-0.0000-0.0000-0.0000-0.0000-0.0000-0.0000-0.0001

-0.0006-0.0030-0.0116-0.0366-0.0945-0.1972-0.3280

-0.4218-0.3894-0.19220.09900.34090.42880.3679

0.23990.12370.05140.01740.00480.00110.0002

0.00000.00000.00000.00000.00000.0000]

现考虑分段低次或样条插值,或直接插值,总之用不超过7次的分段或不分段插值多项式近似该过程的对应规律y=f(x),请给出一种解决方案使得误差尽量小表示尽量简单。

5.用Runge-Kutta 4阶算法对初值问题y/=-20*y,y(0)=1按不同步长求解,用于观察稳定区间的作用,推荐两种步长h=0.1,0.2。

注:此方程的精确解为:y=e-20x

数值分析上机实习报告 第2篇

(一)为必做题,(二)和

(三)任选一题。

语法分析上机实习题

(一)对于如下的文法,试编写调试一个语法分析程序:

E → E+T | T

T → T*F | F

F → P^F| P

P→(E)| i

要求和提示:

(1)可选择一种你感兴趣的语法分析方法(LL(1)、算符优先、递归下降、SLR(1)等)作为编制语法分析程序的依据。

(2)对于所选定的分析方法,如有需要,应选择一种合适的数据结构,以构造

所给文法的机内表示。

(3)能进行分析过程模拟。如输入一个句子,能输出与句子对应的语法树,能

对语法树生成过程进行模拟;能够输出分析过程每一步符号栈的变化情况。

(二)First集和Follow集生成算法模拟

【问题描述】

设计一个由给定文法生成First集和Follow集并进行简化的算法动态模拟。(算法参见教材)

【基本要求】

动态模拟算法的基本功能是:

(1)输入一个文法G;

(2)输出由文法G构造FIRST集的算法;

(3)输出First集;

(4)输出由文法G构造FOLLOW集的算法;

(5)输出FOLLOW集。

E的first集

T的first集

F的first集+1*()i 1 11 1 1 1

【测试数据】

输入文法:

E->TE’

E’->+TE’|ε

T->FT’

T’->*FT’|ε F->(E)|i

(三)FirstVT

集和LastVT集生成算法模拟

【问题描述】

设计一个由给定文法生成FirstVT集和LastVT集的算法动态模拟。(算法参见教材P90——92FirstVT和LastVT的构造算法)

【基本要求】

动态模拟算法的基本功能是:(1)输入一个文法G;

(2)输出由文法G构造FIRSTVT集的算法;(3)输出FirstVT集;

E的firstVTT的firstVTF的firstVT

(4)输出由文法G构造LastVT集的算法;(5)输出LastVT集。

+1

*

()

i 1 1 11

1【测试数据】

输入文法: E->TE’

E’->+TE’|ε T->FT’

T’->*FT’|ε F->(E)|i

实习报告内容:

实验目的、实验要求、实验内容、采用的数据结构、算法描述、运行结果、调试情况、设计技巧及体会、源程序清单。

实验报告封面:

题目:

《编译原理》实验报告

学生姓名:_____________________________ 班级:_____________________________ 学号:_____________________________ 指导教师:_____________________________ 成绩:_____________________________

西安邮电大学计算机学院

数值分析上机实习报告 第3篇

关键词:江苏计算机二级 (VC++) ,上机考试分析与策略

江苏计算机二级 (VC++) 上机考试, 主要是针对程序改错和类的编程进行考核, 程序改错考核的是学生对程序的理解和调试能力;而类的编程主要是考核学生对面向对象的编程能力。而这两类题的解答在笔者看来, 都有很多可以应对的技巧和策略, 可分别对其分析后, 进行归纳总结。

1 改错题

一般程序的错误分为两种, 一种是语法错误, 程序一开始编译时就能发现, 也比较容易改正;另一种是逻辑错误, 编译时不会报错, 但在运行时, 可能运行不出来, 或运行不出正确结果, 这时可以由运行的结果, 倒退回去找错, 看为什么会出现上述结果, 推算出错误之处予以改正。

1.1 改错题解题步骤

改错题首先要读题干, 读懂下面程序要实现什么功能。接下来读程序, 先别急着改错, 尽量弄懂程序如何实现上述功能, 各程序段分别做了哪些操作, 来实现以上功能。接下来才开始改程序, 看每个程序语句对完成上述功能所要完成的任务, 如果没有看懂的要再联系上下程序段看, 如果没有做到所要完成的任务, 再看应该怎么改, 改完整个程序后可以编译和运行, 也可以边改边编译或运行。

1.2 常见错误要点分析

1.2.1 预编译命令

(1) 包含库函数相应的头文件, 如果包含的头文件写错, 这时程序中头文件所在的相应库函数不能被识别而报错。

如:#i n c l u d e//改为#include

#include//改为#include

(2) 宏定义不正确, 这时编译出错不是在宏定义, 而是在宏代换后的程序行。因为宏定义是预编译处理, 在程序编译前中作代换不作语法检查, 代换后编译时才作语法检查。

如:#define pi 3.14;//改为#define pi 3.14

1.2.2 变量

变量定义是否正确, 变量是否有正确的初始值。变量定义的位置决定了变量的作用域。变量只在其作用域有效。变量定义后如要参与运算, 变量需要给出正确的初始值。

上面和变量s给出了定义, 但没赋初值, 无法正确对数组元素进行求和。

1.2.3 数组

定义一维数组时数组长度要求为正整型常量, 定义二维数组时列数不能省略。数组中元素下标是否超界, 是数组元素使用时经常忽略的问题, 在编译时也并不对数组元素下标超界作语法检查, 但在运行时会报错。

如:int a[5]={1, 2, 3, 4, 5}, i;

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

cout<

上面数组元素下标超界, 5个长度的数组没有元素a[5]。

1.2.4 函数

函数的原型声明是否与函数的定义对应。函数的定义如有返回值, 函数定义是否有正确的返回类型, 返回的是否为正确的结果表达式。函数如没有返回值, 返回类型是否为void。函数调用与函数定义是否对应, 函数调用的实参与函数定义的形参进行参数传递时是否匹配。

1.2.5 流程结构

程序的流程控制中注意区分if语句与while语句及for语句, if语句只作一次选择判断, 而while语句及for语句是做循环判断, 如果判断为非0即真, 执行循环体, 一直到循环判断为0, 才退出循环。另外要区别循环体中continue与break, continue是结束本次循环, 而break是退出所在的循环。

1.2.6 判断表达式

要关注选择或循环的判断表达式是否正确。判断表达式中要注意区分赋值号 (=) 与关系相等运算符 (==) 是否混淆;逻辑判断表达式中, ==与!=是否混淆, !运算是加还是不加, &&与||是否混淆。

1.2.7 指针

指针就是地址, 包括常量地址和指针变量。常量地址主要是指数组名。数组名是常量地址不能被重新赋值或做自加运算。一维数组名是数组第0个元素的地址。而二维数组名表示的是第0行的行地址。

指针变量包括指向数据类型变量的指针变量和行指针变量。指向数据类型变量的指针变量, 是否用同类型的变量或元素的地址赋值, 在其前加*表示指针指向的变量或元素。另外要区分指针变量还是指针指向变量的自加与自减。如*p++和 (*p) ++的区别, 前者是指针变量作后置++, 后者是指针变量指向的变量作后置++。行指针变量, 是否用相同列数的行地址赋值, 行指针前加*表示同行第0列元素的地址, 元素地址前加*表示元素。反过去的转换加&运算符。当函数返回类型是指针时, 要求认清返回的是否为正确的地址。

1.2.8 逻辑错误

逻辑错误, 在编译时不能被发现, 在运行时可能运行不出来或运行结果不对。改逻辑错误前一定先看清题目, 理解程序要实现什么功能, 再看程序, 理解程序的算法, 即程序是如何实现题目所要实现的功能, 再分析每一行代码进行改错。

2 类的编程

类的编程主要来源于面向对象的程序设计思想。定义的一个类表示的是某一类事物, 包含描述其静态属性的数据成员和动作行为的成员函数。用这个类来具体定义一个特定事物就是对象。这种类的对象, 则拥有类所描述的所有静态属性和动作行为。

2.1 类定义的一般思路

(1) 类中先定义私有数据成员, 再定义公有的成员函数, 每一个成员函数用一对{}括起来, 整个类用一对花括号括起来加分号结束。

(2) 类中的成员函数主要包含构造函数, 输出成员函数及功能成员函数, 功能成员函数需要掌握相应类型的一些常用算法, 如:数值求阶乘、数字与数字字符转换、数位分离、求素数、水仙数等, 一维数组的选择排序、二分查找法, 求最大值最小值等, 二维数组的左移和右移、对角线、外围元素等, 字符串的遍历、逆序、插入, 删除和找子串等。另外对于指针成员, 类中还需定义析构函数来释放指针指向的动态空间等。

(3) 主函数中根据构造函数的形参, 准备相应实参, 定义类的对象, 再通过对象来调用类定义的成员函数, 而对象成员函数中所操作的成员就是当前对象的成员。

2.2 不同类型成员类的编程

对于等级考试中类的编程框架, 一般比较固定, 先定义一个类, 在主函数中定义类的对象, 并调用对象的成员函数进行类的测试。类的定义中, 先写私有的数据成员, 再写公有的成员函数。公有成员函数一般包括构造函数, 输出函数和一至两个功能成员函数或辅助函数。功能成员函数或辅助函数因不同的题目和算法而不同;而对于构造函数和输出成员函数, 则可根据其不同类型的数据成员进行如下归纳。

2.2.1 数值类型变量成员

数据类型成员, 是单个变量做数据成员, 构造函数中形参直接为变量赋值, 但不是所有成员变量都能直接由构造函数赋值, 有些成员变量的值需要进行相应运算和操作才能被求值, 这时通常会用功能成员函数来实现相应成员变量的赋值。

2.2.2 数值型数组成员

构造函数一般用循环赋值, 一维的用一重循环给一维数组成员的元素赋值, 二维的用两重循环给二维数组成员的元素赋值。还有一些数组不是直接由构造函数赋值, 而是派生生成的, 利用成员函数给派生数组元素赋值。输出函数, 一维的用一个循环将一维数组成员的元素一行输出, 再换行;二维的外行循环体包含内列循环和换行语句, 将二维数组成员的元素按行输出。

2.2.3 数值型指针成员

构造函数中一般先用new数值类型[数组长度], 返回数组的首地址给指针成员赋值, 再用循环给数组元素赋值。指针成员的赋值也可以在成员函数中做。析构函数用delete[]指针。输出函数利用循环将指针指向的数组元素按行输出。

2.2.4 字符类型数组成员

构造函数用拷贝函数将形参数组的字符串整体拷贝给字符数组成员, 输出函数直接输出字符数组名, 可以将字符数组成员指向的字符串作整体输出。

2.2.5 字符类型指针成员

构造函数一般是先用new char[形参指针指向字符串的字符个数+1], 定义一个动态字符数组, 返回动态字符数组的首地址给字符指针成员, 再将形参指向的字符串用拷贝函数拷到字符指针指向的字符数组, 析构函数用delete[]指针, 释放指针指向的动态内存空间, 输出函数直接输出字符指针成员指向的字符串。

3 总结

通过归纳计算机二级VC++上机考试改错题的各种类型错误, 并对各种类型的数据成员进行类的编程, 可以有针对性地作一些相应的练习来加强上机应考的能力, 本文中所提到的一些策略, 希望能对上机考试的复习起到抛砖引玉之功效。

参考文献

[1]凌翌.计算机等级考试与高校计算机基础教学改革[J].计算机教育, 2010, 11.

[2]李联宁.计算机等级考试的研究与思考[J].计算机教育, 2011, 10.

[3]高校计算机等级考试的教学与思考[J].中国科技信息, 2005, 2.

[4]黄霞.独立学012院计算机文化基础教学改革探索[J].无线互联科技, 2012, 10.

高中信息技术课上机实习的思考 第4篇

学好程序语言,除掌握教材中的基本语句、基本算法、分析好程序结构之外,关键是上机实习。通过上机实习,可以根据出错信息提示反复修改程序并及时处理,直到整个程序运行正常,能出示所需的结果为止。如何进一步提高上机实习效率,笔者通过多年的教学实践,以QBASIC为例做一些探讨。

一、充分的准备工作

上机实习前,要透彻分析书中涉及上机的每一个程序,充分理解程序的功能,明确问题要求和执行步骤,并写出程序的运行结果。与此同时,还应写出当程序几处关键点改动后,会出现的预期结果。只有这样学生才能在实际操作中更深地理解程序的内涵,从而学以致用,起到事半功倍的效果。

例如,在求解的程序段S=1!+2!+3!+…10!,经过算法分析,变量设计,细化一下算法,画出相应的框图,编出对应的程序段(以下编程均以QBASIC为例)

FACT=1:N=10

S=0

FOR I=1 TO N

FACT=FACT*I

S=S+FACT

NEXT I

PRINT N;”!=”;S

在上面这个程序中,I是循环控制变量,S是累加器,FACT是变量。在编程写出结果时,还应考虑当N为100时,FACT=0,S=10,或者S=S+FACT*I,或者S=S+S*I时的结果,以及是否能将30行和40行合并成一行·将这些题目留给学生,让他们做完题目再上机,验证效果会更好。

二、扎实的操作训练

学生做完上机实习作业后,应尽早上机实习。在上机实习中,对于能力较差的学生,应对照源程序录入;对于能力较强的学生,可以提倡不看实习题目录入编写程序的做法。

在实习中,辅导教师除了指导学生完成实习题目外,还可以对学生提出问题,提高学生对程序的理解。例如,求N!的程序,教师当场可以提出为什么S=0,FACT=1,如果不这样取值,结果会是多少·能不能让N取1000·I取值从N到1结果会如何·这些问题有利于提高学生的程序调试能力,加深对算法的掌握。

另外,上机时还可以分成录入程序、校对录入的程序两步,检查无误后,方可运行程序。最后,根据运行结果填写实习报告。

三、关键细节的突破

1.破解屏幕显示的英语及内涵

在上机实习中,经常出现一些英语来提示错误,要求学生能在课余时间里学习常见的屏幕上显示的英语,特别是针对某一程序。例如:QBASIC程序设计在编译运行当中出现“DUPLICATE DEFINATION ”错误信息提示时,说明数组越界,学生能返回编辑状态,对所定义的数组进行删除或修改,可试着用ERASE数组名和DIM数组名(上界)修改,存盘后继续运行;在读数和置数语句READ/DATA为变量赋值时,当数据不足时,出现“OUT OF DATA”错误码提示,学生能返回到QBASIC编辑器中,修改DATA语句,为这条语句添加数据,使添加数据后数据的个数应大于等于变量的个数,运行后就不再出现这条错误提示了。实质上,专业教师在授课当中,也可以将本书相关的屏幕显示英语尽可能多地传授给学生,使它们尽早领会其中的含义,这样有助于提高学生的编程效率。

2.丰富而适量的变式训练

教师在留给学生上机实习题目时,一定要适量。太多会影响学生上机的积极性,发挥不了主观能动性,使学生对上机失去信心。这样不仅不能提高程序编写和调试能力,反而一定程度上影响教学计划的正常进行。太少又不利于加深对知识的掌握。完成上机实习题目后,学生在对程序有较透彻的理解,就可以随修改程序,判断下面可能会出现的结果,然后运行程序。这样,学生能充分领会并运用,读懂一个程序,相应的其他多个程序也就能够理解掌握了,收到融会贯通的最佳效果,同时也提高学生对程序的综合应用能力。例如上面提到的程序,学生可以将FACT开始时赋值为10,然后判断结果;或将30行改成FACT=FACT*10,或者将PRINT打印语句写成PRINT “N!=”,S是结果会是多少等,这些问题都可以提高学生的编程能力。

此外,特别需要强调的是,在上机实习以及例题分析当中,教师可以加入一些新题型,如全国计算机等级考试中的改错题,给出已编好的程序,其中有几处错误,让考生修改。像这种题目不能单一在课上分析、编写,如果不在机器上实习运行,结果是不能理解透彻的。二级考试上机的编程题,给出源程序的一部分,让学生编写剩余的程序,这些方法在教学中都可以采用。

数值分析学习报告 第5篇

班级:11级软工一班

姓名:***

学号: 20117610***

指导老师:***

学习数值分析的心得体会

无意中的一次选择,让我接触了数值分析。

作为这学期的选修课,我从内心深处来讲,数值分析真的有点难。感觉它是在高等数学和线性代数的基础上,又加深了探讨。虽然这节课很难,我学的不是很好,但我依然对它比较感兴趣。下面就具体说说我的学习体会,让那些感兴趣的同学有个参考。

学习数值分析,我们首先得知道一个软件——MATLAB。MATrix LABoratory,即矩阵实验室,是Math work公司推出的一套高效率的数值计算和可视化软件。它是当今科学界最具影响力、也是最具活力的软件,它起源于矩阵运算,并高速发展成计算机语言。它的优点是强大的科学运算、灵活的程序设计流程、高质量的图形可视化与界面、便捷的与其他程序和语言接口。

根据上网搜集到的资料,你就会发现MATLAB有许多优点:

首先,编程简单使用方便。到目前为止,我已经学过C语言,机器语言,JAVA语言,这三个语言相比,我感觉C语言还是很简单的一种编程语言。只要入门就很好掌握,但是想学精一门语言可不是那么容易的。惭愧的说,到目前为止,我依然处于入门阶段,只会编写小的简单的程序,但是班里依然还是有学习好的。

C语言是简单且容易掌握的,但是,MATLAB的矩阵和向量操作功能是其他语言无法比拟的。在MATLAB环境下,数组的操作与数的操作一样简单,基本数据单元是不需要指定维数的,不需要说明数据类型的矩阵,而其数学表达式和运算规则与通常的习惯相同。

其次,函数库可任意扩充。众所周知,C语音有着丰富的函数库,我们可以随时调用,大大方便了程序员的操作。可是作为IT人士的你知道吗,由于MATLAB语言库函数与用户文件的形式相同,用户文件可以像库函数一样随意调用,所以用户可任意扩充库函数。这是不是很方便呢?

接着,语言简单内涵丰富。数值分析所用的语言中,最重要的成分是函数,其一般形式为:Function[a,b,c„„]=fun(d,e,f„„),你也发现了吧,这样的语音是不是很容易掌握呢!Fun是自定义的函数名,只要不与库函数想重,并且符合字符串书写规则即可。

然后是丰富的工具箱。由于MATLAB 的开放性,许多领域的专家都为MATLAB 编写了各种程序工具箱。这些工具箱提供了用户在特别应用领域所需的许多函数,这使得用户不必花大量的时间编写程序就可以直接调用这些函数,达到事半功倍的效果。不过你得提前知道这些工具箱,并且会使用。

最后,我们来说一下MATLAB的运算。利用matlab可以做向量与矩阵的运算,与普通加减运算几乎相似。

矩阵乘法用 “ * ” 符号表示,当A矩阵列数与B矩阵的行数相等时,二者可以进行乘法运算,否则是错误的。如果A或B是标量,则A*B返回标量A(或B)乘上矩阵B(或A)的每一个元素所得的矩阵。

对n×m阶矩阵A和p×q阶矩阵B,A和B的Kronecher乘法运算可定义为:

Kronecker乘法的Matlab命令为C=kron(A,B):例如,在matlab中输入:

A=[12;34];B=[132;246];C=kron(A,B)则程序会给出相应的答案

C =

132264

2464812

3964128

6121881624

这就充分的考验了我们的实际动手能力,当然运用一般的计算方法能算出结果,但相对来说没有用它来运算节省时间,其他算法又很不方便。

上面介绍了Matlab的特点与使用方法,接着我们要说它的程序设计,其实跟c语言相比,它们的程序设计都差不多。

大家都知道,Matlab与其它计算机语言一样,也有控制流语句。而控制流语句本身,可使原本简单地在命令行中运行的一系列命令或函数,组合成为一个整体—程序,从而提高效率。以下是具体的几个例子,看过之后,你会发现,Matlab的控制流语句跟其他计算机真的很相似:

(1)for 循环for循环的通用形式为:for v=expressionstatementsend其中expression 表达式是一个矩阵,因为Matlab中都是矩阵,矩阵的列被一个接一个的赋值到变量v,然后statements语句运行。

(2)while 循环while循环的通用形式为:while v=expressionstatementsend当expression的所有运算为非零值时,statements 语句组将被执行。如果判断条件是向量或矩阵的话,可能需要all 或any函数作为判断条件。

(3)if和break语句通用形式为:if 条件1,命令组1;elesif条件2,命令组2;„„;else命令组k;endbreak%中断执行,用在循环语句内表示跳出循环。

对于数值分析这节课,我的理解是:只要学习并掌握好MATLAB,你就已经成功了。因此说,MATLAB是数学分析的基础。另外,自我感觉这是一个很好的软件,其语言简便,实用性强。但是作为一个做新手,想要学习好这门语言,还是比较困难的。在平常的上机课中,虽然我没有问过老师,但是我向那些学习不错的学生还是交流了许多,比如说,张**,贾**,还有那个皮肤白白的女生。跟他们交流,我确实学到不少有用的东西。但是,毕竟没有他们学得好,总之,在我接触这门语言的这些天,除了会画几个简单的三维图形,其他的还是有待提高。在这个软件中,虽然有help,但大家不要以为有了这个就万事大吉了,反而,从另一个方面也对我们大学生提出了两个要求——充实的课外基础和良好的英语基础。在现代,几乎所有好的软件都是来自国外,假如你不会外语,想学好是非常难的,即使高考中的英语比重降低了,但我们依旧得学好。这样我们才能走得更远。

其实想要学习好一们语言,不能只靠老师,靠朋友,关键是自己。每个人内心深处都是有抵触意识的,不可能把老师的所有都学到。其实,我发现学习数值分析这门课,不光是学习一种语言,一些知识,更重要的是学习一种方法,一种学习软件的方法,还有学习的态度。

《数值分析》课程实验报告 第6篇

学 号:

学 院:

机 电 学 院 日 期:

2015 年 X 月X 日 目 录 实验一 函数插值方法 1 实验二 函数逼近与曲线拟合 5 实验三 数值积分与数值微分 7 实验四 线方程组的直接解法 9 实验五 解线性方程组的迭代法 15 实验六 非线性方程求根 19 实验七 矩阵特征值问题计算 21 实验八 常微分方程初值问题数值解法 24 实验一 函数插值方法 一、问题提出 对于给定的一元函数的n+1个节点值。试用Lagrange公式求其插值多项式或分段二次Lagrange插值多项式。

数据如下:

(1)0.4 0.55 0.65 0.80 0.95 1.05 0.41075 0.57815 0.69675 0.90 1.00 1.25382 求五次Lagrange多项式,和分段三次插值多项式,计算, 的值。(提示:结果为,)(2)1 2 3 4 5 6 7 0.368 0.135 0.050 0.018 0.007 0.002 0.001 试构造Lagrange多项式,计算的,值。(提示:结果为,)二、要求 1、利用Lagrange插值公式 编写出插值多项式程序;

2、给出插值多项式或分段三次插值多项式的表达式;

3、根据节点选取原则,对问题(2)用三点插值或二点插值,其结果如何;

4、对此插值问题用Newton插值多项式其结果如何。Newton插值多项式如下:

其中:

三、目的和意义 1、学会常用的插值方法,求函数的近似表达式,以解决其它实际问题;

2、明确插值多项式和分段插值多项式各自的优缺点;

3、熟悉插值方法的程序编制;

4、如果绘出插值函数的曲线,观察其光滑性。

四、实验步骤(1)0.4 0.55 0.65 0.80 0.95 1.05 0.41075 0.57815 0.69675 0.90 1.00 1.25382 求五次Lagrange多项式,和分段三次插值多项式,计算, 的值。(提示:结果为,)第一步:先在matlab中定义lagran的M文件为拉格朗日函数代码为:

function[c,l]=lagran(x,y)w=length(x);n=w-1;l=zeros(w,w);for k=1:n+1 v=1;for j=1:n+1 if(k~=j)v=conv(v,poly(x(j)))/(x(k)-x(j));end end l(k,:)=v;end c=y*l;end 第二步:然后在matlab命令窗口输入:

>>>> x=[0.4 0.55 0.65 0.80,0.95 1.05];y=[0.41075 0.57815 0.69675 0.90 1.00 1.25382];>> lagran(x,y)回车得到:

ans =121.6264-422.7503 572.5667-377.2549 121.9718-15.0845 由此得出所求拉格朗日多项式为 p(x)=121.6264x5-422.7503x4+572.5667x3-377.2549x2+121.9718x-15.0845 第三步:在编辑窗口输入如下命令:

>> x=[0.4 0.55 0.65 0.80,0.95 1.05];>> y=121.6264*x.^5-422.7503*x.^4+572.5667*x.^3-377.2549*x.^2+121.9718*x-15.0845;>> plot(x,y)命令执行后得到如下图所示图形,然后 >> x=0.596;>> y=121.6264*x.^5-422.7503*x.^4+572.5667*x.^3-377.2549*x.^2+121.9718*x-15.084 y =0.6262 得到f(0.596)=0.6262 同理得到f(0.99)=1.0547(2)1 2 3 4 5 6 7 0.368 0.135 0.050 0.018 0.007 0.002 0.001 试构造Lagrange多项式,和分段三次插值多项式,计算的,值。(提示:结果为,)实验步骤:

第一步定义 function[c,l]=lagran(x,y)w=length(x);n=w-1;l=zeros(w,w);for k=1:n+1 v=1;for j=1:n+1 if(k~=j)v=conv(v,poly(x(j)))/(x(k)-x(j));end end l(k,:)=v;end c=y*l;end 定义完拉格朗日M文件 第二步:然后在matlab命令窗口输入:

>>>> x=[1 2 3 4 5 6 7];y=[0.368 0.135 0.050 0.018 0.007 0.002 0.001];>> lagran(x,y)回车得到:

ans =0.0001-0.0016 0.0186-0.1175 0.4419-0.9683 0.9950 由此得出所求拉格朗日多项式为 p(x)=0.0001x6-0.0016x5+0.0186x4-0.1175x3+0.4419x2-0.9683x+0.9950 第三步:在编辑窗口输入如下命令:

>> x=[1 2 3 4 5 6 7];>> y=0.0001*x.^6-0.0016*x.^5+0.0186*x.^4-0.1175*x.^3+0.4419*x.^2-0.9683*x+0.9950;>> plot(x,y)命令执行后得到如下图所示图形,然后 >> x=1.8;>> y=121.6264*x.^5-422.7503*x.^4+572.5667*x.^3-377.2549*x.^2+121.9718*x-15.084 y =0.1650 得到f(0.596)=0.6262 同理得到f(6.15)=2.3644 五、实验结论 插值是在离散数据的基础上补插连续函数,使得这条连续曲线通过全部给定的离散数据点,它是离散函数逼近的重要方法,利用它可通过函数在有限个点处的取值状况,估算出函数在其他点处的近似值。

实验二 函数逼近与曲线拟合 一、问题提出 从随机的数据中找出其规律性,给出其近似表达式的问题,在生产实践和科学实验中大量存在,通常利用数据的最小二乘法求得拟合曲线。

在某冶炼过程中,根据统计数据的含碳量与时间关系,试求含碳量与时间t的拟合曲线。

t(分)0 5 10 15 20 25 30 35 40 45 50 55 0 1.27 2.16 2.86 3.44 3.87 4.15 4.37 4.51 4.58 4.02 4.64 二、要求 1、用最小二乘法进行曲线拟合;

2、近似解析表达式为;

3、打印出拟合函数,并打印出与的误差,;

4、另外选取一个近似表达式,尝试拟合效果的比较;

5、* 绘制出曲线拟合图。

三、目的和意义 1、掌握曲线拟合的最小二乘法;

2、最小二乘法亦可用于解超定线代数方程组;

3、探索拟合函数的选择与拟合精度间的关系 四、实验步骤:

第一步先写出线性最小二乘法的M文件 function c=lspoly(x,y,m)n=length(x);b=zeros(1:m+1);f=zeros(n,m+1);for k=1:m+1 f(:,k)=x.^(k-1);end a=f'*f;b=f'*y';c=a\b;c=flipud(c);第二步在命令窗口输入:

>>lspoly([0,5,10,15,20,25,30,35,40,45,50,55],[0,1.27,2.16,2.86,3.44,3.87,4.15,4.37,4.51,4.58,4.02,4.64],2)回车得到:

ans =-0.0024 0.2037 0.2305 即所求的拟合曲线为y=-0.0024x2+0.2037x+0.2305 在编辑窗口输入如下命令:

>> x=[0,5,10,15,20,25,30,35,40,45,50,55];>> y=-0.0024*x.^2+0.2037*x+0.2305;>> plot(x,y)命令执行得到如下图 五、实验结论  分析复杂实验数据时,常采用分段曲线拟合方法。利用此方法在段内可以实现最佳逼近,但在段边界上却可能不满足连续性和可导性。分段函数的光滑算法,给出了相应的误差分析.给出了该方法在分段曲线拟合中的应用方法以及凸轮实验数据自动分段拟合。

实验三 数值积分与数值微分 一、问题提出 选用复合梯形公式,复合Simpson公式,Romberg算法,计算(1)(2)(3)(4)二、要求 1、编制数值积分算法的程序;

2、分别用两种算法计算同一个积分,并比较其结果;

3、分别取不同步长,试比较计算结果(如n = 10, 20等);

4、给定精度要求ε,试用变步长算法,确定最佳步长。

三、目的和意义 1、深刻认识数值积分法的意义;

2、明确数值积分精度与步长的关系;

3、根据定积分的计算方法,可以考虑二重积分的计算问题。

四、实验步骤 第一步:编写各种积分的程序 复合梯形程序如下:

function I=TX(x,y)n=length(x);m=length(y);if n~=m error('The lengths of X and Y must be equal');return;end h=(x(n)-x(1))/(n-1);a=[1 2*ones(1,n-2)1];I=h/2*sum(a.*y);复合Simpson程序如下:

function s = simpr1(f,a,b,n)h=(b-a)/(2*n);s1=0;s2=0;for k=1:10 x=a+h*(2*k-1);s1=s1+feval(f,x);end for k=1:(10-1)x=a+h*2*k;s2=s2+feval(f,x);end s=h*(feval(f,a)+feval(f,b)+4*s1+2*s2)/3;end Romberg程序如下:

function I = Romber_yang(fun,a,b,ep)if nargin<4 ep=1e-5;end;m=1;h=b-a;I=h/2*(feval(fun,a)+feval(fun,b));T(1,1)=I;while 1 N=2^(m-1);h=h/2;I=I/2;for i=1:N I=I+h*feval(fun,a+(2*i-1)*h);end T(m+1,1)=I;M=2*N;k=1;while M>1;T(m+1,k+1)=(4^k*T(m+1,k)-T(m,k))/(4^k-1);M=M/2;k=k+1;end if abs(T(k,k)-T(k-1,k-1))

2、对于积分Ι=01sin⁡XXdx,f(0)=1,梯形积分T=0.94607307,辛普森积分S=0.94607308,Romberg积分R=0.94607307。

3、对于积分Ι=01eX4+X2dx,梯形积分T=0.39081248,辛普森积分S=0.39081185,Romberg积分R=0.39081885。

4、对于积分Ι=01ln1+X1+X2dx,梯形积分T=0.27218912,辛普森积分S=0.27219844,Romberg积分R=0.27219827。

五、实验结论,通过本实验学会复合梯形公式,复合Simpson公式,Romberg公式的编程与应用,掌握MATLAB提供的计算积分的各种函数的使用方法。

实验四 线方程组的直接解法 一、问题提出 给出下列几个不同类型的线性方程组,请用适当算法计算其解。

1、设线性方程组  2、设对称正定阵系数阵线方程组  3、三对角形线性方程组 二、要求 1、对上述三个方程组分别利用Gauss顺序消去法与Gauss列主元消去法;

平方根法与改进平方根法;

追赶法求解(选择其一);

2、应用结构程序设计编出通用程序;

3、比较计算结果,分析数值解误差的原因;

4、尽可能利用相应模块输出系数矩阵的三角分解式。

三、目的和意义 1、通过该课题的实验,体会模块化结构程序设计方法的优点;

2、运用所学的计算方法,解决各类线性方程组的直接算法;

3、提高分析和解决问题的能力,做到学以致用;

4、通过三对角形线性方程组的解法,体会稀疏线性方程组解法的特点。

四、实验步骤:

列主元高斯消去法的matlab的M文件程序 function [x,det,index]=Gauss(A,b)% 求线形方程组的列主元Gauss消去法,其中,% A为方程组的系数矩阵;

% b为方程组的右端项;

% x为方程组的解;

% det为系数矩阵A的行列式的值;

% index为指标变量,index=0表示计算失败,index=1表示计算成功。

[n,m]=size(A);nb=length(b);% 当方程组行与列的维数不相等时,停止计算,并输出出错信息。

if n~=m error('The rows and columns of matrix A must be equal!');return;end % 当方程组与右端项的维数不匹配时,停止计算,并输出出错信息 if m~=nb error('The columns of A must be equal the length of b!');return;end % 开始计算,先赋初值 index=1;det=1;x=zeros(n,1);for k=1:n-1 % 选主元 a_max=0;for i=k:n if abs(A(i,k))>a_max a_max=abs(A(i,k));r=i;end end if a_max<1e-10 index=0;return;end % 交换两行 if r>k for j=k:n z=A(k,j);A(k,j)=A(r,j);A(r,j)=z;end z=b(k);b(k)=b(r);b(r)=z;det=-det;end % 消元过程 for i=k+1:n m=A(i,k)/A(k,k);for j=k+1:n A(i,j)=A(i,j)-m*A(k,j);end b(i)=b(i)-m*b(k);end det=det*A(k,k);end det=det*A(n,n);% 回代过程 if abs(A(n,n))<1e-10 index=0;return;end for k=n:-1:1 for j=k+1:n b(k)=b(k)-A(k,j)*x(j);end x(k)=b(k)/A(k,k);end 然后在命令窗口输入 >> A=[4 2-3-1 2 1 0 0 0 0;8 6-5-3 6 5 0 1 0 0;4 2-2-1 3 2-1 0 3 1;0-2 1 5-1 3-1 1 9 4;-4 2 6-1 6 7-3 3 2 3;8 6-8 5 7 17 2 6-3 5;0 2-1 3-4 2 5 3 0 1;16 10-11-9 17 34 2-1 2 2;4 6 2-7 13 9 2 0 12 4;0 0-1 8-3-24-8 6 3-1];>> b=[5 12 3 2 3 46 13 38 19-21];>> gauss(A,b)ans = 1.0000-1.0000 0.0000 1.0000 2.0000 0.0000 3.0000 1.0000-1.0000 2.0000 高斯-约当消去法maltab的M文件程序 function [x,flag]=Gau_Jor(A,b)% 求线形方程组的列主元Gauss-约当法消去法,其中,% A为方程组的系数矩阵;

% b为方程组的右端项;

% x为方程组的解;

[n,m]=size(A);nb=length(b);% 当方程组行与列的维数不相等时,停止计算,并输出出错信息。

if n~=m error('The rows and columns of matrix A must be equal!');return;end % 当方程组与右端项的维数不匹配时,停止计算,并输出出错信息 if m~=nb error('The columns of A must be equal the length of b!');return;end % 开始计算,先赋初值 flag='ok';x=zeros(n,1);for k=1:n % 选主元 max1=0;for i=k:n if abs(A(i,k))>max1 max1=abs(A(i,k));r=i;end end if max1<1e-10 falg='failure';return;end % 交换两行 if r>k for j=k:n z=A(k,j);A(k,j)=A(r,j);A(r,j)=z;end z=b(k);b(k)=b(r);b(r)=z;end % 消元过程 b(k)=b(k)/A(k,k);for j=k+1:n A(k,j)=A(k,j)/A(k,k);end for i=1:n if i~=k for j=k+1:n A(i,j)=A(i,j)-A(i,k)*A(k,j);end b(i)=b(i)-A(i,k)*b(k);end end end % 输出x for i=1:n x(i)=b(i);end 然后保存后在命令窗口输入:

>> A=[4 2-4 0 2 4 0 0;2 2-1-2 1 3 2 0;-4-1 14 1-8-3 5 6;0-2 1 6-1-4-3 3;2 1-8-1 22 4-10-3;4 3-3-4 4 11 1-4;0 2 5-3-10 1 14 2;0 0 6 3-3-4 2 19];>> b=[0-6 20 23 9-22-15 45];>> Gau_Jor(A,b)ans = 121.1481-140.1127 29.7515-60.1528 10.9120-26.7963 5.4259-2.0185 五、实验结论 用LU法,调用matlab中的函数lu中,L往往不是一个下三角,但可以直接计算不用它的结果来计算,不用进行行变换。如果进行行变b也要变,这样会很麻烦。

实验五 解线性方程组的迭代法 一、问题提出 对实验四所列目的和意义的线性方程组,试分别选用Jacobi 迭代法,Gauss-Seidel迭代法和SOR方法计算其解。

二、要求 1、体会迭代法求解线性方程组,并能与消去法做以比较;

2、分别对不同精度要求,如由迭代次数体会该迭代法的收敛快慢;

3、对方程组2,3使用SOR方法时,选取松弛因子ω=0.8,0.9,1,1.1,1.2等,试看对算法收敛性的影响,并能找出你所选用的松弛因子的最佳者;

4、给出各种算法的设计程序和计算结果。

三、目的和意义 1、通过上机计算体会迭代法求解线性方程组的特点,并能和消去法比较;

2、运用所学的迭代法算法,解决各类线性方程组,编出算法程序;

3、体会上机计算时,终止步骤或k >(给予的迭代次数),对迭代法敛散性的意义;

4、体会初始解,松弛因子的选取,对计算结果的影响。

四、实验步骤 第一步编写实验所需的Jacobi迭代法,Gauss-Seidel迭代法,SOR迭代法的程序。

Jacobi迭代法:

function [x,k,index]=J(A,b,ep,itmax)if nargin<4 itmax=100;end if nargin<3 ep=1e-5;end n=length(A);k=0;x=zeros(n,1);y=zeros(n,1);index=1;while 1 for i=1:n y(i)=b(i);for j=1:n if j~=i y(i)=y(i)-A(i,j)*x(j);end end if abs(A(i,i))<1e-10|k==itmax index=0;return;end y(i)=y(i)/A(i,i);end if norm(y-x,inf)

function [x,k,index]=G(A,b,ep,itmax)if nargin<4 itmax=100;end if nargin<3 ep=1e-5;end n=length(A);k=0;x=zeros(n,1);y=zeros(n,1);index=1;while 1 y=x;for i=1:n z=b(i);for j=1:n if j~=i z=z-A(i,j)*x(j);end end if abs(A(i,i))<1e-10|k==itmax index=0;return;end z=z/A(i,i);x(i)=z;end if norm(y-x,inf)

function [x,k,index]=SOR(A,b,ep,w,itmax)if nargin<5 itmax=100;end if nargin<4 w=1;end if nargin<3 ep=1e-5;end n=length(A);k=0;x=zeros(n,1);y=zeros(n,1);index=1;while 1 y=x;for i=1:n z=b(i);for j=1:n if j~=i z=z-A(i,j)*x(j);end end if abs(A(i,i))<1e-10|k==itmax index=0;return;end z=z/A(i,i);x(i)=(1-w)*x(i)+w*z;end if norm(y-x,inf)

1、设线性方程组  2、设对称正定阵系数阵线方程组 3、三对角形线性方程组 五、实验结论 迭代法是解线性方程组的一个重要的实用方法,特别适用于求解在实际中大量出现的,系数矩阵为稀疏阵的大型线性方程组。通过此次实验学会了Jacobi迭代法,Gauss-Seidel迭代法,SOR迭代法的程序编写,并掌握了它们各自的优缺点及其适用条件。

实验六 非线性方程求根 一、问题提出 设方程有三个实根 现采用下面六种不同计算格式,求 f(x)=0的根或 1、2、3、4、5、6、二、要求 1、编制一个程序进行运算,最后打印出每种迭代格式的敛散情况;

2、用事后误差估计来控制迭代次数,并且打印出迭代的次数;

3、初始值的选取对迭代收敛有何影响;

4、分析迭代收敛和发散的原因。

三、目的和意义 1、通过实验进一步了解方程求根的算法;

2、认识选择计算格式的重要性;

3、掌握迭代算法和精度控制;

4、明确迭代收敛性与初值选取的关系。

四、实验步骤 第一步:编写实验所需的程序。

function [x_star,index,it]=DD(fun,x,ep,itmax)if nargin<4 itmax=100;end if nargin<3 ep=1e-5;end index=0;k=1;while k

1、,x1=0,x2=0。

2、,x1=无穷大,x2=-0.3473。

3、,x1=1.8794,x2=1.8794。

4、,x1=-0.3473,x2=-0.3473.。

5、,x1=1.8794,x2=1.8794。

6、,x1=1.8794,x2=-0.3473。

五、实验结论 对于非线性方程,求它的解析解有时候是很困难的,但采用数值方法可以很容易地求它的近似解。此次实验就是采用迭代法求非线性方程的根。对于一个非线性方程,选用不同的迭代形式,因为其收敛程度不一样,造成其效率与精确度有很大的差别。

实验七 矩阵特征值问题计算 一、问题提出 利用冪法或反冪法,求方阵的按模最大或按模最小特征值及其对应的特征向量。

设矩阵A的特征分布为:

且 试求下列矩阵之一(1)求,及 取 结果(2)求及 取 结果:

(3)求及 取 结果(4)取 这是一个收敛很慢的例子,迭代次才达到 结果(5)有一个近似特征值,试用幂法求对应的特征向量,并改进特征值(原点平移法)。

取 结果 二、要求 1、掌握冪法或反冪法求矩阵部分特征值的算法与程序设计;

2、会用原点平移法改进算法,加速收敛;

对矩阵B=A-PI取不同的P值,试求其效果;

3、试取不同的初始向量,观察对结果的影响;

4、对矩阵特征值的其它分布,如且如何计算。

三、目的和意义 1、求矩阵的部分特征值问题具有重要实际意义,如求矩阵谱半径,稳定性问题往往归于求矩阵按模最小特征值;

2、进一步掌握冪法、反冪法及原点平移加速法的程序设计技巧;

3、问题中的题(5),反应了利用原点平移的反冪法可求矩阵的任何特征值及其特征向量。

四、实验步骤 第一步:写出实验所需的幂法求最大特征值及反幂法求最小特征值的程序。

幂法程序:

function [m,u,index]=TZ(A,ep,itmax)if nargin<3 itmax=100;end if nargin<2 ep=1e-5;end n=length(A);u=ones(n,1);index=0;k=0;m1=0;while k<=itmax v=A*u;[vmax,i]=max(abs(v));m=v(i);u=v/m;if abs(m-m1)

function [m,u,index]=FTZ(A,ep,itmax)if nargin<3 itmax=100;end if nargin<2 ep=1e-5;end n=length(A);u=ones(n,1);index=0;k=0;m1=0;invA=inv(A);while k<=itmax v=invA*u;[vmax,i]=max(abs(v));m=v(i);u=v/m;if abs(m-m1)

λ3=3.4723,x3=(1.0000 0.5229 0.2422)T。,λ1=21.3053,X1=(0.8724 0.5401 0.9973 0.5644 0.4972 1.0000)T;

λ6=1.6214。

五、实验结论 求n阶方阵A的特征值和特征向量,也是实际中常常碰到的问题。通过此次实验掌握了用幂法和反幂法求一个方阵的最大特征值和特征向量,绝对值最小的特征值和特征向量。

实验八 常微分方程初值问题数值解法 一、问题提出 科学计算中经常遇到微分方程(组)初值问题,需要利用Euler法,改进Euler法,Rung-Kutta方法求其数值解,诸如以下问题:

(1)分别取h=0.1,0.2,0.4时数值解。

初值问题的精确解。

(2)用r=3的Adams显式和预-校式求解 取步长h=0.1,用四阶标准R-K方法求值。

(3)用改进Euler法或四阶标准R-K方法求解 取步长0.01,计算数值解,参考结果。

(4)利用四阶标准R-K方法求二阶方程初值问题的数值解(I)(II)(III)(IV) 二、要求 1、根据初值问题数值算法,分别选择二个初值问题编程计算;

2、试分别取不同步长,考察某节点处数值解的误差变化情况;

3、试用不同算法求解某初值问题,结果有何异常;

4、分析各个算法的优缺点。

三、目的和意义 1、熟悉各种初值问题的算法,编出算法程序;

2、明确各种算法的精度与所选步长有密切关系;

3、通过计算更加了解各种算法的优越性。

四、实验步骤 function [x,y]=euler(fun,x0,xfinal,y0,n);if nargin<5,n=50;end h=(xfinal-x0)/n;x(1)=x0;y(1)=y0;for i=1:n;x(i+1)=x(i)+h;y(i+1)=y(i)+h*feval(fun,x(i),y(i));end 实验程序及分析(Ⅰ)(1)、算法程序 function E =Euler_1(fun,x0,y0,xN,N)% Euler向前公式,其中 % fun为一阶微分方程的函数 % x0,y0为初始条件 % xN为取值范围的一个端点 % h为区间步长 % N为区间个数 % x为Xn构成的向量 % y为yn构成的向量 x=zeros(1,N+1);y=zeros(1,N+1);x(1)=x0;y(1)=y0;h=(xN-x0)/N;for n=1:N x(n+1)=x(n)+h;y(n+1)=y(n)+h*feval(fun,x(n),y(n));end T=[x',y'] function z=f(x,y)z=4*x/y-x*y;(2)、运行程序 >> Euler_1('f',0,3,2,20)结果 :

上一篇:以雪为话题的优秀作文450字下一篇:做微商晚安心语正能量句子