数值逼近课程设计报告
- 格式:doc
- 大小:398.50 KB
- 文档页数:13
《数值逼近》课程设计报告数值逼近课程设计报告一、目的意义(1)进一步熟悉掌握复化梯形和复化抛物线公式(2)学会比较复化梯形公式和复化抛物线公式如何达到所要求的精度(3) 提高编程能力(4)通过数值方法求出很难求得原函数的积分和解析表达是没有明确的给出积分的近似值二、内容要求积分计算问题:分别用复化梯形和复化Simpsom 求积公式计算积分dx e x x x 5.1402)(13-⎰-,并比较计算量(精度为10-8)。
三、问题解决的方法与算法方法:解决该积分问题时,运用了数值积分近似解法的方法,运用复化梯形和复化Simpsom 求积公式进行计算3.1 复化梯形积分3.1.1复化梯形积分公式表达式()()()1122n n i i h T f a f b f x -=⎡⎤=++⎢⎥⎣⎦∑ 3.1.2复化梯形积分误差表达式[]()()()2,,12n b a h R f f a b ηη-''=-∈3.2复化抛物线积分3.2.1复化抛物线积分公式表达式()()()()()11/21142n n bk k a k k f x dx f a f x f x f b --==⎡⎤≈+++⎢⎥⎣⎦∑∑⎰3.2.2复化抛物线积分误差表达式[]()()()()()()()54444,,28802880n b a h b a R f f f a b n ηηη--=-=-∈3.3算法 3.3.1复化梯形积分算法第一步:根据精度计算n 的值,输入两端点的值,计算步长h第二步:根据步长计算出各个节点x[i]的值,i=0,1,2,…,n第三步:根据x[i]计算出各个节点对应y[i]的值,i=0,1,2,…,n第四步:对各个节点的值进行求和第五步:输出最终的积分的值3.3.2复化抛物线积分算法第一步:根据精度计算n 的值,端点a,b 的值,计算步长h第二步:根据步长计算出各个节点x[i]的值,i=0,1,2,…,n第三步:根据x[i]计算出各个节点对应y[i]的值,i=0,1,2,…,n第四步:对各个节点的值进行求和,分情况,对左右端点先求和,对剩下的端点,奇数的求和后乘以4倍,偶数的求和后乘以2倍,最终将各个值进行加和第五步:对加和的值乘以步长除以3第六步:输出最终的积分的值四、计算程序// 复化梯形公式.cpp : 定义控制台应用程序的入口点。
实验报告实验项目名称函数逼近与快速傅里叶变换实验室数学实验室所属课程名称数值逼近实验类型算法设计实验日期班级学号姓名成绩512*x^10 - 1280*x^8 + 1120*x^6 - 400*x^4 + 50*x^2 - 1并得到Figure,图像如下:实验二:编写程序实现[-1,1]上n阶勒让德多项式,并作画(n=0,1,…,10 在一个figure中)。
要求:输入Legendre(-1,1,n),输出如a n x n+a n-1x n-1+…多项式。
在MATLAB的Editor中建立一个M-文件,输入程序代码,实现勒让德多项式的程序代码如下:function Pn=Legendre(n,x)syms x;if n==0Pn=1;else if n==1Pn=x;else Pn=expand((2*n-1)*x*Legendre(n-1)-(n-1)*Legendre(n-2))/(n);endx=[-1:0.1:1];A=sym2poly(Pn);yn=polyval(A,x);plot (x,yn,'-o');hold onend在command Windows中输入命令:Legendre(10),得出的结果为:Legendre(10)ans =(46189*x^10)/256 - (109395*x^8)/256 + (45045*x^6)/128 - (15015*x^4)/128 + (3465*x^2)/256 - 63/256并得到Figure,图像如下:实验三:利用切比雪夫零点做拉格朗日插值,并与以前拉格朗日插值结果比较。
在MATLAB的Editor中建立一个M-文件,输入程序代码,实现拉格朗日插值多项式的程序代码如下:function [C,D]=lagr1(X,Y)n=length(X);D=zeros(n,n);D(:,1)=Y';for j=2:nfor k=j:nD(k,j)=(D(k,j-1)- D(k-1,j-1))/(X(k)-X(k-j+1));endendC=D(n,n);for k=(n-1):-1:1C=conv(C,poly(X(k)));m=length(C);C(m)= C(m)+D(k,k);end在command Windows 中输入如下命令:clear,clf,hold on;k=0:10;X=cos(((21-2*k)*pi)./22); %这是切比雪夫的零点Y=1./(1+25*X.^2);[C,D]=lagr1(X,Y);x=-1:0.01:1;y=polyval(C,x);plot(x,y,X,Y,'.');grid on;xp=-1:0.01:1;z=1./(1+25*xp.^2);plot(xp,z,'r')得到Figure ,图像如下所示:比较后发现,使用切比雪夫零点做拉格朗日插值不会发生龙格现象。
实验报告:函数逼近&插值多项式补充1 2k 1问题1 :对于给函数f (x) 2,取点X k cos , k取0, 1,…,n。
n取101+25x 2n 2或20。
试画出拟合曲线并打印出方程,与第二章计算实习题2的结果进行比较。
1 问题2 :对于给函数f(x) 2在区间卜1,1]上取x i=-1+0.2i ------------------------------------------ (i=0,1,2,…,10),试求31+25x次曲线拟合,试画出拟合曲线并打印出方程,与第二章计算实习题2的结果进行比较。
实验目的:通过编程实现牛顿插值方法和函数逼近,加深对多项式插值的理解。
应用所编程序解决实际算例。
实验要求:1 .认真分析问题,深刻理解相关理论知识并能熟练应用;2. 编写相关程序并进行实验;3. 调试程序,得到最终结果;4. 分析解释实验结果;5. 按照要求完成实验报告。
实验原理:详见《数值分析第5版》第二章、第三章相关内容。
实验内容:(1)问题1 :这里我们可以沿用实验报告一的代码,对其进行少量修改即可。
当n=10时,代码为:clear allclck=0:10;n=len gth(k);x1=cos((2*k+1)/2/n*pi);y1=1./(1+25.*x1.A2);f=y1(:);for j=2: nfor i=n :-1:jf(i)=(f(i)-f(i-1))/(x1(i)-x1(i-j+1));endendsyms F x p;F(1)=1;p(1)=y1(1);for i=2: nF(i)=F(i-1)*(x-x1(i-1));P(i)=f(i)*F(i);end syms P P=sum(p);P10=vpa(expa nd(P),5); xO=-1:O.OO1:1; yO=subs(P,x,xO);y2=subs(1/(1+25*x A 2),x,x0); plot(x0,y0,x0,y2) grid on xlabel('x') ylabel('y')由 此 我 们 可 以 得 到P i0(x)=-46.633*xA10+3.0962e-14*xA9+130.11*xA8-7.2714e-14*xA7-133.44*xA6+7.1777e- 14*xA5+61.443*xA4-1.5805e-14*xA3-12.477*xA2-1.6214e-16*x+1.0并可以得到牛顿插值多项式在 [-1 , 1]上的图形,并和原函数进行对比,得Fig. 1。
实验报告实验项目名称数值积分与数值微分实验室数学实验室所属课程名称数值逼近实验类型算法设计实验日期2013年10月30日班级11信息与计算科学学号2011119404姓名冯学宁成绩公式以及高斯-勒让德公式的内容转化成程序语言,用MATLAB实现;第二步,分别用以上求积公式的程序编码求解不同的问题。
【实验过程】(实验步骤、记录、数据、分析)实验的主要步骤是:首先分析问题,根据分析设计MATLAB程序,利用程序算出问题答案,分析所得答案结果,再得出最后结论。
实验:用不同数值方法计算积分(1) 取不同的步长h.分别用复合梯形及复合辛普森求积计算积分,给出误差中关于h的函数,并与积分精确值比较两个公式的精度,是否存在一个最小的h,使得精度不能再被改善?(2) 用龙贝格求积计算完成问题(1)。
(3)用勒让德多项式确定零点,再代入计算高斯公式,使其精度达到10-4(1)在MATLAB的Editor中建立一个M-文件,输入程序代码,实现复合梯形求积公式的程序代码如下:function s=T(n)a=0.0000001;b=1;h=(b-a)/n;s=h*(f(a)+f(b))/2;if n>1for k=1:n-1x=a+k*h;s=s+h*f(x);endE=s+4/9%复合梯形误差end在command Windows中输入命令:T(10),T(100)以及T(1000),得出的结果为:>>T(10)E =0.02719.1563e-06ans =-0.4444总结由结果(1)、(2)可知复合辛普森法求积分精度明显比复合梯形法求积的精度要高,且当步长取不同值时即n越大、h越小时,积分精度越高。
实验结果说明不存在一个最小的h,使得精度不能再被改善。
又两个相应的关于h 的误差(余项)其中η属于a到b。
可知h愈小,余项愈小,从而积分精度越高。
(2)在MATLAB的Editor中建立一个M-文件,输入程序代码,实现龙贝格算法的程序代码如下:function [q,n]=Roberg(f,a,b)M=1;abs0=10;k=0;T=zeros(1,1);h=b-a;T(1,1)=(h/2)*(subs(f,a)+subs(f,b));while abs0>0.0001k=k+1;h=h/2;p=0;for i=1:Mx=a+h*(2*i-1);p=p+subs(f,x);endT(k+1,1)=T(k,1)/2+h*p;M=2*M;for j=1:kT(k+1,j+1)=((4^j)*T(k+1,j)-T(k,j))/(4^j-1);endabs0=abs(T(k+1,j+1)-T(k,j));。
《数值逼近》教学大纲第一篇:《数值逼近》教学大纲《数值逼近》教学大纲(课程编号520271)(学分3.5,学时56)一、课程的性质和任务本课程是信息与计算科学专业的专业大类课。
函数逼近论研究函数的各类逼近性质,是计算数学和其它科学工程计算中诸多数值方法的理论基础。
本课程除了介绍几类古典的函数逼近理论和方法之外,还介绍了现代逼近理论中样条函数、曲线与曲面拟合等方面的理论与技巧。
在介绍上述内容的同时,安排学生上机实习,使学生能够更深刻地理解与掌握逼近论的基本理论与方法,达到理论与实践相结合的目的。
二、课程内容、基本要求 Weierstrass 定理与线性算子逼近掌握 Weierstrass 第一定理、第二定理,了解算子逼近理论。
一致逼近掌握函数一致逼近理论中的Borel 存在定理、最佳逼近定理,熟练掌握Tchebyshev 最小零偏差多项式,了解三角多项式逼近理论和代数多项式逼近理论中的 Jackson 型和 Bernstein 型定理。
多项式插值方法熟练掌握 Lagrange 插值公式、Newton 插值公式、Hermite 插值,等距节点插值与差分,插值余项估计等。
平方逼近理论掌握最小二乘法、最佳平方逼近理论,空间中的直交函数系与广义Fourier 级数、直交函数系的构造方法、直交多项式的一般性质,了解直交多项式级数的收敛性、几种特殊的直交多项式。
数值积分掌握Newton-Cotes 公式、Romberg 方法,熟练掌握代数精度法构造求积公式,熟练掌握Gauss 型求积理论,了解Euler-Maclaurin 公式,三角精度与周期函数的求积公式、奇异积分的计算等内容。
样条逼近方法掌握样条函数及其基本性质、B-样条及其性质、三次样条插值。
曲线、曲面的生成和逼近了解微分几何中的曲线、曲面论,掌握数据处理、累加弦长法、参数样条曲线、Bezier 方法、B-样条方法等曲线与曲面设计方法。
三、课程的教学环节课内 56 学时,课外 12 学时(学生自行上机完成数值实习作业)。
数值逼近课程设计一、设计目的本课程设计旨在让学生通过编写程序实现数值逼近的算法,掌握数值逼近的基本原理以及实现方法,提高数学分析与程序设计的能力。
二、设计要求1.掌握数值逼近的基本原理,了解相关概念和定理。
2.掌握数值逼近的常用算法,能够灵活选择算法来实现数值逼近。
3.能够使用程序进行数值逼近,编写简单的程序验证数值逼近算法的正确性。
4.能够用数值逼近解决实际问题,熟悉数值逼近在实际应用中的作用。
三、设计内容1.基本概念和定理介绍数值逼近的基本概念和定理,包括数学函数近似、最小二乘法、插值等概念,以及相关定理的推导与证明。
2.数值逼近的常用算法介绍数值逼近的常用算法,包括最小二乘法、Lagrange插值法、Newton插值法、Hermite插值法、样条插值法等算法,对每种算法的原理和实现方法进行详细讲解。
3.数值逼近的程序实现编写程序实现数值逼近算法,包括输入数据、计算过程、输出结果等部分。
通过实现不同的算法,对比分析它们的优缺点,体会不同算法在不同问题中的适用性。
4.数值逼近在实际应用中的应用介绍数值逼近在实际应用中的应用,如曲线拟合、信号处理、图像处理等领域,介绍每种应用的具体实现思路和方法。
四、设计步骤1.首先熟练掌握数值逼近的相关概念和定理,对每种算法进行深入理解。
2.建议使用各种语言编写数值逼近程序,可以选择Matlab、Python、C++或者其他语言,通过编写程序验证各种算法的正确性。
3.在编写程序的过程中,要注重数据的预处理和后处理,对于程序的中间结果要进行有效的调试和解释。
4.在实现数值逼近算法的过程中,要进行可视化的效果展示,例如用图表展示结果,方便观察和比较算法的优劣。
5.对于实际应用的部分,要注重与实际问题的结合,提高解决实际问题的能力。
五、课程考核1.编写数值逼近程序并验证其正确性;2.论述各种算法的优缺点及在不同问题中的适用性;3.能够对实际问题进行分析和解决,将算法运用于实际问题中。
课程设计报告课程名称数值逼近专业信息与计算科学班级计算092姓名杜青学号指导教师秦新强、胡钢日期-07-01理学院应用数学系资料内容仅供您学习参考,如有不当之处,请联系改正或者删除。
一、 目的意义(1)进一步熟悉掌握复化梯形公式。
(2)进一步掌握熟悉复化抛物线公式。
(3) 学会比较复化梯形公式和复化抛物线公式如何达到所要求的精度。
二、 内容要求积分计算问题: 分别用复化梯形和复化Simpsom 求积公式计算积分dx e x x x 5.1402)(13-⎰-, 并比较计算量( 精度为10-8) 。
三、 问题解决的方法与算法方法: 利用复化梯形和复化抛物线积分公式。
算法:输入: 端点a 、 b 以及要计算的积分公式f(x);输出: 积分f(x)在指定区间上的近似值以及当其达到所要求的精度时要做的等分数n 的值。
Step1: 编写复化梯形公式程序。
Step2: 经过所要达到的精度作为条件, 算出要做的等分数以及对应的近视值。
Setp3: 编写复化抛物线积分公式程序。
数值积分及其应用报告1Setp4: 经过所要达到的精度作为条件, 算出要做的等分数以及对应的近视值。
Setp5: 然后比较复化梯形和复化抛物线的所需等分数, 比较谁的精度比较高。
四、计算程序1.复化梯形#include <stdio.h>#include <math.h>double f(double x){double s;s=13*(x-x*x)*exp(-1.5*x);return s;}void main(){int n,i;double h,m,y,a,b,t[3000];printf("请输入端点的值a,b\n");scanf("%lf",&a);scanf("%lf",&b);for(n=1;;n++){h=(b-a)/n;m=(f(a)+f(b))/2;for(i=1;i<n;i++){m+=f(a+i*h);}t[n]=m*h;h=(b-a)/(n+1);m=(f(a)+f(b))/2;for(i=1;i<n+1;i++){m+=f(a+i*h);}t[n+1]=m*h;if(fabs(t[n+1]-t[n])<0.00000001) break;}printf("求得结果为n=%d",n);printf("求得结果为:t[n+1]=%10.8f\n",t[n+1]); }2.复化抛物线#include <stdio.h>#include <math.h>double f(double x){double s;s=13*(x-x*x)*exp(-1.5*x); return s;}void main(){int i,n;double h,m,p,q,x,s,a,b,t[1000];printf("请输入端点的值a,b\n");scanf("%lf",&a);scanf("%lf",&b);for(n=1;;n++){h=(b-a)/(2*n);m=f(a)+f(b);p=0;q=0;for(i=1;i<2*n;i++){ x=a+i*h;if(i%2==0)q=q+f(x);elsep=p+f(x);}t[n]=h*(m+2*q+4*p)/3;h=(b-a)/(2*(n+1));m=f(a)+f(b);p=0;q=0;for(i=1;i<2*(n+1);i++){ x=a+i*h;if(i%2==0)q=q+f(x);elsep=p+f(x);}t[n+1]=h*(m+2*q+4*p)/3;if(fabs(t[n+1]-t[n])<0.00000001) break; }printf("求得结果为:n=%d\n",n);printf("求得结果为:%10.8f\n",t[n+1]);。
一、实验目的1. 理解数值逼近的基本概念和方法;2. 掌握常用的数值逼近算法,如牛顿法、二分法、割线法等;3. 熟练运用Matlab进行数值逼近实验,分析实验结果。
二、实验环境1. 操作系统:Windows 102. 编程语言:Matlab R2018a3. 实验设备:联想ThinkPad X1 Carbon笔记本电脑三、实验内容1. 牛顿法求方程的根2. 二分法求方程的根3. 割线法求方程的根4. 利用多项式逼近函数四、实验步骤1. 牛顿法求方程的根(1)编写牛顿法求方程根的Matlab程序,输入参数为方程f(x)和初始值x0;(2)设置迭代精度和最大迭代次数;(3)运行程序,观察迭代过程,记录迭代结果。
2. 二分法求方程的根(1)编写二分法求方程根的Matlab程序,输入参数为方程f(x)和初始区间[a, b];(2)设置迭代精度和最大迭代次数;(3)运行程序,观察迭代过程,记录迭代结果。
3. 割线法求方程的根(1)编写割线法求方程根的Matlab程序,输入参数为方程f(x)和初始值x0, x1;(2)设置迭代精度和最大迭代次数;(3)运行程序,观察迭代过程,记录迭代结果。
4. 利用多项式逼近函数(1)编写多项式逼近函数的Matlab程序,输入参数为函数f(x)和节点x1,x2, ..., xn;(2)利用多项式拟合方法求出系数a0, a1, ..., an;(3)绘制原始函数和多项式逼近函数的图像,观察拟合效果。
五、实验结果与分析1. 牛顿法求方程的根实验结果显示,牛顿法在满足一定条件下具有较高的收敛速度,且在迭代过程中逐渐逼近方程的根。
然而,当初始值选取不合适时,牛顿法可能会陷入局部收敛,甚至发散。
2. 二分法求方程的根二分法具有简单、易实现的特点,但收敛速度较慢。
在实验中,二分法最终成功求出方程的根,但迭代次数较多。
3. 割线法求方程的根割线法相较于牛顿法和二分法具有较好的稳定性,但在某些情况下收敛速度较慢。
实验报告实验项目名称插值法实验室数学实验室所属课程名称数值逼近实验类型算法设计实验日期2013年9月27日班级学号姓名成绩C=conv(C,poly(X(k)))m=length(C);C(m)= C(m)+D(k,k);end当n=10时,我们在Command Window中输入以下的命令:clear,clf,hold on;X=-1:0.2:1;Y=1./(1+25*X.^2);[C,D]=newpoly(X,Y);x=-1:0.01:1;y=polyval(C,x);plot(x,y,X,Y,'.');grid on;xp=-1:0.2:1;z=1./(1+25*xp.^2);plot(xp,z,'r')得到插值函数和f(x)图形:当n=20时,我们在Command Window中输入以下的命令:clear,clf,hold on;X=-1:0.1:1;Y=1./(1+25*X.^2);[C,D]=newpoly(X,Y);x=-1:0.01:1;y=polyval(C,x);plot(x,y,X,Y,'.');grid on;xp=-1:0.1:1;z=1./(1+25*xp.^2);plot(xp,z,'r')得到插值函数和f(x)图形:下面再求三次样条插值函数,在MATLAB的Editor中建立一个多项式的M-file, 输入下列程序代码:function S=csfit(X,Y,dx0,dxn)N=length(X)-1;H=diff(X);D=diff(Y)./H;A=H(2:N-1);B=2*(H(1:N-1)+H(2:N));C=H(2:N);U=6*diff(D);B(1)=B(1)-H(1)/2;当n=20时,我们在Command Window中输入以下的命令:clear,clcX=-1:0.1:1;Y=1./(25*X.^2+1);dx0= 0.0739644970414201;dxn= -0.0739644970414201; S=csfit(X,Y,dx0,dxn)x1=-1:0.01:-0.5;y1=polyval(S(1,:),x1-X(1));x2=-0.5:0.01:0;y2=polyval(S(2,:),x2-X(2));x3=0:0.01:0.5; y3=polyval(S(3,:),x3-X(3));x4=0.5:0.01:1;y4=polyval(S(4,:),x4-X(4));plot(x1,y1,x2,y2,x3,y3,x4,y4, X,Y,'.')结果如图:。
数值逼近课程设计报告作业一多项式插值的Runge现象对于Runge函数f(x)=,在[-1,1]上作等距节点插值,分别取n=4,n=8,n=12,编出程序,画出此插值的图像。
程序代码(matlab实现):lagrange.mfunction y=lagrange(x0,y0,x)ii=1:length(x0);y=zeros(size(x));for i=iiij=find(ii~=i);y1=1;for j=1:length(ij),y1=y1.*(x-x0(ij(j))); endy=y+y1*y0(i)/prod(x0(i)-x0(ij));endrunge.mfunction runge(m1,m2,m3)x1=-1+2*[0:m1]/m1;y1=1./(1+25*x1.^2);x=-1:0.01:1; y4=lagrange(x1,y1,x);x2=-1+2*[0:m2]/m2;y2=1./(1+25*x2.^2);x=-1:0.01:1;y5=lagrange(x2,y2,x);x3=-1+2*[0:m3]/m3;y3=1./(1+25*x3.^2);x=-1:0.01:1;y6=lagrange(x3,y3,x);x=-1:0.01:1;y=1./(1+25*x.^2);plot(x,y,'k-',x,y4,'r--',x,y5,'b-.',x,y6,' m:')legend('原函数','n=4','n=8','n=12')三、运行结果(运行过程):输入runge(4,8,12),可得插值图像:作业二Remez算法求函数f(x)=在[-1,1]上的二次多项式逼近。
参考文献:数值分析算法描述与习题解答(徐士良著)二、程序代码(C语言实现):#include<stdio.h>#include<math.h>double remezf(double x){double y;y=exp(x);return(y);}void remez(double a,double b,double p[],int n,double eps){ int i,j,k,m;doublex[21],g[21],d,t,u,s,xx,x0,h,yy;if(n>20) n=20;m=n+1; d=1.0e+35;for(k=0;k<=n;k++){t=cos((n-k)*3.1415926/(1.0*n));x[k]=(b+a+(b-a)*t)/2.0;}while(1==1){u=1.0;for(i=0;i<=m-1;i++){p[i]=remezf(x[i]);g[i]=-u;u=-u;}for(j=0;j<=n-1;j++){k=m;s=p[k-1];xx=g[k-1]; for(i=j;i<=n-1;i++){ t=p[n-i+j-1];x0=g[n-i+j-1];p[k-1]=(s-t)/(x[k-1]-x[m-i-2]);g[k-1]=(xx-x0)/(x[k-1]-x[m-i-2]); k=n-i+j;s=t;xx=x0;}}u=-p[m-1]/g[m-1];for(i=0;i<=m-1;i++)p[i]=p[i]+g[i]*u;for(j=1;j<=n-1;j++){k=n-j;h=x[k-1];s=p[k-1];for(i=m-j;i<=n;i++){ t=p[i-1];p[k-1]=s-h*t;s=t;k=i;}}p[m-1]=fabs(u);u=p[m-1];if(fabs(u-d)<=eps) return; d=u;h=0.1*(b-a)/(1.0*n);xx=a;x0=a;while(x0<=b){s=remezf(x0);t=p[n-1];for(i=n-2;i>=0;i--)t=t*x0+p[i];s=fabs(s-t);if(s>u) { u=s; xx=x0;}x0=x0+h;}s=remezf(xx);t=p[n-1];for(i=n-2;i>=0;i--)t=t*xx+p[i];yy=s-t; i=1; j=n+1;while((j-i)!=1){k=(i+j)/2;if(xx<x[k-1])j=k;else i=k;}if(xx<x[0]){s=remezf(x[0]);t=p[n-1];for(k=n-2;k>=0;k--)t=t*x[0]+p[k];s=s-t;if(s*yy>0.0)x[0]=xx;else{for(k=n-1; k>=0; k--)x[k+1]=x[k];x[0]=xx;}}else{if(xx>x[n]){s=remezf(x[n]);t=p[n-1];for(k=n-2;k>=0;k--)t=t*x[n]+p[k];s=s-t;if(s*yy>0.0)x[n]=xx; else{for(k=0;k<=n-1;k++)x[k]=x[k+1]; x[n]=xx;}}else{i=i-1; j=j-1;s=remezf(x[i]);t=p[n-1];for(k=n-2;k>=0;k--)t=t*x[i]+p[k];s=s-t;if(s*yy>0.0) x[i]=xx; else x[j]=xx;}}}}void main(){ double a,b,eps,p[4];a=-1.0; b=1.0; eps=1.0e-10;remez(a,b,p,3,eps);printf("a0=%e\n",p[0]);printf("a1=%e\n",p[1]);printf("a2=%e\n",p[2]);printf("\n");printf("MAX(p-f)=%e\n",p[3]);printf("\n");}三、运行结果及说明:其中a0,a1,a2分别为二次多项式零次,一次,二次的系数。
数值逼近第二版课程设计一、课程设计背景随着科学技术和社会经济的快速发展,数值计算逼近算法在科学计算和工程设计等领域中发挥着越来越重要的作用。
本次课程设计旨在通过对数值逼近算法的学习和实践,提高学生对数值计算方法的理解和掌握能力,为以后的科学研究和工程实践打下坚实的学科基础。
二、设计目标本次课程设计的主要目标是:1.掌握基本的数值逼近算法理论和方法;2.熟悉矩阵计算和线性方程组的求解方法;3.能够利用MATLAB等软件工具实现数值逼近算法,并对结果进行分析和评价;4.能够独立开展数值逼近算法的应用实践,解决实际问题。
三、设计方案1. 课程内容本次课程设计内容主要包括以下几个方面:•插值和拟合问题的基本概念与方法:包括样条插值法、最小二乘拟合、矩阵分解法等;•数值微分和数值积分问题的基本概念与方法:包括差分公式、复合求积公式、Gauss型公式等;•线性方程组的求解方法:包括直接法和迭代法等;•数值误差分析:包括截断误差和舍入误差等;•MATLAB等软件工具的使用与应用实践。
2. 实验设计本次课程设计将通过几个实验来帮助学生掌握数值逼近算法的理论与实践:•实验1:MATLAB Software和Numerical Methods Toolbox的基本使用;•实验2:使用多种插值方法进行函数逼近,并对结果进行分析和评价;•实验3:使用多种数值微分和数值积分方法计算函数的导数和积分值,并对结果进行分析和评价;•实验4:使用不同的线性方程组求解方法,比较它们的计算精度和计算速度,并对结果进行分析和评价。
3. 实验报告学生需要完成每个实验的实验报告,报告应包括以下内容:•实验目的和要求;•实验思路和具体步骤;•计算结果和分析;•实验感悟和总结。
四、考核方式本次课程设计的考核方式包括以下几个方面:•实验成绩:占总成绩的60%;•课堂表现:占总成绩的20%;•期末答辩:占总成绩的20%。
五、总结通过本次数值逼近第二版课程设计的学习和实践,学生将能够深入理解数值计算的基本原理和方法,灵活运用MATLAB等软件工具进行数值计算,提高数学建模和工程设计的能力和水平,为未来的研究和实践奠定良好的基础。
数值分析实验三函数的数值逼近-插值与曲线拟合一、实验目的(一)学习MATLAB中多项式的表示及多项式运算(二)学习用典型的插值和拟合方法求函数的近似值或近似表达式(三)掌握拉格朗日、牛顿插值法的基本理论及MATLAB实现,解决一些实际问题。
二、实验内容(一)多项式表示及运算1、在MATLAB命令窗口中输入以下语句,观察结果,分析语句功能(1)p=[1,-5,6,-33],poly2sym(p)(2)syms xf=4*x^3+6*xsym2poly(f)分析函数poly2sym和sym2poly的功能。
2、多项式运算在MATLAB命令窗口中输入以下语句,观察结果p=[3,2,1]; a=1:2:5;polyval (p,a),分析函数polyval功能(二)拉格朗日插值法、Newton插值理论的MATLAB实现Lagrange插值的参考程序:X=[];Y=[]; %X,Y存放已知数据点syms x sn=length(X);s=0.0;for k=1:np=1.0;for j=1:nif j~=kp=p*(x-X(j))/(X(k)-X(j));endends=s+p*Y(k);ends; s=simplify(s);Newton插值的参考程序:X= [];Y= [];n=length(X);for i=1:1:n-1CS(i,1)=(Y(i+1)-Y(i))/(X(i+1)-X(i));endfor j=2:1:n-1for i=j:1:n-1CS(i,j)=(CS(i,j-1)-CS(i-1,j-1))/(X(i+1)-X(i+1-j));endendsyms N x bN=Y(1);a=0;b=(x-X(1));for i=1:1:n-1a=CS(i,i);N=N+a*(b);b=(b)*(x-X(i+1));endfprintf('插值多项式为')N用Lagrange或Newton插值完成课本P48 第2题, P34例5,P28 例2. (三)函数拟合理论的MATLAB实现1、多项式拟合的MATLAB实现(1)学习多项式拟合函数polyfit的使用,其调用格式为:p=polyfit(x,y,n)其中,参数x代表已知数据点自变量组成的向量;参数y代表已知数据点函数值组成的向量;参数n代表所求得拟合多项式系数向量;参数p代表拟合多项式的次数。
数值逼近课程设计最佳逼近一、课程目标知识目标:1. 让学生掌握数值逼近的基本概念,理解最佳逼近的原理及其在数值计算中的应用。
2. 使学生能够运用不同的数值方法进行数据逼近,并分析其优缺点。
3. 帮助学生建立误差分析的基本框架,培养他们评价逼近效果的能力。
技能目标:1. 培养学生运用数学软件或编程工具实现数值逼近算法的能力。
2. 提高学生解决实际问题时选择合适数值逼近方法的能力,并能进行相应的参数调优。
3. 培养学生通过团队协作,共同解决复杂数值计算问题的能力。
情感态度价值观目标:1. 培养学生对数学科学的兴趣,特别是对数值逼近这一领域的探索热情。
2. 增强学生的实证思维,培养他们严谨的科学态度和精益求精的学术追求。
3. 通过数学建模和问题解决,激发学生的创新意识,增强他们面对挑战时的自信心和坚持到底的决心。
本课程设计针对高中年级学生,考虑到他们已具备一定的数学基础和逻辑思维能力,课程性质为理论与实践相结合。
在教学过程中,要求教师注重启发式教学,鼓励学生主动探究和动手实践,通过案例分析、小组讨论等形式,提高学生的问题解决能力和团队合作精神。
课程目标的设定旨在使学生不仅掌握数值逼近的相关知识,而且能够将这些知识应用于实际问题中,培养他们的综合素养。
二、教学内容本章节教学内容围绕以下三个方面展开:1. 数值逼近基本概念:- 介绍逼近的概念、逼近的误差及度量方法。
- 解释最佳逼近的定义及其判定标准。
2. 数值逼近方法:- 分析常用的数值逼近方法,如插值法、最小二乘法、样条插值等。
- 详述各种方法的原理、步骤和适用范围。
教学大纲:a. 插值法:Lagrange插值、Newton插值、Hermite插值等。
b. 最小二乘法:线性最小二乘法及其应用。
c. 样条插值:线性样条、二次样条和三次样条插值。
3. 数值逼近应用及误差分析:- 结合实际案例,展示数值逼近方法在实际问题中的应用。
- 分析逼近过程中的误差来源,探讨如何降低误差。
课程设计报告课程名称数值逼近专业信息与计算科学班级计算092姓名杜青学号 50指导教师秦新强、胡钢日期 2011-07-01理学院应用数学系一、目的意义(1)进一步熟悉掌握复化梯形公式。
(2)进一步掌握熟悉复化抛物线公式。
(3) 学会比较复化梯形公式和复化抛物线公式如何达到所要求的精度。
二、内容要求积分计算问题:分别用复化梯形和复化Simpsom 求积公式计算积分dx e x x x 5.142)(13-⎰-,并比较计算量(精度为10-8)。
三、问题解决的方法与算法方法:利用复化梯形和复化抛物线积分公式。
算法:输入:端点a 、b 以及要计算的积分公式f(x);输出:积分f(x)在指定区间上的近似值以及当其达到所要求的精度时要做的等分数n 的值。
Step1:编写复化梯形公式程序。
Step2:通过所要达到的精度作为条件,算出要做的等分数以及对应的近视值。
Setp3:编写复化抛物线积分公式程序。
Setp4:通过所要达到的精度作为条件,算出要做的等分数以及对应的近视值。
Setp5:然后比较复化梯形和复化抛物线的所需等分数,比较谁的精度比较高。
四、计算程序1.复化梯形数值积分及其应用报告1#include <>#include <>double f(double x){double s;s=13*(x-x*x)*exp*x);return s;}void main(){int n,i;double h,m,y,a,b,t[3000];printf("请输入端点的值a,b\n"); scanf("%lf",&a);scanf("%lf",&b);for(n=1;;n++){h=(b-a)/n;m=(f(a)+f(b))/2;for(i=1;i<n;i++){m+=f(a+i*h);}t[n]=m*h;h=(b-a)/(n+1);m=(f(a)+f(b))/2;for(i=1;i<n+1;i++){m+=f(a+i*h);}t[n+1]=m*h;if(fabs(t[n+1]-t[n])< break;}printf("求得结果为n=%d",n);printf("求得结果为:t[n+1]=%10.8f\n",t[n+1]); }2.复化抛物线#include <>#include <>double f(double x){double s;s=13*(x-x*x)*exp*x);return s;}void main(){int i,n;double h,m,p,q,x,s,a,b,t[1000];printf("请输入端点的值a,b\n");scanf("%lf",&a);scanf("%lf",&b);for(n=1;;n++){h=(b-a)/(2*n);m=f(a)+f(b);p=0;q=0;for(i=1;i<2*n;i++){ x=a+i*h;if(i%2==0)q=q+f(x);elsep=p+f(x);}t[n]=h*(m+2*q+4*p)/3;h=(b-a)/(2*(n+1));m=f(a)+f(b);p=0;q=0;for(i=1;i<2*(n+1);i++){ x=a+i*h;if(i%2==0)q=q+f(x);elsep=p+f(x);}t[n+1]=h*(m+2*q+4*p)/3;if(fabs(t[n+1]-t[n])< break;}printf("求得结果为:n=%d\n",n);printf("求得结果为:%10.8f\n",t[n+1]);}五、计算结果与分析1.复化梯形的运行结果:2.复化抛物线的运行结果:分析与评价:通过对复化梯形的运行结果和复化抛物线的运行结果的分析得到,当其所要求的精度相同时,复化抛物线的的等分数明显比复化梯形的等分数少,因此可以得到复化抛物线的精度比复化梯形的精度高。
六、参考文献[1] 谭浩强. C语言程序设计[M]. 北京:清华大学出版社,2005.[2] 秦新强. 数值逼近, 西安:西安理工大学印刷厂,2010.一、目的意义(1)掌握分段线性插值多项式的算法实现。
(2)学会分析误差和精度,熟练运用各类编程的语句。
(3)进一步提高用数值算法解决实际问题的能力。
二、内容要求机械设计问题:万能拉拨机中有一个圆柱形凸轮(见图1),其底圆半径R=30cm,凸轮的上端面不在同一平面上,要根据从动杆位移变化的需要进行设计制造。
将底圆周长36等分为x i (i =0,1, …, 36),每一圆弧段长为h=52.36mm,对应于每 一分点的柱高为y i (i =0,1, …, 36)。
为方便,将圆柱展开为平面,柱面的的顶端成为图2所示的平面曲线,并已知该曲线上的37个点的坐标(表1)。
y CA B y i y ix 0 O x i x 17 x 36 x图1 凸轮模型 图2 展开曲线机械设计问题报告2表1:测量数据表=0, x36=1884.96mm, h=52.36mm。
xBC是直线段,AB是曲线段,为了数控加工,需要计算出圆周上任一点处的柱高,试构造算法、设计程序、编程计算。
三.问题解决的方法和算法方法:利用分段线性插值和线性插值。
算法:Step1:输入题目所给的数据(x[i],y[i])。
Step2:编写曲线段时要用的分段线性插值的程序。
Step3:编写直线端时要用的线性插值的程序。
Step4:任意输入一个插值点。
Step5:通过判断条件计算插值点所对应的函数值。
四.程序设计#include <>#include <>#define N 17void main(){ int i,n;double X,Y;double m1,m2,m3,m4;double x[N+1];doubley[N+1]={,,525,,,492,451,,,,,,,,,,,};double h=;for(i=0;i<N+1;i++){x[i]=i*h;printf("x[%d]=%lf\n",i,x[i]);}printf("请输入要插入的值X=");scanf("%lf",&X);if(X>=0&&X<={for(i=0;i<N;i++){if(X>=x[i]&&X<x[i+1]){m1=x[i];m2=x[i+1];m3=y[i];m4=y[i+1];Y=;Y=m3*(X-m2)/(m1-m2)+m4*(X-m1)/(m2-m1)+Y;}else if(X=x[i])Y=y[i];elseY=y[i+1];}}else if(X>=&&X<=Y=elseprintf("输入的插入点不在范围内,请重新输入\n");printf("Y=%lf\n",Y);}五.对计算结果的分析和评价此运行结果为第一种情况,当插入点的值在曲线范围内所对应的x0~x17。
此运行结果为第二种情况,当插入点的值在直线范围内所对应的x18~x36。
此运行结果为第三种情况,当插入点的值不在题目所给的范围内时。
分析与评价:运用数值算法解决实际问题时,要注意各种误差。
该题目运用的是分段线性插值和线性插值,虽然存在误差,但是对所要求的结果的影响不大,所以本程序的结果是比较准确的。
六.参考文献[1] 谭浩强. C语言程序设计[M]. 北京:清华大学出版社,2005.[2] 秦新强. 数值逼近, 西安:西安理工大学印刷厂,2010.报告3综合应用问题一、目的意义(1)掌握最小二乘法的基本算法。
(2)通过最小二乘法可以拟合多次多项式的算法。
(3)熟练运用编程所要用的各种语句,该算法主要学会矩阵的乘法以及如何解方程组的程序的实现。
二、内容要求6.多项式拟合问题:考虑将[0,1] 30 等分节点,用多项式y = 1+ x +L+ x 5生成数据,再分别用多项式拟合求其3 次、5 次、10 次、15 次插值多项式,并分析误差产生原因。
三.算法和方法方法:最小二乘法。
算法:Step1:计算和输入题目所给的数据对(x[i],y[i])。
Step2:输入系数矩阵和系数矩阵的转置,两个矩阵相乘得到新矩阵。
Step3:系数矩阵的转置与函数值矩阵相乘,得到新矩阵。
Step4:得到所要求的方程组解方程组。
Step5:得到多项式的各项系数。
即可以写出所要求的拟合多项式。
四.程序设计。
#include <>#include <>#include <>#include <>#define N 7C语言程序设计[M]. 北京:清华大学出版社,2005.[2] 秦新强. 数值逼近, 西安:西安理工大学印刷厂,2010.。