数值分析实验算法总结 - 新疆大学
数值分析综合实验报告
一、实验目的通过本次综合实验,掌握数值分析中常用的插值方法、方程求根方法以及数值积分方法,了解这些方法在实际问题中的应用,提高数值计算能力。
二、实验内容1. 插值方法(1)拉格朗日插值法:利用已知数据点构造多项式,以逼近未知函数。
(2)牛顿插值法:在拉格朗日插值法的基础上,通过增加基函数,提高逼近精度。
2. 方程求根方法(1)二分法:适用于函数在区间内有正负值的情况,通过不断缩小区间来逼近根。
(2)Newton法:利用函数的导数信息,通过迭代逼近根。
(3)不动点迭代法:将方程转化为不动点问题,通过迭代逼近根。
3. 数值积分方法(1)矩形法:将积分区间等分,近似计算函数值的和。
(2)梯形法:将积分区间分成若干等分,用梯形面积近似计算积分。
(3)辛普森法:在梯形法的基础上,将每个小区间再等分,提高逼近精度。
三、实验步骤1. 拉格朗日插值法(1)输入已知数据点,构造拉格朗日插值多项式。
(2)计算插值多项式在未知点的函数值。
2. 牛顿插值法(1)输入已知数据点,构造牛顿插值多项式。
(2)计算插值多项式在未知点的函数值。
3. 方程求根方法(1)输入方程和初始值。
(2)选择求解方法(二分法、Newton法、不动点迭代法)。
(3)迭代计算,直到满足精度要求。
4. 数值积分方法(1)输入被积函数和积分区间。
(2)选择积分方法(矩形法、梯形法、辛普森法)。
(3)计算积分值。
四、实验结果与分析1. 插值方法(1)拉格朗日插值法:通过构造多项式,可以较好地逼近已知数据点。
(2)牛顿插值法:在拉格朗日插值法的基础上,增加了基函数,提高了逼近精度。
2. 方程求根方法(1)二分法:适用于函数在区间内有正负值的情况,计算简单,但收敛速度较慢。
(2)Newton法:利用函数的导数信息,收敛速度较快,但可能存在数值不稳定问题。
(3)不动点迭代法:将方程转化为不动点问题,收敛速度较快,但可能存在初始值选择不当的问题。
3. 数值积分方法(1)矩形法:计算简单,但精度较低。
数值分析第三次实习报告
武汉理工大学学生实验报告书实验课程名称:数值分析( 第三次实习)开课名称:计算机科学与技术学院指导老师姓名:熊盛武学生姓名:学生专业班级:软件工程0803班2009 —— 2010学年第一学期一、实习目的:(1)通过编程计算实践,体会和理解复化梯形公式和复化Simpson公式。
(2)通过编程计算实践,搞清变步长梯形公式的计算流程。
(3)通过编程计算实践,掌握和提高Romberg算法流程的控制技术。
(4)通过各种方法对同一题目的求解,体会各种方法的精度差异。
二、实习步骤:(1)分别画出复化梯形公式,复化Simpson公式,变步长梯形公式和Romberg 公式的算法流程图。
(2)分别用复化梯形公式和复化Simpson公式通过编程计算积分,并分析和比较算法的效率差异和精度差异。
(3)用变步长梯形公式通过编程计算积分,并分析算法精度与二分法次数之间的关系。
(4)用Romberg公式通过编程计算积分,并分析算法精度与二分法次数之间的关系。
三、算法流程图:(一)复化梯形求算法积流程图(三)变步长梯形求积算法流程图(二)复化Simpson求积算法流程图(四)Romberg公式求积流程图四、编程计算积分(一)复化梯形:(1)复化梯形算法描述(1)输入求积区间a,b和区间等分数n(2)计算步长h h=(b-a)/n(3)对于i=0到i=n-1计算节点函数值f(a+i*h)(4)计算积分值T=T+2*temp;Tn=(f(a)+f(b)+T)*h/2;(5)输出积分值(2)复化梯形求积程序源代码#include<iostream>#include<cmath>double f(double t){return 1/(1+t*t);}using namespace std;int main(){int i,n;double h,a,b,T,temp,Tn;cout<<"请输入求积区间:"<<endl;cin>>a>>b;cout<<"请输入区间等分数:"<<endl;cin>>n;h=(b-a)/n;temp=0;T=0;for(i=1;i<n;i++){temp=f(a+i*h);T=T+2*temp;}Tn=(f(a)+f(b)+T)*h/2;cout<<"经过复化梯形求积所得积分值T"<<n<<"为: "<<Tn<<endl;return 0;}(3)调试过程,实验结果及分析:1/(x*x)在区间[0,1]上8等分后,程序运行结果如下:对区间等分后求每个子区间上的积分值,然后将每个子区间的积分值相加,就得到整个积分区间上的积分值,梯形公式具有一次代数精度。
数值分析实验报告
数值分析实验报告
一、实验背景
本实验主要介绍了数值分析的各种方法。
在科学计算中,为了求解一
组常微分方程或一些极限问题,数值分析是一种有用的方法。
数值分析是
一种运用计算机技术对复杂模型的问题进行数学分析的重要手段,它利用
数学模型和计算机程序来解决复杂的数学和科学问题。
二、实验内容
本实验通过MATLAB软件,展示了以下几种数值分析方法:
(1)拉格朗日插值法:拉格朗日插值法是由法国数学家拉格朗日发
明的一种插值方法,它可以用来插值一组数据,我们使用拉格朗日插值法
对给定的点进行插值,得到相应的拉格朗日多项式,从而计算出任意一个
点的函数值。
(2)最小二乘法:最小二乘法是一种常用的数据拟合方法,它可以
用来拟合满足一定函数的点的数据,它的主要思想是使得数据点到拟合曲
线之间的距离的平方和最小。
(3)牛顿插值法:牛顿插值法是一种基于差商的插值方法,它可以
用来插值一组数据,可以求得一组数据的插值函数。
(4)三次样条插值:三次样条插值是一种基于三次样条的插值方法,它可以用来对一组数据进行插值,可以求得一组数据的插值函数。
三、实验步骤
1.首先启动MATLAB软件。
数值分析实验报告心得(3篇)
第1篇在数值分析这门课程的学习过程中,我深刻体会到了理论知识与实践操作相结合的重要性。
通过一系列的实验,我对数值分析的基本概念、方法和应用有了更加深入的理解。
以下是我对数值分析实验的心得体会。
一、实验目的与意义1. 巩固数值分析理论知识:通过实验,将课堂上学到的理论知识应用到实际问题中,加深对数值分析概念和方法的理解。
2. 培养实际操作能力:实验过程中,我学会了使用Matlab等软件进行数值计算,提高了编程能力。
3. 增强解决实际问题的能力:实验项目涉及多个领域,通过解决实际问题,提高了我的问题分析和解决能力。
4. 培养团队协作精神:实验过程中,我与同学们分工合作,共同完成任务,培养了团队协作精神。
二、实验内容及方法1. 实验一:拉格朗日插值法与牛顿插值法(1)实验目的:掌握拉格朗日插值法和牛顿插值法的原理,能够运用这两种方法进行函数逼近。
(2)实验方法:首先,我们选择一组数据点,然后利用拉格朗日插值法和牛顿插值法构造插值多项式。
最后,我们将插值多项式与原始函数进行比较,分析误差。
2. 实验二:方程求根(1)实验目的:掌握二分法、Newton法、不动点迭代法、弦截法等方程求根方法,能够运用这些方法求解非线性方程的根。
(2)实验方法:首先,我们选择一个非线性方程,然后运用二分法、Newton法、不动点迭代法、弦截法等方法求解方程的根。
最后,比较不同方法的收敛速度和精度。
3. 实验三:线性方程组求解(1)实验目的:掌握高斯消元法、矩阵分解法等线性方程组求解方法,能够运用这些方法求解线性方程组。
(2)实验方法:首先,我们构造一个线性方程组,然后运用高斯消元法、矩阵分解法等方法求解方程组。
最后,比较不同方法的计算量和精度。
4. 实验四:多元统计分析(1)实验目的:掌握多元统计分析的基本方法,能够运用这些方法对数据进行分析。
(2)实验方法:首先,我们收集一组多元数据,然后运用主成分分析、因子分析等方法对数据进行降维。
数值分析实验报告
《数值分析》实验报告2019年5月一、问题的提出由于计算机的实质计算是在一个有限的浮点数集合上进行的,在大量运算中的误差积累会使得计算过程出现不稳定,通过实验深入了解高斯消元法从理论算法到数值算法,能稳定的关键是选主元。
二、实验名称运用MATLAB编程实现高斯消去法和高斯列主元消去法。
三、实验目的1、熟悉了解高斯消去法和高斯列主元消去法的算法。
2、学习MATLAB软件的功能。
四、基本原理五、实验环境操作环境:Windows实验平台:Matlab软件六、实验设计1 高斯顺序消去法(1)算例:课本p10例1(2)程序清单高斯消去法的MATLAB函数文件gauss.m如下:clcclear allA=[1,1,1;0,4,-1;2,-2,1];r=[6;5;1];[row,col]=size(A);n=row;%-------------------------------------------------------------------B=A;b=r;C=B;c=b;for i=1:n[maxi,row]=max(abs(C(:,i)));if C(row,i)<0maxi=-maxi;endB(i,:)=C(row,:);B(row,:)=C(i,:);b(i)=c(row);b(row)=c(i);B(i,:)=B(i,:)/maxi;b(i)=b(i)/maxi;C=B;for j=i+1:nB(j,:)=B(j,:)-C(j,i)*B(i,:);b(j)=b(j)-C(j,i)*b(i);endC=B;C(i,:)=0;C(:,i)=0;c=b;end%-------------------------------------------------------------------x(n)=b(n);for i=n-1:-1:1sum=0;for j=i+1:nsum=sum+B(i,j)*x(j);endx(i)=(1/B(i,i))*(b(i)-sum);end%-------------------------------------------------------------------% Input% Ax=rdisp(' 输入 Ax=r') disp('输入矩阵 A =')disp(A)disp(' r =')disp(r)% Output% Bx=bdisp(' 输出 Bx=b')disp(' 上三角矩阵 B =') disp(B)disp(' b=')disp(b)disp(' 求得方程组的解 :') x=x'(3)实验结果及分析:Ax=r输入矩阵 A =1 1 10 4 -12 -2 1r =651输出 Bx=b上三角矩阵 B =1.0000 -1.0000 0.5000 0 1.0000 -0.2500 0 0 1.0000b=0.50001.25003.0000求得方程组的解 :x =232 列主元消去法(1)算例:课本p10页例1(2)程序清单高斯列主元消去法的MATLAB函数文件gauss_lie.m如下:function x=gauss_lie(A,b)%采用高斯列主元法求解方程组Ax=bn=length(b);p=1:n;lu=A;y=[];for k=1:n[c,i]=max(abs(lu(k:n,k)));ik=i+k-1;if ik~=km=p(k);p(k)=p(ik);p(ik)=m;ck=lu(k,:);lu(k,:)=lu(ik,:);lu(ik,:)=ck;endif k==nbreak;lu(k+1:n,k)=lu(k+1:n,k)/lu(k,k);lu(k+1:n,k+1:n)=lu(k+1:n,k+1:n)-lu(k+1:n,k)*lu(k,k+1:n);endl=diag(ones(n,1))+tril(lu,-1);u=triu(lu);y(1)=b(p(1));for i=2:ny(i)=b(p(i))-l(i,1:i-1)*y(1:i-1)';endx(n)=y(n)/u(n,n);for i=n-1:-1:1x(i)=(y(i)-u(i,i+1:n)*x(i+1:n)')/u(i,i);endx=x';(3)实验结果及分析:>> A=[1,1,1;0,4,-1;2,-2,1];>> b=[6;5;1];>> gauss_lie (A,b);ans =13七、结果说明用消去法解方程组的基本思想都是设法消去方程组的系数矩阵A的主对角线下的元素,将AX=b化为等价的上三角形方程组,然后再通过回代过程获得方程组的解。
数值分析实验报告总结
一、实验背景数值分析是研究数值计算方法及其理论的学科,是计算机科学、数学、物理学等领域的重要基础。
为了提高自身对数值分析理论和方法的理解,我们进行了数值分析实验,通过实验加深对理论知识的掌握,提高实际操作能力。
二、实验目的1. 理解数值分析的基本理论和方法;2. 掌握数值分析实验的基本步骤和技巧;3. 培养实验设计和数据分析能力;4. 提高编程和计算能力。
三、实验内容本次实验主要分为以下几个部分:1. 线性方程组求解实验:通过高斯消元法、LU分解法等求解线性方程组,并分析算法的稳定性和误差;2. 矩阵特征值问题计算实验:利用幂法、逆幂法等计算矩阵的特征值和特征向量,分析算法的收敛性和精度;3. 非线性方程求根实验:运用二分法、牛顿法、不动点迭代法等求解非线性方程的根,比较不同算法的优缺点;4. 函数插值实验:运用拉格朗日插值、牛顿插值等方法对给定的函数进行插值,分析插值误差;5. 常微分方程初值问题数值解法实验:运用欧拉法、改进的欧拉法、龙格-库塔法等求解常微分方程初值问题,比较不同算法的稳定性和精度。
四、实验过程1. 线性方程组求解实验:首先,编写程序实现高斯消元法、LU分解法等算法;然后,对给定的线性方程组进行求解,记录计算结果;最后,分析算法的稳定性和误差。
2. 矩阵特征值问题计算实验:编写程序实现幂法、逆幂法等算法;然后,对给定的矩阵进行特征值和特征向量的计算,记录计算结果;最后,分析算法的收敛性和精度。
3. 非线性方程求根实验:编写程序实现二分法、牛顿法、不动点迭代法等算法;然后,对给定的非线性方程进行求根,记录计算结果;最后,比较不同算法的优缺点。
4. 函数插值实验:编写程序实现拉格朗日插值、牛顿插值等方法;然后,对给定的函数进行插值,记录计算结果;最后,分析插值误差。
5. 常微分方程初值问题数值解法实验:编写程序实现欧拉法、改进的欧拉法、龙格-库塔法等算法;然后,对给定的常微分方程初值问题进行求解,记录计算结果;最后,比较不同算法的稳定性和精度。
数值分析(计算方法)总结
第一章 绪论误差来源:模型误差、观测误差、截断误差(方法误差)、舍入误差ε(x )=|x −x ∗|是x ∗的绝对误差,e =x ∗−x是x ∗的误差,ε(x )=|x −x ∗|≤ε,ε为x ∗的绝对误差限(或误差限) e r =ex =x ∗−x x为x ∗ 的相对误差,当|e r |较小时,令 e r =ex ∗=x ∗−x x ∗相对误差绝对值得上限称为相对误差限记为:εr 即:|e r |=|x ∗−x ||x ∗|≤ε|x ∗|=εr绝对误差有量纲,而相对误差无量纲若近似值x ∗的绝对误差限为某一位上的半个单位,且该位直到x ∗的第一位非零数字共有n 位,则称近似值 x ∗有n 位有效数字,或说 x ∗精确到该位。
例:设x=π=3.1415926…那么x ∗=3,ε1(x )=0.1415926…≤0.5×100,则x ∗有效数字为1位,即个位上的3,或说 x ∗精确到个位。
科学计数法:记x ∗=±0.a 1a 2⋯a n ×10m (其中a 1≠0),若|x −x ∗|≤0.5×10m −n ,则x ∗有n 位有效数字,精确到10m −n 。
由有效数字求相对误差限:设近似值x ∗=±0.a 1a 2⋯a n ×10m (a 1≠0)有n 位有效数字,则其相对误差限为12a 1×101−n由相对误差限求有效数字:设近似值x ∗=±0.a 1a 2⋯a n ×10m (a 1≠0)的相对误差限为为12(a 1+1)×101−n 则它有n 位有效数字令x ∗、y ∗是x、y 的近似值,且|x ∗−x |≤η(x )、|y ∗−y |≤η(y )1. x+y 近似值为x ∗+y ∗,且η(x +y )=η(x )+η(y)和的误差(限)等于误差(限)的和 2. x-y 近似值为x ∗−y ∗,且η(x +y )=η(x )+η(y) 3. xy 近似值为x ∗y ∗,η(xy )≈|x ∗|∗η(y )+|y ∗|∗η(x ) 4. η(xy )≈|x ∗|∗η(y )+|y ∗|∗η(x )|y ∗|21.避免两相近数相减2.避免用绝对值很小的数作除数 3.避免大数吃小数 4.尽量减少计算工作量 第二章 非线性方程求根1.逐步搜索法设f (a ) <0, f (b )> 0,有根区间为 (a , b ),从x 0=a 出发, 按某个预定步长(例如h =(b -a )/N )一步一步向右跨,每跨一步进行一次根的搜索,即判别f (x k )=f (a +kh )的符号,若f (x k )>0(而f (x k -1)<0),则有根区间缩小为[x k -1,x k ] (若f (x k )=0,x k 即为所求根), 然后从x k -1出发,把搜索步长再缩小,重复上面步骤,直到满足精度:|x k -x k -1|< 为止,此时取x *≈(x k +x k -1)/2作为近似根。
数值分析实习报告总结
一、实习背景数值分析是数学的一个重要分支,它研究如何用数值方法求解数学问题。
随着计算机技术的飞速发展,数值分析在各个领域得到了广泛的应用。
为了提高自己的实践能力,我选择了数值分析作为实习课题,希望通过这次实习,能够掌握数值分析的基本方法,并将其应用于实际问题中。
二、实习过程1. 实习初期在实习初期,我首先了解了数值分析的基本概念、理论和方法。
通过阅读相关教材和文献,我对数值分析有了初步的认识。
接着,我学习了数值分析的基本方法,如泰勒展开、牛顿法、高斯消元法等。
2. 实习中期在实习中期,我选择了几个实际问题进行数值计算。
首先,我使用泰勒展开法求解一个简单的微分方程。
通过编写程序,我得到了微分方程的近似解。
然后,我运用牛顿法求解一个非线性方程组。
在实际计算过程中,我遇到了一些问题,如收敛性、迭代次数过多等。
通过查阅资料和请教导师,我找到了解决方法,成功求解了方程组。
3. 实习后期在实习后期,我进一步学习了数值分析的高级方法,如复化梯形公式、复化Simpson公式、自适应梯形法等。
这些方法在解决实际问题中具有更高的精度和效率。
我选择了一个具体的工程问题,运用复化梯形公式求解定积分。
在计算过程中,我遇到了区间细分、精度控制等问题。
通过不断尝试和调整,我得到了较为精确的积分值。
三、实习收获与体会1. 理论与实践相结合通过这次实习,我深刻体会到理论与实践相结合的重要性。
在实习过程中,我不仅学习了数值分析的理论知识,还将其应用于实际问题中。
这使我更加深刻地理解了数值分析的基本方法,提高了自己的实践能力。
2. 严谨的学术态度在实习过程中,我养成了严谨的学术态度。
在编写程序、进行数值计算时,我注重细节,力求精确。
这使我更加注重学术规范,提高了自己的学术素养。
3. 团队合作精神实习过程中,我与其他同学进行了交流与合作。
在解决实际问题时,我们互相学习、互相帮助,共同完成了实习任务。
这使我更加懂得团队合作的重要性,提高了自己的团队协作能力。
数值分析实验报告总结
数值分析实验报告总结随着电子计算机的普及与发展,科学计算已成为现代科学的重要组成部分,因而数值计算方法的内容也愈来愈广泛和丰富。
通过本学期的学习,主要掌握了一些数值方法的基本原理、具体算法,并通过编程在计算机上来实现这些算法。
算法算法是指由基本算术运算及运算顺序的规定构成的完整的解题步骤。
算法可以使用框图、算法语言、数学语言、自然语言来进行描述。
具有的特征:正确性、有穷性、适用范围广、运算工作量少、使用资源少、逻辑结构简单、便于实现、计算结果可靠。
误差计算机的计算结果通常是近似的,因此算法必有误差,并且应能估计误差。
误差是指近似值与真正值之差。
绝对误差是指近似值与真正值之差或差的绝对值;相对误差:是指近似值与真正值之比或比的绝对值。
误差来源见表表第三章泛函分析泛函分析概要泛函分析是研究“函数的函数”、函数空间和它们之间变换的一门较新的数学分支,隶属分析数学。
它以各种学科为具体背景,在集合的基础上,把客观世界中的研究对象抽象为元素和空间。
如:距离空间,赋范线性空间,内积空间。
范数范数,是具有“长度”概念的函数。
在线性代数、泛函分析及相关的数学领域,泛函是一个函数,其为矢量空间内的所有矢量赋予非零的正长度或大小。
这里以Cn空间为例,Rn空间类似。
最常用的范数就是p-范数。
那么当p取1,2,∞的时候分别是以下几种最简单的情形:1-范数:║x║1=│x1│+│x2│+?+│xn│2-范数:║x║2=1/2∞-范数:║x║∞=max其中2-范数就是通常意义下的距离。
对于这些范数有以下不等式:║x║∞≤║x║2 ≤║x║1 ≤ n1/2║x║2 ≤ n║x║∞另外,若p和q是赫德尔共轭指标,即1/p+1/q=1,那么有赫德尔不等式:|| = ||xH*y| ≤║x║p║y║q当p=q=2时就是柯西-许瓦兹不等式一般来讲矩阵范数除了正定性,齐次性和三角不等式之外,还规定其必须满足相容性:║XY║≤║X║║Y║。
数值分析实验报告
数值分析实验报告一、实验目的数值分析是一门研究用计算机求解数学问题的数值方法及其理论的学科。
本次实验的目的在于通过实际操作和编程实现,深入理解和掌握数值分析中的常见算法,提高运用数值方法解决实际问题的能力,并对算法的精度、稳定性和效率进行分析和比较。
二、实验环境本次实验使用的编程语言为 Python,使用的开发工具为 PyCharm。
实验所依赖的主要库包括 NumPy、Matplotlib 等。
三、实验内容(一)函数逼近与插值1、拉格朗日插值法通过给定的离散数据点,构建拉格朗日插值多项式,对未知点进行函数值的估计。
2、牛顿插值法与拉格朗日插值法类似,但采用了不同的形式和计算方式。
(二)数值积分1、梯形公式将积分区间划分为若干个梯形,通过计算梯形面积之和来近似积分值。
2、辛普森公式基于抛物线拟合的方法,提高积分近似的精度。
(三)线性方程组求解1、高斯消元法通过逐行消元将线性方程组化为上三角形式,然后回代求解。
2、 LU 分解法将系数矩阵分解为下三角矩阵 L 和上三角矩阵 U,然后通过两次前代和回代求解。
(四)非线性方程求解1、二分法通过不断将区间一分为二,逐步缩小根所在的区间,直到满足精度要求。
2、牛顿迭代法利用函数的切线来逼近根,通过迭代逐步收敛到根的近似值。
四、实验步骤(一)函数逼近与插值1、拉格朗日插值法定义计算拉格朗日基函数的函数。
根据给定的数据点和待求点,计算插值多项式的值。
输出插值结果,并与真实值进行比较。
2、牛顿插值法计算差商表。
构建牛顿插值多项式。
进行插值计算和结果分析。
(二)数值积分1、梯形公式定义积分区间和被积函数。
按照梯形公式计算积分近似值。
分析误差。
2、辛普森公式同样定义积分区间和被积函数。
运用辛普森公式计算积分近似值。
比较与梯形公式的精度差异。
(三)线性方程组求解1、高斯消元法输入系数矩阵和右端项向量。
进行消元操作。
回代求解方程。
输出解向量。
2、 LU 分解法对系数矩阵进行 LU 分解。
数值分析实验报告
数值分析实验报告数值分析实验报告导言数值分析是一门研究利用计算机进行数值计算和数值模拟的学科。
通过数值分析,我们可以利用数学方法和计算机技术解决实际问题,提高计算效率和精度。
本实验报告将介绍我们在数值分析实验中所进行的研究和实践。
一、实验目的本次实验的目的是通过数值分析方法,研究和解决实际问题。
具体而言,我们将通过数值计算方法,对某个物理模型或数学模型进行求解,并分析结果的准确性和稳定性。
二、实验方法我们采用了有限差分法作为数值计算的方法。
有限差分法是一种常用的数值分析方法,适用于求解偏微分方程和差分方程。
通过将连续的问题离散化为离散的差分方程,我们可以得到数值解。
三、实验步骤1. 确定问题:首先,我们需要确定要研究的问题。
在本次实验中,我们选择了热传导问题作为研究对象。
2. 建立数学模型:根据研究问题的特点,我们建立了相应的数学模型。
在热传导问题中,我们可以利用热传导方程描述热量的传递过程。
3. 离散化:为了进行数值计算,我们需要将连续的问题离散化为离散的差分方程。
在热传导问题中,我们可以将空间和时间进行离散化。
4. 求解差分方程:通过求解离散化的差分方程,我们可以得到数值解。
在热传导问题中,我们可以利用迭代法或直接求解法得到数值解。
5. 分析结果:最后,我们需要对数值解进行分析。
我们可以比较数值解和解析解的差异,评估数值解的准确性和稳定性。
四、实验结果通过数值计算,我们得到了热传导问题的数值解。
我们将数值解与解析解进行比较,并计算了误差。
结果显示,数值解与解析解的误差在可接受范围内,证明了数值计算的准确性。
此外,我们还对数值解进行了稳定性分析。
通过改变离散化步长,我们观察到数值解的变化趋势。
结果显示,随着离散化步长的减小,数值解趋于稳定,证明了数值计算的稳定性。
五、实验总结通过本次实验,我们深入了解了数值分析的基本原理和方法。
我们通过数值计算,成功解决了热传导问题,并对数值解进行了准确性和稳定性分析。
数值分析实验报告汇总
实验一、误差分析一、实验目的1.通过上机编程,复习巩固以前所学程序设计语言及上机操作指令; 2.通过上机计算,了解误差、绝对误差、误差界、相对误差界的有关概念; 3.通过上机计算,了解舍入误差所引起的数值不稳定性。
二.实验原理误差问题是数值分析的基础, 又是数值分析中一个困难的课题。
在实际计算中, 如果选 用了不同的算法,由于舍入误差的影响, 将会得到截然不同的结果。
因此, 选取算法时注重 分析舍入误差的影响, 在实际计算中是十分重要的。
同时, 由于在数值求解过程中用有限的 过程代替无限的过程会产生截断误差,因此算法的好坏会影响到数值结果的精度。
注意到y 20 1 ( 1 1 ) 0.0 0 8 7 3 0取 20 20 1 0 5 1 2 6 .:四.实验程序及运行结果 程序一 : t=log(6)-log(5);n=1;y(1)=t; for k=2:1:20 y(k)=1/k-5*y(k-1); n=n+1;实验内容对 n 0,1,2, ,20 ,计算定积分y n nx x5dx算法 1:利用递推公式1 y n 5y n 1 n n 1,2, ,201 y 0dx ln6 ln5 0.18 2322 取 0 x 5 . 算法 2:利用递推公式11 y n 1 5n5y nn 20,19, ,1 11261 x 20dx 60 1 20 1 0x x 5dx 51 0 x 20dx 1 105endyy =0.0884y =0.0581y =0.0431y =0.0346y =0.0271y =0.0313y =-0.0134y =0.1920y =-0.8487y =4.3436y =-21.6268y =108.2176y =-541.0110y =2.7051e+003y =-1.3526e+004y =6.7628e+004y =-3.3814e+005y =1.6907e+006y =-8.4535e+006y =4.2267e+007程序2:y=zeros(20,1);n=1;y1=(1/105+1/126)/2;y(20)=y1;for k=20:-1:2 y(k-1)=1/(5*k)-(1/5)*y(k); n=n+1; end运行结果:y =0.08840.05800.04310.03430.02850.02120.01880.01690.01540.01410.01300.01200.01120.01050.00990.00930.0089实验二、插值法一、实验目的1、理解插值的基本概念,掌握各种插值方法,包括拉格朗日插值和牛顿插值等,注意其不同特点;2、通过实验进一步理解并掌握各种插值的基本算法。
数值分析实习报告总结
数值分析实习报告总结首先,我想对我所参加的数值分析实习课程表示由衷的感谢。
这次实习让我对数值分析这门学科有了更深入的理解,并且让我在实际操作中掌握了许多有用的技能和知识。
在这篇实习报告总结中,我将回顾我在实习过程中的学习经历,总结我在实习中学到的主要内容,并分享我的一些感悟。
实习的第一周,我主要学习了数值分析的基本概念和方法。
通过阅读教材和参加课堂讨论,我了解了数值分析的重要性以及在工程、科学和商业领域中的应用。
我学习了插值、线性代数、微分方程等数值方法的原理和实现方式。
此外,我还通过实际编程练习,掌握了使用数值分析方法解决实际问题的基本技能。
在实习的第二周,我深入学习了Lagrange插值和数值线性代数。
我了解到Lagrange插值是一种构造多项式以通过一组给定的点的方法,它在插值和逼近方面有广泛的应用。
通过编写代码实现Lagrange插值算法,我学会了如何利用已知的数据点来预测未知的点。
此外,我还学习了数值线性代数中的矩阵运算、特征值问题和线性方程组的求解方法,这些方法对于解决实际问题非常重要。
在实习的第三周,我学习了数值微积分和数值求解微分方程的方法。
我了解到数值微积分是利用数值方法近似计算积分和导数的过程,它在信号处理和物理模拟等领域有广泛应用。
通过编写代码实现数值积分和数值导数算法,我学会了如何近似计算函数的积分和导数。
此外,我还学习了如何使用数值方法求解常微分方程和偏微分方程,这些方法对于解决工程和科学领域中的问题非常重要。
在实习的过程中,我也遇到了一些困难和挑战。
例如,在实现数值算法时,我常常会遇到编程错误和数值误差的问题。
通过与同学和老师的讨论和交流,我学会了如何调试代码和减小数值误差的方法。
这些经验让我更加熟悉编程和数值分析的方法,并且提高了我的问题解决能力。
通过这次数值分析实习,我不仅学到了许多关于数值分析的知识和技能,还提高了自己的编程能力和问题解决能力。
我相信这些知识和技能将在我未来的学习和工作中发挥重要作用。
数值分析编程总结
1. LU分解:[L U]=lu(A);2. 追赶法function x=zhuiganfa(A,b)[n,n]=size(A);for i=1:nif(i==1)l(i)=A(i,i);y(i)=b(i)/l(i);elsel(i)=A(i,i)-A(i,i-1)*u(i-1);y(i)=(b(i)-y(i-1)*A(i,i-1))/l(i);endif(i<n)u(i)=A(i,i+1)/l(i);endendx(n)=y(n)for j=n-1:-1:1x(j)=y(j)-u(j)*x(j+1);end数值试验:n=101;a= 12 1 0 01 12 1 00 1 12 1 00 0 1 12 1 011 12关键是如何定义上述矩阵:>>n=101;c1=ones(1,n-1);a1=diag(c1,-1); 这个-1说明行位置-1c2=12*ones(1,n);a2=diag(c2);c3=ones(1,n-1);a3=diag(c3,1);a=a1+a2+a3;3. 拉格朗日插值function yh=lage(x,y,xh)n=length(x);m=length(xh);yh=zeros(1,m);c1=ones(n-1,1);c2=ones(1,m);for i=1:nxp=x([1:i-1 i+1:n]);yh=yh+y(i)*prod((c1*xh-xp'*c2)./(x(i)-xp'*c2)); endend>> x=[11,12];>> y=[2,4];>>xh=[11.75];>>lage(x,y,xh)ans =3.50004 最小二乘法1.要拟合的函数为:y=a+bx-cxy注意不是多项式2.编程函数为:function z = erchen(x,y)x1=ones(5,1);A=[x1,x,-x.*y]; 注意点乘z=A\y; 注意左除a=z(1);b=z(2);c=z(3);end输入:≻≻ x=[1953 1964 1982 1990 2000]';≻≻ y=[5.82 6.95 10.08 11.34 12.66]';≻≻erchen(x,y)ans =2.9456 =a-0.0014 =b-0.0005 =c1.要拟合的函数为:y=a+bx+cx是多项式2.编程函数为:function z = erchen2(x,y)x1=ones(5,1);A=[x1,x,x.^2];z=A\y;a=z(1);b=z(2);c=z(3);end输入:≻≻ x=[0 0.25 0.5 0.75 1.00]';≻≻ y=[1.00 1.284 1.6487 2.1170 2.7183]';≻≻ erchen2(x,y)ans =1.00510.86420.8437最小二乘多项式拟合的简单函数方法:≻≻ x=[0 0.25 0.5 0.75 1.00]';≻≻ y=[1.00 1.284 1.6487 2.1170 2.7183]';≻≻ P=polyfit(x,y,2) 要拟合成4次,则2改成4就可以了P =0.8437 0.8642 1.0051 注意此内置函数输出的结果c,b,a是反的5 复合辛普森公式求解积分先定义函数:function v=f(x)v=sin(x);“若定义有除数要点除,分母有0时要特殊定义”end定义程序:function I=fsps(f,a,b,n)h=(b-a)/n;x=linspace(a,b,2*n+1);y=feval(f,x);I=(h/6)*(y(1)+2*sum(y(3:2:2*n-1))+4*sum(y(2:2:2*n))+y(2*n+1));end>>fsps('f ',0,1,4)ans =0.45976.不动点迭代思路不动点迭代常常有好几个迭代的不动点函数,所以要分别定义这些函数是很困难的,如是乎使用SWITCH内置函数进行切换,叫切换函数.1.先定义函数后进行编程的方法先需要定义不动点函数:function v=f(x)v=x^3-x-1;end再定义编程:function [it,x]=fixpnt1(f,a,maxit,tol)it=0;x=feval(f,a);while it<=maxit& abs(x-a)>tol,it=it+1;a=x;x=feval(f,a);end此函数的调用:>> fixpnt1('f',2,100,1e-5)ans =13.利用切换函数SWITCH的方法(多个不动点迭代函数)function [x,it]=fixpnt(np,a,maxit,tol)switchnp,case 1,phi=inline('(3*x+10)^(1/5)');case 2,phi=inline('sin(10*x)+2*cos(x)-3');case 3,phi=inline('3-atan(x)');case 4,phi=inline('-2-1/log(x^2+x+1)');endit=0;x=phi(a);while it<=maxit& abs(x-a)>tol,it=it+1;a=x;x=phi(a);end使用与输入:>>fixpnt(2,1,100,1e-5)ans =-4.26967.雅可比迭代function [x it]=jacobi(A,b,tol)D=diag(diag(A));L=D-tril(A);U=D-triu(A);x=zeros(size(b));for it=1:500x=D\(b+L*x+U*x);error=norm(b-A*x)/norm(b);if (error<tol)break;endend8.高斯迭代function [x it]=gaosi(A,b,tol)D=diag(diag(A));L=D-tril(A);U=D-triu(A);x=zeros(size(b));for it=1:500x=(D-L)\(b+U*x);error=norm(b-A*x)/norm(b);if (error<tol)break;endend9. SOR迭代function [x it]=SOR(A,b,w,tol)D=diag(diag(A));L=D-tril(A);U=D-triu(A);x=zeros(size(b));for it=1:500x=(D-w*L)\(w*b+(1-w)*D*x+w*U*x); error=norm(b-A*x)/norm(b);if (error<tol)break;endend10.二分法:1. 先要定义所求的函数:function v=f(x)v=x^3-x-1;end2. 二分法程序如下:function [x,it]=erfengfa(a,b,f,tol)fa=feval(f,a);fb=feval(f,b);it=0;while abs(b-a)>tol,it=it+1;x=a/2+b/2;fx=feval(f,x);if sign(fx)==sign(fa),a=x;fa=fx;elseb=x;fb=fx;endend11. 牛顿法:1.先定义函数后进行编程的方法先需要定义不动点函数需要计算的函数ffunction v = f( x )v=x^5-3*x-10;end需要计算的函数的导数gfunction v = g( x )v=5*x^4-3;end2. 再定义编程:function v = newton(a,f,g,maxit,tol) it=0;x=a;whileit<=maxit& abs(feval(f,x))>tol, it=it+1;x=x-feval(f,x)/feval(g,x);endv=[x,it];end12. 牛顿下山法:1.先定义函数后进行编程的方法先需要定义不动点函数需要计算的函数ffunction v = f(x)v=x^2+sin(10*x)-1end需要计算的函数的导数gfunction v =g(x)v = 2*x+10*cos(10*x)end2. 再定义编程1:function v = newtonxiashang(x0,f,g,maxit,tol)x=x0;it=0;while it<=maxit& abs(feval(f,x))>tol,it=it+1;d=-feval(f,x)/feval(g,x);lambda=1;isdone=0;while ~isdone,xn=x+lambda*d;if abs(feval(f,xn))<abs(feval(f,x)),isdone=1;else lambda=lambda*0.5;endendx=xn;endv=[x,it];end3. 再定义编程2:function v = newtonxiashang2(x0,f,g,maxit,tol) x=x0;it=0;while it<=maxit& abs(feval(f,x))>tol,it=it+1;d=-feval(f,x)/feval(g,x);lambda=1;whileabs(feval(f,x+lambda*d))>=abs(feval(f,x)), lambda=0.5*lambda;endx=x+lambda*d;endv=[x,it];end13. 割线法1.先定义函数后进行编程的方法先需要定义函数需要计算的函数ffunction v = f( x )v=x^5-3*x-10;end2. 再定义编程:function v = gexian(a,b,f,maxit,tol)it=0;x0=a;x=b;while it<=maxit& abs(feval(f,x))>tol,it=it+1;xt=x-feval(f,x)/(feval(f,x)-feval(f,x0))*(x-x0); x0=x;x=xt;endv=[x,it];end输入:>>gexian(1,2,'f',100,1e-5)ans =1.7226 7.000014. 乘幂法function [t,y] = chenmifa( a,xinit,ep )v0=xinit;[tvti]= max(abs(v0));lam0=v0(ti);u0=v0/lam0;flag=0;while (flag==0)v1=a*u0;[tvti]= max(abs(v1));lam1=v1(ti);u0=v1/lam1;if (abs(lam0-lam1)<=ep)flag=1;endlam0=lam1;endt=lam1;y=u0;end运行及其结果:>> a=[2,3,2;10,3,4;3,6,1];>>xinit=[1 1 1]';>>ep=0.0001;>> [t y]=chenmifa(a,xinit,ep)t =11.0000y =0.50001.00000.750015. 反幂法function [t y] =fanmifa( a,xinit,ep ) v0=xinit;[tvti]= max(abs(v0));lam0=v0(ti);u0=v0/lam0;flag=0;while (flag==0)v1=a^-1*u0;[tvti]= max(abs(v1));lam1=v1(ti);u0=v1/lam1;if (abs(lam0^-1-lam1^-1)<=ep) flag=1;endlam0=lam1;endt=lam1^-1;y=u0;end运行提示:>> a=[12 6 -6;6 16 2;-6 2 16]; >>xinit=[1 -0.5 0.5]';>> [t y] =fanmifa( a,xinit,0.0001 ) t =4.4560y =1.0000-0.62870.628716. 结合原点平移反幂法function [t y] =yuandian( a,p,xinit,ep ) [n n]=size(a);v0=xinit;[tvti]= max(abs(v0));lam0=v0(ti);u0=v0/lam0;flag=0;while (flag==0)v1=(a-p*eye(n))^-1*u0;[tvti]= max(abs(v1));lam1=v1(ti);u0=v1/lam1;if (abs(lam0^-1-lam1^-1)<=ep)flag=1;endlam0=lam1;endt=lam1^-1+p;y=u0;end运行结果:>> a=[6 2 1;2 3 1;1 1 1];>> p=6;>>ep=0.0001;>>xinit=[1 1 1]';>> [t y]=yuandian(a,p,xinit,ep)t =7.2880y =1.00000.52290.242217. 欧拉公式初值问题1. 先定义导数函数f:function v = f( x,y)v=-y+x+1;end2. 定义欧拉公式编程:function [x,y] = oula( f,y0,a,b,n )y(1)=y0;h=(b-a)/n;x=a:h:b;for i=1:n;y(i+1)=y(i)+h*feval(f,x(i),y(i));endend18. 改进的欧拉公式初值问题1. 先定义导数函数f:function v = f( x,y)v=-y+x+1;end要先运行一下。
数值分析实验报告(包括高斯消去、二分法、牛顿迭代法)
for k=1:N
x=(a+b)/2;
fx=feval(f,x);fa=feval(f,a);
if abs((b-a)/2)<e || abs(fx)<e
disp('the number of iterations is');k
f=input('please enter a function:f(x)=');
x0=input('please enter the initial value:x0=');
e=input('please enter error:e=');
N=input('please enter the largest number of iterations:N=');
disp('the approximate solution is');x
disp('f(x) is');fx
disp('the number of iterations is');k
return
else
x0=x;
end
end
end
disp('The maximum number of iterations is reached, stop calculation');
开课学院、实验室:实验时间:2014年1月1日
课程
名称
数值分析基础性实验
实验项目
名称
数值计算算法及实现
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
7. 一阶微分方程组与高阶方程初值问题如何求解?导出下述三阶方程初值问题的龙格-库塔公式
8. 什么叫高斯公式和高斯点?是高斯点的充要条件是什么?怎
样求高斯点和高斯公式?高斯公式有何优点和缺点?
9. 什么叫待定系数法?怎样利用它确定数值积分公式?有什么优点和缺点?
10. 插值型求导公式是怎样形成的?其误差怎样估计?为什么使用插值型求导
s =1.7178
复习思考题
1. 为什么要研究微分方程数值解?本章主要研究的是怎样一类初值问题?
2. 何谓方法的阶与局部截断误差?
3. 何谓单步法、多步法?何谓显示公式、隐式公式?四阶龙格-库塔法属于哪一类?
4. 线性多步法的优缺点是什么?
5. 预测-校正公式有何特点与优点?
6. 试述用带误差修正的四阶阿当姆斯预测-校正公式(或哈明公式)解初值问题的计算步骤
6 0.600000 1.508966
7 0.700000 1.580338
8 0.800000 1.649783
9 0.900000 1.717779
10 1.000000 1.784771
自己收集整理的
错误在所难免
仅供参考交流
如有错误
请指正!谢谢
第九章 解常微分方程初值问题
1. Euler方法
在x, y平面上微分方程①的解 在曲线上一点 (x, y) 的切线斜率等于函数的值.该曲线的顶点设为p,再推进到p(),
(1+(1+ hL)+(1+ hL)2+...+(1+ hL) n-1 )T
因为e0=0,于是
∣en∣≤((1+ hL)n-1)/((1+ hL)-1)T=((1+ hL)n-1)/(hL)T
≤(eL(b-a)-1)/(hL)T=O(h)
注意:局部截断误差和整体截断误差关系,前者是O(h2),后者是O(h)
公式要注意误差分析?样条插值求导有什么优点?
??
??
??
??
新疆大学 - 1 - 数学与系统科学院
for k=1:n
x(k+1)=x(1)+k*h; %以算法公式进行计算
y(k+1)=y(k)+h*f(x(k),y(k));
end
disp(sprintf(' k x(k) y(k)')); %以规定格式输出k,x(k),y(k)
显然两个顶点p, p的坐标有以下关系
这就是著名的Euler公式具体公式为 (1)
为了易于理解下面给出了一个例子;
例1.用Euler方法解初值问题,h=0.1
,
解: 取步长为h=0.1 计算结果见表:
=
Euler方法的整体截断误差为: = y(x n)-y n
= +h* (f ()-f ()
∣en+1∣≤∣en∣+h*L∣en∣+T=(1+ h*L)∣en∣+T
这里L是f(x,y)关于y的Lipshitz常数,T= h2/2max∣f(x)∣.于是
∣en∣≤(1+ hL)∣en-1∣+T≤(1+ hL) n∣e0∣+
for i=1:n
disp(sprintf(' %d %f %f',i,x(i+1),y(i+1))); %再刚才规定的k,x(k),y(k)下面分别输出计算结果.
End s=y(k);
运行结果:
s=Euler('y-2*x/y',1,0,1,10)
k x(k) y(k)
x y y(x) en =y(x)-y 0.1 1.10000000000000 1.09544511501033 -0.0046 0.2 1.19181818181818 1.18321595661992 -0.0086 0.3 1.27743783371472 1.26491106406735 -0.0125 0.4 1.35821259956029 1.34164078649987 -0.0166 0.5 1.43513291865780 1.41421356237310 -0.0209 0.6 1.50896625356633 1.48323969741913 -0.0258 0.7 1.58033823765522 1.54919333848297 -0.0311 0.8 1.64978343104771 1.61245154965971 -0.0373 0.9 1.71777934786009 1.67332005306815 -0.0445 1.0 1.78477083249798 1.73205080756888 -0.0527 分析可知误差是积累的.
并分析最好的方法
再给出它的流程图
③ 实验结束后写出完整的实验报告
算法说明:①经过所给出的方程组和初值初步改变方程组
① 由以上四种方法的计算公式来逐步计算y的每个值
② 最后为了方便比较列为表最适合
上机例题:例1.用Euler方法解初值问题,h=0.1
Matlab程序:
function s=Euler(f,y0,a,b,n)
f=inline(f); %定义f
h=(b-a)/n; %决定步长
y(1)=y0;x(1)=a; %腻植
后者是前者的n倍.这一关系是一般性的,以后的方法有这一关系出现.我们将直接引用而不给证明.
注:(以下各方法只给出了局部截断误差和整体截断误差的公式
没有提供推导过程
)
上机实验⑴
上机题目:贬值求一阶常微分方程的初
进过计算结果来分析四种方法的优缺点
掌握规律
分析结果
实验要求:用不同的方法来解同一个例子
① 上机前充分准备
复习有关内容
写出计算步骤
查对程序
② 用Euler 法进行运算
下面来讨论一下 Euler方法的误差估计
先来看一下Euler方法的误差估计..这里就需要我们先介绍两个概念:.
局部截断误差Tn+1= y(x n+1)-y(x n)-h*f()
整体截断误差en= y(x n)-y n
所以Euler方法的局部截断误差为
y (x n)-h*f(
=
1 0.100000 1.100000
2 0.200000 1.191818
3 0.300000 1.277438
4 0.400000 1.358213
5 0.500000 1.435133