1、1.描述问题利用左矩形公式,中矩形公式,右矩形公式 ,梯形公式,simpson公式,Gauss 积分公式求解定积分。2.分析问题2.1 定积分21.1 定积分的定义定 积 分 就 是 求 函 数 在 区 间 中 图 线 下 包 围 的 面 积 。 即fx,ab所 包 围 的 面 积 。 这 个 图 形 称 为 曲 边 梯 形 , 特 例 是 曲0,yxaby边 梯 形 。 如 下 图 :( 图 1)设 一 元 函 数 ,在 区 间 内 有 定 义 。 将 区 间 分 成 个 小 区yfx,ab,abn间 。 设 , 取 区 间 中 曲 线 上 任 意 一012,.iax 1iixix点 记 做
2、 , 作 和 式 :if1limnifi若 记 为 这 些 小 区 间 中 的 最 长 者 。 当 时 , 若 此 和 式 的 极 限 存 在 ,0则 称 这 个 和 式 是 函 数 在 区 间 上 的 定 积 分 。fx,ab记 作 : bafd其 中 称 为 积 分 下 限 , 为 积 分 上 限 , 为 被 积 函 数 , 为fxfxd被 积 式 , 为 积 分 号 。之 所 以 称 其 为 定 积 分 , 是 因 为 它 积 分 后 得 出 的 值 是 确 定 的 , 是 一 个 数 ,而 不 是 一 个 函 数 。21.2 定 积 分 的 几 何 意 义 1它 是 介 于 x 轴 、
3、 函 数 f(x)的 图 形 及 两 条 直 线 x=a, x=b 之 间 的 各 个 部 分面 积 的 代 数 和 。 在 x 轴 上 方 的 面 积 取 正 号 ; 在 x 轴 下 方 的 面 积 取 负 号 。 如图2.2 言实现定积分计算的算法22.1 利用复合梯形公式实现定积分的计算假设被积函数为 ,积分区间为 ,把区间 等分成 个小区间,fx,ab,abn各个区间的长度为 ,即 ,称之为“步长” 。根据定积分的定义及h/bn几何意义,定 积 分 就 是 求 函 数 在 区 间 中 图 线 下 包 围 的 面 积 。 将 积f,分 区 间 等 分 , 各 子 区 间 的 面 积 近
4、似 等 于 梯 形 的 面 积 , 面 积 的 计 算 运 用 梯 形n公 式 求 解 , 再 累 加 各 区 间 的 面 积 , 所 得 的 和 近 似 等 于 被 积 函 数 的 积 分 值 ,越 大 , 所 得 结 果 越 精 确 。 以 上 就 是 利用复合梯形公式实现定积分的计算的算法思想。复合梯形公式:212nniihTfafxfb具体算法如下:算法一1: 输 入 积 分 区 间 的 端 点 值 和 ;ab2: 输 入 区 间 的 等 分 个 数 ( 要 求 尽 可 能 大 , 以 保 证 程 序 运 行 结 果 有 较 高n的 精 确 度 ) ;3: 计 算 步 长 ;/hb4:
5、 对 累 加 和 赋 初 值 ;/2abTf5: 计 算 累 加 和1niiTfx6: 算 出 积 分 值 ;nTh7:输出积分近似值 ,完毕。1.2.2 利用 Smpson 公式实现定积分的计算假设被积函数为 ,积分区间为 ,把区间 等分成 个小区间,fx,ab,abn各个区间的长度为 。在复合梯形公式的基础上,构造出一种加速计算积分的h方法。作为一种外推算法, 它在不增加计算量的前提下提高了误差的精度。具体算法如下:算法二1: 输 入 积 分 上 限 和 下 限 ;ba2: 输 入 区 间 的 等 分 个 数 ( 要 求 尽 可 能 大 , 以 保 证 程 序 运 行 结 果 有 较 高n
6、的 精 确 度 ) ;3: 利 用 辛甫生公式: 2,实现对定积分的求解(其42/3STn中 , 均为梯形公式计算所得的结果,由此可见辛甫生公式是以梯形Tn公式为基础的) ;4: 算 出 积 分 值 ;Sn5:输出积分近似值 ,完毕。1.2.3 利用 Guass 公式实现定积分计算Guass 型求积公式是构造高精度差值积分的最好方法之一。他是通过让节点和积分系数待定让函数 f(x)以此取 i=0,1,2.n 次多项式使其尽可能多的能够精确成立来求出积分节点和积分系数。高斯积分的代数精度是 2n-1,而且是最高的。通常运用的是-1-+1 的积分节点和积分系数,其他积分域是通过变换 x=(b-a)
7、t/2 +(a+b)/2 变换到-1 到 1 之间积分 。算法三1: 输 入 积 分 上 限 和 下 限 ;ba2: 利 用 Guass 公 式 , 求 定 积 分 4: 算 出 积 分 值 ;Sn5:输出积分近似值 ,完毕。3.程序的编写3.1 程序一(左矩形公式)3.1.1 源程序#include#includevoid main()double f(double x);/*f(x)为函数举例,即被积函数*/int i,n;/*n 为区间等分的个数,应尽可能大*/double a,b,h,s;/*a 为积分下限,b 为积分上限,h 为步长*/printf(“积分下限 a:n“);scanf
8、(“%lf“,printf(“积分上限 b:n“);scanf(“%lf“,printf(“区间等分个数 n :n“);scanf(“%d“,h=(b-a)/n; /*步长的计算*/s=f(a)*h;for(i=1;i#includevoid main()double f(double x);/*f(x)为函数举例,即被积函数*/int i,n;/*n 为区间等分的个数,应尽可能大*/double a,b,h,s;/*a 为积分下限,b 为积分上限,h 为步长*/printf(“积分下限 a:n“);scanf(“%lf“,printf(“积分上限 b:n“);scanf(“%lf“,prin
9、tf(“区间等分个数 n :n“);scanf(“%d“,h=(b-a)/n; /*步长的计算*/s=0.5*(f(a)+f(a+h)*h;for(i=1;i#includevoid main()double f(double x);/*f(x)为函数举例,即被积函数*/int i,n;/*n 为区间等分的个数,应尽可能大*/double a,b,h,s;/*a 为积分下限,b 为积分上限,h 为步长*/printf(“积分下限 a:n“);scanf(“%lf“,printf(“积分上限 b:n“);scanf(“%lf“,printf(“区间等分个数 n :n“);scanf(“%d“,h
10、=(b-a)/n; /*步长的计算*/s=f(a+h)*h;for(i=1;i#includevoid main()double f(double x);/*f(x)为函数举例,即被积函数*/int i,n;/*n 为区间等分的个数,应尽可能大*/double a,b,h,s;/*a 为积分下限,b 为积分上限,h 为步长*/printf(“积分下限 a:n“);scanf(“%lf“,printf(“积分上限 b:n“);scanf(“%lf“,printf(“区间等分个数 n :n“);scanf(“%d“,h=(b-a)/n; /*步长的计算*/s=0.5*(f(a)+f(a+h)*h;
11、for(i=1;i#includevoid main()double T(double x,double y,int z);double a,b,s;int n;printf(“积分下限 a:n“);scanf(“%lf“,printf(“积分上限 b:n“);scanf(“%lf“,printf(“区间等分个数 n :n“);scanf(“%d“,s=(4*T(a,b,2*n)-T(a,b,n)/3;/*利用辛甫生公式求解定积分*/printf(“函数 f(x) 的积分值为 s=%fn“,s);/*以下为复合梯形公式的定义*/double T(double x,double y,int z)double h,Tn;int i;double f(double t);h=(y-x)/z;Tn=(f(x)+f(y)/2;for(i=1;iz;i+)Tn=Tn+f(x+i*h);Tn=Tn*h;return (Tn);/*以下为被积函数的定义,即函数举例*/double f(double t)double s;s=sqrt(4-t*t);return (s);3.5.2 程序四的编译运行 被积函数为 f(x)=sqrt4-(x*x)的情况先编译,再运行,屏幕显示及操作如下:输入 0+回车输入 2+回车输入 1000+回车