计算方法算法的数值稳定性实验报告
数值计算基础实验报告(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库中的插值和拟合模块,实现了对数据的插值和拟合,并分析了拟合效果。
计算方法实验报告2

实验报告2:解线性方程组的直接法姓名:杜娟学号:08012324 班级:勘查08-3班一.上机题目用高斯列主元消去法和LU分解法解线性方程组二.目的要求掌握用高斯列主元消去法和LU分解法设计程序,从而实现解线性方程组。
三.方法原理1.如果在一列中选取按模最大的元素,将其调到主干方程位置再做消元,则称为列主元消元法。
调换方程组的次序是为了使运算中做分母量的绝对值尽量地大,减少舍入误差的影响。
2.由高斯消元法得到启发,对消元的过程相当于将分解为一个上三角矩阵和一个下三角矩阵的过程。
如果直接分解得到和,。
这时方程化为,令,由解出;再由,解出。
这就是直接分解法。
四.算法步骤列主元消元法算法1.输入:方程组阶数n,方程组系数矩阵A和常数向量项b。
2.for k=1 to n-1 //选主元的消元过程{//选择{s=|a kk|,m=kfor u=k+1 to nif |a uk|>s then{m=u,s=| a uk|}for v=k to n //交换第k行和第m行{t=a kv; a kv=a mv; a mv=t}t=b k;b k=b m;b m=t}for i=k+1 to n{t=a ik/a kkfor j=k+1 to n{a ij=a ij-t*a kj}b i=b i-t*a kj}}3.for i:=n TO 1 //回代求解4.输出方程组的解 x i, i=1,2,…,n。
如果对于第k步,从k行至n行和从k列至n列中选取按模最大的,对第行和第行交换,对第列和第v列交换,这就是全主元消元法。
在k列和第v列交换时,还要记录下v的序号,以便恢复未知量xk和xv的位置。
LU分解法1计算的第一行元素要计算,则列出式(3.20)等号两边的第1行第1列元素的关系式:故。
一般地,由的第一行元素的关系式得到2计算的第一列元素要计算,则列出式(3.20)等号两边的第2行第1列元素的关系式:故。
计算方法实验报告

实验一:误差传播与算法稳定性实验目的:体会稳定性在选择算法中的地位。
实验内容:考虑一个简单的由积分定义的序列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;。
数值计算LU分解实验报告

数值计算LU分解实验报告实验目的:1.了解LU分解的原理和数值计算方法;2.掌握LU分解的算法实现过程;3.验证LU分解的正确性和数值稳定性。
实验器材:1.计算机;2.编程环境。
实验步骤:1.确定要进行LU分解的方阵A的大小;2.随机生成一个大小为nxn的方阵A;3.使用LU分解算法对方阵A进行分解;4. 验证LU分解的正确性,即计算得到的L和U是否满足L \cdot U = A;5. 计算方阵A的行列式det(A),并与分解得到的L和U的主对角线元素的乘积进行比较,验证LU分解的数值稳定性。
实验原理:LU分解是将一个n x n的矩阵A分解为一个下三角矩阵L和一个上三角矩阵U的乘积的过程,满足A = L \cdot U。
其中,L的主对角线元素全为1、LU分解的主要目的是为了简化线性方程组的求解过程,因为当A被分解为LU后,可以通过解两个三角线性方程组来求解原方程组。
实验结果与分析:1.随机生成一个3x3的矩阵A,如下所示:A=[[4,3,-2],[8,5,4],[1,-2,3]]2.对矩阵A进行LU分解,得到L和U矩阵分别为:L=[[1,0,0],[2,1,0],[0.25,0.1,1]]U=[[4,3,-2],[0,-1,8],[0,0,10.2]]3. 验证LU分解的正确性,计算L和U矩阵的乘积是否等于矩阵A。
结果为L \cdot U = [[4, 3, -2], [8, 5, 4], [1, -2, 3]],与矩阵A 一致,因此LU分解正确。
4. 计算矩阵A的行列式det(A)为 -95、计算分解得到的L和U的主对角线元素的乘积为 4 \cdot (-1) \cdot 10.2 = -40.8、由于det(A) ≠ 0,且det(A)≠-40.8,因此LU分解满足数值稳定性。
结果分析:通过对3x3方阵A进行LU分解的实验,验证了LU分解算法的正确性和数值稳定性。
LU分解可以将一个矩阵分解为一个下三角矩阵和一个上三角矩阵的乘积,从而简化线性方程组的求解过程。
数值分析实验报告

《数值分析》实验报告学院:计算机科学与软件学院姓名:XXX班级:计算机XX班学号:XXXXXX实验一:舍入误差与数值稳定性实验目的:1、 通过上机编程,复习巩固以前所学程序设计语言;2、 通过上机计算,了解舍入误差所引起的数值不稳定性。
3、 通过上机计算,了解运算次序对计算结果的影响,从而尽量避免大数吃小数的现象。
实验内容:用两种不同的顺序计算644834.11000012≈∑=-n n ,分析其误差的变化。
实验流程图:实验源程序:#include <stdio.h>#include <math.h>void main(){ int i;float s1=0,s2=0,d1,d2;for (i=1;i<=10000;i++)s1=s1+1.0f/(i*i);for (i=10000;i>=1;i--)s2=s2+1.0f/(i*i);d1=(float)(fabs(1.644834-s1));d2=(float)(fabs(1.644834-s2));printf("正向求和结果为%f\n 误差为%f\n\n",s1,d1);printf("反向求和结果为%f\n 误差为%f\n\n",s2,d2);if(d1<d2)printf("正向求和误差小于负向求和误差\n");else if(d1==d2)printf("正向求和误差等于负向求和误差\n"); elseprintf("正向求和误差大于负向求和误差\n");}实验结果:实验分析:第一次做数值实验,又一次使用C语言编程,没有了刚学习C语言的艰难,能够将实验步骤转换成流程图并编写出完整的实验代码,在经过多次调试、改正后得到正确的程序和结果。
这个实验较简单,计算误差时如果输入数据有误差,而在计算过程中舍入误差不增长,则称此算法是稳定的,否则称此算法是数值不稳定的,减少运算次数可以减小舍入误差。
计算方法数值实验报告

计算方法数值实验报告(一)班级:0902 学生:苗卓芳 倪慧强 岳婧实验名称: 解线性方程组的列主元素高斯消去法和LU 分解法实验目的: 通过数值实验,从中体会解线性方程组选主元的必要性和LU 分解法的优点,以及方程组系数矩阵和右端向量的微小变化对解向量的影响。
实验内容:解下列两个线性方程组(1) ⎪⎪⎪⎭⎫ ⎝⎛=⎪⎪⎪⎭⎫ ⎝⎛⎪⎪⎪⎭⎫ ⎝⎛--11134.981.4987.023.116.427.199.103.601.3321x x x (2) ⎪⎪⎪⎪⎪⎭⎫ ⎝⎛=⎪⎪⎪⎪⎪⎭⎫ ⎝⎛⎪⎪⎪⎪⎪⎭⎫ ⎝⎛----15900001.582012151526099999.23107104321x x x x 解:(1) 用熟悉的算法语言编写程序用列主元高斯消去法和LU 分解求解上述两个方程组,输出Ax=b 中矩阵A 及向量b, A=LU 分解的L 及U ,detA 及解向量。
①先求解第一个线性方程组⎪⎪⎪⎭⎫ ⎝⎛=⎪⎪⎪⎭⎫ ⎝⎛⎪⎪⎪⎭⎫ ⎝⎛--11134.981.4987.023.116.427.199.103.601.3321x x x在命令窗口中运行A=[3.01,6.03,1.99;1.27,4.16,-1.23;0.987,-4.81,9.34] 可得A =3.0100 6.0300 1.99001.2700 4.1600 -1.23000.9870 -4.8100 9.3400b=[1,1,1]可得b =1 1 1H =det(A)可得 H =-0.0305列主元高斯消去法:在命令窗口中运行function x=Gauss_pivot(A,b)、A=[3.01,6.03,1.99;1.27,4.16,-1.23;0.987,-4.81,9.34];b=[1,1,1];n=length(b);x=zeros(n,1);c=zeros(1,n);dl=0;for i=1:n-1max=abs(A(i,i));m=i;for j=i+1:nif max<abs(A(j,i))max=abs(A(j,i));m=j;endendif(m~=i)for k=i:nc(k)=A(i,k);A(i,k)=A(m,k);A(m,k)=c(k);enddl=b(i);b(i)=b(m);b(m)=dl;endfor k=i+1:nfor j=i+1:nA(k,j)=A(k,j)-A(i,j)*A(k,i)/A(i,i);endb(k)=b(k)-b(i)*A(k,i)/A(i,i);A(k,i)=0;endendx(n)=b(n)/A(n,n);for i=n-1:-1:1sum=0;for j=i+1:nsum =sum+A(i,j)*x(j);endx(i)=(b(i)-sum)/A(i,i);end经程序可得实验结果ans =1.0e+003 *1.5926-0.6319-0.4936LU分解法:在命令窗口中运行function x=lu_decompose(A,b)A=[3.01,6.03,1.99;1.27,4.16,-1.23;0.987,-4.81,9.34];b=[1,1,1];L=eye(n);U=zeros(n,n);x=zeros(n,1);c=zeros(1,n);for i=1:nU(1,i)=A(1,i);if i==1;L(i,1)=1;elseL(i,1)=A(i,1)/U(1,1);endendfor i=2:nfor j=i:nsum=0;for k=1:i-1sum =sum+L(i,k)*U(k,j);endU(i,j)=A(i,j)-sum;Ifj~=nsum=0;for k=1:i-1sum=sum+L(j+1,k)*U(k,i);endL(j+1,i)=(A(j+1,i)-sum)/U(I,i);endendendy(1)=b(1);for k=2:nsum=0;forj=1:k-1sum=sum+L(k,j)*y (j);endy(k)=b(k)-sum;endx(n)=y(n)/U(n,n);260页最后一行c(k)=A(i,k);A(i,k)=A(m,k);A(m,k)=c(k);enddl=b(i);b(i)=b(m);b(m)=dl;endfor k=i+1:nfor j=i+1:nA(k,j)=A(k,j)-A(i,j)*A(k,i)/A(i,i);endb(k)=b(k)-b(i)*A(k,i)/A(i,i);A(k,i)=0;endendx(n)=b(n)/A(n,n);for i=n-1:-1:1sum=0;for j=i+1:nsum =sum+A(i,j)*x(j);endx(i)=(b(i)-sum)/A(i,i);end经程序可得结果ans =1.0e+003 *1.5926-0.6319-0.4936②再求解第二个线性方程组⎪⎪⎪⎪⎪⎭⎫ ⎝⎛=⎪⎪⎪⎪⎪⎭⎫ ⎝⎛⎪⎪⎪⎪⎪⎭⎫ ⎝⎛----15900001.582012151526099999.23107104321x x x x 即A=[10,-7,0,1;-3,2.099999,6,2;5,-1,5,-1;2,1,0,2];b=[8,5.900001,5,1];重复上述步骤可的结果为ans =0.0000-1.00001.00001.0000(2)将方程组(1)中系数3.01改为3.00,0.987改为0.990,用列主元高斯消去法求解变换后的方程组,输出列主元行交换次序,解向量x 及detA ,并与(1)中结果比较。
- 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 11n +
-=- (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
1111≤<++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 +++= 当1a 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、以上的实验说明了我们在进行数值分析时一定要选择合适的算法,而不能盲目的选择单一的算法,因为随着数值的变化,可能稳定的算法也会出现很大的误差。
所以我们要根据实际问题来确定合适的算法,才能尽可能的减小误差。