300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > 从定积分定义到代码 详解矩形法求解定积分

从定积分定义到代码 详解矩形法求解定积分

时间:2023-06-27 01:02:16

相关推荐

从定积分定义到代码 详解矩形法求解定积分

题目:

写一个函数用矩形求定积分的通用函数,分别别F(0,1) sinx dx,F(-1,1) cosx dx,F(0,2) exp(x) dx的定积分.(F(0,1)表示定积分的范围)

说明:sin,cos,exp已在系统的数学函数库中.

首先解释一下为什么可以用矩形法求定积分:

可以先看一下公式定义:

一般定义为:求定积分范围为(a,b)求f(x)的积分,本质是按图片式子求解的.

特殊情况就是a=0,b=1的时候可以简化式子.

再来看一下直观的几何图形,数形结合感受一下. (图片引用百度百科)

可以看出求(a,b)的定积分就是求函数曲线和x轴在(a,b)范围的面积.这个面积等于n个小矩形面积的和.并且这些小矩形都是宽度相等,高度不同的矩形. 矩形的高取决于f(x)中x的值. 所以又可以利用矩形等距得到横坐标.x = a+i×h(i=0,1,2…n)

如果每个小矩形划分的越小就越接近真实面积. 代码体现为 h = (b-a)/n.因为每份矩形的宽度是等距的所以h相同,所以f(x)的纵坐标可以表示为y = f(a+i*h),i表示有几个矩形的宽度.所以n的值越大,划分的矩形越多结果越精确.

//核心代码for(i=1;i<=n;i++) //这个n表示有多少个小矩形{x=x+h; //x表示的是横坐标的位置s=s+(*p)(x)*h; //*p的* 为指针 *h的*为乘号 //(*p)(x)表示将x传入p所指向的函数(sinx,cosx...等)//s表示(a,b)中每个小矩形面积的累加}

#include<stdio.h>#include<math.h>//float(*)(float) 表示 这个指向形参为float类型,返回值为float类型的指针//通过打印被调用函数的地址可以自行验证一下//float integral(float(*)(float),float,float,int);是表示调用哪个函数,积分的上下限是啥,由于函数中调用了函数,所以用到了函数指针.int main(){float integral(float(*)(float),float,float,int);//对integarl函数的声明float fsin(float);//对fsin函数的声明float fcos(float);//对fcos函数的声明float fexp(float);//对fexp函数的声明float a1,b1,a2,b2,a3,b3,c,(*p)(float);int n=20; printf("input a1,b1:");scanf("%f,%f",&a1,&b1);printf("input a2,b2:");scanf("%f,%f",&a2,&b2);printf("input a3,b3:");scanf("%f,%f",&a3,&b3);p=fsin;c=integral(p,a1,b1,n);printf("The integral of sin(x) is:%f\n",c);p=fcos;c=integral(p,a2,b2,n);printf("The integral of cos(x) is:%f\n",c);p=fexp;c=integral(p,a3,b3,n);printf("The integral of exp(x) is:%f\n",c);return 0;}float integral(float(*p)(float),float a,float b,int n){int i;float x,h,s;h=(b-a)/n;x=a;s=0;for(i=1;i<=n;i++){x=x+h;s=s+(*p)(x)*h; //*p的* 为指针 *h的*为乘号 }return(s);}float fsin(float x){return sin(x);}float fcos(float x){return cos(x);}float fexp(float x){return exp(x);}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。