




如果您无法下载资料,请参考说明:
1、部分资料下载需要金币,请确保您的账户上有足够的金币
2、已购买过的文档,再次下载不重复扣费
3、资料包下载后请先用软件解压,在使用对应软件打开
第十四讲编程例题求定积分2、改进:将区间b-a划分成2n等分。用变步长的梯形法,定义Tn为将积分区间n等分时求出的近似面积。4(1)为按公式算出的面积的二分之一; (2)为等分中线的函数值f(x1+h/2)与h的乘积,得出面积的二分之一。(3)代表面积3、用辛普生公式计算积分的近似值#include<stdio.h> //预编译命令 #include<math.h> //预编译命令,数学函数 doublef(doublex); //定义被调用函数f voidmain() //主函数 { //主程序开始 intk,n=1; //声明整型变量k,n,并初始化n doublex,x1=0,x2=2; //声明双精度变量x,和x1,x2 doubles,h,tn,t2n,In,I2n;//声明计算中使用的中间变量 constdoubleeps=1e-6;//声明双精度变量eps作为阈值 //计算n=1时的tn和In,为便于编程 //分别将它们赋给t2n和I2n h=x2-x1; t2n=I2n=(h*(f(x1)+f(x2)))/2; printf("第一次近似计算梯形面积值为%lf\n",t2n); In=0;while(fabs(I2n-In)>=eps)//当型循环,精度未达要求则继续 { //循环体开始, //将上一次计算结果转存入tn和In tn=t2n; In=I2n; //计算k从0至n-1,f(x1+(k+0.5)*h)的和 s=0.0; //求和变量s清零 for(k=0;k<n;k=k+1) //循环求和 { //循环体开始 x=x1+(k+0.5)*h; s=s+f(x); } //循环体结束 //计算t2n和I2n t2n=(tn+h*s)/2.0; I2n=(4*t2n-tn)/3.0; //更新n和h,用于下一次计算 n=2*n; h=h/2; } //循环体结束 printf("积分值为%lf\n",I2n); //输出结果 } //主函数结束 doublef(doublex) //被调用函数f,用于计算积分项 { //函数体开始 //计算并返回积分项 return((exp(x)+x*x)/(1+x*x*x)); } //函数体结束 说明: 1、要产生随机数需要在预编译中加入库函数#include<stdlib.h> 2、rand()是产生随机数的函数,它可生成0至32767的整数 3、最大随机数为RAND_MAX,值为32767 4、产生随机数需要设置种子 srand((unsigned)time(NULL));因为时间每分每秒不同,第一个随机数就不会固定。你可以做试验,如去掉这条,产生十个随机数,每次都会是一样的。产生的随机数: 41 18467 6334 26500 19169 15724 11478 29358 26962 24464 加上这条之后,你再观察,每一次出的十个数都不同。 #include<stdio.h> //预编译命令 #include<math.h> //预编译命令 #include<stdlib.h> //预编译命令 voidmain(void) //主函数 { //主函数开始 intk; //定义整型变量k srand((unsigned)time(NULL)); //设置 for(k=0;k<10;k=k+1)//循环 { //输出随机小数 printf(“%f\n",(float)rand()/RAND_MAX); } //输出最大随机数 printf("最大随机数为%d\n",RAND_MAX); } //主函数结束1、用rand()/RAND_MAX来产生大于0而小于1的小数。 2、因为rand()是整型数,RAND_MAX是整型常数,两者相除,如不作特殊处理得不出小数,只能为0。因为被除数小于除数。因此需要强制转换数据类型,在除式前加(float),即 (float)rand()/RAND_MAX例:求π的近似值。 如右图,正方形的面积A=1;1/4圆的面积B=π/4。我们想象有一个容器在正方形中夹有一个极薄的圆弧隔板。下小雨时搬至屋外,经一定时间后,称1/4圆的容器内的水重C,与作为一个整体的正方形中的水重D。C与D之比应该等于B与A之比, 即 可得我们让计算机产生伪随机数x和y,让x的值的范围在0~1之间;让y的值的范围也在0~1之间,模拟雨点落在正方形中,当然会有的雨点落在1/4圆中,数以百万计雨点可以累计得到C和D,从而上述公式算出π的

ys****39
实名认证
内容提供者


最近下载