计算方法算法的数值稳定性实验报告
数值计算方法实验报告

数值计算方法实验报告一、实验介绍本次实验是关于数值计算方法的实验,旨在通过计算机模拟的方法,实现对于数值计算方法的掌握。
本次实验主要涉及到的内容包括数值微积分、线性方程组的求解、插值与拟合、常微分方程的数值解等。
二、实验内容1. 数值微积分数值微积分是通过计算机模拟的方法,实现对于微积分中的积分运算的近似求解。
本次实验中,我们将会使用梯形公式和辛普森公式对于一定区间上的函数进行积分求解,并比较不同公式的计算误差。
2. 线性方程组的求解线性方程组求解是数值计算领域中的重要内容。
本次实验中,我们将会使用高斯消元法、LU分解法等方法对于给定的线性方程组进行求解,并通过比较不同方法的计算效率和精度,进一步了解不同方法的优缺点。
3. 插值与拟合插值与拟合是数值计算中的另一个重要内容。
本次实验中,我们将会使用拉格朗日插值法和牛顿插值法对于给定的数据进行插值求解,并使用最小二乘法对于给定的函数进行拟合求解。
4. 常微分方程的数值解常微分方程的数值解是数值计算中的难点之一。
本次实验中,我们将会使用欧拉法和龙格-库塔法等方法对于给定的常微分方程进行数值解的求解,并比较不同方法的计算精度和效率。
三、实验结果通过本次实验,我们进一步加深了对于数值计算方法的理解和掌握。
在数值微积分方面,我们发现梯形公式和辛普森公式都能够有效地求解积分,但是辛普森公式的计算精度更高。
在线性方程组求解方面,我们发现LU分解法相对于高斯消元法具有更高的计算效率和更好的数值精度。
在插值与拟合方面,我们发现拉格朗日插值法和牛顿插值法都能够有效地进行插值求解,而最小二乘法则可以更好地进行函数拟合求解。
在常微分方程的数值解方面,我们发现欧拉法和龙格-库塔法都能够有效地进行数值解的求解,但是龙格-库塔法的数值精度更高。
四、实验总结本次实验通过对于数值计算方法的模拟实现,进一步加深了我们对于数值计算方法的理解和掌握。
在实验过程中,我们了解了数值微积分、线性方程组的求解、插值与拟合、常微分方程的数值解等多个方面的内容,在实践中进一步明确了不同方法的特点和优缺点,并可以通过比较不同方法的计算效率和数值精度来选择合适的数值计算方法。
高斯消去法的数值稳定性实验报告

end
%½«³£ÊýÏî´ÓAÖзÖÀë
X=A(:,length(A(1,:)));
A=A(:,1:length(A(1,:))-1);
%µÃµ½LÓëU¾ØÕó
fori=1:length(A(:,1))
forj=1:length(A(i,:))
if(i==j)
L(i,j)=1;
U(i,j)=A(i,j);
00-2.83542034035461-0.439277018213440
0000.724838760535495
X2=
5.90739256961544
1.88284104193886
-22.2540722833854
14.5809976298923
(3)beselect.m文件与noselect.m文件
%½«³£ÊýÏî¼Ó½øÈ¥
A(:,length(A(1,:))+1)=Y;
%´ÓÉÏÍùÏÂÑ »·
fori=1:length(A(:,1))
%Ô¤¼ÆËãÿÐеÚÒ»¸öÊý×Ö
fork=i:length(A(:,i))
form=1:i-1
A(k,i) = A(k,i)-A(k,m)*A(m,i);
end
end
end
%¼ÆËãXÖµ
fori=length(X):-1:1
forj=i+1:length(U(i,:))
X(i)=X(i)-U(i,j)*X(j);
end
X(i)=X(i)/U(i,i);
end
end
noselect.m文件:
function[ L,U,X ] = noselect( A,Y )
数值计算基础实验报告(3篇)

第1篇一、实验目的1. 理解数值计算的基本概念和常用算法;2. 掌握Python编程语言进行数值计算的基本操作;3. 熟悉科学计算库NumPy和SciPy的使用;4. 分析算法的数值稳定性和误差分析。
二、实验内容1. 实验环境操作系统:Windows 10编程语言:Python 3.8科学计算库:NumPy 1.19.2,SciPy 1.5.02. 实验步骤(1)Python编程基础1)变量与数据类型2)运算符与表达式3)控制流4)函数与模块(2)NumPy库1)数组的创建与操作2)数组运算3)矩阵运算(3)SciPy库1)求解线性方程组2)插值与拟合3)数值积分(4)误差分析1)舍入误差2)截断误差3)数值稳定性三、实验结果与分析1. 实验一:Python编程基础(1)变量与数据类型通过实验,掌握了Python中变量与数据类型的定义方法,包括整数、浮点数、字符串、列表、元组、字典和集合等。
(2)运算符与表达式实验验证了Python中的算术运算、关系运算、逻辑运算等运算符,并学习了如何使用表达式进行计算。
(3)控制流实验学习了if-else、for、while等控制流语句,掌握了条件判断、循环控制等编程技巧。
(4)函数与模块实验介绍了Python中函数的定义、调用、参数传递和返回值,并学习了如何使用模块进行代码复用。
2. 实验二:NumPy库(1)数组的创建与操作通过实验,掌握了NumPy数组的基本操作,包括创建数组、索引、切片、排序等。
(2)数组运算实验验证了NumPy数组在数学运算方面的优势,包括加、减、乘、除、幂运算等。
(3)矩阵运算实验学习了NumPy中矩阵的创建、操作和运算,包括矩阵乘法、求逆、行列式等。
3. 实验三:SciPy库(1)求解线性方程组实验使用了SciPy库中的线性代数模块,通过高斯消元法、LU分解等方法求解线性方程组。
(2)插值与拟合实验使用了SciPy库中的插值和拟合模块,实现了对数据的插值和拟合,并分析了拟合效果。
数值分析实验3

贵州师范大学数学与计算机科学学院学生实验报告课程名称: 数值分析 班级: 信本班 实验日期: 2013 年 9 月 3日学 号: 110703010038 姓名: 孙泽香 指导教师: 实验成绩:一、实验名称实验一:递推法的稳定性,秦九韶算法二、实验目的及要求1. 熟悉数值稳定的概念, 通过上机计算,了解舍入误差所引起的数值不稳定性.2. 培养Matlab 编程与上机调试能力.三、实验环境每人一台计算机,要求安装Windows XP 操作系统,Microsoft office2003、MATLAB6.5(或7.0)。
四、实验内容1.教材例1.13中,取16位数字计算,并分析、比较计算结果.2.设100999832()101100994321f x x x x x x x =+++++++,用秦九韶算法编程计算()f x 在1,2,3,4x =上的值.五、算法描述及实验步骤1. 设(1)从0I 尽可能精确的近似值出发,利用递推公式:115(1,2,,14)n n I I n n -=-+=, 计算从1I 到14I 的近似值;(2)从15I 较粗糙的估计值出发,用递推公式:111(15,14,,3,2)55n n I I n n -=-+=计算从1I 到14I 的近似 .2. 秦九韶算法给定n次多项式Pn(x)=a(n)x^n+a(n-1)x^(n-1)+…+a(1)x+a(0).要计算Pn(x)在x处的值。
今考虑n次多项式Pn(x),用V(k)表示第k层的值(从里面数起),依次计算 V(1)=a(n)x+a(n-1) V(2)=V(1)x+a(n-2) … V(n)=V(n-1)x+a(0).显然V(n)=Pn(x).记a(n)=V(0),上述计算过程可写成:V(0)=a(n)V(k)=V(k-1)*x+a(n-k),(k=1,2,…,n).六、调试过程及实验结果1.12 算法一:>> format long e>> syms x;>> fun=inline('1./(x+5)');>> I(1)=quad(fun,0,1);>> for n=1:14I(n+1)=1/n-5*I(n);end>> II =Columns 1 through 31.823215568047383e-001 8.839221597630853e-0025.803892011845735e-002Columns 4 through 64.313873274104657e-002 3.430633629476715e-0022.846831852616427e-002Columns 7 through 92.432507403584530e-002 2.123177267791634e-0021.884113661041828e-002Columns 10 through 121.690542805901971e-002 1.547285970490148e-0021.354479238458353e-002Columns 13 through 151.560937141041567e-002 -1.123780129001425e-0037.704747207357855e-002算法二:>> format long e>> syms x;>> fun=inline('x.^14./(x+5)');>> I(15)=quad(fun,0,1);>> for n=14:-1:1I(n)=1/(5*n)-I(n+1)/5;end>> II =Columns 1 through 31.823215567939547e-001 8.839221603022675e-0025.803891984886631e-002Columns 4 through 64.313873408900180e-002 3.430632955499104e-0022.846835222504479e-002Columns 7 through 92.432490554144271e-002 2.123261514992931e-0021.883692425035346e-002Columns 10 through 121.692648985934385e-002 1.536755*********e-0021.407133739268709e-002Columns 13 through 151.297664636989789e-002 1.203984507358747e-0021.122934606063409e-0021.13 设f(x)=101x^100+100x^99+…+3x^2+2x+1,用秦九韶算法编程计算f(x)在x=1,2,3,4上的值。
数值分析实验报告1

显然该多项式的全部根为1,2,…,20共计20个,且每个根都是单重的。现考虑该多项式的一个扰动
其中是一个非常小的数。这相当于是对(1。1)中的系数作一个小的扰动.我们希望比较(1。1)和(1。2)根的差别,从而分析方程(1。1)的解对扰动的敏感性.
实验内容:为了实现方便,我们先介绍两个Matlab函数:“roots”和“poly”。
(3)取矩阵阶数n=20或者更大,重复上述实验过程,观察记录并分析不同的问题及消去过程中选择不同的主元时计算结果的差异,说明主元素的选取在消去过程中的作用。
(4)选取其他你感兴趣的问题或者随机生成矩阵,计算其条件数。重复上述实验,观察记录并分析实验结果。
实验过程:
程序:
建立M文件:
function x=gauss(n,r)
实验总结:
利用MATLAB来进行病态问题的实验,虽然其得出的结果是有误差的,但是可以很容易的得出对一个多次的代数多项式的其中某一项进行很小的扰动,对其多项式的根会有一定的扰动的,所以对于这类病态问题可以借助于MATLAB来进行问题的分析。
学号:06450210
姓名:万轩
实验二插值法
实验2.1(多项式插值的振荡现象)
学号:06450210
姓名:万轩
实验五解线性方程组的直接方法
实验5。1(主元的选取与算法的稳定性)
问题提出:Gauss消去法是我们在线性代数中已经熟悉的.但由于计算机的数值运算是在一个有限的浮点数集合上进行的,如何才能确保Gauss消去法作为数值算法的稳定性呢?Gauss消去法从理论算法到数值算法,其关键是主元的选择。主元的选择从数学理论上看起来平凡,它却是数值分析中十分典型的问题.
其中若变量a存储n+1维的向量,则该函数的输出u为一个n维的向量。设a的元素依次为,则输出u的各分量是多项式方程
计算方法实验报告

实验一:误差传播与算法稳定性实验目的:体会稳定性在选择算法中的地位。
实验内容:考虑一个简单的由积分定义的序列10I ,0,1,10nn x dx n a x==+⎰其中a 为参数,分别对0.05a =及15a =按下列两种方法计算。
方案1:用递推公式11,1,2,,10n n I aI n n-=-+= 递推初值可由积分直接得01lna I a+= 方案2:用递推公式111(),,1,,1n n I I n N N a n-=-+=-根据估计式当1n a n ≥+时,11(1)(1)(1)n I a n a n <<+++或当01n a n ≤<+时,11(1)(1)n I a n n<≤++ 取递推初值 当1n a n ≥+时, 11121()2(1)(1)(1)2(1)(1)N N a I I a N a N a a N +≈+=+++++ 当01n a n ≤<+时,111()2(1)(1)N N I I a N N≈+++ 实验要求:列出结果,并对其稳定性进行分析比较,说明原因。
实验二:非线性方程数值解法实验目的:探讨不同方法的计算效果和各自特点 实验内容:应用算法(1)牛顿法;(2)割线法 实验要求:(1)用上述各种方法,分别计算下面的两个例子。
在达到精度相同的前提下,比较其迭代次数。
(I )31080x x +-=,取00x =;(II) 2281(0.1)sin 1.060x x x -+++=,取00x =;(2) 取其它的初值0x ,结果如何?反复选取不同的初值,比较其结果; (3) 总结归纳你的实验结果,试说明各种方法的特点。
实验三:选主元高斯消去法----主元的选取与算法的稳定性问题提出:Gauss 消去法是我们在线性代数中已经熟悉的。
但由于计算机的数值运算是在一个有限的浮点数集合上进行的,如何才能确保Gauss 消去法作为数值算法的稳定性呢?Gauss 消去法从理论算法到数值算法,其关键是主元的选择。
《数值计算方法》实验 (1)

电子科技大学《数值计算方法》
实
验
报
告
输入6,1;0,1,21i i n a b i i n ===+=−" 结果得f=1.718263
输入10,1;0,1,21i i n a b i i n ===+=−" 结果得f=1.718282
输入100,1;0,1,21i i n a b i i n ===+=−" 结果得f=1.718282
从中计算结果看随n 增大迭代计算结果逐渐稳定,可认为出现此现象有两种情况一是对该输入序列a,b 用此迭代公式随序列増长会逐渐逼近一个稳定值,二是在迭代计算过程中产生大数“吃掉”小数现象且计算结果只取7为有效数字。
3. 实验结论
在计算机内做加法运算时,首先要对加数作对阶处理,加之计算机字长有限,因尽量避免出现大数吃小数现象,计算时要注意运算次序,否则会影响结果的可靠性。
报告评分:
指导教师签字:。
实验一实验报告1

贵州师范大学数学与计算机科学学院学生实验报告课程名称:数值分析班级数学与应用数学2班实验日期:年月日学号: 110701020060 姓名周明祥指导教师:杨一都实验成绩:一、实验名称实验一:递推法的稳定性,秦九韶算法二、实验目的及要求1. 熟悉数值稳定的概念, 通过上机计算,了解舍入误差所引起的数值不稳定性.2. 培养Matlab编程与上机调试能力.三、实验环境每人一台计算机,要求安装Windows XP操作系统,Microsoft office2003、MATLAB6.5(或7.0).四、实验内容1.教材例1.13中,取15位数字计算,并分析、比较计算结果.2.设100999832,用秦九韶算法编程计=+++++++f x x x x x x x()101100994321算()f x在1,2,3,4x=上的值.五、算法描述及实验步骤1、输入函数f(x)=1/(x+5);输出 I(14);步1 I(1)=int(f,0,1);步2 用for循环语句执行递推关系I(n+1)=1/n-5*I(n);步3 输出I(14);结束。
2、输入多项式系数a(0),a(2),...,a(n),给定点x。
(x)在x处的值y。
输出多项式Pn步1 v<==a(n)。
步2 对k=1,2,...,n执行v<==v*x+a(n-k)。
步3 y<==v。
步4 输出多项式的值y。
结束。
六、调试过程及实验结果1、 y=ditui(14)ans =[ .18232155679396, .8839221603023e-1, .580389198489e-1, .43138734088e-1, .3430632956e-1, .2846835222e-1, .243249055e-1, .21232615e-1, .18836925e-1, .1692649e-1, .153675e-1, .140713e-1,.12978e-1, .1204e-1, .1123e-1]2、 a=[101:-1:1];x=[1,2,3,4];Qinjiu(a,100,x)ans =1.0e+062 *0.0000 0.0000 0.0000 2.1569vpa(ans,8)ans =[ 5151., .25353012e33, .77693161e50, .21568680e63]七、总结八、附录(源程序清单)1、 function y=ditui(n)syms xf=1./(x+5);I(1)=int(f,0,1);for i=1:nI(i+1)=1/i-5*I(i);endvpa(I,15)2、 function y=Qinjiu(a,n,x) v=a(1);for k=1:nv=v.*x+a(k+1);endy=v;。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
专业 序号 姓名 日期
实验1 算法的数值稳定性实验
【实验目的】
1.掌握用MATLAB 语言的编程训练,初步体验算法的软件实现;
2.通过对稳定算法和不稳定算法的结果分析、比较,深入理解算法的数值稳定性及其重要性。
【实验内容】
1.计算积分 ()dx a x x I n
⎰+=1
0)
(n (n=0,1,2......,10) 其中a 为参数,分别对a=0.05及a=15按下列两种方案计算,列出其结果,并对其可靠性,说明原因。
2.方案一 用递推公式 n
aI I n 1
1n +
-=- (n=1,2,......,10) 递推初值可由积分直接得)1
(
0a
a In I += 3. 方案二 用递推公式 )1
(11-n n
I a I n +-=
(n=N,N-1,......,1) 根据估计式 ()()()11111+<<++n a I n a n 当1
n a +≥n
或
()()n
1
111≤<++n I n a
当1
n n
a 0+<
≤ 取递推初值为
()()()()
11212])1(1111[21N +++=++++≈N a a a N a N a I
当1
a +≥
N N
或
()()]1111[21N
N a I N +++=
当1
a 0+<
≤N N
计算中取N=13开始
【解】:手工分析怎样求解这题。
【计算机求解】:怎样设计程序?流程图?变量说明?能否将某算法设计成具有形式参数的函数
形式?
【程序如下】:
% myexp1_1.m --- 算法的数值稳定性实验 % 见 P11 实验课题(一) %
function try_stable global n a
N = 20; % 计算 N 个值 a =0.05;%或者a=15
% %-------------------------------------------- % % [方案I] 用递推公式 %I(k) = - a*I(k-1) + 1/k %
I0 =log((a+1)/a); % 初值
I = zeros(N,1); % 创建 N x 1 矩阵(即列向量),元素全为零 I(1) =-a*I0+1; for k = 2:N
I(k) =-a*I(k-1)+1/k; end
% %--------------------------------------------
% % [方案II] 用递推公式
%I(k-1) = ( - I(k) + 1/k ) / a
%
II = zeros(N,1);
if a >= N/(N+1)
II(N)=(2*a+1)/(2*a*(a+1)*(N+1));
else
II(N) =(1/(a+1)/(N+1)+1/N)/2;
end
for k = N:-1:2
II(k-1) =(-II(k)+1/k)/a;
end
% %--------------------------------------------
% % 调用 matlab 高精度数值积分命令 quadl 计算以便比较
III = zeros(N,1);
for k = 1:N
n = k;
III(k) = quadl(@f,0,1);
end
% %--------------------------------------------
% % 显示计算结果
clc
fprintf('\n 方案I结果方案II结果精确值') for k = 1:N,
fprintf('\nI(%2.0f) %17.7f %17.7f %17.7f',k,I(k),II(k),III(k))
end
% %--------------------------------------------
function y = f(x) % 定义函数
global n a % 参量 n 为全局变量
y =x.^n./(a+x); % ★注意:这里一定要 '点' 运算
return
% %--------------------------------------------
【运行结果如下】:
当a=0.05
方案I结果方案II结果精确值
I( 1) 0.8477739 -919648916620722180000.0000000 0.8477739
I( 2) 0.4576113 45982445831036109000.0000000 0.4576113
I( 3) 0.3104528 -2299122291551805700.0000000 0.3104528
I( 4) 0.2344774 114956114577590290.0000000 0.2344776
I( 5) 0.1882761 -5747805728879515.0000000 0.1882761
I( 6) 0.1572529 287390286443975.9400000 0.1572529
I( 7) 0.1349945 -14369514322198.6540000 0.1349945
I( 8) 0.1182503 718475716110.0577400 0.1182503
I( 9) 0.1051986 -35923785805.3917770 0.1051986
I(10) 0.0947401 1796189290.3695889 0.0947401 I(11) 0.0861721 -89809464.4275704 0.0861724 I(12) 0.0790247 4490473.3047119 0.0790247 I(13) 0.0729718 -224523.5883125 0.0729718 I(14) 0.0677800 11226.2508442 0.0677800 I(15) 0.0632777 -561.2458755 0.0632777 I(16) 0.0593361 28.1247938 0.0593361 I(17) 0.0558567 -1.3474162 0.0558567 I(18) 0.0527627 0.1229264 0.0527627 I(19) 0.0499934 0.0464853 0.0499934 I(20) 0.0475003 0.0476757 0.0475003
当a=15
方案I结果方案II结果精确值
I( 1) 0.0319222 0.0319222 0.0319222 I( 2) 0.0211673 0.0211673 0.0211673 I( 3) 0.0158245 0.0158245 0.0158245 I( 4) 0.0126326 0.0126326 0.0126326 I( 5) 0.0105112 0.0105112 0.0105112 I( 6) 0.0089993 0.0089993 0.0089993 I( 7) 0.0078674 0.0078674 0.0078674 I( 8) 0.0069883 0.0069883 0.0069883 I( 9) 0.0062862 0.0062859 0.0062859 I(10) 0.0057064 0.0057117 0.0057117 I(11) 0.0053136 0.0052336 0.0052337 I(12) 0.0036289 0.0048293 0.0048296 I(13) 0.0224896 0.0044830 0.0044838 I(14) -0.2659159 0.0041831 0.0041831
I(15) 4.0554050 0.0039207 0.0039207
I(16) -60.7685756 0.0036893 0.0036893
I(17) 911.5874579 0.0034837 0.0034837
I(18) -13673.7563129 0.0033002 0.0032998
I(19) 205106.3973248 0.0031283 0.0031344
I(20) -3076595.9098724 0.0030754 0.0029847>>
【结果分析】:
1、综上所述,当a=0.05的时候,方案二算法的结果从I(20)开始计算,刚开始的时候与精确解相差不大,但是随着计算的进行,误差变得越来越大,最终与原来的精确解相差十分巨大,而方案一算法的数值结果始终与精确解相差不大,是稳定的算法。
2、当a=15的时候,反而是方案二的算法的数值结果与精确解更为接近,方案一算法的结果随着算法运算的进行,与精确解相差变大了。
3、以上的实验说明了我们在进行数值分析时一定要选择合适的算法,而不能盲目的选择单一的算法,因为随着数值的变化,可能稳定的算法也会出现很大的误差。
所以我们要根据实际问题来确定合适的算法,才能尽可能的减小误差。
如有侵权请联系告知删除,感谢你们的配合!。