数值分析课程报告

合集下载

数值分析(计算方法)课程设计实验报告(附程序)

数值分析(计算方法)课程设计实验报告(附程序)

n=4 时,max[L(X)-h(X)]=0.4020;
n=8 时,max[L(X)-h(X)]=0.1708;
n=10 时,max[L(X)-h(X)]=0.1092。
图象分析: 从图象可以看出随着插值节点数的增加出现异常的摆动,中间能较好的接近 原函数,但两边却出现很大的误差。
(3).对定义在(-5,5)上的函数
程序代码 2:
x=[-1:0.2:1]; y=1./(1+25.*x.^2); x0=[-1:0.01:1]; y0=lagrange(x,y,x0); y1=1./(1+25.*x0.^2);
plot(x0,y0,'--r'); hold on; plot(x0,y1,'-b'); x2=abs(y0-y1); max(x2) ; 程序代码3: n=3; for i=1:n x(i)=cos(((2.*i-1).*pi)./(2.*(n+1))); y(i)=1./(1+25.*x(i).*x(i)); end x0=-1:0.01:1; y0=lagrange(x,y,x0); y1=1./(1+25.*x0.^2); plot(x0,y0,'--r') hold on plot(x0,y1,'-b')
以 x1,x2,„,xn+1 为插值节点构造上述各函数的 Lagrange 插值多项式, 比较其 结果。
设计过程: 已知函数 f(x)在 n+1 个点 x0,x1,…,xn 处的函数值为 y0,y1,…,yn 。 求一 n 次多 项式函数 Pn(x),使其满足: Pn(xi)=yi,i=0,1,…,n. 解决此问题的拉格朗日插值多项式公式如下

数值分析报告

数值分析报告

一、问题描述、模型确立,以及符号说明一个蹦极爱好者准备从一高空热气球跳下,所用橡皮带长度为L 。

为保证安全,必须要预知最大加速度、速度和总下落高度,确保使力不会太大而且气球足够高以保证蹦极者的不会撞到地面。

考虑空气动力学阻力,控制方程为2202(/)()()()Jd x dx kc sign dx dt x L u x L g dt dt m ++--=, 其中29.8/g m s =为重力加速度;0c 和阻力系数成比例,单位为1m -;k 为橡皮带的弹性系数,单位为/N m ;J m 为蹦极者的质量;()sign z 为符号函数,()u z 为单位阶跃函数,即1,0,()0,0,1,0,z sign z z z >⎧⎪==⎨⎪-<⎩1,0,()0,0.z u z z >⎧⎨≤⎩如果10150,70,10/,0.00324J L m m kg k N m c m -====,初始条件为零。

(1)确定最大下落高度、最大下降速度,以及最大加速度。

(2)画出位移、速度、加速度曲线。

二、模型求解2.1 模型标准化问题描述中已经给出数学模型,只需将二阶常微分方程转换成一阶常微分方程组,便可用数值方法求解。

以求精度,这里选用变步长四阶Runge Kutta -法求解。

这里令()x(t)h t =,()dxv t dt=。

转换后的一阶常微分方程组为 20()()()g [()][()]c [()][()]J h t v t k v t h t L u h t L sign t t m νν'=⎧⎪⎨'=----⎪⎩记1(,(),())(t)f t h t t νν=220(,(),())g (())(())c (())(())Jkf t h t t h t L u h t L sign t t m ννν=----;再将微分方程组转换成差分方程组n+1123411234h (22)6(L 22)6n n n h K K K K v v L L L δδ+⎧=++++⎪⎪⎨⎪=++++⎪⎩其中11(,,)n n n K f t h ν=; 12L (,,)n n n f t h ν=;2111(,K ,)222n n n K f t h L δδδν=+++; 2211(,K ,)222n n n L f t h L δδδν=+++; 3122K (,K ,)222n n n f t h L δδδν=+++; 3222(,K ,)222n n n L f t h L δδδν=+++;4133K (,,)n n n f t h K L δδνδ=+++; 4233(,,)n n n L f t h K L δδνδ=+++;2.2 Matlab 程序%单位阶跃函数FunStep.m ,即()u z 函数程序 function y=FunStep(x) if (x>0) y=1; else y=0; end end%符号函数FunSign.m ,即()sign z 函数程序 function y=FunSign(x) if (x>0) y=1; else if (x<0) y=-1; elsey=0; endendend%由于1(,(),())f t h t tν比较简单,可以不用单独编写相应的函数%函数FunF2.m对应2(,(),())f t h t tνfunction y=FunF2(x)L=150;mj=70;k=10;c0=0.00324;g=9.8;y=g-k/mj*FunStep(x(1)-L)*(x(1)-L)-c0*FunSign(x(2))*x(2)^2; end%迭代函数FunIter.mfunction y=FunIter(x,h)K1=x(2);L1=FunF2(x);K2=x(2)+h/2*L1;L2=FunF2(x+h/2*[K1,L1]);K3=x(2)+h/2*L2;L3=FunF2(x+h/2*[K2,L2]);K4=x(2)+h*L3;L4=FunF2(x+h*[K3,L3]);y(1)=x(1)+h/6*(K1+2*K2+2*K3+K4);y(2)=x(2)+h/6*(L1+2*L2+2*L3+L4);y(3)=L4;end%变步长函数FunVarStepS.mfunction y=FunVarStepS(x,h)y1=FunIter(x,h);y2=FunIter(x,h/2);y2=FunIter(y2(1:2),h/2);sum=2;%变量sum表示步长多次折半后的总的步数,初始值为2while(abs(y2-y1)>1.0e-06)sum=2*sum;y2=FunIter(x,h/sum);for i=2:sumy2=FunIter(y2(1:2),h/sum);endendy=y2;end%脚本文件%用矩阵y的第一行存储位移值h,第二行存储速度值v,第三行存储加速度a y(1,1)=0;%矩阵y第一行的第一个数值为位移初始值y(2,1)=0;%矩阵y第二行的第一个数值为速度初始值y(3,1)=9.8;%矩阵y第三行的第一个数值为加速度初始值MaxDpm=0;%变量MaxDpm存放下落高度最大值MaxVel=0;%变量MaxVel存放下落速度最大值MaxAcc=9.8;%变量MaxAcc存放最大加速度值h=0.001;%h为步长n=100000;%n为迭代次数for i=2:ny(:,i)=FunVarStepS(y(1:2,i-1)',h);if(MaxDpm<y(1,i))MaxDpm=y(1,i);endif(MaxVel<y(2,i))MaxVel=y(2,i);endif(abs(MaxAcc)<abs(y(3,i)))MaxAcc=y(3,i);endendMaxDpm %显示最大下降高度MaxVel %显示最大下降速度MaxAcc %显示最大加速度%显示位移、速度和加速度曲线图n1=find(y(1,:)==MaxDpm);n1=n1/1000;n2=find(y(2,:)==MaxVel);n2=n2/1000;n3=find(y(3,:)==MaxAcc);n3=n3/1000;plot(1:n,y(1,:));title('位移曲线');xlabel('t(10^-3s)');ylabel('h(m)');text(n1,MaxDpm,['(',num2str(n1),'s',',',num2str(MaxDpm),'m',')']);figure;plot(1:n,y(2,:));title('速度曲线');xlabel('t(10^-3s)');ylabel('v(m/s)');text(n2,MaxVel,['(',num2str(n2),'s',',',num2str(MaxVel),'m/s',')']);figure;plot(1:n,y(3,:));title('加速度曲线');xlabel('t(10^-3s)');ylabel('a(m/s^2)');text(n3,MaxAcc,['(',num2str(n3),'s',',',num2str(MaxAcc),'m/s^2',')']) ;2.3程序运行结果>> SolveOdeMaxDpm =308.2827MaxVel =44.3510MaxAcc =-12.81182.4 位移、速度,以及加速度曲线012345678910x 10450100150200250300350位移曲线t (10-3s )h (m )012345678910x 104-30-20-1001020304050速度曲线t (10-3s )v (m /s )三总结通过程序运行结果可知,经过11.474s 达到最大下落高度308.2827m ,经过6.536s 达到最大下落速度44.3510/m s ,经过11.474s 最大加速度为—12.81182/m s 。

数值分析实验报告心得(3篇)

数值分析实验报告心得(3篇)

第1篇在数值分析这门课程的学习过程中,我深刻体会到了理论知识与实践操作相结合的重要性。

通过一系列的实验,我对数值分析的基本概念、方法和应用有了更加深入的理解。

以下是我对数值分析实验的心得体会。

一、实验目的与意义1. 巩固数值分析理论知识:通过实验,将课堂上学到的理论知识应用到实际问题中,加深对数值分析概念和方法的理解。

2. 培养实际操作能力:实验过程中,我学会了使用Matlab等软件进行数值计算,提高了编程能力。

3. 增强解决实际问题的能力:实验项目涉及多个领域,通过解决实际问题,提高了我的问题分析和解决能力。

4. 培养团队协作精神:实验过程中,我与同学们分工合作,共同完成任务,培养了团队协作精神。

二、实验内容及方法1. 实验一:拉格朗日插值法与牛顿插值法(1)实验目的:掌握拉格朗日插值法和牛顿插值法的原理,能够运用这两种方法进行函数逼近。

(2)实验方法:首先,我们选择一组数据点,然后利用拉格朗日插值法和牛顿插值法构造插值多项式。

最后,我们将插值多项式与原始函数进行比较,分析误差。

2. 实验二:方程求根(1)实验目的:掌握二分法、Newton法、不动点迭代法、弦截法等方程求根方法,能够运用这些方法求解非线性方程的根。

(2)实验方法:首先,我们选择一个非线性方程,然后运用二分法、Newton法、不动点迭代法、弦截法等方法求解方程的根。

最后,比较不同方法的收敛速度和精度。

3. 实验三:线性方程组求解(1)实验目的:掌握高斯消元法、矩阵分解法等线性方程组求解方法,能够运用这些方法求解线性方程组。

(2)实验方法:首先,我们构造一个线性方程组,然后运用高斯消元法、矩阵分解法等方法求解方程组。

最后,比较不同方法的计算量和精度。

4. 实验四:多元统计分析(1)实验目的:掌握多元统计分析的基本方法,能够运用这些方法对数据进行分析。

(2)实验方法:首先,我们收集一组多元数据,然后运用主成分分析、因子分析等方法对数据进行降维。

武汉理工大学计算机学院数值分析实验报告

武汉理工大学计算机学院数值分析实验报告

武汉理工大学计算机学‎院数值分析实验报告‎武汉理工大学计算机学‎院数值分析实验报告‎‎篇一:数‎值分析实验报告学‎生实验报告‎书实验课程名称开‎课学院指导教‎师姓名学生姓‎名学生专业班级数‎值分析计算机科学与‎技术学院熊盛武 2‎01X—— 201X‎学年第二学期‎实验课程名称:‎数值分析‎篇‎二:数值分‎析实验报告武汉理工‎大学学生实验‎报告书实验课‎程名称:数‎值分析开课‎名学生姓名‎:201X‎1—— 201X学年‎第二学期第一‎次试验(1)‎二分法计算流程图:‎简单迭代法算‎法流程图:(‎2)(3)牛‎顿迭代法流程图:‎(4)弦截法算法‎程序流程图:‎‎篇三:‎数值分析实验报告湖‎北民族学院理学院《数‎值分析》课程实验报告‎(一)湖北民‎族学院理学院《数值分‎析》课程实验报告‎(二) xn?)篇‎四:数值分析‎实验报告数值分析实‎验报告姓名:‎学号:学院‎:老师:‎ XXX XXX‎X实验一一‎、实验内容用雅克比‎迭代法和高斯塞德尔迭‎代法求解课本例‎3.1,设置精度为1‎0-6。

?8-32‎??x1??20??‎?411?‎1??x233‎??6312??x?‎?36? ??3‎??二、实验‎公式 ?? 雅克‎比迭代法的基本思想:‎设方程组Ax‎?b的系数矩阵的对角‎线元素 ??aii?‎0(i?1,2,..‎.,n),根据方程组‎A x?b推导出一个迭‎代公式,然后将任意选‎取的?(0)?‎(1)?(1)‎?(2) xx‎x x一初始向量代入迭‎代公式,求出,再以代‎入同一迭代公式,求出‎,1、雅克比‎迭代法 ?(k)?(‎k) {x}{x}收‎敛时,如此反复进行,‎得到向量序列。

当其极‎限即为原方程组的解。

‎2、高斯塞德‎尔迭代法:‎在雅可比(Jacbi‎)迭代法中,如果当新‎的分量求出后,马上用‎它来代替旧的分量,‎则可能会更快地接近方‎程组的准确解。

基于这‎种设想构造的迭代公式‎称为高斯-塞德尔(G‎a uss-Seide‎l)迭代法。

数值分析实验报告总结

数值分析实验报告总结

一、实验背景数值分析是研究数值计算方法及其理论的学科,是计算机科学、数学、物理学等领域的重要基础。

为了提高自身对数值分析理论和方法的理解,我们进行了数值分析实验,通过实验加深对理论知识的掌握,提高实际操作能力。

二、实验目的1. 理解数值分析的基本理论和方法;2. 掌握数值分析实验的基本步骤和技巧;3. 培养实验设计和数据分析能力;4. 提高编程和计算能力。

三、实验内容本次实验主要分为以下几个部分:1. 线性方程组求解实验:通过高斯消元法、LU分解法等求解线性方程组,并分析算法的稳定性和误差;2. 矩阵特征值问题计算实验:利用幂法、逆幂法等计算矩阵的特征值和特征向量,分析算法的收敛性和精度;3. 非线性方程求根实验:运用二分法、牛顿法、不动点迭代法等求解非线性方程的根,比较不同算法的优缺点;4. 函数插值实验:运用拉格朗日插值、牛顿插值等方法对给定的函数进行插值,分析插值误差;5. 常微分方程初值问题数值解法实验:运用欧拉法、改进的欧拉法、龙格-库塔法等求解常微分方程初值问题,比较不同算法的稳定性和精度。

四、实验过程1. 线性方程组求解实验:首先,编写程序实现高斯消元法、LU分解法等算法;然后,对给定的线性方程组进行求解,记录计算结果;最后,分析算法的稳定性和误差。

2. 矩阵特征值问题计算实验:编写程序实现幂法、逆幂法等算法;然后,对给定的矩阵进行特征值和特征向量的计算,记录计算结果;最后,分析算法的收敛性和精度。

3. 非线性方程求根实验:编写程序实现二分法、牛顿法、不动点迭代法等算法;然后,对给定的非线性方程进行求根,记录计算结果;最后,比较不同算法的优缺点。

4. 函数插值实验:编写程序实现拉格朗日插值、牛顿插值等方法;然后,对给定的函数进行插值,记录计算结果;最后,分析插值误差。

5. 常微分方程初值问题数值解法实验:编写程序实现欧拉法、改进的欧拉法、龙格-库塔法等算法;然后,对给定的常微分方程初值问题进行求解,记录计算结果;最后,比较不同算法的稳定性和精度。

数值分析实验报告模板

数值分析实验报告模板

数值分析实验报告模板篇一:数值分析实验报告(一)(完整)数值分析实验报告12345篇二:数值分析实验报告实验报告一题目:非线性方程求解摘要:非线性方程的解析解通常很难给出,因此线性方程的数值解法就尤为重要。

本实验采用两种常见的求解方法二分法和Newton法及改进的Newton法。

利用二分法求解给定非线性方程的根,在给定的范围内,假设f(x,y)在[a,b]上连续,f(a)xf(b) 直接影响迭代的次数甚至迭代的收敛与发散。

即若x0 偏离所求根较远,Newton法可能发散的结论。

并且本实验中还利用利用改进的Newton法求解同样的方程,且将结果与Newton法的结果比较分析。

前言:(目的和意义)掌握二分法与Newton法的基本原理和应用。

掌握二分法的原理,验证二分法,在选对有根区间的前提下,必是收敛,但精度不够。

熟悉Matlab语言编程,学习编程要点。

体会Newton使用时的优点,和局部收敛性,而在初值选取不当时,会发散。

数学原理:对于一个非线性方程的数值解法很多。

在此介绍两种最常见的方法:二分法和Newton法。

对于二分法,其数学实质就是说对于给定的待求解的方程f(x),其在[a,b]上连续,f(a)f(b) Newton法通常预先要给出一个猜测初值x0,然后根据其迭代公式xk?1?xk?f(xk) f'(xk)产生逼近解x*的迭代数列{xk},这就是Newton法的思想。

当x0接近x*时收敛很快,但是当x0选择不好时,可能会发散,因此初值的选取很重要。

另外,若将该迭代公式改进为xk?1?xk?rf(xk) 'f(xk)其中r为要求的方程的根的重数,这就是改进的Newton 法,当求解已知重数的方程的根时,在同种条件下其收敛速度要比Newton法快的多。

程序设计:本实验采用Matlab的M文件编写。

其中待求解的方程写成function的方式,如下function y=f(x);y=-x*x-sin(x);写成如上形式即可,下面给出主程序。

数值分析课程实验报告

数值分析课程实验报告

数值分析课程实验报告
《数值分析》课程实验报告
实验名称用二分法和迭代法求方程的根
成绩
一、实验目的
掌握利用二分法以及迭代法求方程近似根的方法,并学会运用matlab软件编写程序,求解出方程的根,对迭代法二分法进一步认识并灵活运用。

二、实验内容
比较求方程50xxe的根,要求精确到小数点后的第4位1.在区间[0,1]内用二分法;
2.用迭代法1/5kxkxe,取初值00.25x.三、算法描述
1、二分法:二分法是最简单的求根方法,它是利用连续函数的零点定理,将汗根区间逐次减半缩小,取区间的中点构造收敛点列{}来逼近根x.
2、迭代法:迭代法是一种逐次逼近的方法,其步骤是首先给定一个粗糙的初始值,然后用一个迭代公式反复修正这个值,知道满足要求为止。

四、实验步骤
11、二分法:
(1)计算f(x)在区间[0,1]端点处的值f(0)和f(1)的值;
(2)计算f(x)在区间【0,1】的中点(0+1)/2=1/2处的
值f((a+b)/2);
(3)如果函数值f(1/2)=0,则1/2是f(x)=0的实根,输出根x,终止;
否则继续转(4)继续做检验。

由于f(1/2)≠0,所以继续做检验。

(4)如果函数值f(0)*f(1/2)。

数值分析实验报告

数值分析实验报告
i −1 1 (bi − ∑ aij x j − aii j =1
高斯-赛德尔迭代流程图如图 2 所示。
计算 xi =
j =i + 1
∑a
n
1j
x (j0 ) )
k=k+1
x (0 )=x

x − x (0 ) < ε


k>N
输出x

结束
3.设计算法求解 设计算法为“共轭梯度—高斯赛德尔联合迭代法” 。单纯的共轭梯度算法在求解此病 态矩阵时精度不够高,但迭代时间非常短;高斯赛德尔迭代精度可达很高,但迭代时间 很长。所以,将两种算法联合起来,先利用共轭梯度算法迭代产生具有一定精度的解, 将此解作为高斯赛德尔迭代的初值求解更高精度的解。这样既缩短了求解时间,又可得 到足够精确的解。 “共轭梯度—高斯赛德尔联合迭代法”流程图如图 3 所示。
3
生成矩阵 A 和 b 平衡处理 A 和 b 生成 x 和 x1
注: x—精确解向量 x1—迭代向量
ε —共轭梯度迭代精度
输出 x1
Y
x − x1 ∞ < ε
N 共轭梯度迭代求解
图 3 “共轭梯度法”流程图
(三)实验结果 1.列主元高斯消去算法求解 依图 1 所示流程图利用 matlab 编程求解。 5 阶 hilbert 矩阵 A 的列主元消去过程为 以 例说明所编程序为列主元消去。消去过程:
Hn x = b
1/ 2 L 1/ n 1 1/ 2 L 1/(n + 1) ; 1/ 3 H n = (hij ) = M M M 1/ n 1/(n + 1) L 1/(2n − 1)
(1)
式中:

数值分析课程设计报告

数值分析课程设计报告

数值分析课程设计报告姓名班级学号所在单位指导老师201 年月日实验一1.1 水手、猴子和椰子问题:五个水手带了一只猴子来到南太平洋的一个荒岛上,发现那里有一大堆椰子。

由于旅途的颠簸,大家都很疲惫,很快就入睡了。

第一个水手醒来后,把椰子平分成五堆,将多余的一只给了猴子,他私藏了一堆后便又去睡了。

第二、第三、第四、第五个水手也陆续起来,和第一个水手一样,把椰子分成五堆,恰多一只给猴子,私藏一堆,再去入睡,天亮以后,大家把余下的椰子重新等分成五堆,每人分一堆,正好余一只再给猴子,试问原先共有几只椰子?试分析椰子数目的变化规律,利用逆向递推的方法求解这一问题(15621)。

①程序清单n=input('input n:');for x=1:np=5*x+1;for k=1:5p=5*p/4+1;endif p==fix(p),break,endenddisp([x,p])②运行结果运行这段程序后,屏幕出现要求从键盘输入 x 数据的信息input n,输入1200后,MATLAB计算出合适的 x 和 p0 的值为1023 15621截图如下:③算法性能分析(算法思想、精度、复杂度)算法思想:使用逆推的方式解决问题。

每个水手起来的椰子数量等于前一个水手醒来时椰子数量少一的五分之四。

最后每个水手得到的椰子数量会等于最后一堆椰子少一的五分之一。

根据这个逆推,由于椰子的数量是整数,所以利用循环语句知道整数的解答为止。

要使得最初的椰子数p 0为整数,必须取 (x +1) 为 4 5( =1024)的倍数,一种简单的处理可取 x = 1023。

1.2 设,15nn x I dx x=+⎰ (1)从0I 尽可能精确的近似值出发,利用递推公式:115(1,2,20)n n I I n n-=-+=计算机从1I 到20I 的近似值;(2)从30I 较粗糙的估计值出发,用递推公式:111(30,29,,3,2)55n n I I n n-=-+=计算从1I 到20I 的近似值;(3)分析所得结果的可靠性以及出现这种现象的原因。

数值分析课程的实验报告

数值分析课程的实验报告

实验报告实验课程:学生姓名:学号:专业班级:2012年 6 月 8 日目录---(1)用C语言或C++编程显示字母T与5 (3)---(2)原子弹爆炸能量估计 (11)---(3)城市水管埋多深 (15)---(4)实现PageRank算法 (18)计算机系数值分析实验报告---(1)用C 语言或C ++编程显示字母T 与5学生姓名:学号:专业班级:实验类型:■ 验证 □ 综合 □ 设计□ 创新 实验日期:2012/4/20实验成绩:一、实验目的用C 语言或C ++编程显示字母T 与5。

二、实验基本原理和内容Bezier 曲线生成: 1、确定曲线的阶次;2、计算Bernstein 基函数的表达式:B0,3(t)﹦(1-t)3 ;B1,3(t)﹦3t(1-t)2 ;B2,3(t)﹦3t2(1-t) ;B3,3(t)﹦t3 3、把Bezier 曲线中的Pk 写成分量坐标的形式4、确定一合适的步长;控制t 从0到1变化,求出一系列(x,y)坐标点;将其用小线段顺序连接起来。

三、算法分析对于二维平面的情况,只有x,y 坐标分量,可以给出四点三次Bezier 曲线如下的算法描述: 输入:阶次,3; 控制顶点:4个,(x0,y0),…,(x3,y3) begin x=x0 y=y0 moveto (x,y)for t ﹦0 to 1 step ∆tx ﹦B0,3(t)x0﹢B1,3(t)x1﹢B2,3(t)x2﹢B3,3(t)x3 y ﹦B0,3(t)y0﹢B1,3(t)y1﹢B2,3(t)y2﹢B3,3(t)y3 lineto (x,y) endfor end三次Bezier 曲线例子:设在平面上给定的7个控制点坐标分别为:A (100,300),B (120,200),C (220,200),D (270,100),E (370,100),F (420,200),G (420,300)。

画出其曲线。

n k t t t k n k n t t C t B k n k kn k k nn k ,,1,0]1,0[)1()!(!!)1()(, =∈--=-=--四、实验内容和过程代码:// xx.cpp : Defines the entry point for the application.//#include "stdafx.h"#include "resource.h"#define MAX_LOADSTRING 100// Global Variables:HINSTANCE hInst; // current instanceTCHAR szTitle[MAX_LOADSTRING]; // The title bar text TCHAR szWindowClass[MAX_LOADSTRING]; // The title bar text// Foward declarations of functions included in this code module:ATOM MyRegisterClass(HINSTANCE hInstance);BOOL InitInstance(HINSTANCE, int);LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);LRESULT CALLBACK About(HWND, UINT, WPARAM, LPARAM);//===================================================//===========要我们加的数据================intxT[15][4]={237,237,237,237,237,237,226,143,143,143,143,143,143,143,435,435,435,435,435,435,435,353,339,339,339,339,339,339,339,507,529,552,552,552,576,576, 576,576,570,570,570,570,6,6,6,6,0,0,0,0,24,24,24,48,71,183,183,183,237,237}; intyT[15][4]={620,620,120,120,120,35,24,19,19,19,0,0,0,0,0,0,0,0,19,19,19,23,36,10 9,109,108,620,620,620,620,602,492,492,492,492,492,492,492,662,662,662,662,662,6 62,662,662,492,492,492,492,492,492,492,602,620,620,620,620,620,620};intx5[21][4]={149,149,149,345,345,361,356,368,368,406,368,406,406,397,406,397,397, 382,372,351,351,351,351,142,142,33,142,33,33,32,32,32,32,32,35,44,44,74,109,149 ,149,269,324,324,324,324,264,185,185,165,149,119,119,86,65,42,42,14,0,0,0,0,46, 121,121,205,282,333,333,378,399,399,399,399,381,333,333,288,232,112,112,112,149 ,149};inty5[21][4]={597,597,597,597,597,597,599,606,606,695,606,695,695,702,695,702,702, 681,676,676,676,676,676,676,676,439,676,439,439,438,436,434,434,428,426,426,426 ,426,420,408,408,372,310,208,208,112,37,37,37,37,44,66,66,90,99,99,99,99,87,62, 62,24,0,0,0,0,27,78,78,123,180,256,256,327,372,422,422,468,491,512,512,512,597, 597};//====================================================int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,intnCmdShow){// TODO: Place code here.MSG msg;HACCEL hAccelTable;// Initialize global stringsLoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);LoadString(hInstance, IDC_XX, szWindowClass, MAX_LOADSTRING);MyRegisterClass(hInstance);// Perform application initialization:if (!InitInstance (hInstance, nCmdShow)){return FALSE;}hAccelTable = LoadAccelerators(hInstance, (LPCTSTR)IDC_XX);// Main message loop:while (GetMessage(&msg, NULL, 0, 0)){if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg)){TranslateMessage(&msg);DispatchMessage(&msg);}}returnmsg.wParam;}//// FUNCTION: MyRegisterClass()//// PURPOSE: Registers the window class.//// COMMENTS://// This function and its usage is only necessary if you want this code// to be compatible with Win32 systems prior to the 'RegisterClassEx'// function that was added to Windows 95. It is important to call this function // so that the application will get 'well formed' small icons associated// with it.//ATOM MyRegisterClass(HINSTANCE hInstance){WNDCLASSEX wcex;wcex.cbSize = sizeof(WNDCLASSEX);wcex.style = CS_HREDRAW | CS_VREDRAW;wcex.lpfnWndProc = (WNDPROC)WndProc;wcex.cbClsExtra = 0;wcex.cbWndExtra = 0;wcex.hInstance = hInstance;wcex.hIcon = LoadIcon(hInstance, (LPCTSTR)IDI_XX);wcex.hCursor = LoadCursor(NULL, IDC_ARROW);wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);wcex.lpszMenuName = (LPCSTR)IDC_XX;wcex.lpszClassName = szWindowClass;wcex.hIconSm = LoadIcon(wcex.hInstance, (LPCTSTR)IDI_SMALL);returnRegisterClassEx(&wcex);}//// FUNCTION: InitInstance(HANDLE, int)//// PURPOSE: Saves instance handle and creates main window//// COMMENTS://// In this function, we save the instance handle in a global variable and // create and display the main program window.//BOOL InitInstance(HINSTANCE hInstance, intnCmdShow){HWND hWnd;hInst = hInstance; // Store instance handle in our global variablehWnd = CreateWindow(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW,CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL);if (!hWnd){return FALSE;}ShowWindow(hWnd, nCmdShow);UpdateWindow(hWnd);return TRUE;}//// FUNCTION: WndProc(HWND, unsigned, WORD, LONG)//// PURPOSE: Processes messages for the main window.//// WM_COMMAND - process the application menu// WM_PAINT - Paint the main window// WM_DESTROY - post a quit message and return////LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam){intwmId, wmEvent;PAINTSTRUCT ps;HDC hdc;TCHAR szHello[MAX_LOADSTRING];LoadString(hInst, IDS_HELLO, szHello, MAX_LOADSTRING);switch (message){case WM_COMMAND:wmId = LOWORD(wParam);wmEvent = HIWORD(wParam);// Parse the menu selections:switch (wmId){case IDM_ABOUT:DialogBox(hInst, (LPCTSTR)IDD_ABOUTBOX, hWnd, (DLGPROC)About);break;case IDM_EXIT:DestroyWindow(hWnd);break;default:returnDefWindowProc(hWnd, message, wParam, lParam);}break;case WM_PAINT:hdc = BeginPaint(hWnd, &ps);// TODO: Add any drawing code here...RECT rt;GetClientRect(hWnd, &rt);//=================================================//=======要我们加的代码==========================intx,y,i;double t;for(i=0;i<15;i++){for(t=0.00;t<1;t=t+0.00001){x=(int)(xT[i][0]*(1-t)*(1-t)*(1-t)+xT[i][1]*3*(1-t)*(1-t)*t+xT[i][2]*3*(1-t )*t*t+xT[i][3]*t*t*t)/3;y=300-(int)(yT[i][0]*(1-t)*(1-t)*(1-t)+yT[i][1]*3*(1-t)*(1-t)*t+yT[i][2]*3* (1-t)*t*t+yT[i][3]*t*t*t)/3;SetPixel(hdc, 100+x, y,RGB(255,0,0));}}for(i=0;i<21;i++){for(t=0.00;t<1.0;t=t+0.00001){x=(int)(x5[i][0]*(1-t)*(1-t)*(1-t)+x5[i][1]*3*(1-t)*(1-t)*t+x5[i][2]*3*(1-t )*t*t+x5[i][3]*t*t*t)/4;y=300-(int)(y5[i][0]*(1-t)*(1-t)*(1-t)+y5[i][1]*3*(1-t)*(1-t)*t+y5[i][2]*3* (1-t)*t*t+y5[i][3]*t*t*t)/4;SetPixel(hdc, 300+x, y,RGB(255,0,0));}}//===============================================EndPaint(hWnd, &ps);break;case WM_DESTROY:PostQuitMessage(0);break;default:returnDefWindowProc(hWnd, message, wParam, lParam);}return 0;}// Mesage handler for about box.LRESULT CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) {switch (message){case WM_INITDIALOG:return TRUE;case WM_COMMAND:if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL){EndDialog(hDlg, LOWORD(wParam));return TRUE;}break;}return FALSE;}五、实验结果截图:六、实验心得Bezier曲线的形状是通过一组多边折线(特征多边形)的各顶点唯一地定义出来的,其中只有第一个点和最后一个点在曲线上。

数值分析实验报告三

数值分析实验报告三
plot(x,y)
grid
[k,x,wuca,yx]=erfen (﹣1,1,10^-5)
2)运行结果
ans =
0 -1.0000 1.0000 0 1.0000 -11.6321 10.7183 -1.0000
ans =
1.0000 0 1.0000 0.5000 0.5000 -1.0000 10.7183 4.6487
ans =
11.0000 0.0898 0.0908 0.0903 0.0005 -0.0076 0.0033 -0.0021
ans =
12.0000 0.0903 0.0908 0.0906 0.0002 -0.0021 0.0033 0.0006
ans =
13.0000 0.0903 0.0906 0.0905 0.0001 -0.0021 0.0006 -0.0008
ans =
7.0000 0.1256 0.0008 0.0033 0.0262
ans =
8.0000 0.1240 0.0002 0.0016 0.0129
ans =
9.0000 0.1233 0.0000 0.0007 0.0056
ans =
9.0000 0.1233 0.0000 0.0007 0.0056
(2)、Use the iteration method ,the initial value .
2、The equation has two roots near 0.1.
Determine them by means ofNewton’s method.
(with accuracy )
3、用迭代法求方程 附近的一个根。方程写成下
k = 9

数值分析课程设计实验报告

数值分析课程设计实验报告

院系:数学与统计学学院专业:信息与计算科学年级: 11级课程名称:数值分析课程设计 2014年6月11日一摘要从设计图形用户界面的框架结构及实现人机交互人手,着重说明用MATLAB语言进行图形用户界面程序设计时数值分析算法动态演示系统界面及集成测试,并以具体实例,详细论述制作图形用户界面时回调函数的编写方法。

本文探讨了数值分析算法动态演示系统界面和系统集成及测试。

将数值分析课程设计所需要的输入和结果用GUI界面显示出来,自动生成所需要的生成报告,将结果用图形和文本输出的两种方式展示出来,方便老师的批阅同时也是学生自己一目了然。

关键词:MATLAB;图形用户界面;动态演示;集成测试;控件设计;回调函数二引言MATLAB是一套高性能的数值分析和可视化的科技应用软件。

它集高效的数值分析、完备的信号处理和图像处理、功能丰富的应用工具箱为一体,构成了一个方便快捷,界面友好的用户环境,是一种适应多种硬件平台的数学计算工具,它的出现给各课程的计算机辅助教学带来了福音。

特别是它的集成图形用户界面GUIDE(Graphical User Interface Development Environment),包含了窗口菜单、对话框、按钮和文本等各种控件的用户界面,用户通过键盘或鼠标操作,就可以设计出具有自己独特风格的图形界面,再通过编写回调函数皆可以实现GUI与用户之间的交互,为教学课件的制作提供了极大的方便,GUIDE程序设计分两步进行,一是静态图形界面制作,二是控件回调函数编程。

1 静态图形界面制作在matlab 的命令窗口中键入“guide”命令,启动GUIDE 的GUI 编辑器,GUI 控制面板包括了所有的图形界面控件uicontrol,如按钮(Push Butter)、滑动条(Slider)、单选按钮(Radio Butter)、复选框(Check box)、文本框(Edit Text)、文本标签(Ststic Text)、下拉菜单(PopupMenu)、下拉列表框(List box)、双位按钮(Toggle Butter)、坐标轴(Axes)等,用户选中需要的控件,拖移到空白处,即可创建出相应的控件,并通过拖拉可调整其大小,如图1所示。

数值分析学习报告

数值分析学习报告

数值分析学习心得报告班级:************姓名:***学号: ***********学习数值分析的心得体会数值分析是一门利用计算机求解数学问题数值解的课程,有很强的理论性和实践性,无意中的一次选择,让我接触了数值分析。

随着科学技术的发展,提出了大量复杂的数值计算问题,在建立电子计算机成为数值计算的主要工具以后,它以数字计算机求解数学问题的理论和方法为研究对象。

有可靠的理论分析,要有数值实验,并对计算的结果进行误差分析。

数值分析的主要内容包括插值法,函数逼近,曲线拟和,数值积分,数值微分,解线性方程组的直接方法,解线性方程组的迭代法,非线性方程求根,常微分方程的数值解法。

作为这学期的选修课,我从内心深处来讲,数值分析真的有点难。

感觉它是在高等数学和线性代数的基础上,又加深了探讨。

虽然这节课很难,我学的不是很好,但我依然对它比较感兴趣。

下面就具体说说我的学习体会,让那些感兴趣的同学有个参考。

学习数值分析,我们首先得知道一个软件——MATLAB。

MATrix LABoratory,即矩阵实验室,是Math work公司推出的一套高效率的数值计算和可视化软件。

它是当今科学界最具影响力、也是最具活力的软件,它起源于矩阵运算,并高速发展成计算机语言。

它的优点是强大的科学运算、灵活的程序设计流程、高质量的图形可视化与界面、便捷的与其他程序和语言接口。

根据上网搜集到的资料,你就会发现MATLAB有许多优点:首先,编程简单使用方便。

到目前为止,我已经学过C语言,机器语言,JAVA 语言,这三个语言相比,我感觉C语言还是很简单的一种编程语言。

只要入门就很好掌握,但是想学精一门语言可不是那么容易的。

惭愧的说,到目前为止,我依然处于入门阶段,只会编写小的简单的程序,但是班里依然还是有学习好的。

C语言是简单且容易掌握的,但是,MATLAB的矩阵和向量操作功能是其他语言无法比拟的。

在MATLAB环境下,数组的操作与数的操作一样简单,基本数据单元是不需要指定维数的,不需要说明数据类型的矩阵,而其数学表达式和运算规则与通常的习惯相同。

数值分析实验报告

数值分析实验报告

数值分析实验报告一、实验目的数值分析是一门研究用计算机求解数学问题的数值方法及其理论的学科。

本次实验的目的在于通过实际操作和编程实现,深入理解和掌握数值分析中的常见算法,提高运用数值方法解决实际问题的能力,并对算法的精度、稳定性和效率进行分析和比较。

二、实验环境本次实验使用的编程语言为 Python,使用的开发工具为 PyCharm。

实验所依赖的主要库包括 NumPy、Matplotlib 等。

三、实验内容(一)函数逼近与插值1、拉格朗日插值法通过给定的离散数据点,构建拉格朗日插值多项式,对未知点进行函数值的估计。

2、牛顿插值法与拉格朗日插值法类似,但采用了不同的形式和计算方式。

(二)数值积分1、梯形公式将积分区间划分为若干个梯形,通过计算梯形面积之和来近似积分值。

2、辛普森公式基于抛物线拟合的方法,提高积分近似的精度。

(三)线性方程组求解1、高斯消元法通过逐行消元将线性方程组化为上三角形式,然后回代求解。

2、 LU 分解法将系数矩阵分解为下三角矩阵 L 和上三角矩阵 U,然后通过两次前代和回代求解。

(四)非线性方程求解1、二分法通过不断将区间一分为二,逐步缩小根所在的区间,直到满足精度要求。

2、牛顿迭代法利用函数的切线来逼近根,通过迭代逐步收敛到根的近似值。

四、实验步骤(一)函数逼近与插值1、拉格朗日插值法定义计算拉格朗日基函数的函数。

根据给定的数据点和待求点,计算插值多项式的值。

输出插值结果,并与真实值进行比较。

2、牛顿插值法计算差商表。

构建牛顿插值多项式。

进行插值计算和结果分析。

(二)数值积分1、梯形公式定义积分区间和被积函数。

按照梯形公式计算积分近似值。

分析误差。

2、辛普森公式同样定义积分区间和被积函数。

运用辛普森公式计算积分近似值。

比较与梯形公式的精度差异。

(三)线性方程组求解1、高斯消元法输入系数矩阵和右端项向量。

进行消元操作。

回代求解方程。

输出解向量。

2、 LU 分解法对系数矩阵进行 LU 分解。

工程数值分析实验报告(3篇)

工程数值分析实验报告(3篇)

第1篇一、实验目的本次实验旨在通过数值分析的方法,对工程实际问题进行建模、求解和分析。

通过学习数值方法的基本原理和算法,提高解决实际工程问题的能力。

二、实验内容1. 线性方程组的求解2. 矩阵特征值与特征向量的计算3. 函数插值与曲线拟合4. 数值微分与积分三、实验步骤1. 线性方程组的求解(1)编写程序实现高斯消元法、克劳斯消元法和列主元素法(2)设计输入界面,用户输入增广矩阵的行和列,填写系数及常数项(3)分别运用三种方法求解线性方程组,比较求解结果的正确性、数值稳定性和计算效率2. 矩阵特征值与特征向量的计算(1)编写程序实现幂法、QR算法和逆幂法(2)设计输入界面,用户输入矩阵的行和列,填写矩阵元素(3)分别运用三种方法计算矩阵的特征值与特征向量,比较求解结果的准确性和计算效率3. 函数插值与曲线拟合(1)编写程序实现拉格朗日插值、牛顿插值和样条插值(2)设计输入界面,用户输入函数的自变量和函数值,选择插值方法(3)分别运用三种方法进行函数插值,比较插值结果的准确性和光滑性4. 数值微分与积分(1)编写程序实现有限差分法、龙格-库塔法和辛普森法(2)设计输入界面,用户输入函数的导数或积分的上下限,选择数值方法(3)分别运用三种方法进行数值微分和积分,比较求解结果的准确性和计算效率四、实验结果与分析1. 线性方程组的求解通过实验,我们发现列主元素法在求解线性方程组时具有较好的数值稳定性,计算效率也较高。

而高斯消元法和克劳斯消元法在处理大型稀疏矩阵时存在一定的困难。

2. 矩阵特征值与特征向量的计算实验结果表明,QR算法和逆幂法在计算矩阵特征值与特征向量时具有较高的准确性和计算效率。

幂法在处理大型稀疏矩阵时表现出较好的性能。

3. 函数插值与曲线拟合在函数插值和曲线拟合实验中,样条插值方法具有较好的准确性和光滑性。

拉格朗日插值和牛顿插值方法在处理简单函数时表现良好,但在处理复杂函数时可能存在精度问题。

数值分析实验报告doc

数值分析实验报告doc

数值分析实验报告篇一:数值分析实验报告(一)(完整)数值分析实验报告12345篇二:数值分析实验报告数值分析实验报告课题一:解线性方程组的直接方法1.实验目的:1、通过该课题的实验,体会模块化结构程序设计方法的优点;2、运用所学的计算方法,解决各类线性方程组的直接算法;3、提高分析和解决问题的能力,做到学以致用;4、通过三对角形线性方程组的解法,体会稀疏线性方程组解法的特点。

2.实验过程:实验代码:#include "stdio.h"#include "math.h"#includeusing namespace std;//Gauss法void lzy(double **a,double *b,int n) {int i,j,k;double l,x[10],temp;for(k=0;k {for(j=k,i=k;j {if(j==k)temp=fabs(a[j][k]);else if(temp {temp=fabs(a[j][k]);i=j;}}if(temp==0){cout return;}elsefor(j=k;j {temp=a[k][j];a[k][j]=a[i][j];a[i][j]=temp;}temp=b[k];b[k]=b[i];b[i]=temp;}for(i=k+1;i {l=a[i][k]/a[k][k];for(j=k;j a[i][j]=a[i][j]-l*a[k][j]; b[i]=b[i]-l*b[k];}}if(a[n-1][n-1]==0){cout return;}x[n-1]=b[n-1]/a[n-1][n-1];for(i=n-2;i>=0;i--)temp=0;for(j=i+1;j temp=temp+a[i][j]*x[j]; x[i]=(b[i]-temp)/a[i][i];}for(i=0;i {printf("x%d=%lf\t",i+1,x[i]);printf("\n");}}//平方根法void pfg(double **a,double *b,int n) {int i,k,m;double x[8],y[8],temp;for(k=0;k {temp=0;for(m=0;m temp=temp+pow(a[k][m],2); if(a[k][k] return;a[k][k]=pow((a[k][k]-temp),1.0/2.0); for(i=k+1;i {temp=0;for(m=0;m temp=temp+a[i][m]*a[k][m]; a[i][k]=(a[i][k]-temp)/a[k][k];}temp=0;for(m=0;m temp=temp+a[k][m]*y[m];y[k]=(b[k]-temp)/a[k][k];}x[n-1]=y[n-1]/a[n-1][n-1];for(k=n-2;k>=0;k--){temp=0;for(m=k+1;m temp=temp+a[m][k]*x[m];x[k]=(y[k]-temp)/a[k][k];}for(i=0;i {printf("x%d=%lf\t",i+1(转自:小草范文网:数值分析实验报告),x[i]);printf("\n");}}//追赶法void zgf(double **a,double *b,int n){int i;double a0[10],c[10],d[10],a1[10],b1[10],x[10],y[10];for(i=0;i {a0[i]=a[i][i];if(i c[i]=a[i][i+1];if(i>0)d[i-1]=a[i][i-1];}a1[0]=a0[0];for(i=0;i {b1[i]=c[i]/a1[i];a1[i+1]=a0[i+1]-d[i+1]*b1[i];}y[0]=b[0]/a1[0];for(i=1;i y[i]=(b[i]-d[i]*y[i-1])/a1[i];x[n-1]=y[n-1];for(i=n-2;i>=0;i--)x[i]=y[i]-b1[i]*x[i+1];for(i=0;i {printf("x%d=%lf\t",i+1,x[i]);printf("\n");}}int main(){int n,i,j;double **A,**B,**C,*B1,*B2,*B3;A=(double **)malloc(n*sizeof(double)); B=(double **)malloc(n*sizeof(double));C=(double **)malloc(n*sizeof(double));B1=(double *)malloc(n*sizeof(double));B2=(double *)malloc(n*sizeof(double));B3=(double *)malloc(n*sizeof(double));for(i=0;i {A[i]=(double *)malloc((n)*sizeof(double));B[i]=(double*)malloc((n)*sizeof(double));C[i]=(double*)malloc((n)*sizeof(double)); }cout cin>>n;cout for(i=0;i for(j=0;j篇三:数值分析实验报告(包含源程序)课程实验报告课程实验报告。

数值分析课程设计报告

数值分析课程设计报告

数值分析课程设计报告设计题1、2、3、5学院、系:专业:姓名:学号:任课教师:提交日期:电子邮箱:目录[设计题一] (3)1.1问题分析与设计思路 (3)1.2程序清单 (4)1.4 结果分析 (5)1.5设计总结 (6)[设计题二] (6)2.1问题分析与设计思路 (7)2.2程序清单 (7)2.3 运行结果 (9)2.4结果分析与设计总结 (9)[设计题三] (10)3.1问题分析与设计思路 (10)3.2程序清单 (10)3.3 运行结果 (12)3.4结果分析与设计总结 (12)[设计题五] (13)4.1问题分析与设计思路 (13)4.2程序清单 (14)4.3 运行结果 (19)4.4结果分析 (20)【数值分析课程设计总结】 (21)1112111231111121n n H n n n n ⎛⎫ ⎪ ⎪ ⎪ ⎪=+ ⎪ ⎪ ⎪ ⎪+-⎝⎭[设计题一]设计实验验证Hilbert 矩阵的病态性。

1.1问题分析与设计思路在求解任何反问题的过程中通常会遇到病态矩阵问题,而且病态矩阵问题还未有很好的解决方法,尤其是长方形、大型矩阵。

目前主要有Tikhonov 、奇异值截断、奇异值修正等方法。

求解方程组时对数据的小扰动很敏感的矩阵就是病态矩阵。

解线性方程组Ax =b 时,若对于系数矩阵A 及右端项b 的小扰动δA 、δb ,方程组(A +δA )χ=b +δb 的解χ与原方程组Ax =b 的解差别很大,则称矩阵A 为病态矩阵。

方程组的近似解χ一般都不可能恰好使剩余r=b -A χ为零,这时χ亦可看作小扰动问题A χ=b -r(即δA =0,δb =-r)的解,所以当A 为病态时,即使剩余很小,仍可能得到一个与真解相差很大的近似解。

因此,设计思路如下:令x0=(1,1…..1),计算出b=Hx0,求出b ,然后再用高斯消去法球解Hx=b ,得到近似解x ,然后利用标准差:比较x与x0之间的误差。

《数值分析》课程实验报告范文

《数值分析》课程实验报告范文

《数值分析》课程实验报告范文《数值分析》课程实验报告姓名:学号:学院:机电学院日期:2022年某月某日目录实验一函数插值方法1实验二函数逼近与曲线拟合5实验三数值积分与数值微分7实验四线方程组的直接解法9实验五解线性方程组的迭代法15实验六非线性方程求根19实验七矩阵特征值问题计算21实验八常微分方程初值问题数值解法24实验一函数插值方法一、问题提出对于给定的一元函数的n+1个节点值。

试用Lagrange公式求其插值多项式或分段二次Lagrange插值多项式。

实验二函数逼近与曲线拟合一、问题提出从随机的数据中找出其规律性,给出其近似表达式的问题,在生产实践和科学实验中大量存在,通常利用数据的最小二乘法求得拟合曲线。

在某冶炼过程中,根据统计数据的含碳量与时间关系,试求含碳量与时间t的拟合曲线。

t(分)051015202530354045505501.272.162.863.443.874.154.374.51 4.584.024.64二、要求1、用最小二乘法进行曲线拟合;2、近似解析表达式为;3、打印出拟合函数,并打印出与的误差,;4、另外选取一个近似表达式,尝试拟合效果的比较;5、某绘制出曲线拟合图。

三、目的和意义1、掌握曲线拟合的最小二乘法;2、最小二乘法亦可用于解超定线代数方程组;3、探索拟合函数的选择与拟合精度间的关系四、实验步骤:第一步先写出线性最小二乘法的M文件functionc=lpoly(某,y,m)n=length(某);b=zero(1:m+1);f=zero(n,m+1); fork=1:m+1f(:,k)=某.^(k-1);enda=f'某f;b=f'某y';c=a\b;c=flipud(c);第二步在命令窗口输入:>>lpoly([0,5,10,15,20,25,30,35,40,45,50,55],[0,1.27,2.16,2.86,3.44,3.87,4.15,4.37,4.51,4.58,4.02,4.64],2)回车得到:an=-0.00240.20370.2305即所求的拟合曲线为y=-0.0024某2+0.2037某+0.2305在编辑窗口输入如下命令:>>某=[0,5,10,15,20,25,30,35,40,45,50,55];>>y=-0.0024某某.^2+0.2037某某+0.2305;>>plot(某,y)命令执行得到如下图五、实验结论分析复杂实验数据时,常采用分段曲线拟合方法。

数值分析课程报告

数值分析课程报告

插值法和多项式拟合的研究摘要在科研和生产实践中,常常需要通过一组测量数据来寻找变量x与y的函数关系近似表达式。

解决这类问题的方法有两种:一种是插值法,另一种是拟合法。

插值法的原理是用一个简单函数逼近被计算函数,然后用该简单函数的函数值近似替代被计算函数的函数值。

拟合法能够是从给定的一组实验数据出发,寻找函数的一个近似表达式,该近似表达式能反映数据的基本趋势而又不一定过全部的点,即曲线拟合。

本文主要介绍拉格朗日插值法、埃尔米特插值法、三次样条插值法以及基于最小二乘法的多项式拟合。

关键词:拉格朗日插值,埃尔米特插值,样条插值,多项式拟合1方法的意义在许多实际问题及科学研究中,因素之间往往存在着函数关系,然而,这种关系经常很难有明显的解析表达,通常只是由观察与测试得到一些离散数值。

有时,即使给出了解析表达式,却由于表达式过于复杂,不仅使用不便,而且不易于进行计算与理论分析。

解决这类问题的方法有两种:一种是插值法,另一种是拟合法。

插值法的原理是用一个简单函数逼近被计算函数,然后用该简单函数的函数值近似替代被计算函数的函数值。

它要求给出函数的一个函数表,然后选定一种简单的函数形式,比如多项式、分段线性函数及三角多项式等,通过已知的函数表来确定一个简单的函数()x ϕ作为()f x 的近似,概括地说,就是用简单函数为离散数组建立连续模型。

插值法在实际应用中非常广泛,但是它也有明显的缺陷,一是测量数据常常带有测试误差,而插值多项式又通过所有给出的点,这样就是插值多项式保留了这些误差;二是如果实际得到的数据过多,则必然得到次数较高的插值多项式,这样近似的效果并不理想。

拟合法能够很好的解决这些问题,它从给定的一组实验数据出发,寻找函数的一个近似表达式y=()x ϕ,该近似表达式能反映数据的基本趋势而又不一定过全部的点,即曲线拟合的问题,函数的近似表达式y=()x ϕ称为拟合曲线。

常用最小而二乘法来确定拟合曲线。

2插值法的介绍2.1 插值法定义设 f (x )为[a ,b ]上的函数,在互异点n x x x ,...,,10处的函数值分别为 )(),...,(),(10n x f x f x f ,构造一个简单函数 ϕ(x ) 作为函数 f (x ) 的近似表达式y = f (x ) ≈ ϕ(x ),使)()(i i x f x =ϕ , i =0, 1, 2, …,n (1.0) 则称ϕ(x ) 为关于节点n x x x ,...,,10的插值函数;称n x x x ,...,,10 为插值节点;称))((i i x f x , i =1,2,… , n 为插值点;f (x ) 称为被插值函数。

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

插值法和多项式拟合的研究摘要在科研和生产实践中,常常需要通过一组测量数据来寻找变量x与y的函数关系近似表达式。

解决这类问题的方法有两种:一种是插值法,另一种是拟合法。

插值法的原理是用一个简单函数逼近被计算函数,然后用该简单函数的函数值近似替代被计算函数的函数值。

拟合法能够是从给定的一组实验数据出发,寻找函数的一个近似表达式,该近似表达式能反映数据的基本趋势而又不一定过全部的点,即曲线拟合。

本文主要介绍拉格朗日插值法、埃尔米特插值法、三次样条插值法以及基于最小二乘法的多项式拟合。

关键词:拉格朗日插值,埃尔米特插值,样条插值,多项式拟合1方法的意义在许多实际问题及科学研究中,因素之间往往存在着函数关系,然而,这种关系经常很难有明显的解析表达,通常只是由观察与测试得到一些离散数值。

有时,即使给出了解析表达式,却由于表达式过于复杂,不仅使用不便,而且不易于进行计算与理论分析。

解决这类问题的方法有两种:一种是插值法,另一种是拟合法。

插值法的原理是用一个简单函数逼近被计算函数,然后用该简单函数的函数值近似替代被计算函数的函数值。

它要求给出函数的一个函数表,然后选定一种简单的函数形式,比如多项式、分段线性函数及三角多项式等,通过已知的函数表来确定一个简单的函数()x ϕ作为()f x 的近似,概括地说,就是用简单函数为离散数组建立连续模型。

插值法在实际应用中非常广泛,但是它也有明显的缺陷,一是测量数据常常带有测试误差,而插值多项式又通过所有给出的点,这样就是插值多项式保留了这些误差;二是如果实际得到的数据过多,则必然得到次数较高的插值多项式,这样近似的效果并不理想。

拟合法能够很好的解决这些问题,它从给定的一组实验数据出发,寻找函数的一个近似表达式y=()x ϕ,该近似表达式能反映数据的基本趋势而又不一定过全部的点,即曲线拟合的问题,函数的近似表达式y=()x ϕ称为拟合曲线。

常用最小而二乘法来确定拟合曲线。

2插值法的介绍2.1 插值法定义设 f (x )为[a ,b ]上的函数,在互异点n x x x ,...,,10处的函数值分别为 )(),...,(),(10n x f x f x f ,构造一个简单函数 ϕ(x ) 作为函数 f (x ) 的近似表达式y = f (x ) ≈ ϕ(x ),使)()(i i x f x =ϕ , i =0, 1, 2, …,n (1.0) 则称ϕ(x ) 为关于节点n x x x ,...,,10的插值函数;称n x x x ,...,,10 为插值节点;称))((i i x f x , i =1,2,… , n 为插值点;f (x ) 称为被插值函数。

式(1.0)称为插值条件。

这类问题称为插值问题。

插值的任务就是由已知的观测点,为物理量(未知量)建立一个简单的、连续的解析模型,以便能根据该模型推测该物理量在非观测点处的特性。

常用的插值函数类{()x ϕ}是代数多项式,相应插值问题是代数插值,本文主要介绍三种代数差值:拉格朗日插值,埃尔米特插值和样条插值。

2.2拉格朗日插值2.2.1两点插值问题已知)(i i x f y = )1,0(=i ,求满足插值条件i i y x P =)(1 )1,0(=i 的插值多项式)(1x P 。

根据解析几何知识可知,所求的)(1x P 为过点),(),,(1100y x y x 的直线,即:)()(0010101x x x x y y y x P ---+= 上式经整理可改写为:式中1010)(x x x x x l --=,0101)(x x x x x l --=。

显然{)1(0)0(1)(0===i i x l i ,{)1(1)0(0)(1===i i x l i ,且)(0x l ,)(1x l 为由插值节点唯一确定的线性函数。

)(0x l ,)(1x l 为节点10,x x ,上的一次插值基函数。

可以看出,节点10,x x 上的插值基函数的次数为插值节点个数减一,基函数组中所含的函数个数与插值节点数相同。

而满足i i y x P =)(1 )1,0(=i 的插值多项式)(1x P就是节点10,x x 上插值基函数的线性组合,其组合系数分别为10,y y 。

这种表示为插值基函数线性组合的一次插值多项式也就是一次拉格朗日插值多项式。

当给定n+1个插值节点后,可类似定义n 次插值基函数,并以此构造n 次拉格朗日多项式。

2.2.2 n 次拉格朗日插值多项式n 次插值基函数:))...()()...(())...()()...(()(110110n k k k k k k n k k k x x x x x x x x x x x x x x x x x l --------=+-+- )...,1,0(n k = 显然)(x l k 具有以下性质:性质1,{)(0)(1)(k i k i x l i k === )...,1,0(n k = 性质2,)(x l k )...,1,0(n k =为由插值节点n x x x ,...,,10唯一确定的n 次函数。

性质3, 基函数组所含的基函数个数与插值节点个数相同。

以n 次插值基函数为基础,可得拉格朗日插值多项式为:k nk n k k k k k k n k k n k k k n y x x x x x x x x x x x x x x x x y x l x L ∑∑=+-+-=--------==01101100))...()()...(())...()()...(()()( 00()n n i k k i k ii k x x y x x ==≠-=-∑∏ 若记∏=+-=n i i n x x x 01)()(ω,则有∏≠=+-='nki i i k k n x x x 01)()(ω。

于是)(x L n 也可写成:k n k k n k n n y x x x x x L ∑=++'-=011)()()()(ωω2.2.3拉格朗日插值多项式的余项)()()(x L x f x R n n -=称为拉格朗日插值多项式的余项,也叫截断误差。

用简单的插值多项式)(x L n 代替复杂的函数)(x f ,这种做法是否有效,取决于截断误差是否满足精度要求。

拉格朗日型余项:)()!1()()()()(11x n f x L x f x R n n n n +++=-=ωξ 其中∏=+-=ni i n x x x 01)()(ω,),(b a ∈ξ且依赖于0x 。

一般情况下,),(b a ∈ξ的具体数值无法知道,但是若能够求出1)1()(max ++≤≤=n n bx a M x f ,则可以得出插值多项式的截断误差限为:)(max )!1()(11x n M x R n bx a n n +≤≤++≤ω 由此看出,)(x R n 的大小除了与1+n M 有关外,还与插值节点有密切关系。

当给定M 个点出的函数值,但仅选用其中)1(1m n n <++个作为插值条件而求某点x 处函数值时,n+1个节点n x x x ,...,,10的选取应该尽可能的接近x ,使得计算的函数值的误差限尽可能的小。

2.3埃尔米特插值许多实际问题不但要求插值多项式与被插值函数在节点处的函数值相当,而且还需要求其导数值相等。

满足这种要求的插值多项式就是埃尔米特插值多项式。

一般情形的埃尔米特插值问题一般情形的埃尔米特插值问题是指所满足的插值条件中函数值的个数与导数值的个数相等。

即当函数)(x f 在区间],[b a 上n+1个节点i x ),...,1,0(n i =处的函数值)(i i x f y =及导数值)(i i x f m '=给定时,要求一个次数不超过2n+1的多项式)(12x H n +,使之满足:),...,1,0()()(1212n i m x H y x H i i n i i n =⎭⎬⎫='=++这里给出个2n+2个插值条件,可唯一确定一个形式为12121012...)(++++++=n n n x a x a a x H 的多项式,但是要确定2n+2个系数非常复杂,因此此时可以借用构造拉格朗日插值多项式的基函数。

设)(),(x x j j βα ),...,1,0(n j =为次数不超过2n+1的多项式,且满足:),...,1,0,()(,0)(0)(,)(n j i x x x x ij i j i j i j ij i j =⎪⎭⎪⎬⎫='=='=δββαδα 则满足上述条件的埃尔米特插值多项式可以写成用插值基函数表示的形式: ∑=++=n j j j i j n m x y x H 012])()([βα上式满足插值条件。

可以得到基函数)(),(x x j j βα的解析式为:)(1)(21)(20x l x x x x x j n j k k k j j j ⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡---=∑≠=α ),...,1,0(n j = )()()(2x l x x x j j j -=β ),...,1,0(nj = 式中)(x l j 为拉格朗日插值基函数。

因此埃尔米特插值多项式即为:j j n j j i nj j n j k k k j j n m x l x x y x l x x x x x H )()()(1)(21)(2002012∑∑∑==≠=+-+⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡---= 一般情形下的埃尔米特插值多项式的余项为:)()!22()()()()(12)22(1212x n f x H x f x R n n n n +++++=-=ωξ 式中),(b a ∈ξ,且与x 有关。

埃尔米特插值的几何意义:曲线)(12x H y n +=与曲线)(x f y =在插值节点处有相同的公共切线。

在带导数的插值问题中,有时插值条件中的函数值个数与导数值个数不等。

这时可以以一般情况的埃尔米特插值多项式为基础,运用待定系数法求出满足插值条件的多项式。

2.4样条插值在上述方法中,我们根据区间],[b a 上给出的节点得以得到函数)(x f 的插值多项式,但是并非插值多项式的次数越高,逼近函数)(x f 的精度越好,主要原因是因为对于任意的插值节点,当∞→n 时,插值多项式)(x P n 不一定收敛到)(x f 。

这种高次插值不准确的现象称为龙格现象。

为了避免高次插值的缺点,人们常常采用分段插值的方法,即将插值区间分为若干个小区间,在每个小区间上运用前面介绍的插值方法构造低次插值多项式。

采用分段现象插值与分段二次插值,可以构造一个整个连续的函数,而采用分段三次埃尔米特插值则可以构造一个整体上具有一节连续导数的插值函数。

相关文档
最新文档