数值计算方法实验5

合集下载

《数值计算方法》数值积分实验报告

《数值计算方法》数值积分实验报告

《数值计算方法》数值积分实验报告y=zeros(1,N+1);%y为预分配inte=zeros(1,N);%与分配每个区间的积分值for i=0:Ny(i+1)=double(subs(fun,(a+i*h)));%每一个y值endfor j=0:N-1inte(j+1)=(y(j+1)+y(j+2))*h/2;%计算积分endInteg=sum(inte);输出结果:(2)编写辛普森法数值积分的积分函数和牛顿-科特斯数值积分的积分函数,计算积分并比较不同方法的结果。

辛普森法数值积分:function res=simpson(fun,n,a,b)format long;if b<ac=b;b=a;a=c;endh=(b-a)/n;d=fun(a);for i=a+h:h:b-hd=d+(2*fun(i));endfor i=a+h/2:h:b-h/2d=d+(4*fun(i))endd=d+fun(b);res=(d*h/6);end输出结果:牛顿-科特斯数值积分:function y=f(x)y=sin(x);function Cn = Cn(a,b,n)format longh = (b-a)/n;sum1 = 0;sum2 = 0;for i = 0:n-1sum1 = sum1 +32*f(a+(i+1/4).*h)+12*f(a+(i+1/2).*h)+32*f(a+(i+3/4).*h); endfor j = 1:n-1sum2 = sum2 + 14*f(a+j.*h);endCn = h/90*(7*f(a)+sum1+sum2+7*f(b));输出结果:从上述结果可以看出这两个数值积分的结果差不多。

结论分析与心得体会(出现的问题及解决方案):通过本次实验我学会了复合梯形公式法、辛普森数值积分方法和牛顿-科特斯数值积分方法并实现积分的计算。

而且辛普森数值积分方法和牛顿-科特斯数值积分方法运行出来的结果差不多,但是如果精确值越高,这俩个的结果就会显示出较大的差异。

数值计算实验报告

数值计算实验报告

本科实验报告课程名称:计算机数值方法实验项目:方程求根、线性方程组的直接解法、线性方程组的迭代解法、代数插值实验地点:专业班级:学生姓名:指导教师:实验一方程求根}五、实验结果与分析二分法实验结果迭代法实验结果结果分析:本题目求根区间为[1,2],精度满足|x*-x n|<0.5×10-5,故二分法用公式|x*-x n|<(b-a)/ 2n,可求得二分次数并输出每次结果。

对迭代法首先要求建立迭代格式。

迭代格式经计算已输入程序之中,故直接给初值便可利用迭代法求出精度下的解。

六、讨论、心得每次的实验都是对已学过的理论知识的一种实战。

通过本次实验,我将二分法与迭代法的思路清晰化并且将其变成计算机设计语言编写出来,运用到了实际解决问题上感觉很好。

我自认为本次跟其他同学比较的优点在于我在二分法实现的时候首先利用换底公式将需要的二分次输输出,如此便很清晰明了的知道接下来每一步的意思。

迭代法给我的感觉便是高度的便捷简化,仅用几行代码便可以同样解决问题。

相比较二分法来说,我更喜欢迭代的思路。

实验二线性方程组的直接解法for(k=n-2;k>=0;k--){sum=0;for(j=k+1;j<n;j++)sum=sum+a[k][j]*x[j];x[k]=(b[k]-sum)/a[k][k];}for(i=0;i<n;i++)printf("x[%d]=%f ",i,x[i]); printf("\n"); //输出解向量x}五、实验结果与分析结果结果分析:如上图所示,输入线性方程组元数n=3,则会要求输入3*3的系数矩阵A与向量b构成的增广矩阵。

根据算法需要将系数矩阵A消元成上三角矩阵。

随后根据矩阵乘法公式变形做对应的回代。

六、讨论、心得本次实验在编写时候感觉还好,感觉将思路变成了程序设计语言,得以实现题目的要求。

但是在运行以及结果分析的时候,感觉到了本实验的一些不足之处:就是我的实验虽然可以实现不同的元数的线性方程组求解,但是缺少了分析初始条件——主元素不能为零。

数值计算方法实验报告

数值计算方法实验报告

数值计算方法实验报告一、实验介绍本次实验是关于数值计算方法的实验,旨在通过计算机模拟的方法,实现对于数值计算方法的掌握。

本次实验主要涉及到的内容包括数值微积分、线性方程组的求解、插值与拟合、常微分方程的数值解等。

二、实验内容1. 数值微积分数值微积分是通过计算机模拟的方法,实现对于微积分中的积分运算的近似求解。

本次实验中,我们将会使用梯形公式和辛普森公式对于一定区间上的函数进行积分求解,并比较不同公式的计算误差。

2. 线性方程组的求解线性方程组求解是数值计算领域中的重要内容。

本次实验中,我们将会使用高斯消元法、LU分解法等方法对于给定的线性方程组进行求解,并通过比较不同方法的计算效率和精度,进一步了解不同方法的优缺点。

3. 插值与拟合插值与拟合是数值计算中的另一个重要内容。

本次实验中,我们将会使用拉格朗日插值法和牛顿插值法对于给定的数据进行插值求解,并使用最小二乘法对于给定的函数进行拟合求解。

4. 常微分方程的数值解常微分方程的数值解是数值计算中的难点之一。

本次实验中,我们将会使用欧拉法和龙格-库塔法等方法对于给定的常微分方程进行数值解的求解,并比较不同方法的计算精度和效率。

三、实验结果通过本次实验,我们进一步加深了对于数值计算方法的理解和掌握。

在数值微积分方面,我们发现梯形公式和辛普森公式都能够有效地求解积分,但是辛普森公式的计算精度更高。

在线性方程组求解方面,我们发现LU分解法相对于高斯消元法具有更高的计算效率和更好的数值精度。

在插值与拟合方面,我们发现拉格朗日插值法和牛顿插值法都能够有效地进行插值求解,而最小二乘法则可以更好地进行函数拟合求解。

在常微分方程的数值解方面,我们发现欧拉法和龙格-库塔法都能够有效地进行数值解的求解,但是龙格-库塔法的数值精度更高。

四、实验总结本次实验通过对于数值计算方法的模拟实现,进一步加深了我们对于数值计算方法的理解和掌握。

在实验过程中,我们了解了数值微积分、线性方程组的求解、插值与拟合、常微分方程的数值解等多个方面的内容,在实践中进一步明确了不同方法的特点和优缺点,并可以通过比较不同方法的计算效率和数值精度来选择合适的数值计算方法。

数值计算方法上机实验报告

数值计算方法上机实验报告

数值计算方法上机实验报告
一、实验目的
本次实验的主要目的是熟悉和掌握数值计算方法,学习梯度下降法的
原理和实际应用,熟悉Python语言的编程基础知识,掌握Python语言的
基本语法。

二、设计思路
本次实验主要使用的python语言,利用python下的numpy,matplotlib这两个工具,来实现数值计算和可视化的任务。

1. 首先了解numpy的基本使用方法,学习numpy的矩阵操作,以及numpy提供的常见算法,如矩阵分解、特征值分解等。

2. 在了解numpy的基本操作后,可以学习matplotlib库中的可视化
技术,掌握如何将生成的数据以图表的形式展示出来。

3. 接下来就是要学习梯度下降法,首先了解梯度下降法的主要原理,以及具体的实际应用,用python实现梯度下降法给出的算法框架,最终
可以达到所期望的优化结果。

三、实验步骤
1. 熟悉Python语言的基本语法。

首先是熟悉Python语言的基本语法,学习如何使用Python实现变量
定义,控制语句,函数定义,类使用,以及面向对象编程的基本概念。

2. 学习numpy库的使用方法。

其次是学习numpy库的使用方法,学习如何使用numpy库构建矩阵,学习numpy库的向量,矩阵操作,以及numpy库提供的常见算法,如矩阵分解,特征值分解等。

3. 学习matplotlib库的使用方法。

数值计算方法实验报告例

数值计算方法实验报告例

实验报告一、实验目的二、实验内容三、实验环境四.实验方法五、实验过程1实验步骤2 关键代码及其解释3 调试过程六、实验总结1.遇到的问题及解决过程2.产生的错误及原因分析3.体会和收获。

七、程序源代码:八、教师评语实验报告一.试验目的:练习用数值方法求解给定的非线性方程。

二.实验内容:求解人口方程: )1(5.43e 1004.156-+=λλλe要求误差小于410-。

三.实验环境:PC 计算机,FORTRAN 、C 、C ++、VB 任选一种。

四.实验方法:牛顿法牛顿法简述:牛顿法是一种特殊的迭代法,其迭代公式为:,2,1,0,)()(1='-=+k x f x f x x k k k k ,当数列{}k x 收敛时,其极限值x 即为方程的解。

定理:给定方程],[,0)(b a x x f ∈=1)设0)()(<b f a f ;2))(x f ''在],[b a 上不变号,且],[,0)(b a x x f ∈≠'; 3)选取],[0b a x ∈,满足0)()(00>''x f x f ;则牛顿法产生的序列{}k x 收敛于0)(=x f 在],[b a 内的唯一解x 。

五.实验过程:1.编程: 用C 语言编出牛顿法的源程序。

2. 开机, 打开C 语言编译程序,键入所编程序源代码.3. 调试程序, 修改错误至能正确运行.六.实验总结:(1)牛顿法收敛速度快,但初值不容易确定,往往由于初值取得不当而使迭代不收敛或收敛慢,但若能保证)()(1+>K K x f x f (称为下山条件),则有可能收敛。

把新的近似值看作初值的话会比原来的取得好,有可能落入局部收敛的邻域。

(2)牛顿法要求)(x f '在x 附近不为零。

亦即x 只能是单根, 不能求重根。

可用重根加速收敛法求重根。

(3)牛顿法的每一步迭代中,都要计算一次导数值,若计算)(x f '比计算函数的近似值要麻烦的多。

matlab计算方法实验报告5(数值积分)

matlab计算方法实验报告5(数值积分)
成绩考核
算法分析与源程序( 50%),实验结果及分析(30%),实验报告(20%)
指导老师签名:
t1=t2;s1=s2;
elseif k>=3
r1=r2;
c2=s2+(1/15)*(s2-s1);
r2=c2+(1/63)*(c2-c1);
k=k+1;h=h/2;
t1=t2;s1=s2;
c1=c2;
end
end
实验结果与分析
函数xex在区间[1,2]对x进行积分求值,要求误差为0.5*10-7,并与精确值进行比较。(精确值:7.38905609893065)
计算方法实验报告(5)学生姓名杨邦学号指导教师
吴明芬
实验时间
2014.4.16
地点
综合实验大楼203
实验题目
数值积分方法
实验目的
利用复化梯形、辛普森公式和龙贝格数值积分公式计算定积分的近似植。
实验内容
梯形、辛普森、柯特斯法及其Matlab实现;
变步长的梯形、辛普森、柯特斯法及其Matlab实现。
题目由同学从学习材料中任意选两题
梯形:>> jifeng_tixing(1,2,7019,fun)
ans =7.38905612723022
辛普生:>> jifeng_xingpu(1,2,24,fun)
ans =7.38905612621471
龙贝格:>> jifeng_long(fun,1,2,10e-7)
ans =7.38905609893079








梯形:function y=jifeng_tixing(a,b,n,fun)

数值计算实验指导书

数值计算实验指导书

数值计算方法(一)实验指导书一、基本情况·课程名称:数值计算方法(一)·课程编号:01024002, 01025002, 01825059, 01826059·课程学时:授课 50学时,上机实验 20学时·适用专业:信息与计算科学、数学与应用数学、数学物理力学综合班等理科本科生·使用教材:《数值计算方法(一)》上海大学数学系编·数值实验:1)Lagrange插值多项式2)Newton差商插值法3)Aitken逐次线性插值法4)等距节点情况下的Newton差分插值法5)两点三次Hermite插值法6)Lagrange插值余项的极小化法求近似最佳一致逼近多项式7)Newton-cotes型求积公式8)Romberg算法9)Gauss型求积公式10)Remes算法(机动)·实验环境:装有FORTRAN 4.0以上系统或C语言系统的微型计算机·实验要求:在上机实验时完成相应实验的算法的程序编制,并上机运行,学会应用这些算法于实际问题,以便对算法有更进一步的认识和理解。

考察和体会数值计算中出现的一些问题和现象:误差的估计,算法的稳定性、收敛性、收敛速度以及迭代初值对收敛的影响等。

二、实验内容(一)实验一:Lagrange插值多项式1、目的:学会Lagrange插值算法,并应用算法于实际问题;观察Lagrange插值的龙格现象。

2、例题:1)取正弦函数x x f sin )(=;2)取函数 ]5,5[,15)(2-∈+=x xx f3、要求:要求用键盘输入,程序具有通用性.1)以0.32,0.34,0.36为节点,分别用线性插值和抛物插值求正弦函数在0.3367处的近似值;线性插值场合,比较内插与外插.2)分别取节点数 20,10,5===n n n 的等距节点为插值点,构造出 )(x L n ,并画出其图形,与 )(x f 的图形比较;观察在5±=x 附近的现象,写出分析结果。

《计算方法》实验报告材料

《计算方法》实验报告材料

《计算方法》实验报告材料引言:计算方法是一门应用数学的基础课程,通过实验教学,能够帮助学生更好地理解和掌握各种数值计算的方法和技巧。

本次实验旨在通过编程实现一些常用的数值计算方法,并通过对比分析实验结果,验证方法的有效性和可行性。

实验一:插值算法插值算法是利用已知的数据点,构建一个连续函数以逼近数据的方法。

本次实验中使用的插值算法为拉格朗日插值和牛顿插值。

通过编程实现这两种算法,并选取若干个数据点进行测试,得到插值函数的结果。

通过比较原始数据和插值函数的结果,可以验证插值算法的准确性和可行性。

实验二:方程求解方程求解是数值计算中的一个重要问题,求解非线性方程、线性方程组和特征值问题等都需要采用相应的迭代方法。

本次实验中,我们实现了常用的牛顿迭代法和二分法,并选择数学问题进行求解。

通过比较实验结果和理论值的误差,可以验证求解方法的精确性和可行性。

实验三:数值积分数值积分是利用数值方法对定积分进行近似求解的过程。

本次实验中,我们实现了矩形法、梯形法和辛普森法等常用的数值积分方法,并选取若干函数进行数值积分的计算。

通过比较数值积分的结果和解析解或数值解的误差,可以验证数值积分方法的准确性和可行性。

实验四:常微分方程求解常微分方程求解是数值计算中的一个重要问题,常常涉及到物理、化学、生物等科学领域。

本次实验中,我们实现了欧拉方法和龙格-库塔方法等常用的常微分方程求解算法,并选取若干常微分方程进行求解。

通过比较数值解和解析解或数值解的误差,可以验证常微分方程求解方法的精确性和可行性。

实验五:线性方程组求解线性方程组求解是数值计算中的一个重要问题,常常涉及到矩阵的运算和迭代方法。

本次实验中,我们实现了高斯消元法和追赶法等常用的线性方程组求解算法,并选择一些矩阵进行求解。

通过比较数值解和解析解或数值解的误差,可以验证线性方程组求解方法的精确性和可行性。

结论:通过本次实验,我们掌握了插值算法、方程求解、数值积分、常微分方程求解和线性方程组求解等常用的计算方法。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

1
实验报告
学院(系)名称:
姓名 学号 专业
班级 实验项目 线性方程组的解法
课程名称 数值计算方法 课程代码
实验时间 实验地点
批改意见:
成绩

教师签字:
实验目的:
编写列选主元高斯消去法、雅可比和高斯-塞德尔迭代法的算法程序,上机调试通过。
实验环境:
硬件环境:IBM-PC或兼容机
软件环境:Windows操作系统
编程语言:C语言
实验内容:
一. 用列主元高斯消去法求解下列线性方程组

二. 用高斯-塞德尔迭代方法求解线性方程组
要求误差为
实验步骤:
一.列主元高斯消去法
高斯消去法分为消元过程与回代过程,消元过程将所给方程组加工成上三角形方程组,再经回代
过程求解

列选主元法
1. 列选主元是当消元到第k步时,从k列的akk以下(包括akk)的各元素中选出绝对值最大的,
然后通过行交换将其交换到akk的位置上。交换系数矩阵中的两行(包括常数项),只相当于两个方
程的位置交换了,因此列选主元不影响求解的结果
2. 列选主元比全选主元的运算量小,但一般可以满足精度要求,所以列选主元更常被采用
3. 在列主元消去法中,未知数仍然是顺序地消去的,但是把各方程中要消去的那个未知数的系
数按绝对值最大值作为主元素,然后用顺序消去法的公式求解
列主元高斯消去法的流程图:

主程序部分 列选主元部分


52262342321321321xxx
xxx
xxx



7910431017210424321321321xxx
xxx
xxx

51021

2

二.高斯-塞德尔迭代法
高斯-塞德尔迭代法的思想
1. 迭代收敛时,新值xi (k+1) 比老值xi (k) 更准确
2. 算出新值xi (k+1)后,用新值xi (k+1)代替用于后面计算的老值xi (k) ,使每次迭代计算,都
是利用“最新求解信息”
3. 这样,必然会使迭代求解的速度加快
高斯-塞德尔(Seidel)迭代公式

),,2,1(,)(11)(11)1()1(nixaxabax
nijkjijijkjijiiiki



高斯-塞德尔迭代的流程图

实验结果:
一. 列主元消去法
输入各个数据,最终使用列选主元法,得到结果为:
x1=x2=x3=1
二. 高斯-赛德尔迭代法
输入各个数据,输出每一步迭代数据,最终结果为:x1=0.285716,x2=2.142855,x3=-3.285712

附录(源程序及运行结果)
一. 列主元高斯消去法
#include
#include
void print(double a[3][3],int n,double b[3]){
printf("输出矩阵:\n");
for(int i=0;ifor(int j=0;jprintf("%lf ",a[i][j]);
printf("%lf",b[i]);
printf("\n");
}
}
void liezhuyuan(double a[3][3],double b[3],int k,int n){
double d,t;
int l=k,i=k+1;
d=a[k][k];
while(i!=n){
if(fabs(a[i][k])>fabs(d)){
d=a[i][k];
l=i;
}
i++;
}
printf("选出主元:%lf\n",d);
if(d==0)
printf("矩阵奇异!\n");
else if(l!=k){
for(int j=k;jt=a[l][j]; a[l][j]=a[k][j]; a[k][j]=t;
}
t=b[l]; b[l]=b[k]; b[k]=t;
}
}
void main(){
double a[3][3]={2,1,1,1,3,2,1,2,2},
b[3]={4,6,5};
int k=0,i,j,n=3;
3

print(a,n,b); while(k!=n-1){ liezhuyuan(a,b,k,n); for(i=k+1;i=0;i--){ for(j=i+1;j #include void main(){ double a[3][3]={4,-2,-4,-2,17,10,4,10,9}, b[3]={10,3,-7},x[3]={0,0,0},t,s,e,e0=0.000005;
int n=3,i;
do{
e=0;
i=0;
do{
t=x[i];
s=0;
for(int j=0;jif(j!=i)
s=s+a[i][j]*x[j];
x[i]=(b[i]-s)/a[i][i];
if(fabs(x[i]-t>e))
e=fabs(x[i]-t);
i++;
}while(i!=n);
for(i=0;iprintf("%lf ",x[i]);
printf("\n");
}while(e>e0);
}
运行结果:

相关文档
最新文档