完整word版数值分析课程设计含代码.docx
- 文档编号:26209603
- 上传时间:2023-06-17
- 格式:DOCX
- 页数:67
- 大小:131.19KB
完整word版数值分析课程设计含代码.docx
《完整word版数值分析课程设计含代码.docx》由会员分享,可在线阅读,更多相关《完整word版数值分析课程设计含代码.docx(67页珍藏版)》请在冰豆网上搜索。
完整word版数值分析课程设计含代码
成绩评定表
学生姓名班级学号
专业信息与计算课程设计题目数值分析算法案
科学例
评
语
组长签字:
成绩
日期20年月日
I
课程设计任务书
学院理学院专业信息与计算科学
学生姓名班级学号
课程设计题目数值分析算法案例
实践教学要求与任务:
要求:
格式以学校毕业论文格式要求为准,不准粘贴图片,尤其公式。
对每个试验,要求有:
实验基本原理,实验目的,实验内容及数据来源和实验结论。
以班级为单位统一装订封皮。
6月25日,十八周的周二交论文
每人至少四个实验,最少15页
任务(实验项目):
线性方程组数值解法参考题目:
(1)列主元Gauss消去法
(2)LU分解法
插值法和数据拟合参考题目:
(1)Lagrange插值
(2)Newton插值(3)最小二乘拟合
数值积分参考题目:
(1)复化Simpon积分
(2)变步长的梯形积分公式(3)龙贝格求积公式
常微分方程数值解Runge-Kutta方法
数值方法实际应用用数值方法解决实际问题(自选)
工作计划与进度安排:
线性方程组数值解法(4学时)
插值法和数据拟合(4学时)
数值积分(4学时)
常微分方程数值解(4学时)
数值方法实际应用(4学时)
答辩(4学时)
指导教师:
专业负责人:
学院教学副院长:
201年月日201年月日201年月日
II
摘要
实验方法与理论方法是推动科学技术发展的两大基本方法,但有局限性。
许多研究对象,由于空间或时间的限制,既不可能用理论精确描述,也不能用实验手段实现。
数值模拟或称为科学计算突破了实验和理论科学的局限,在科技发展中起到越来越重要的作用。
可以认为,科学计算已于实验、理论一起成为科学方法上不可或缺的三个主要手段。
计算数学的研究是科学计算的主要组成部分,而数值分析则是计算数学的核
心。
数值计算是研究使用计算机来解决各种数学问题的近似计算方法与理论,其任务是提供在计算机上可解的、理论可靠的、计算复杂性低的各种常用算法。
数值分析的主要内容:
1)、数值代数:
求解线性和非线性方程组的解,分直接方法和间接方法两大类;
2)、插值、曲线拟合和数值逼近;
3)、数值微分和数值积分;
4)、常微分和偏微分方程数值解法。
本文主要通过Matlab软件,对数值分析中的一些问题进行求解,如列主元Gauss消去法,Lagrange插值多项式,复化Simpson公式,Runge-Kutta方法以及数值分析在实际问题中的应用,并在求解的过程中更加熟识这门课程的主要内容,以及加强对课程知识的掌握。
在学习与设计计算方法时,从数学理论角度,
学会分析方法的误差、收敛性和稳定性,保证计算方法的准确性;从实际应用的角度出发,掌握计算方法的结构与流程,能够把计算方法转换为可在计算机上直接处理的程序,保证算法的可用性。
关键词:
列主元Gauss消去法;Lagrange插值;复化Simpson公式;Runge-Kutta
III
实验一列主元Gauss消去法1
1.1实验目的1
1.2基本原理1
1.3实验内容2
1.4实验结论3
实验二拉格朗日插值多项式4
2.1实验目的4
2.2基本原理4
2.3实验内容4
2.4实验结论9
实验三复化Simpson求积公式10
3.1实验目的10
3.2基本原理10
3.3实验内容10
3.4实验结论12
实验四龙格-库塔(Runge-Kutta)方法13
4.1实验目的13
4.2基本原理13
4.3实验内容14
4.4实验结论15
实验五数值方法实际应用16
5.1实验目的16
5.2基本原理16
5.3实验内容16
5.4实验结论22
参考文献23
IV
实验一列主元Gauss消去法
1.1实验目的
1)理解列主元消去法的原理;
2)熟悉列主元消去法的计算步骤,能用代码编写;
3)解决实际问题。
1.2基本原理
在顺序Gauss消去法中,必须要求akk(k)
0(k1,2,,n);否则无法进行计算。
即使akk(k)
0,但其绝对值akk(k)很小,由于舍入误差的影响,也可能会引起很大
的误差,从而使上述方法失效。
为了使消元过程中减小舍入误差和不至于中断,
可以按照不同的自然顺序进行消元。
在第k步消元时,增广矩阵为
a11
(1)
a12
(1)
a1(
k1)
1
a1(1k
)
a22
(2)
a2(2k)1
a2(2k)
A
(k)
B
(k)
(k1)
(k1)
ak
1k
1
ak1k
(k)
akk
a1(1n)
a2(2n)
(k1)
a
akn(k)
ann(k)
b1
(1)
b2
(2)
bk(k
1
1)
(1.1)
bk(k)
bn(k)
不一定选取akk(k1)作为主元,而从同列akk(k1),ak(k
1,k1),
ank(k1)
中选取绝对值最大的作
为主元素,即
ar(kk1)
maxaik(k1)
(1.2)
kin
若ark(k)
0,此时矩阵不可逆,方程的解不确定,则停止计算;否则,当r>k
时,则其增广矩阵中交换第
k行和第r行,即
akj(k)
arj(k)
jk,k1,
n
bk(k)
br(k)
(1.3)
使ark(k)成为主元。
然后再按Gauss消去法进行消元运算。
于是就得到列主元Gauss消去法。
1
1.3实验内容
1.3.1程序来源
首先建立一个gaussMethod.m的文件,用来实现列主元的消去方法。
文件内
容如下:
functionx=gaussMethod(A,b)
%高斯列主元消去法,要求系数矩阵非奇异的
n=size(A,1);
ifabs(det(A))<=1e-8
error('系数矩阵是奇异的');return;
end
fork=1:
n
ak=max(abs(A(k:
n,k)));
index=find(A(:
k)==ak);
iflength(index)==0
index=find(A(:
k)==-ak);
end
%交换列主元
temp=A(index,:
);
A(index,:
)=A(k,:
);
A(k,:
)=temp;
temp=b(index);b(index)=b(k);b(k)=temp;%消元过程fori=k+1:
n
m=A(i,k)/A(k,k);%消除列元素
A(i,k+1:
n)=A(i,k+1:
n)-m*A(k,k+1:
n);
b(i)=b(i)-m*b(k);
end
end%回代过程
x(n)=b(n)/A(n,n);
fork=n-1:
-1:
1;
2
x(k)=(b(k)-A(k,k+1:
n)*x(k+1:
n)')/A(k,k);
end;end
然后调用gaussMethod函数,来实现列主元的高斯消去法。
建立一个文件
gauss,内容如下:
clear
disp('**********************************************')
x=gaussMethod(input('请输入系数矩阵:
'),input('请输入常数列:
'))
disp('**********************************************')
1.3.2实例分析
例:
在Matlab上,利用列主元法求线性方程组的解:
x12x2x34x413
2x10x24x33x428
4x12x22x3x420
3x1x23x32x46
解:
运行程序,按照提示输入方程的系数矩阵及常数列,如下所示:
**********************************************
请输入系数矩阵:
[1214;2043;4221;-3132]
请输入常数列:
[13;28;20;6]
x=
3-142
**********************************************
即该方程的解为:
x3,1,4,2
1.4实验结论
把向量计算得到的解带入方程组,验证正确性,和其他的方法比较,列主元
具有一定的简单性,比较容易实现。
避免使用其他方法的误差或不能进行性。
而
列主元也有一定的限制,要求行列式的值不为0。
3
实验二拉格朗日插值多项式
2.1实验目的
1)熟悉简单的拉格朗日插值多项式的基本概念;
2)熟悉Lagrange公式及源代码,会利用它来计算基本函数;
3)能构造出正确的插值多项式;
2.2基本原理
设函数
yf(x)在区间[a,b]上有定义,且已知在点a
x0
x1xxnb上
的值y0,y1,
yn,若存在一个次数不超过
n的多项式
Ln(x)
a0
a1x
anxn
(2.1)
使其满足
Ln(xk)
yk,k
0,1,
n
(2.2)
则称Ln(x)为f(x)的n
次插值多项式,称点xk(k
0,1,
n)为插值节点,称
条件(2.2)为插值条件。
包含插值节点的区间成为插值区间。
通过平面上不同的两点可以确定一条直线经过这两点,就是拉格朗日线性插值问题,对于不在同一直线的三点得到的插值多项式为抛物线。
拉格朗日是比较基础的方法,本身比较容易实现,容易理解。
给定n+1个不同节点,构造
fx0,x1,x2,,xi
的n次拉格朗日插值多项式:
n
n
1
(x
xj)
1,2,,n1
(2.3)
L(x)yili(x),li(x)
(xi
i
i0
j
1
xj)
j
i
2.3实验内容
2.3.1程序来源
首先建立一个Lagrange.m的文件,用来实现Lagrange插值。
文件内容如下:
%输入:
x是插值节点横坐标向量;y是插值节点对应纵坐标向量
%输出:
C是拉格朗日插值多项式的系数矩阵;L是插值函数系数矩阵
4
function[C,L]=Lagrange(x,y)
w=length(x);
n=w-1;
L=zeros(w,w);
fork=1:
n+1
V=1;
forj=1:
n+1
ifk~=j
V=conv(V,poly(x(j)))/(x(k)-x(j));
end
end
L(k,:
)=V;
end
C=y*L
然后调用Lagrange函数,来实现Lagrange插值法。
建立一个文件Lg,内容
如下:
clear
disp('**********************************************')
x=input('请输入已知点的横坐标组:
');
y=input('请输入已知点的纵坐标:
');
[C,L]=Lagrange(x,y);
yi=polyval(C,input('请输入需要计算得横坐标组:
'))
xx=1.5:
0.05:
6.5;
yy=polyval(C,xx);
plot(xx,yy,x,y,'o')
disp('**********************************************')
2.3.2实例分析
例1有4对数据(1.6,3.3),(2.7,4.22),(3.9,5.61),(5.6,2.94),写出这4个数据点的Lagrange插值公式,并计算出横坐标组xi=[2.101,4.234]时对应的纵
5
坐标值。
解:
4个数据点的Lagrange插值公式为:
(
x
)
3.3*
(x
2.7)*(x
3.9)*(x
5.6)
(x
1.6)*(x
3.9)*(x5.6)
L3
(1.6
2.7)*(1.6
3.9)*(1.6
4.22*
(2.7
1.6)*(2.7
3.9)*(2.75.6)
5.6)
3.
9*
(x
1.6)*(x
2.7)*(x5.6)
(x
1.6)*(x
2.7)*(x3.9)
1.6)*(3.9
2.7)*(3.95.6)
2.94*
1.6)*(5.6
2.7)*(1.63.9)
(3.9
(5.6
运行程序,按照提示输入已知点的横坐标组、纵坐标组及需要计算得横坐标组,如下所示:
**********************************************
请输入已知点的横坐标组:
[1.6,2.7,3.9,5.6]
请输入已知点的纵坐标:
[3.3,1.22,5.61,2.94]
C=
-1.053911.0551-34.493334.5053
请输入需要计算得横坐标组:
[2.101,4.234]
yi=
1.05966.6457
**********************************************
即
y
10539
x
3
110551
2
344933
x
345053
-.
.
x
-.
.
输出图形:
10
5
0
-5
-10
-15
2
2.5
3
3.5
4
4.5
5
5.5
6
6.5
1.5
图2.1输出拟合曲线
6
例2将区间[-5,5]等分5份、10份,求函数y
1
拉格朗日差值多项式,做
x
2
1
出函数原图像,观察龙格现象。
解:
首先将区间五等分,取各端点坐标拟合曲线,输入:
clear
x=-5:
2:
5;
y=1./(1+x.^2);
[C,L]=Lagrange(x,y);
输出结果:
C=
0.0000
0.0019
-0.0000
-0.0692
0.0000
0.5673
即
y
0.0019
4
0.0692
2
05673
x
x
.
然后输出图形,比较拟合效果。
在matlab中输入:
xx=-5:
0.1:
5;
yy=polyval(C,xx);
holdon
plot(xx,yy,'--',x,y,'o')
xp=-5:
0.01:
5;
z=1./(1+xp.^2);
plot(xp,z,'r')
legend('拉格朗日插值曲线','插值点','原曲线')
输出五等分插值龙格现象图形:
1.2
1
0.8
0.6
0.4
0.2
0
-0.2
拉格朗日插值曲线
插值点
原曲线
-5-4-3-2-1012345
图2.2五等分插值龙格现象图形
7
十等分的过程与五等分基本相似,如下输入:
clear,clf
x=-5:
1:
5;
y=1./(1+x.^2);
[C,L]=Lagrange(x,y);
输出:
C=
-0.0000-0.0000
0.0013
-0.0000
-0.0244
0.0000
0.1974-0.0000
-0.6742
-0.0000
1.0000
即
y
0.0013
8
0.0244
6
0.1974
4
0.6742
2
1
x
x
x
x
然后输出图形,比较拟合效果。
在
matlab中输入:
xx=-5:
0.1:
5;
yy=polyval(C,xx);
holdon
plot(xx,yy,'--',x,y,'o')
xp=-5:
0.01:
5;
z=1./(1+xp.^2);
plot(xp,z,'r')
legend('拉格朗日插值曲线','插值点','原曲线')
输出十等分插值图形:
2
拉格朗日插值曲线
插值点
原曲线
1.5
1
0.5
0
-0.5
-5-4-3-2-1012345
图2.3十等分插值龙格现象图形
8
2.4实验结论
通过图像可以得出:
1)并不是插值节点越多,插值多项式逼近函数效果就越好;
2)误差较大的地方,是在插值区间两端点附近出现;
3)求插值多项式,不需要求解线性方程组,当数据比较多时,此公式才能
显示出优越性;
4)函数值可以用符号形式表示,数据点未确定的纵坐标可以用多项式表示;
9
实验三复化Simpson求积公式
3.1实验目的
1)了解单独的Simpson公式原理及几何意义;
2)学会复化Simpson求积公式的编程与应用;
3)掌握Matlab提供的计算积分的各种函数的使用方法;
3.2基本原理
复化Simpson公式是一种比较实用的积分方法,可以给出误差估计。
首先将
区间[a,b]N等分,子区间的长度为
b
a
(3.1)
hn
N
在每个子区间上采用Simpson公式,在用Simpson公式时,还要将子区间再二等分,因此有2N+1个分点。
即
xk
x0khN
k0,1,
2N,x0
a.
(3.2)
2
经推导得到,
def
hN[f(a)
N1
N
SNabf(x)dx
f(b)2
f(x2k)
4f(x2k1)]
(3.3)
6
k1
k1
称为SN为复化Simpson值,称(3.3)式为复化
Simpson公式。
3.3实验内容
3.3.1程序来源
编写复化Simpson求积函数(函数名:
s_quad.m)
FunctionI=S_quad(x,y)
%复化求积公式
%x为被积函数自变量的等距节点;y为被积函数在节点处的函数值。
n=length(x);
m=length(y);%积分自变量的节点数应与它的函数值个数相同;
10
ifn~=m
error('ThelengthofXandYmustbeequal');
return;
end
ifrem(n-1,2)~=0%如果n-1不能被2整除,则调用复化公式error('节点数不满足要求');
return;
end
N=(n-1)/2;
h=(x(n)-x
(1))/N;
a=zeros(1,n);
fork=1:
N
a(2*k-1)=a(2*k-1)+1;
a(2*k)=a(2*k)+4;
a(2*k+1)=a(2*k+1)+1;
end
I=h/6*sum(a.*y);
然后调用s_quad函数,来实现复化Simpson公式法。
建立一个文件SPS,
内容如下:
clear
disp('**********************************************')
x=input('请输入积分上下限及点间的间隔(例如-1:
0.1:
1):
');
y=input('请输入被积公式:
y=');
I=S_quad(x,y);
disp('得出积分值I=')
disp(I);
disp('**********************************************')
11
3.3.2实例分析:
12
例1用复化Simpson公式求积分exdx,在积分区间中点与点之间的间隔取为
1
0.1。
解:
运行程序,按照提示输入积分上下限、点间的间隔及被积公式,如下所示:
**********************************************
请输入积分上下限及点间的间隔(例如-1:
0.1:
1):
-1:
0.1:
1
请输入被积公式:
y=exp(-x.^2)
得出积分值I=
1.4936
**********************************************
真值为:
1.4937
1x
例2计算积分042dx,将区间8
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 完整 word 数值 分析 课程设计 代码