数值分析实验报告2

合集下载

数值分析综合实验报告

数值分析综合实验报告

一、实验目的通过本次综合实验,掌握数值分析中常用的插值方法、方程求根方法以及数值积分方法,了解这些方法在实际问题中的应用,提高数值计算能力。

二、实验内容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)矩形法:计算简单,但精度较低。

数值分析实验报告2

数值分析实验报告2

实验报告实验项目名称函数逼近与快速傅里叶变换实验室数学实验室所属课程名称数值逼近实验类型算法设计实验日期班级学号姓名成绩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 ,图像如下所示:比较后发现,使用切比雪夫零点做拉格朗日插值不会发生龙格现象。

数值分析2024上机实验报告

数值分析2024上机实验报告

数值分析2024上机实验报告数值分析是计算数学的一个重要分支,它研究如何用数值方法来解决数学问题。

在数值分析的学习过程中,学生需要通过上机实验来巩固理论知识,并学会使用相应的数值方法来解决实际问题。

本篇报告将详细介绍2024年度数值分析上机实验的内容和结果。

一、实验内容2024年度数值分析上机实验分为四个部分,分别是:方程求根、插值与拟合、数值积分和常微分方程的数值解。

1.方程求根这部分实验要求使用数值方法求解给定的非线性方程的根。

常见的数值方法有二分法、牛顿法、割线法等。

在实验过程中,我们需要熟悉这些数值方法的原理和实现步骤,并对不同方法的收敛性进行分析和比较。

2.插值与拟合这部分实验要求使用插值和拟合方法对给定的一组数据进行拟合。

插值方法包括拉格朗日插值、牛顿插值等;拟合方法包括最小二乘拟合、多项式拟合等。

在实验中,我们需要熟悉插值和拟合方法的原理和实现步骤,并对不同方法的精度和稳定性进行比较。

3.数值积分这部分实验要求使用数值方法计算给定函数的积分。

常见的数值积分方法有梯形法则、辛普森法则、龙贝格积分等。

在实验过程中,我们需要熟悉这些数值积分方法的原理和实现步骤,并对不同方法的精度和效率进行比较。

4.常微分方程的数值解这部分实验要求使用数值方法求解给定的常微分方程初值问题。

常见的数值方法有欧拉法、改进的欧拉法、四阶龙格-库塔法等。

在实验中,我们需要熟悉这些数值解方法的原理和实现步骤,并对不同方法的精度和稳定性进行比较。

二、实验结果在完成2024年度数值分析上机实验后,我们得到了以下实验结果:1.方程求根我们实现了二分法、牛顿法和割线法,并对比了它们的收敛速度和稳定性。

结果表明,割线法的收敛速度最快,但在一些情况下可能会出现振荡;二分法和牛顿法的收敛速度相对较慢,但稳定性较好。

2.插值与拟合我们实现了拉格朗日插值和最小二乘拟合,并对比了它们的拟合效果和精度。

结果表明,拉格朗日插值在小区间上拟合效果较好,但在大区间上可能出现振荡;最小二乘拟合在整体上拟合效果较好,但可能出现过拟合。

(完整版)数值分析实验报告2—陈亮(20200930224414)

(完整版)数值分析实验报告2—陈亮(20200930224414)

实验报告实验报告课程名称:数值分析课题名称:对比传统多项式求值和秦九韶算法专业:勘察技术与工程(地球物理方向)姓名:陈亮班级:061132 完成日期:2015年10月21日姓名陈亮评分实验报告一、实验名称对比传统多项式求值和秦九韶算法的区别二、实验目的(1)培养编程与上机使用MATLAB能力(2)使用不同算法的差异(3)评估各算法稳定性三、实验要求(1)利用matlab编写算法;(2)计算算法的复杂度。

四、实验原理秦九韶算法是一种将一元n次多项式的求值问题转化为n个一次式的算法。

五、实验题目秦九韶算法和传统算法复杂度对比六、实验步骤(1)写出秦九韶算法表达式:(2)利用Matlab编程计算(3)最后结果分析七、实验整体流程图或算法八、程序及其运行结果clear all;clc %清除变量a=input('please input a()=');%输入系数x=input('please input x=');%输入变量值n=length(a);%计算最高次ticm(1)=a(n)for j=2:n%传统循环m(j)=m(j-1)+a(n+1-j)*(x.^(j-1));endm(n)toctic;%开始计时s(1)=a(1)%赋值for i=2:n%秦九韶循环s(i)=s(i-1)*x+a(i);ends(n)toc结果:please input a()=[12,11,1,115,12,10]please input x=1.2ans =244.3974时间已过 0.001990 秒。

ans =244.3974时间已过 0.000361 秒。

九、实验结果分析传统算计算n次多项需要(n+1)/n次乘法和n次加法,秦九韶算法只用计算n次乘法和n 次加法,乘法复杂度从O(n^2)降为O(n)。

我发现了问题,就是在调整秦九韶算法和传统算法的顺序,运算时间会有很大的变化。

还是不是很清楚原理。

数值分析实验报告--实验2--插值法

数值分析实验报告--实验2--插值法

1 / 21数值分析实验二:插值法1 多项式插值的震荡现象1.1 问题描述考虑一个固定的区间上用插值逼近一个函数。

显然拉格朗日插值中使用的节点越多,插值多项式的次数就越高。

我们自然关心插值多项式的次数增加时, 是否也更加靠近被逼近的函数。

龙格(Runge )给出一个例子是极著名并富有启发性的。

设区间[-1,1]上函数21()125f x x=+ (1)考虑区间[-1,1]的一个等距划分,分点为n i nix i ,,2,1,0,21 =+-= 则拉格朗日插值多项式为201()()125nn ii iL x l x x ==+∑(2)其中的(),0,1,2,,i l x i n =是n 次拉格朗日插值基函数。

实验要求:(1) 选择不断增大的分点数目n=2, 3 …. ,画出原函数f(x)及插值多项式函数()n L x 在[-1,1]上的图像,比较并分析实验结果。

(2) 选择其他的函数,例如定义在区间[-5,5]上的函数x x g xxx h arctan )(,1)(4=+=重复上述的实验看其结果如何。

(3) 区间[a,b]上切比雪夫点的定义为 (21)cos ,1,2,,1222(1)k b a b ak x k n n π⎛⎫+--=+=+ ⎪+⎝⎭(3)以121,,n x x x +为插值节点构造上述各函数的拉格朗日插值多项式,比较其结果,试分析2 / 21原因。

1.2 算法设计使用Matlab 函数进行实验, 在理解了插值法的基础上,根据拉格朗日插值多项式编写Matlab 脚本,其中把拉格朗日插值部分单独编写为f_lagrange.m 函数,方便调用。

1.3 实验结果1.3.1 f(x)在[-1,1]上的拉格朗日插值函数依次取n=2、3、4、5、6、7、10、15、20,画出原函数和拉格朗日插值函数的图像,如图1所示。

Matlab 脚本文件为Experiment2_1_1fx.m 。

可以看出,当n 较小时,拉格朗日多项式插值的函数图像随着次数n 的增加而更加接近于f(x),即插值效果越来越好。

数值分析实验报告二

数值分析实验报告二

数值实验报告二一、实验名称解线性方程组的列主元素高斯消去法和LU 分解法二、实验目的通过数值实验,从中体会解线性方程组选主元的必要性和LU 分解法的优点,以及方程组系数矩阵和右端向量的微小变化对解向量的影响。

三、实验内容解下列两个线性方程组(1) ⎪⎪⎪⎭⎫ ⎝⎛=⎪⎪⎪⎭⎫ ⎝⎛⎪⎪⎪⎭⎫ ⎝⎛--11134.981.4987.023.116.427.199.103.601.3321x x x (2) ⎪⎪⎪⎪⎪⎭⎫ ⎝⎛=⎪⎪⎪⎪⎪⎭⎫ ⎝⎛⎪⎪⎪⎪⎪⎭⎫ ⎝⎛----15900001.582012151526099999.23107104321x x x x 四、算法描述1、 列主元素高斯消去法记: ij ij a a =1)( (i, j = 1,2,3n )i i b b =1)( (i = 1,2,3n )消元过程:对于k = 1,2,3n(1) 选行号k i ,使)()(max k i ni k k k i k k a a ≤≤=。

(2) 交换)(k kj a 与)(k j i k a (j = k, k+1,k+2n )以及)()(k i k k k b b 与所含的数值。

(3)对于i = k, k+1,k+2n ,计算)()(k kkk ik ik a a m =)()()1(k kj ik k ij k ij a m a a -=+ (j = k, k+1,k+2n ))()()1(k k ik k i k i b m b b -=+回代过程:)(n nnn n a b x = )()1)()(/(k kk j n k j k kj k k k a x a a x ∑+=-= (k = n-1, n-2, n-3 1 )在此算法中的)(k k i k a 称为第k 个列主元素,它的数值总要被交换到第k 个主对角线元素的位置上。

2、 LU 分解法通过MATLAB 自有的函数,把系数矩阵A 分解成A=LU ,其中:L 是下三角矩阵,U 是上三角矩阵,这时方程组Ax=b 就可以分解成两个容易求解的三角形方程组Ly=b ,Ux=y 。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

数值分析实验报告二2汇总

数值分析实验报告二2汇总
legend('数据点(xi,yi)','牛顿插值曲线y=f(x)');xlabel('x');ylabel('y');
title('数据点(xi,yi)和牛顿插值曲线y=f(x)的图形')
运行结果:
实验结果分析:
最小二乘法拟合的曲线误差最小。
也可以得到三图合一的图像:
在以上命令的基础上
运行命令plot(x1,y1,'r*',x,y,'b-',t,p1,'k-',x,P2,'y-')
% f积分函数
% a/b:积分上下限
% tol:积分误差
% R:Romberg积分值
% k:二分次数
k=1;
h=b-a;
%第一步
T(k,1)=h/2*(f(a)+f(b));
err=1;
whileerr>=eps
T(k,k)= Tห้องสมุดไป่ตู้k,1);
h=h/2;
%第二步求梯形值T0
temp=0;
i=1;
whilei<2^k
实验结果分析:
本题用了三种方法计算,虽然三种方法的结果差别不大,但得到结果的过程不同,每个方法都有其优缺点。
成绩评定
签字:年月日
-3002399751579999/9007199254740992*x^3-311/1125899906842624*x^2+4128299658423301/562949953421312*x-2533274790396013/281474976710656
拉格朗日插值
实验步骤:

数值分析实验报告

数值分析实验报告

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

2.实验过程:实验代码:#include &quot;stdio.h&quot;#include &quot;math.h&quot;#includeiostreamusing namespace std;//Gauss法void lzy(double **a,double *b,int n) {int i,j,k;double l,x[10],temp;for(k=0;kn-1;k++){for(j=k,i=k;jn;j++){if(j==k)temp=fabs(a[j][k]);else if(tempfabs(a[j][k])){temp=fabs(a[j][k]);i=j;}}if(temp==0){cout&quot;无解\n; return;}else{for(j=k;jn;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;in;i++) {l=a[i][k]/a[k][k];for(j=k;jn;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&quot;无解\n;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;jn;j++)temp=temp+a[i][j]*x[j];x[i]=(b[i]-temp)/a[i][i];}for(i=0;in;i++){printf(&quot;x%d=%lf\t&quot;,i+1,x[i]); printf(&quot;\n&quot;);}}//平方根法void pfg(double **a,double *b,int n)int i,k,m;double x[8],y[8],temp;for(k=0;kn;k++){temp=0;for(m=0;mk;m++)temp=temp+pow(a[k][m],2);if(a[k][k]temp)return;a[k][k]=pow((a[k][k]-temp),1.0/2.0);for(i=k+1;in;i++){temp=0;for(m=0;mk;m++)temp=temp+a[i][m]*a[k][m]; a[i][k]=(a[i][k]-temp)/a[k][k]; }temp=0;for(m=0;mk;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;mn;m++)temp=temp+a[m][k]*x[m];x[k]=(y[k]-temp)/a[k][k];}for(i=0;in;i++){printf(&quot;x%d=%lf\t&quot;,i+1,x[i]);printf(&quot;\n&quot;);}}//追赶法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;in;i++){a0[i]=a[i][i];if(in-1)c[i]=a[i][i+1];if(i0)d[i-1]=a[i][i-1];}a1[0]=a0[0];for(i=0;in-1;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;in;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;in;i++){printf(&quot;x%d=%lf\t&quot;,i+1,x[i]); printf(&quot;\n&quot;);}}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;in;i++){A[i]=(double *)malloc((n)*sizeof(double));B[i]=(double*)malloc((n)*sizeof(double));C[i]=(double*)malloc((n)*sizeof(double)); }cout&quot;第一题(Gauss列主元消去法):&quot;endlendl; cout&quot;请输入阶数n:&quot;endl;cinn;cout&quot;\n请输入系数矩阵:\n\n&quot;;for(i=0;in;i++)for(j=0;jn;j++){篇三:数值分析实验报告(包含源程序) 课程实验报告课程实验报告。

数值分析实习报告总结

数值分析实习报告总结

一、实习背景数值分析是数学的一个重要分支,它研究如何用数值方法求解数学问题。

随着计算机技术的飞速发展,数值分析在各个领域得到了广泛的应用。

为了提高自己的实践能力,我选择了数值分析作为实习课题,希望通过这次实习,能够掌握数值分析的基本方法,并将其应用于实际问题中。

二、实习过程1. 实习初期在实习初期,我首先了解了数值分析的基本概念、理论和方法。

通过阅读相关教材和文献,我对数值分析有了初步的认识。

接着,我学习了数值分析的基本方法,如泰勒展开、牛顿法、高斯消元法等。

2. 实习中期在实习中期,我选择了几个实际问题进行数值计算。

首先,我使用泰勒展开法求解一个简单的微分方程。

通过编写程序,我得到了微分方程的近似解。

然后,我运用牛顿法求解一个非线性方程组。

在实际计算过程中,我遇到了一些问题,如收敛性、迭代次数过多等。

通过查阅资料和请教导师,我找到了解决方法,成功求解了方程组。

3. 实习后期在实习后期,我进一步学习了数值分析的高级方法,如复化梯形公式、复化Simpson公式、自适应梯形法等。

这些方法在解决实际问题中具有更高的精度和效率。

我选择了一个具体的工程问题,运用复化梯形公式求解定积分。

在计算过程中,我遇到了区间细分、精度控制等问题。

通过不断尝试和调整,我得到了较为精确的积分值。

三、实习收获与体会1. 理论与实践相结合通过这次实习,我深刻体会到理论与实践相结合的重要性。

在实习过程中,我不仅学习了数值分析的理论知识,还将其应用于实际问题中。

这使我更加深刻地理解了数值分析的基本方法,提高了自己的实践能力。

2. 严谨的学术态度在实习过程中,我养成了严谨的学术态度。

在编写程序、进行数值计算时,我注重细节,力求精确。

这使我更加注重学术规范,提高了自己的学术素养。

3. 团队合作精神实习过程中,我与其他同学进行了交流与合作。

在解决实际问题时,我们互相学习、互相帮助,共同完成了实习任务。

这使我更加懂得团队合作的重要性,提高了自己的团队协作能力。

数值分析实验报告2——Runge现象

数值分析实验报告2——Runge现象

数值分析课程实验报告——插值逼近题目一.Runge 函数的插值1. Runge 函数Runge 函数的表达式为:21()125R x x =+ 其在[-1,1]区间上的函数图像如图1.1。

在课程学习中我们知道,对Runge 函数进行高次插值时有可能在两端出现不收敛的情况,即Runge 现象。

下面将分别用四种不同的插值方法在[-1,1]区间上对Runge 函数进行插值,并分析是否产生Runge 现象,比较插值效果。

图1.1.Runge 函数在[-1,1]区间的函数图像2.Newton 插值首先根据课本上的Newton 插值算法进行编程(代码略)。

核心思想就是用符号变量进行中间运算,以便将最终的插值函数用符号表达式表示出来,并进一步生成图像。

此处插值节点选择为等距插值节点,即:0.1(0,1,2,,)i x ih i =-+= (20)其中h=0.1。

插值曲线与原曲线的对比如图1.2(蓝色为原曲线,红色为插值曲线)。

从图中看出,在区间中部,二者吻合较好;但在区间两端二者则产生了明显偏差,甚至可以达到一个非常大的数值(e20量级)。

因此,在等距节点的20次Newton 插值下,产生了明显的Runge 现象。

图1.2.Newton 插值曲线与原曲线对比3. Lagrange 插值此处同样是根据Lagrange 插值的具体算法进行编程。

但插值节点不再是等距分布,而是如下形式:21cos()(0,1,2,,)42i i x i π+==…20 插值曲线与原曲线的对比如图1.3(蓝色为原曲线,红色为插值曲线)。

从图中看出,插值曲线与原曲线吻合的很好,没有产生明显的Runge 现象。

对比产生了明显Runge 现象的20次Newton 插值,Lagrange 插值的最高次数虽然也是20,但由于此处的插值节点不是等距分布的(事实上,此处采用的插值节点正是Chebyshev 多项式的零点),而是中间疏两边密,因此两侧较密的节点很好地抑制了Runge 现象。

数值分析实验报告5篇

数值分析实验报告5篇

误差分析实验1.1(问题)实验目的:算法有“优”与“劣”之分,问题也有“好”与“坏”之别。

对数值方法的研究而言,所谓坏问题就是问题本身对扰动敏感者,反之属于好问题。

通过本实验可获得一个初步体会。

数值分析的大部分研究课题中,如线性代数方程组、矩阵特征值问题、非线性方程及方程组等都存在病态的问题。

病态问题要通过研究和构造特殊的算法来解决,当然一般要付出一些代价(如耗用更多的机器时间、占用更多的存储空间等)。

问题提出:考虑一个高次的代数多项式)1.1()()20()2)(1()(201∏=-=---=k k x x x x x p显然该多项式的全部根为1,2,…,20共计20个,且每个根都是单重的。

现考虑该多项式的一个扰动)2.1(0)(19=+x x p ε其中ε是一个非常小的数。

这相当于是对(1.1)中19x 的系数作一个小的扰动。

我们希望比较(1.1)和(1.2)根的差别,从而分析方程(1.1)的解对扰动的敏感性。

实验内容:为了实现方便,我们先介绍两个Matlab 函数:“roots ”和“poly ”。

roots(a)u =其中若变量a 存储n+1维的向量,则该函数的输出u 为一个n 维的向量。

设a 的元素依次为121,,,+n a a a ,则输出u 的各分量是多项式方程01121=+++++-n n n n a x a x a x a的全部根;而函数poly(v)b =的输出b 是一个n+1维变量,它是以n 维变量v 的各分量为根的多项式的系数。

可见“roots ”和“poly ”是两个互逆的运算函数。

;000000001.0=ess );21,1(zeros ve = ;)2(ess ve =))20:1((ve poly roots +上述简单的Matlab 程序便得到(1.2)的全部根,程序中的“ess ”即是(1.2)中的ε。

实验要求:(1)选择充分小的ess ,反复进行上述实验,记录结果的变化并分析它们。

数值分析实验报告2

数值分析实验报告2

实验报告一、实验名称复合梯形求积公式、复合辛普森求积公式、龙贝格求积公式及自适应辛普森积分。

二、实验目的及要求1. 掌握复合梯形求积计算积分、复合辛普森求积计算积分、龙贝格求积计算积分和自适应辛普森积分的基本思路和步骤.2. 培养Matlab 编程与上机调试能力. 三、实验环境计算机,MATLAB 软件 四、实验内容1.用不同数值方法计算积分94ln 10-=⎰xdx x 。

(1)取不同的步长h 。

分别用复合梯形及复合辛普森求积计算积分,给出误差中关于h 的函数,并与积分精确指比较两个公式的精度,是否存在一个最小的h ,使得精度不能再被改善。

(2)用龙贝格求积计算完成问题(1)。

(3)用自适应辛普森积分,使其精度达到10-4。

五、算法描述及实验步骤1.复合梯形公式将区间[a,b]划分为n 等份,分点x k =a+ah,h=(b-a)/h,k=0,1,...,n ,在每个子区间[x k ,x k +1](k=0,1,...,n-1)上采用梯形公式(1.1),得)]()([2)(b f a f ab dx x f b a+-≈⎰ (1.1) )]()(2)([2)]()([211110b f x f b f hx f x f h T n k k k n k k n ++=+=∑∑-=+-= (1.2)),(),(12)(''2b a f h a b f R n ∈--=ηη(1.3) 其中Tn 称为复合梯形公式,Rn 为复合梯形公式的余项。

2.复合辛普森求积公式将区间[a,b]划分为n 等份,在每个子区间[x k ,x k +1](k=0,1,...,n-1)上采用辛普森公式(1.4),得)]()2(4)([6b f ba f a f ab S +++-=(1.4) )]()(2)(4)([6)]()()([611102/112/11b f x f x f b f hx f x f x f h S n k k n k k k k n k k n +++=++=∑∑∑-=-=+++-= (1.5) ),(),()2(180)()4(4b a f h a b f R n ∈-=ηη (1.6)其中Sn 称为复合辛普森求积公式,Rn 为复合辛普森求积公式的余项。

数值分析实习报告

数值分析实习报告

一、实习背景随着科学技术的飞速发展,数值分析在各个领域都得到了广泛的应用。

为了更好地掌握数值分析的基本理论和方法,提高自己的实践能力,我于2023年暑期参加了某科技有限公司的数值分析实习。

二、实习内容1. 数值微分在实习期间,我首先学习了数值微分的基本理论和方法。

通过实际操作,我掌握了使用中心差分法、前向差分法和后向差分法计算函数在某点的导数。

在实际应用中,我使用这些方法对工程问题中的函数进行了导数计算,为后续的数值积分和数值求解提供了基础。

2. 数值积分接下来,我学习了数值积分的基本理论和方法。

在实习过程中,我掌握了梯形法则、辛普森法则和柯特斯法则等数值积分方法。

通过实际操作,我能够对函数进行数值积分,并在实际工程问题中应用这些方法。

3. 线性方程组求解线性方程组在数值分析中具有广泛的应用。

在实习期间,我学习了高斯消元法、LU 分解法、Cholesky分解法等求解线性方程组的方法。

通过实际操作,我能够对大规模线性方程组进行求解,并在实际工程问题中应用这些方法。

4. 最优化方法最优化方法是数值分析中的重要分支。

在实习期间,我学习了梯度下降法、牛顿法、共轭梯度法等最优化方法。

通过实际操作,我能够对实际问题进行最优化求解,并在实际工程问题中应用这些方法。

5. 数值求解微分方程微分方程在科学研究和工程应用中具有重要作用。

在实习期间,我学习了欧拉法、龙格-库塔法等数值求解微分方程的方法。

通过实际操作,我能够对微分方程进行数值求解,并在实际工程问题中应用这些方法。

三、实习收获1. 提高了数值分析的理论水平。

通过实习,我对数值分析的基本理论和方法有了更深入的理解。

2. 增强了实际操作能力。

在实习过程中,我熟练掌握了各种数值分析方法的实际操作,提高了自己的动手能力。

3. 培养了团队合作精神。

在实习过程中,我与团队成员密切合作,共同完成实习任务,提高了自己的团队协作能力。

4. 了解了数值分析在工程应用中的重要性。

《数值分析》实验报告2

《数值分析》实验报告2

《数值分析》实验报告一、问题的提出求解线性方程组的迭代法,即是用某种极限过程去逐步逼近线性方程组的精确解的过程,迭代法是解大型稀疏矩阵方程组的重要方法。

二、实验名称运用MATLAB编程实现雅可比(Jacobi)迭代和高斯-赛德尔(Gauss-Seidel)迭代。

三、实验目的1、熟悉了解雅可比(Jacobi)迭代和高斯-赛德尔(Gauss-Seidel)迭代的算法。

2、学习MATLAB软件的功能。

四、基本原理五、实验环境操作环境:Windows10实验平台:Matlab7.1软件六、试验设计1、jacobi迭代法(1)算例:课本p54页例1(2)程序清单Jacobi迭代法的MATLAB函数文件Jacobi.m如下:function [y,n]=jacobi(A,b,x0,eps)if nargin==3eps=1.0e-6;elseif nargin<3errorreturnendD=diag(diag(A)); %求A的对角矩阵L=-tril(A,-1); %求A的下三角阵U=-triu(A,1); %求A的上三角阵B=D\(L+U);f=D\b;y=B*x0+f;n=1; %迭代次数while norm(y-x0)>=epsx0=y;y=B*x0+f;n=n+1;end(3)实验结果及分析:>> A=[8,-3,2;4,11,-1;6,3,12];>> b=[20,33,36]';>> [x,n]=jacobi(A,b,[0,0,0]',1.0e-6)x =3.00002.00001.0000n =162、Gauss-seidel迭代法(1)算例:课本p54页例1(2)程序清单:Gauss-Serdel迭代法的MATLAB函数文件gauseidel.m如下:function [y,n]=gauseidel(A,b,x0,eps)if nargin==3eps=1.0e-6;elseif nargin<3errorreturnendD=diag(diag(A)); %求A的对角矩阵L=-tril(A,-1); %求A的下三角阵U=-triu(A,1); %求A的上三角阵G=(D-L)\U;f=(D-L)\b;y=G*x0+f;n=1; %迭代次数while norm(y-x0)>=epsx0=y;y=G*x0+f;n=n+1;end(3)实验结果及分析:>> A=[8,-3,2;4,11,-1;6,3,12];>> b=[20,33,36]';>> [x,n]=gauseidel(A,b,[0,0,0]',1.0e-6)x =3.00002.00001.0000n =9七、结果说明:高斯-赛德尔迭代法比雅可比迭代法收敛得快一些(达到相同精度所需迭代次数较少)。

数值_分析实验报告

数值_分析实验报告

一、实验目的1. 理解数值分析的基本概念和方法;2. 掌握线性方程组的求解方法,如雅可比迭代法、高斯赛德尔迭代法和SOR迭代法;3. 利用MATLAB软件进行数值计算,并分析结果。

二、实验原理1. 数值分析是研究如何用数值方法求解数学问题的学科,其核心是误差分析和算法设计。

2. 线性方程组是数值分析中的基本问题之一,常见的求解方法有直接法和迭代法。

3. 雅可比迭代法、高斯赛德尔迭代法和SOR迭代法是三种常用的迭代法,它们通过迭代过程逐步逼近方程组的解。

4. MATLAB是一种高性能的科学计算软件,具有强大的数值计算和可视化功能。

三、实验内容1. 实验一:雅可比迭代法(1)原理:雅可比迭代法是求解线性方程组的迭代法之一,其基本思想是将线性方程组分解为多个子方程,然后依次求解子方程,逐步逼近方程组的解。

(2)步骤:a. 输入系数矩阵A和常数向量B;b. 初始化迭代变量X0;c. 计算对角矩阵D、上三角矩阵L和下三角矩阵U;d. 进行迭代计算,直到满足精度要求或达到最大迭代次数;e. 输出解向量X。

(3)MATLAB代码实现:```MATLABfunction [X, K] = JACOBI(A, B, X0, E, N)[n, n] = size(A);D = diag(A);L = tril(A - D, -1);U = triu(A - D);K = 0;for i = 1:NX_new = (B - L \ U \ X0) / D;if norm(X_new - X0) < Ebreak;endX0 = X_new;K = K + 1;endX = X_new;end```2. 实验二:高斯赛德尔迭代法(1)原理:高斯赛德尔迭代法是另一种求解线性方程组的迭代法,其基本思想是在每次迭代中,利用已求得的近似解来更新下一个近似解。

(2)步骤:a. 输入系数矩阵A和常数向量B;b. 初始化迭代变量X0;c. 进行迭代计算,直到满足精度要求或达到最大迭代次数;d. 输出解向量X。

数值分析的实验报告

数值分析的实验报告

数值分析的实验报告数值分析的实验报告导言数值分析是一门研究数值计算方法和数值计算误差的学科,它在科学计算、工程技术和社会经济等领域具有广泛的应用。

本实验旨在通过对数值分析方法的实际应用,验证其有效性和可靠性。

实验一:方程求根方程求根是数值分析中的基础问题之一。

我们选取了一个非线性方程进行求解。

首先,我们使用二分法进行求解。

通过多次迭代,我们得到了方程的一个近似解。

然后,我们使用牛顿法进行求解。

与二分法相比,牛顿法的收敛速度更快,但需要选择一个初始点。

通过比较两种方法的结果,我们验证了牛顿法的高效性。

实验二:插值与拟合插值与拟合是数值分析中常用的数据处理方法。

我们选取了一组实验数据,通过拉格朗日插值法和最小二乘法进行插值和拟合。

通过对比两种方法的拟合效果,我们验证了最小二乘法在处理含有噪声数据时的优势。

同时,我们还讨论了插值和拟合的精度与样本点数量之间的关系。

实验三:数值积分数值积分是数值分析中的重要内容之一。

我们选取了一个定积分进行计算。

首先,我们使用复化梯形公式进行积分计算。

通过增加分割区间的数量,我们得到了更精确的结果。

然后,我们使用复化辛普森公式进行积分计算。

与复化梯形公式相比,复化辛普森公式具有更高的精度。

通过比较两种方法的结果,我们验证了复化辛普森公式的优越性。

实验四:常微分方程数值解常微分方程数值解是数值分析中的重要应用之一。

我们选取了一个常微分方程进行数值解的计算。

首先,我们使用欧拉方法进行数值解的计算。

然后,我们使用改进的欧拉方法进行数值解的计算。

通过比较两种方法的结果,我们验证了改进的欧拉方法的更高精度和更好的稳定性。

实验五:线性方程组的数值解法线性方程组的数值解法是数值分析中的重要内容之一。

我们选取了一个线性方程组进行数值解的计算。

首先,我们使用高斯消元法进行数值解的计算。

然后,我们使用追赶法进行数值解的计算。

通过比较两种方法的结果,我们验证了追赶法在求解三对角线性方程组时的高效性。

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

一、实验名称
复合梯形求积公式、复合辛普森求积公式、龙贝格求积公式及自适应辛普森积分。

二、实验目的及要求
1. 掌握复合梯形求积计算积分、复合辛普森求积计算积分、龙贝格求积计算积分和自适应辛普森积分的基本思路和步骤.
2. 培养Matlab 编程与上机调试能力. 三、实验环境
计算机,MATLAB 软件 四、实验内容
1.用不同数值方法计算积分9
4
ln 1
0-=⎰
xdx x 。

(1)取不同的步长h 。

分别用复合梯形及复合辛普森求积计算积分,给出误差中关于h 的函数,并与积分精确指比较两个公式的精度,是否存在一个最小的h ,使得精度不能再被改善。

(2)用龙贝格求积计算完成问题(1)。

(3)用自适应辛普森积分,使其精度达到10-4。

五、算法描述及实验步骤
1.复合梯形公式
将区间[a,b]划分为n 等份,分点x k =a+ah,h=(b-a)/h,k=0,1,...,n ,在每个子区间[x k ,x k +1](k=0,1,...,n-1)上采用梯形公式(),得
)]()([2
)(b f a f a
b dx x f b
a
+-≈

() )]()(2)([2)]()([21
1
110b f x f b f h
x f x f h T n k k k n k k n ++=+=∑∑-=+-= ()
),(),(12
)('
'2b a f h a b f R n ∈--
=ηη () 其中Tn 称为复合梯形公式,Rn 为复合梯形公式的余项。

2.复合辛普森求积公式
将区间[a,b]划分为n 等份,在每个子区间[x k ,x k +1](k=0,1,...,n-1)上采用辛普森公式(),得
)]()2
(4)([6b f b a f a f a b S +++-= ()
)]()(2)(4)([6)]
()()([61
1
102/112/11
b f x f x f b f h
x f x f x f h S n k k n k k k k n k k n +++=++=∑∑∑-=-=+++-= () ),(),()2
(180)()
4(4b a f h a b f R n ∈-=
ηη () 其中Sn 称为复合辛普森求积公式,Rn 为复合辛普森求积公式的余项。

3.龙贝格算法 统一的公式:
)(1
41
)2(144)(11h T h T h T m m m m m m -----= ()
经过m (m=1,2...)次加速后,余项便取下列形式:
...)()2(22)1(21+++=++m m m h h I h T ξξ ()
上述处理方法通常称为理查森外推加速法。

设以)(0k T 表示二分k 次后求得的梯形值,且以)
(k m T 表示序列{)(0k T }的m 次加
速值,则依递推公式()可得
,...2,1,1
41144)()
(1)1(1)(=---=-+-k T T h T
k m m
k m m m k m
() 公式()也称为龙贝格求积算法,计算过程如下:
(1)取k=0,h=b-a,求)]
()([2)0(0b f a f h
T +=。

令k →1(k 记区间[a,b]的二分次数)。

(2)求梯形值T 0((b-a)/2k ),即按递推公式()计算)(0k T 。

∑-=++=1
2/12)(221n k k n n x f h T T ()
(3)求加速值,按公式()逐个求出T 值。

(4)若ε<--)
0(1)0(k k T T (预先给定的精度),则终止计算,并取I T k ≈)0(;否则
令k k →+1转(2)继续计算。

4.自适应积分方法
设给定精度要求0>ε,计算积分dx x f f I b
a
⎰=)()(的近似值。

先取步长h=b-a ,
应用辛普森公式有
),(),()2
(180),()()(4
4b a f h a b b a S dx x f f I b
a ∈--
==⎰ηη ()
表区间[a,b]对分,步长h 2=h/2=(b-a)/2,在每个小区间上用辛普森公式,得
),(),()2
(180),()(4
422b a f h a b b a S f I ∈--
=ξξ () 上式即为
),(),()4
(180),()(4
42b a f h a b b a S f I ∈--=ξξ () 将()与()比较得 212215
1),(),(151),()(S S b a S b a S b a S f I -=-≈
- 则期望得到
ε<-),()(2b a S f I () 此时可取S 2(a,b)作为dx x f f I b
a ⎰=)()(的近视,则可达到给定的误差精度ε。

如果不行,则细分区间,进行计算。

六、调试过程及实验结果
取不同的步长,得到的不同结果如下表:
七、总结
通过本次学习Matlab ,掌握了复合梯形求积公式、复合辛普森求积公式、龙贝格求积公式及自适应辛普森积分的程序和算法,为以后处理数据提供一种更加简便,准确的方法。

八、附录(源程序清单)
1.复合梯形
function s=fuhetixing(f,a,b,n) %f 为被积分函数 %a ,b 是积分上下限 %n 是子区间个数 %s 是积分值 h=(b-a)/n; s=0;
for k=1:(n-1) x=a+h*k;
s=s+feval('f',x);
end
format long
s=h*(feval('f',a)+feval('f',b))/2+h*s;
2.复合辛普森
function S=Comsimpson(f,a,b,n)
%f为被积分函数
%a,b是积分上下限
%n是子区间个数
%s是积分值
h=(b-a)/(2*n);
s1=0;s2=0;
for k=1:n
x=a+h*(2*k-1);
s1=s1+feval('f',x);
end
for k=1:(n-1)
x=a+h*2*k;
s2=s2+feval('f',x);
end
format long
S=h*(feval('f',a)+feval('f',b)+4*s1+2*s2)/3;
3.龙贝格
function [T,quad,err,h]=Romberg(f,a,b,n,delta) %f为被积分函数
%a,b是积分上下限
%n+1是T数表的列数
%T表示T数表
%quad是所求积分值
%delta是设定的允许误差限
m=1;
h=b-a;
err=1;J=0;
T=zeros(n,n);%定义T表初始值
T(1,1)=h*(feval('f',a)+feval('f',b))/2;
while ((err>delta)&(J<n))
J=J+1;
h=h/2;
s=0;
for k=1:m
x=a+h*(2*k-1);
s=s+feval('f',x);
end
T(J+1,1)=T(J,1)/2+h*s;
m=2*m;
for i=1:J
T(J+1,i+1)=T(J+1,i)+(T(J+1,i)-T(J,i))/(4^i-1);
end
err=abs(T(J,J)-T(J+1,i+1));
end
format long
quad=T(J+1,J+1)
err
T
4.自适应辛普森求积公式
function s=S_Adapt_Simpson(a,b,err,M)
%input: a--下限
% b--下限
% err--the tolerance(容差)
% m--初始设置的步数
format long
h=(b-a)/M;%步距
s=0;
for i=1:M
x=a+(i-1)*h;
y=a+i*h;
e=abs(simpson(x,y,2)+simpson(x,y,1))/10;
j=1;
while(e>=err) %循环直到to<tol为止
j=j+1;
e=(abs(simpson(x,y,2^j)-simpson(x,y,1)))/10; %精度测试式
end
s=s+simpson(x,y,2^j);
end。

相关文档
最新文档