用梯形法或者辛普森法数值积分,分别用Matlab和c语言实现。

合集下载

MATLAB数值分析实验二(复合梯形、辛普森和龙贝格求积,以及二重积分计算等)

MATLAB数值分析实验二(复合梯形、辛普森和龙贝格求积,以及二重积分计算等)

佛山科学技术学院实验报告课程名称_______________ 数值分析________________________实验项目_______________ 数值积分____________________专业班级机械工程姓名余红杰学号2111505010 指导教师陈剑成绩日期月日一、实验目的b1、理解如何在计算机上使用数值方法计算定积分 a f ""X的近似值;2、学会复合梯形、复合Simpson和龙贝格求积分公式的编程与应用。

3、探索二重积分.11 f (x, y)dxdy在矩形区域D = {( x, y) | a _ x _ b, c _ y _ d}的数值D积分方法。

二、实验要求(1)按照题目要求完成实验内容;(2)写出相应的Matlab程序;(3)给出实验结果(可以用表格展示实验结果);(4)分析和讨论实验结果并提出可能的优化实验。

(5)写出实验报告。

三、实验步骤1、用不同数值方法计算积xln xdx =-- 0 9(1)取不同的步长h,分别用复合梯形及复合辛普森求积计算积分,给出误差中关于h的函数,并与积分精确值比较两公式的精度。

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

2、给出一种求矩形区域上二重积分的复化求积方法,然后计算二重积分..e"y dxdy,其中积分区域D二{0乞x岂1,0岂y乞1}。

1.%lnt_t.m复化梯形:function F = Int_t(x1,x2,n)%复化梯形求积公式% x1,x2为积分起点和中点%分为n个区间,没选用步长可以防止区间数为非整数。

%样点矩阵及其函数值:x = lin space(x1,x2 ,n+1);y = f(x);m = len gth(x);%本题中用Matlab计算端点位置函数值为NaN,故化为零: y(1) = 0;y(m) = 0;%算岀区间长度,步长h:h = (x2 -x1)/n;a = [1 2*o nes(1,m-2) 1];%计算估计的积分值:F = h/2*sum(a.*y);%f.mfun cti on y = f(x)y = sqrt(x).*log(x);%run 11.mclc,clear;%分为10个区间,步长0.1的积分值:F = In t_t(0,1,10);F10 = F%分为100个区间F = In t_t(0,1,100);F100 = F%误差计算W10 = abs((-4/9)-F10);W100 = abs((-4/9)-F100);W = [W10 W100]%复化辛普森:%l nt_s.mfun cti on F = In t_s(x1,x2 ,n)%复化梯形求积公式% x1,x2区间,分为n个区间。

matlab积分公式

matlab积分公式

matlab积分公式
Matlab是一个强大的数学计算软件,它不仅可以进行各种数学运算,还可以进行数值积分。

在Matlab中,有许多积分公式可以使用,下面是其中一些常用的积分公式:
1. 梯形积分公式:该公式是用梯形面积来近似计算积分的方法,通常用于离散的数据点。

2. 辛普森积分公式:该公式是用三次方程曲线来近似计算积分的方法,通常用于连续的函数。

3. 高斯-勒让德公式:该公式是将被积函数通过一个变换变成一个简单的函数,然后使用多项式求积方法来计算积分。

4. 高斯-拉盖尔公式:该公式是将被积函数通过一个变换变成一个简单的函数,然后使用乘积求积方法来计算积分。

在Matlab中,这些积分公式都可以通过调用相应的函数来实现。

例如,使用trapz函数可以进行梯形积分,使用quad函数可以进行辛普森积分,使用gaussq函数可以进行高斯求积。

需要注意的是,不同的积分公式适用于不同的函数类型和计算精度要求,所以在使用时需要根据实际情况进行选择。

- 1 -。

matlab 梯形法

matlab 梯形法

matlab 梯形法Matlab梯形法梯形法是一种数值积分方法,用于计算定积分的近似值。

在Matlab 中,我们可以使用梯形法来求解一元函数的定积分。

本文将介绍梯形法的原理、实现步骤以及示例代码。

一、原理介绍梯形法基于以下思想:将函数曲线下的面积近似看作是由一系列梯形的面积之和。

具体而言,我们将积分区间[a, b]分成n个小区间,然后在每个小区间上构造一个梯形,再将所有梯形的面积相加,最终得到近似的定积分值。

二、步骤分析使用梯形法求解定积分的步骤如下:1. 确定积分区间[a, b]和分割数n,其中n表示将积分区间分成n 个小区间。

2. 计算每个小区间的宽度h,即h = (b - a) / n。

3. 计算每个小区间的高度,即f(a)、f(a + h)、f(a + 2h)、...、f(b - h)、f(b)。

4. 计算每个小梯形的面积,即(A1 + A2 + A3 + ... + An),其中Ai = (f(a + (i-1) * h) + f(a + i * h)) * h / 2。

5. 将所有小梯形的面积相加,得到最终的近似定积分值。

三、示例代码下面是使用Matlab实现梯形法的示例代码:```matlabfunction result = trapezoidal_rule(f, a, b, n)h = (b - a) / n;x = a:h:b;y = f(x);result = (sum(y) - (y(1) + y(end)) / 2) * h;end% 示例使用:计算函数f(x) = x^2在区间[0, 1]上的定积分f = @(x) x.^2;a = 0;b = 1;n = 1000;result = trapezoidal_rule(f, a, b, n);disp(result);```四、总结本文介绍了Matlab梯形法的原理、步骤以及示例代码。

通过梯形法,我们可以求解一元函数的定积分,并得到近似的积分值。

matlab梯形法求定积分例题

matlab梯形法求定积分例题

一、介绍在数值计算领域中,求解定积分是一个常见的问题。

定积分的求解可以通过多种方法,其中梯形法是一种常用的数值积分计算方法。

本文将以MATLAB为工具,通过一个具体的例题来介绍使用梯形法求解定积分的步骤和过程。

二、梯形法原理梯形法是一种利用梯形逼近曲线下面积的数值积分方法。

其原理是将积分区间分成若干小段,然后用每一小段上的函数值来逼近这一小段上的曲线下面积,最后将所有小段上的梯形面积相加得到整个积分的近似值。

三、MATLAB代码实现下面我们通过一个具体的例题来演示如何使用MATLAB来实现梯形法求解定积分。

假设我们要求解如下定积分:\[ \int_{0}^{1} 3x^2 dx \]我们定义被积函数,并选择积分区间及分段数。

在MATLAB中,可以通过以下代码来实现:```matlabf = (x) 3*x^2; 定义被积函数a = 0; 积分下限b = 1; 积分上限n = 100; 分段数```我们通过循环计算每一小段上的梯形面积,并将其相加得到定积分的近似值。

具体实现代码如下:```matlabh = (b - a) / n; 计算每一小段的长度x = a:h:b; 生成积分节点y = f(x); 计算积分节点上的函数值T = h * (sum(y) - (y(1) + y(end)) / 2); 使用梯形法计算定积分近似值```我们输出计算结果并进行比较:```matlabexact_value = integral(f, a, b); 精确值error = abs(exact_value - T); 误差fprintf('定积分的近似值为:f\n', T);fprintf('定积分的精确值为:f\n', exact_value);fprintf('计算误差为:f\n', error);```四、结果分析通过上述代码的计算,我们可以得到定积分的近似值以及与精确值的比较。

复合梯形公式、复合辛普森公式matlab

复合梯形公式、复合辛普森公式matlab

复合梯形公式、复合⾟普森公式matlab 1. ⽤1阶⾄4阶Newton-Cotes公式计算积分程序:function I = NewtonCotes(f,a,b,type)%syms t;t=findsym(sym(f));I=0;switch typecase 1,I=((b-a)/2)*(subs(sym(f),t,a)+subs(sym(f),t,b));case 2,I=((b-a)/6)*(subs(sym(f),t,a)+4*subs(sym(f),t,(a+b)/2)+...subs(sym(f),t,b));case 3,I=((b-a)/8)*(subs(sym(f),t,a)+3*subs(sym(f),t,(2*a+b)/3)+...3*subs(sym(f),t,(a+2*b)/3)+subs(sym(f),t,b));case 4,I=((b-a)/90)*(7*subs(sym(f),t,a)+...32*subs(sym(f),t,(3*a+b)/4)+...12*subs(sym(f),t,(a+b)/2)+...32*subs(sym(f),t,(a+3*b)/4)+7*subs(sym(f),t,b));case 5,I=((b-a)/288)*(19*subs(sym(f),t,a)+...75*subs(sym(f),t,(4*a+b)/5)+...50*subs(sym(f),t,(3*a+2*b)/5)+...50*subs(sym(f),t,(2*a+3*b)/5)+...75*subs(sym(f),t,(a+4*b)/5)+19*subs(sym(f),t,b));case 6,I=((b-a)/840)*(41*subs(sym(f),t,a)+...216*subs(sym(f),t,(5*a+b)/6)+...27*subs(sym(f),t,(2*a+b)/3)+...272*subs(sym(f),t,(a+b)/2)+...27*subs(sym(f),t,(a+2*b)/3)+...216*subs(sym(f),t,(a+5*b)/6)+...41*subs(sym(f),t,b));case 7,I=((b-a)/17280)*(751*subs(sym(f),t,a)+...3577*subs(sym(f),t,(6*a+b)/7)+...1323*subs(sym(f),t,(5*a+2*b)/7)+...2989*subs(sym(f),t,(3*a+4*b)/7)+...1323*subs(sym(f),t,(2*a+5*b)/7)+...3577*subs(sym(f),t,(a+6*b)/7)+751*subs(sym(f),t,b));endsyms xf=exp(-x).*sin(x);a=0;b=2*pi;I = NewtonCotes(f,a,b,1)N=1:I =N=2:I =N=3:I =(pi*((3*3^(1/2)*exp(-(2*pi)/3))/2 - (3*3^(1/2)*exp(-(4*pi)/3))/2))/4N=4:I =(pi*(32*exp(-pi/2) - 32*exp(-(3*pi)/2)))/452. 已知,因此可以通过数值积分计算的近似值。

复合梯形和复合辛普森MATLAB程序

复合梯形和复合辛普森MATLAB程序
s=0;
fork=1:(b-a)/h,
s= s+y(k)+y(k+1)+4*z(k);
end
s=s*h./6;
③龙贝格求积程序
function[q,R]=Romberg(a,b,eps)
h=b-a;
R(1,1)=h*(0+sqrt(b).*log(b))/2;
M=1;
J=0;
err=1;
whileerr>eps
五.实验结果比较与分析
(1)
h = 0.2时,结果如下:
h = 0.02时,结果如下:
h = 0.002时;得到的结果如下:
由结果(1)可知对于同一步长h,复合辛普森法求积分精度明显比复合梯形法求积的精度要高,且当步长取不同值时即h越小时,积分精度越高。实验结果说明不存在一个最小的h,使得精度不能再被改善。又两个相应的关于h的误差(余项)Rn(f)=- h2f’’(η);Rn(f)=- (h/2)4f(4)(η),其中η属于a到b。可知h愈小,余项愈小,从而积分精度越高。
>> h=0.002;
>> t=TiXing_quad(a,b,h)
>> s=Simpson_quad(a,b,h)
(2)
>> a=0;
>> b=1;
>> eps=10^-8;
>> [quad,R]=Romberg(a,b,eps)
(3)
>> a=0;
>> b=1;
>> eps=10^-4;
>> q=ZiShiYingSimpson('sqrt(x).*log(x)',a,b,eps)

编程实现数值积分的几种--方法 c语言

编程实现数值积分的几种--方法 c语言

编程实现数值积分的几种--方法c语言数值计算2010-11-05 09:52:43 阅读385 评论1 字号:大中小订阅复化梯形公式在区间不大时, 用梯形公式、辛卜生公式计算定积分是简单实用的, 但当区间较大时, 用梯形公式、辛卜生公式计算定积分达不到精确度要求 . 为了提高计算的精确度,我们将[a,b] 区间n等分,在每个小区间上应用梯形公式、辛卜生公式计算定积分,然后将其结果相加,这样就得到了复化梯形公式和复化辛卜生公式。

1. 复化梯形公式将积分区间等分, 设, 则节点为对每个小区间上应用梯形公式, 然后将其结果相加,则得(3.14)称(3.14) 式为复化梯形公式 .当在[a,b] 上有连续的二阶导数时,则复化梯形公式(3.14) 的余项推导如下:因为所以在区间[a,b] 上公式(3.14) 的误差为又因为在区间[a,b] 上连续,由连续函数的性质知,在区间[a,b] 上存在一点,于是( 3.15 )复化梯形公式,复化抛物线公式和Romberg求积法的算法程序:以下程序均定义误差限为1*10^-5;1)复化梯形公式:#include <stdio.h>#include <math.h>#define e 1e-5#define a 0 //积分下限a#define b 1 //积分上限b#define f(x) (4/(1+(x*x))) //被积函数f(x)int main(){int i,n;double h,t0,t,g;n=1; //赋初值h=(double)(b-a)/2;t=h*(f(a)+f(b));do{t0=t;g=0;for (i=1;i<=n;i++)g+=f((a+(2*i-1)*h));t=(t0/2)+(h*g); //复化梯形公式n*=2;h/=2;}while (fabs(t-t0)>e); //自定义误差限e printf("%.8lf",t); //输出积分的近似值return 0;}2)复化抛物线公式:#include <stdio.h>#include <math.h>#define e 1e-5#define a 0 //积分下限a#define b 1 //积分上限b#define f(x) (4/(1+(x*x))) //被积函数f(x)int main(){int i,n;double f1,f2,f3,h,s0,s;f1=f(a)+f(b); //赋初值f2=f(((double)(b+a)/2));f3=0;s=((double)(b-a)/6)*(f1+4*f2);n=2;h=(double)(b-a)/4;do //复化抛物线算法{f2+=f3;s0=s;f3=0;for (i=1;i<=n;i++)f3+=f((a+(2*i-1)*h));s=(h/3)*(f1+2*f2+4*f3);n*=2;h/=2;}while (fabs(s-s0)>e); //自定义误差限printf("%.8lf",s);return 0;}3)Romberg求积法:#include <stdio.h>#include <math.h>#define e 1e-5#define a 0 //积分下限a#define b 1 //积分上限b#define f(x) (4/(1+(x*x))) //被积函数f(x)double t[100][100];int main(){int n,k,i,m;double h,g,p;h=(double)(b-a)/2;t[0][0]=h*(f(a)+f(b));k=1;n=1;do //Romberg算法{g=0;for (i=1;i<=n;i++)g+=f((a+((2*i-1)*h)));t[k][0]=(t[k-1][0]/2)+(h*g);for (m=1;m<=k;m++){p=pow(4,(double)(m));t[k-m][m]=(p*t[k-m+1][m-1]-t[k-m][m-1])/(p-1);}m-=1;h/=2;n*=2;k+=1;}while (fabs(t[0][m]-t[0][m-1])>e); //自定义误差限eprintf("%.8lf",t[0][m]);return 0;}给定精度,定义误差限为1*10^-5,分别求出步长的先验估计值:用复化梯形公式计算,要求h<0. 007746。

复合梯形公式和复合辛普森公式例题

复合梯形公式和复合辛普森公式例题

复合梯形公式和复合辛普森公式例题复合梯形公式和复合辛普森公式例题数值计算是现代科学技术中重要的研究领域之一,而数值积分是数值计算中的一个重要分支。

数值积分是指在一定区间上用数值方法来逼近求解定积分的过程。

综合考虑精度和效率,梯形公式和辛普森公式是数值积分中比较常用的方法,而复合梯形公式和复合辛普森公式则是对前两种方法的改进和完善。

一、复合梯形公式(一)基本原理梯形公式是数值积分中运用最广泛的一种方法,其基本思想是将被积函数在区间[a,b]上的曲线用若干条梯形逼近,然后计算梯形的面积之和,得到函数曲线下的面积。

若将区间[a,b]分为n个小区间,梯形公式还可以推广为复合梯形公式。

复合梯形公式的基本原理是将整个区间[a,b]等分为n 个小区间,每个小区间的长度为h=(b-a)/n,然后对于每个小区间求出梯形的面积,并将所有梯形面积加起来得到函数曲线下的面积,并作为积分的近似值。

具体地说,复合梯形公式的表达式为:$$\int_a^b f(x)dx \approx \frac{h}{2}[f(a)+2\sum_{i=1}^{n-1} f(x_{i})+f(b)]$$其中,$x_1=a+h,x_2=a+2h,...,x_{i+1}=x_i+h,...,x_{n}=b-h$,h是小区间长度。

(二)例题现在考虑如下的积分:$$I=\int_0^1 e^{x^2} dx$$将整个区间[0,1]等分为4个小区间,得到$h=0.25$,对于每个小区间,可以分别求出梯形的面积,得到:$$\frac{h}{2}[f(0)+2f(0.25)+2f(0.5)+2f(0.75)+f(1)]$$代入函数$f(x)=e^{x^2}$,得到近似积分值为$1.4627$。

使用Matlab代码进行计算,得到具体结果为:>> f=@(x) exp(x.^2); h=0.25; x=0:h:1;I=h/2*(f(x(1))+2*sum(f(x(2:end-1)))+f(x(end))) sprintf('%.5f',I)ans =1.46270可以发现,与精确值$1.46265$相比,误差很小,说明复合梯形公式是一种很有效的近似积分方法。

梯形公式和辛普森公式计算积分

梯形公式和辛普森公式计算积分

梯形公式和辛普森公式是用于计算定积分的数值逼近方法。

在实际应用中,我们经常会遇到需要计算函数在某个区间上的定积分值的情况,而对于一些复杂的函数,直接进行积分计算可能会十分困难,甚至是不可能的。

我们需要借助数值逼近方法来得到积分的近似值。

梯形公式和辛普森公式都是数值积分的基本方法,它们的原理都是通过将被积函数在积分区间上进行分割,然后利用分割后的小区间上的函数值,以及各个小区间的长度来进行计算,从而得到积分的近似值。

梯形公式是一种线性插值法,它的原理是将积分区间等分成n个小区间,然后用每个小区间的两个端点处的函数值进行线性插值,将每个小区间的面积近似为一个梯形,再将所有梯形的面积相加就得到了整个积分的近似值。

具体地,对于被积函数f(x)在区间[a, b]上的积分,我们可以利用梯形公式进行近似计算:1. 将区间[a, b]等分成n个小区间,记每个小区间的长度为h,即h=(b-a)/n。

2. 根据梯形面积的计算公式,我们可以得到每个小区间上梯形的面积为(h/2)*(f(x[i])+f(x[i+1])),其中x[i]和x[i+1]分别为第i个小区间的两个端点。

3. 将所有小区间上梯形的面积相加得到整个积分的近似值,即I ≈(h/2)*(f(a)+2*f(x[1])+2*f(x[2])+...+2*f(x[n-1])+f(b))。

梯形公式的优点在于其较为简单易懂,且可以很容易地通过计算机进行程序实现。

但是需要注意的是,当被积函数在积分区间上变化较大时,梯形公式可能会产生较大的误差。

与梯形公式类似,辛普森公式也是一种数值积分的方法,它是一种二次插值法,其原理是将积分区间等分成n个小区间,然后利用每个小区间的三个节点处的函数值进行二次插值,将每个小区间的面积近似为一个二次多项式曲线下的面积,再将所有小区间的面积相加就得到了整个积分的近似值。

具体地,对于被积函数f(x)在区间[a, b]上的积分,我们可以利用辛普森公式进行近似计算:1. 将区间[a, b]等分成n个小区间,记每个小区间的长度为h,即h=(b-a)/n。

三用MATLAB实现定积分计算

三用MATLAB实现定积分计算

s=s+feval(f,z1(j))+feval(f,z2(j));
0,2*pi,1000)
end
s=
s=s*h/2;
-267.2458
Gauss-lobatto是改进的高斯积分方法,采取自适应求积方法

三 用MATLAB实现定积分计算: 2 sin xdx 0
⑴ 矩形公式与梯形公式 z1 =
形的公求式积代公数式精。度为对于1,f 辛(x)甫=1森, x公, 式x 2的, x代3,数应精该度有为 3。
节成点立我x,ba下i和们依f面系先(次介x数考11)将绍dfA虑f(x的i(,xx节))是d=使点x1取t代数, (x消数xAb,为1对xaa精f22)(2区/bx,度而21x间)尽使3代等可用Ab入2分2能(fa1,(的1高1x1)即2限计的)f可制(算所得a,的谓2b到n积高确给分斯b定定近2公aA后似t式1,)同A值d。2时t有,x确1代,x定数2
这两种用随机模拟的方式求积分近似值的方法 z=sum(y)*pi/2/n
/2
z=
蒙特卡罗方法
sin xdx
1.0010
0
3、蒙特卡罗方法的通用函数与调用格式
均值估计法
随机投点法 (设0≤ f(x) ≤1)
b
a
f
( x)dx

ba n
n i1
f
(a (b a)ui )
直接调用。这里被积函数为内部函数,无需另外定义。
s=gaussinteg(‘sin', 0, pi/2,1000) s=
1.0000
6000
§2 数值积分应用问题举例4000
2000
0
一 求卫星轨道长度

工程数值计算matlab实验报告——辛普森数值微分数值积分

工程数值计算matlab实验报告——辛普森数值微分数值积分

《工程数值计算》上机实验报告(第二次)学生姓名 *** 班级 ******* 学号 ***********任课教师 *** 上机时间 2019 年 11月 5 日,报告完成 2019 年 11月 6 日1.实验目的:做功计算重物在力F(x)的拖动下,从x的起始点到最后点的移动过程中,力的大小及角度都是变化的,数据如表所示,试完成以下任务。

任务 2.1:试计算所做的功(数值积分实验)(1)分别采用梯形公式、辛普森公式和柯特斯公式计算,并进行比较(参考程序2.1a)。

(2)先对数据点进行多项式回归,再用int函数进行积分计算,并比较(参考程序2.1b)。

任务 2.2:试计算力在位移方向的变化率(数值微分实验)(1)基于给定的数据点,利用三点插值求各点处的导数(参考程序2.2)。

2.计算方法:针对实验任务,结合课堂内容,说明解决方法,如:采用何种理论,列出相关公式,说明计算步骤,写出程序框图等;任务2.1:数值积分计算原理:梯形公式辛普森公式柯特斯公式(n=4,即五个节点时)流程图:任务2.2:数值微分计算原理(三点插值):已知三个节点、、上的函数值,则流程图:3.程序设计:根据前面提到的计算方法编写程序;写出程序代码,并结合计算方法对程序中关键步骤进行必要的文字说明;代码:任务2.1:数值积分%数据输入clear;xi=[0 5 10 15 20 25 30 35 40];a=xi(1);b=xi(end);h=b-a;Fi=[0;9;13;14;10.5;12;5;8;9];Th=[0.5;1.4;0.75;0.9;1.3;1.48;1.5;1.1;0.8];%(1)%求x方向分力大小for i=1:length(xi)P(i)=Fi(i)*cos(Th(i));end%梯形公式,两个求积节点T=[0.5;0.5];%(系数)I1=h*(T(1)*P(1)+T(2)*P(9));%(梯形公式)%辛普森公式,三个求积节点S=[1/6;2/3;1/6];%(辛普森公式系数)I2=h*(S(1)*P(1)+S(2)*P(5)+S(3)*P(9));%(辛普森公式)%柯特斯公式,五个求积节点C=[7/90;16/45;2/15;16/45;7/90];%(柯特斯公式系数)I4=h*(C(1)*P(1)+C(2)*P(3)+C(3)*P(5)+C(4)*P(7)+C(5)*P(9));%(柯特斯公式)%显示结果I=[I1;I2;I4]%(2)多项式回归,再用int函数积分计算Ya=polyfit(xi,P,2);%(2次多项式回归)Yb=polyfit(xi,P,3);%(3次多项式回归)Yc=polyfit(xi,P,4);%(4次多项式回归)%构造回归多项式函数形式syms xLa=Ya(1)*x^2+Ya(2)*x+Ya(3);%(构造2次多项式函数)Lb=Yb(1)*x^3+Yb(2)*x^2+Yb(3)*x+Yb(4);%(构造3次多项式函数)Lc=Yc(1)*x^4+Yc(2)*x^3+Yc(3)*x^2+Yc(4)*x+Yc(5);%(构造4次多项式函数)%积分计算Ia=int(La,a,b);Ib=int(Lb,a,b);Ic=int(Lc,a,b);%显示计算结果II=[vpa(Ia);vpa(Ib);vpa(Ic)]%(将分数转化为小数输出)任务2.2:数值微分%数据输入clear;xi=[0 5 10 15 20 25 30 35 40];%(间隔为空格)a=xi(1);b=xi(end);Fi=[0;9;13;14;10.5;12;5;8;9];Th=[0.5;1.4;0.75;0.9;1.3;1.48;1.5;1.1;0.8];n=length(xi);%主体程序for i=1:nyi(i)=Fi(i)*cos(Th(i));endR=zeros(n,2);%(建立一个9*2的矩阵)%矩阵R的第一列记为点的序数for i=1:nR(i,1)=i;end%三点插值求导,导数值记入R矩阵的第二列中for i=1:nif i==1R(i,2)=(-3*yi(i)+4*yi(i+1)-yi(i+2))/(xi(i+2)-xi(i));%(第一个点的导数) else if i==nR(i,2)=(yi(i-2)-4*yi(i-1)+3*yi(i))/(xi(i)-xi(i-2));%(最后一个点的导数)elseR(i,2)=(yi(i+1)-yi(i-1))/(xi(i+1)-xi(i-1));%(中间点的导数)endendend%输出结果R4.结果分析:给出计算结果(可用数值、图表、曲线表示),并进行分析;任务2.1:数值积分由输出结果可以看出,梯形公式、辛普森公式、柯特斯公式的计算结果相差较大而2、3、4次多项式回归后再积分的结果相差较小,其中2、3次回归结果相差几乎可以不计。

梯形公式和辛普森公式例题

梯形公式和辛普森公式例题

梯形公式和辛普森公式例题1.概述本文将介绍梯形公式和辛普森公式两个数值积分方法,并通过例题演示其具体应用。

2.梯形公式梯形公式是一种数值积分方法,用来估计定积分的近似值。

它的思想是将曲线下的面积近似为一系列梯形的面积之和。

2.1公式推导考虑函数f(x)在区间[a,b]上的定积分,可以将[a,b]等分成n个小区间,每个小区间的宽度为h=(b-a)/n。

梯形公式的计算公式如下:∫[a,b]f(x)dx≈h/2*[f(a)+2f(a+h)+2f(a+2h)+...+f(b)]2.2例题假设要计算函数f(x)=x^2在区间[0,2]上的定积分,可以使用梯形公式进行近似计算。

首先将区间[0,2]等分成n个小区间,选择n=4。

则每个小区间的宽度为h=(2-0)/4=0.5。

根据梯形公式的计算公式,可以得到近似值为:∫[0,2]x^2d x≈0.5/2*[0^2+2(0.5)^2+2(1)^2+2(1.5)^2+2(2)^ 2]≈2.5因此,函数f(x)=x^2在区间[0,2]上的定积分的近似值为2.5。

3.辛普森公式辛普森公式是一种数值积分方法,用来估计定积分的近似值。

它的思想是将曲线下的面积近似为一系列抛物线的面积之和。

3.1公式推导考虑函数f(x)在区间[a,b]上的定积分,同样将[a,b]等分成n个小区间,每个小区间的宽度为h=(b-a)/n。

辛普森公式的计算公式如下:∫[a,b]f(x)dx≈h/3*[f(a)+4f(a+h)+2f(a+2h)+4f(a+3h)+...+ f(b)]3.2例题继续以函数f(x)=x^2在区间[0,2]上的定积分为例,使用辛普森公式进行近似计算。

同样选择n=4,计算每个小区间的宽度为h=(2-0)/4=0.5。

根据辛普森公式的计算公式,可以得到近似值为:∫[a,b]x^2d x≈0.5/3*[0^2+4(0.5)^2+2(1)^2+4(1.5)^2+2(2)^ 2]≈2.6667因此,函数f(x)=x^2在区间[0,2]上的定积分的近似值为2.6667。

数值分析复化Simpson积分公式和复化梯形积分公式计算积分的通用程序

数值分析复化Simpson积分公式和复化梯形积分公式计算积分的通用程序

数值分析第五次程序作业PB09001057 孙琪【问题】分别编写用复化Simpson积分公式和复化梯形积分公式计算积分的通用程序;用如上程序计算积分:取节点并分析误差;简单分析你得到的数据。

【复化Simpson积分公式】Simpson法则:使用偶数个子区间上的复合Simpson法则:设n是偶数,则有将Simpson法则应用于每一个区间,得到复合Simpson法则:公式的误差项为:其中δ【复化梯形积分公式】梯形法则:对两个节点相应的积分法则称为梯形法则:如果划分区间[a,b]为:那么在每个区间上可应用梯形法则,此时节点未必是等距的,由此得到复合梯形法则:对等间距h=(b-a)/n及节点,复合梯形法则具有形式:误差项为:【算法分析】复合Simpson法则和复合梯形法则的算法上述描述中都已介绍了,在此不多做叙述。

【实验】通过Mathematica编写程序得到如下结果:1.利用复化Simpson积分公式得:可以看出,当节点数选取越来越多时,误差项越来越小,这从复合的Simpson公式很好看出来,因为在每一段小区间内,都是用Simpson法则去逼近,而每一段的误差都是由函数在该区间内4阶导数值和区间长度的4次方乘积决定的,当每一段小区间越来越小时,相应的每一段小区间内的逼近就会越来越好,从而整体的逼近效果就会越来越好。

2.利用复化梯形积分公式得:可以看出,当节点数选取越来越多时,误差项越来越小,这从复合的梯形公式很好看出来,因为在每一段小区间内,都是用梯形法则去逼近,而每一段的误差都是由函数在该区间内2阶导数值和区间长度的2次方乘积决定的,当每一段小区间越来越小时,相应的每一段小区间内的逼近就会越来越好,从而整体的逼近效果就会越来越好。

【分析】通过对上述两种法则的效果来看,复合Simpson法则的误差要比复合梯形法则收敛到0更快,说明复合Simpson法则逼近到原来的解更快,这主要是因为在每一段小区间内,复合Simpson法则利用得是Simpson法则,复合梯形法则利用得是梯形法则,前者的误差项要比后者的误差项小很多,因此造成了逼近速度的不一样。

用梯形法或者辛普森法数值积分-分别用Matlab和c语言实现。

用梯形法或者辛普森法数值积分-分别用Matlab和c语言实现。

Matlab作业(一)作业要求:用梯形法或者辛普森法数值积分,分别用Matlab和c 语言实现。

C语言1.程序代码:#include <stdio.h>#include <math.h>double fun(double x){return x*x;}double definfresult1(double (*pfun)(double),double a,double b,double eps) {int n=1;double h,k,tn,tn1,fh,fh1=0;double fa=pfun(a);double fb=pfun(b);tn=(b-a)*(fa+fb)/2;do {for(k=0,fh1=0;k<n;k++){h=(b-a)/(n);fh=pfun(a + (2*k + 1)*(b-a)/(2*n));fh=fh+fh1;fh1=fh;}tn1=tn;tn=(tn1+fh*h)/2;n=2*n;} while(fabs(tn- tn1) >= eps);return tn;}int main(){double a,b,eps,definfresult;printf("积分下限a=");scanf("%lf",&a);printf("积分上限b=");scanf("%lf",&b);printf("精度eps=");scanf("%lf",&eps);definfresult=definfresult1(fun,a,b,eps);printf("\n计算结果=%.7lf\n", definfresult); }2.运行结果:MatLab1.程序代码:function y=fun1(x)y=x*x;function result=definf1(fhandle, a, b, eps)fa=feval(fhandle, a);fb=feval(fhandle, b);tn=(b-a)*(fa+fb)/2;tn1=0;n=1;fh1=0;while abs(tn- tn1) > epsfh1=0;for i=0:n-1h=(b-a)/n;fh=feval(fhandle,a + (2*i +1)*(b-a)/(2*n) );fh=fh+fh1;fh1=fh;end;tn1=tn;tn=(tn1+fh*h)/2;n=2*n;endresult=tn;>> result=definf1(@fun1, 0, 10,0.001 ) result =333.33352.运行结果THANKS !!!致力为企业和个人提供合同协议,策划案计划书,学习课件等等打造全网一站式需求欢迎您的下载,资料仅供参考。

数值分析实习报告

数值分析实习报告

一、实习背景数值分析是数学的一个重要分支,它主要研究如何利用计算机来求解数学问题。

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

为了更好地了解数值分析在工程、科学和商业领域的应用,提高自己的实际操作能力,我参加了为期一个月的数值分析实习。

二、实习内容1. 学习数值分析基本理论实习期间,我首先系统地学习了数值分析的基本理论,包括插值、数值微分、数值积分、矩阵运算、线性方程组求解、优化方法等。

通过学习,我对数值分析有了更加全面的认识。

2. 实践操作(1)插值法:我学习了Lagrange插值、Newton插值等插值方法,并使用MATLAB进行编程实现。

通过插值,我能够根据已知数据点预测未知点,为工程、科学和商业领域提供数据支持。

(2)数值微分:我学习了有限差分法、辛普森法等数值微分方法,并使用MATLAB进行编程实现。

通过数值微分,我能够求解函数在某一点的导数,为工程、科学和商业领域提供计算支持。

(3)数值积分:我学习了梯形法、辛普森法等数值积分方法,并使用MATLAB进行编程实现。

通过数值积分,我能够求解函数在某一区间上的定积分,为工程、科学和商业领域提供计算支持。

(4)矩阵运算:我学习了矩阵的初等变换、矩阵的逆、矩阵的秩等矩阵运算方法,并使用MATLAB进行编程实现。

通过矩阵运算,我能够求解线性方程组、特征值和特征向量等问题。

(5)线性方程组求解:我学习了高斯消元法、矩阵分解法等线性方程组求解方法,并使用MATLAB进行编程实现。

通过线性方程组求解,我能够求解工程、科学和商业领域中的各种问题。

(6)优化方法:我学习了梯度下降法、牛顿法等优化方法,并使用MATLAB进行编程实现。

通过优化方法,我能够求解各种优化问题,为工程、科学和商业领域提供解决方案。

3. 项目实践在实习期间,我参与了一个实际项目——某公司产品的成本优化。

该项目要求根据产品的各项参数,计算出最优的生产方案,以降低成本。

matlab梯形法求积分程序

matlab梯形法求积分程序

matlab梯形法求积分程序Matlab是一种功能强大的数学软件,它提供了丰富的数值计算和数据分析工具。

在数学和工程领域中,积分是一个常见的操作,用于计算曲线下的面积或函数的累积量。

本文将介绍如何使用Matlab 的梯形法求积分。

积分可以被看作是微分的逆运算,它可以将一个函数转化为曲线下的面积。

梯形法是一种常见的数值积分方法,其基本思想是将曲线下的面积近似为一系列梯形的面积之和。

具体而言,我们可以将曲线分成若干个小梯形,并计算每个小梯形的面积,最后将所有小梯形的面积相加即可得到近似的积分值。

下面是使用Matlab编写的梯形法求积分的程序示例:```matlabfunction result = trapezoidal_integration(f, a, b, n)% f为待积分的函数% a和b为积分区间的上下限% n为划分的小区间数目% 计算每个小梯形的宽度h = (b - a) / n;% 初始化积分结果result = 0;% 计算每个小梯形的面积并累加for i = 1:nx_i = a + (i-1) * h; % 当前小梯形的左边界x_iplus1 = a + i * h; % 当前小梯形的右边界result = result + (f(x_i) + f(x_iplus1)) * h / 2;endend```在上述代码中,我们定义了一个名为`trapezoidal_integration`的函数,它接受待积分的函数`f`、积分区间的上下限`a`和`b`以及划分的小区间数目`n`作为输入参数。

在函数中,我们首先计算每个小梯形的宽度`h`,然后初始化积分结果`result`为0。

接下来,我们使用一个循环来计算每个小梯形的面积,并将其累加到积分结果中。

最后,函数返回求得的积分结果。

要使用这个梯形法求积分的程序,我们需要提供待积分的函数、积分区间的上下限以及划分的小区间数目。

下面是一个使用示例:```matlabf = @(x) x^2; % 定义待积分的函数a = 0; % 积分区间的下限b = 1; % 积分区间的上限n = 100; % 划分的小区间数目result = trapezoidal_integration(f, a, b, n); % 调用梯形法求积分disp(result); % 输出积分结果```在上述示例中,我们定义了一个函数`f(x) = x^2`作为待积分的函数,然后指定积分区间的下限`a`为0,上限`b`为1,划分的小区间数目`n`为100。

设计采用梯形法和辛普生法求定积分的程序

设计采用梯形法和辛普生法求定积分的程序

河北工业大学计算机软件技术基础(VC)课程设计报告学院机械工程学院班级工程力学101 姓名万乐乐 _ 学号100540____ 成绩 __ ____一、题目:设计采用梯形法和辛普生法求定积分的程序(17)二、设计思路1、总体设计1)分析程序的功能对梯形法和辛普生法计算在不同区间下的积分值,比较二者的精确度;并与真实积分值比较求其误差。

2)系统总体结构:该程序有定义梯形法和辛普生法函数,f(x)函数,计算真实值的牛顿莱布尼茨函数和主函数。

①梯形法和辛普生法函数:将积分转化为VC++语言,输入被积函数和积分区间等数据,能计算出对应的积分值。

②f(x)函数:将所求的被积分的函数转化为VC++语言,被主函数调用。

③计算真实值的牛顿莱布尼茨函数:计算所积函数在其被积区间下的真实积分值。

④主函数:程序的主体,调用各个模块的运行。

2、各功能模块的设计:①梯形法和辛普生法函数:定义函数指针求积分,将数学表达式转化为VC++语言。

②f(x)函数:通过写f1,f2函数的表达式,计算结果作为函数返回值。

③计算真实值的牛顿莱布尼茨函数:通过写出f1,f2函数的原函数;用牛顿莱布尼茨公式计算其真实积分值作为函数的返回值。

④主函数:调用梯形法和辛普生法函数,f(x)函数,计算真实值的牛顿莱布尼茨函数完成积分及误差的计算。

3、设计中的主要困难及解决方案在这部分论述设计中遇到的主要困难及解决方案。

1)对函数指针不是很了解,查阅相关的资料学习其使用方法。

2)对于程序的循环使用及判断不易掌握,用到了while,for,if,break语句来解决。

4、你所设计的程序最终完成的功能1)说明你编制的程序能完成的功能用梯形法和辛普生法分别计算函数的积分,比较二者的精确度和与真实值之间的误差。

2)准备的测试数据及运行结果当下限a=0上限b=1,n分别取2,10,100,1000,5000,20000,50000时用梯形法求f1,f2的积分及误差当下限a=0上限b=1,n分别取2,10,100,1000,5000,20000,50000时用辛普生法求f1,f2的积分及误差当下限a=0上限b=2,n分别取2,10,100,1000,5000,20000,50000时用梯形法求f1,f2的积分及误差当下限a=0上限b=2,n分别取2,10,100,1000,5000,20000,50000时用辛普生法求f1,f2的积分及误差三、程序清单本程序包含main.cpp、f(x).cpp、txf.cpp、sinpson.cpp、zhengshi.cpp、head.h、6个文件。

设计采用梯形法和辛普生法求定积分的程序

设计采用梯形法和辛普生法求定积分的程序

河北工业大学计算机软件技术基础(VC)课程设计报告学院信息工程学院院班级通信101 姓名崔羽飞学号 102117成绩 __ ____一、题目:设计采用梯形法和辛普生法求定积分的程序二、设计思路1、总体设计1)分析程序的功能本题目的功能是对梯形法和辛普森法,在不同区间数下计算所得的定积分的值,进行精度比较。

2)系统总体结构:设计程序的组成模块,简述各模块功能。

该程序共分为以下几个模块模块一:各函数原型的声明。

模块二:主函数。

模块三:各函数的定义。

包括两个数学函数y1=1+x*x、y2=1+x+x*x+x*x*x的定义和两个函数指针double integralt(double ,double ,int ,double(*f)(double))double integrals(double ,double ,int ,double(*f)(double))的定义。

2、各功能模块的设计:说明各功能模块的实现方法模块一:对各种函数进行声明。

模块二:求梯形法和辛普森法,在不同区间数下计算所得的定积分的值。

模块三:将各函数写出来。

3、设计中的主要困难及解决方案在这部分论述设计中遇到的主要困难及解决方案。

1)困难1:函数指针的应用。

解决方案:仔细阅读课本,以及与同学之间的讨论,和向老师求助。

2)困难2:将程序分成不同的.cpp文件。

解决方案:与同学讨论。

4、你所设计的程序最终完成的功能1)说明你编制的程序能完成的功能在数学上求一个函数与x轴在一定范围内所围的面积即求定积分,对梯形法和辛普森法求定积分的比较。

2)准备的测试数据及运行结果三、程序清单本程序共六个文件,其中包含main.cpp,f1.cpp,f2.cpp,integrals.cpp, integralt.cpp,shengming.h1.main.cpp#include <iostream.h>#include "shengming.h"void main(){double a,b,intesum1,intesum2,intesum3,intesum4;//对求定积分的定义.cout<<"please shangxian xiaxian a,b:";//输入上限和下限.cin>>a>>b;int n[7]={2,10,100,1000,5000,10000,50000};//n的不同取值.//下面是对第一行不同n的值的输出.cout<<" n值 ";for(int i=0;i<7;i++)cout<<" "<<n[i];cout<<endl;//下面是对n取不同值时,用梯形法对f1求定积分.cout<<"intesum1";for(i=0;i<7;i++){intesum1=integralt(a,b,n[i],f1);cout<<" "<<intesum1;}cout<<endl;//下面是对n取不同值时,用梯形法对f2求定积分.cout<<"intesum2";for(i=0;i<7;i++){intesum2=integralt(a,b,n[i],f2);cout<<" "<<intesum2;}cout<<endl;//下面是对n取不同值时,用用辛普森法对f1求定积分.cout<<"intesum3";for(i=0;i<7;i++){intesum3=integrals(a,b,n[i],f1);cout<<" "<<intesum3;}cout<<endl;//下面是对n取不同值时,用用辛普森法对f2求定积分.cout<<"intesum4";for(i=0;i<7;i++){intesum4=integrals(a,b,n[i],f2);cout<<" "<<intesum4;}cout<<endl;}2.f1.cppdouble f1(double x) //定义函数y1=1+x*x.{double y1;y1=1+x*x;return y1;}3.f2cppdouble f2(double x) //定义函数y2=1+x+x*x+x*x*x.{double y2;y2=1+x+x*x+x*x*x;return y2;}4.integrals.cppdouble integrals(double a,double b,int n,double(*f)(double))//定义用辛普森法求定积分.{int i;double sum1=0,sum2=0,intesum,h;h=(b-a)/2/n;for(i=1;i<=2*n-1;i+=2)sum1+=(*f)(a+i*h);for(i=2;i<=2*n-2;i+=2)sum2+=(*f)(a+i*h);intesum=h*((*f)(a)+(*f)(b)+4*sum1+2*sum2)/3;return intesum;}5.integralt.cppdouble integralt(double a,double b,int n,double(*f)(double))//定义用梯形法求定积分.{int i;double sum=0,intesum,h;h=(b-a)/n;for(i=1;i<=n-1;i++)sum+=(*f)(a+i*h);intesum=h*((*f)(a)+2*sum+(*f)(b))/2;return intesum;}6.shengming.hdouble integralt(double ,double ,int ,double(*f)(double));//用梯形法求定积分的声明.double integrals(double ,double ,int ,double(*f)(double));//用辛普森法求定积分的声.明.double f1(double x);//函数y1=1+x*x的声明.double f2(double x);//函数y2=1+x+x*x+x*x*x的声明.四、对该设计题目有何更完善的方案1、对自己完成程序进行自我评价。

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

Matlab作业(一)
作业要求:用梯形法或者辛普森法数值积分,分别用Matlab和c 语言实现。

C语言
1.程序代码:
#include <stdio.h>
#include <math.h>
double fun(double x)
{
return x*x;
}
double definfresult1(double (*pfun)(double),double a,double b,double eps)
{
int n=1;
double h,k,tn,tn1,fh,fh1=0;
double fa=pfun(a);
double fb=pfun(b);
tn=(b-a)*(fa+fb)/2;
do {
for(k=0,fh1=0;k<n;k++){
h=(b-a)/(n);
fh=pfun(a + (2*k + 1)*(b-a)/(2*n));
fh=fh+fh1;
fh1=fh;
}
tn1=tn;
tn=(tn1+fh*h)/2;
n=2*n;
} while(fabs(tn- tn1) >= eps);
return tn;
}
int main()
{
double a,b,eps,definfresult;
printf("积分下限a=");
scanf("%lf",&a);
printf("积分上限b=");
scanf("%lf",&b);
printf("精度eps=");
scanf("%lf",&eps);
definfresult=definfresult1(fun,a,b,eps);
printf("\n计算结果=%.7lf\n", definfresult); }
2.运行结果:
MatLab
1.程序代码:
function y=fun1(x)
y=x*x;
function result=definf1(fhandle, a, b, eps)
fa=feval(fhandle, a);
fb=feval(fhandle, b);
tn=(b-a)*(fa+fb)/2;
tn1=0;
n=1;
fh1=0;
while abs(tn- tn1) > eps
fh1=0;
for i=0:n-1
h=(b-a)/n;
fh=feval(fhandle,a + (2*i + 1)*(b-a)/(2*n) );
fh=fh+fh1;
fh1=fh;
end;
tn1=tn;
tn=(tn1+fh*h)/2;
n=2*n;
end
result=tn;
>> result=definf1(@fun1, 0, 10,0.001 ) result =
333.3335
2.运行结果。

相关文档
最新文档