C++求积分方法
2012-09-21 12:04阅读:
用梯形法(1000等份)求以下三个函数的定积分:
f1(x)=1+x*x(积分区间0到1)
f2(x)=1+x+x*x+x*x*x(积分区间0到2)
f3(x)=x/(1+x*x)(积分区间0到3.5)
积分的运算时高等数学里让很多学生头疼的问题,尤其是不定积分的求解,在我的印象里,不定积分要比定积分难很多,因为不定积分不要求求出具体的数值,可是必须写出通式,要求低,但是书上的题目却五花八门,函数的复杂度却很高;等到了学定积分的时候,要求高了,必须求出最后的精确数值结果,但是函数的复杂度没那么高了,题目也没那么难了。
其实,后来想想,作者这样做应该是有他的用意的,因为不定积分是定积分的基础,所以各种函数的不定积分都得会求,否则定积分就不会了。
闲话扯了这么多,C++也能求解定积分吗?能,其实最早的计算机就是叫电子积分计算机,是特别擅长求积分运算的,下面我们就做进一步分析。
分析:以上三个函数,肯定要定义三个以x为形参的函数,那么函数定义了,积分怎么求呢?我们知道求定积分就是求积分区域内的面积,我们学习高数的时候,是把积分区域分成无限小块,如图1.把每一小块近似看成是一个梯形(h为每一块梯形的高),然后求总和,最后求得的表达式为s,那么我们求积分的函数也是用这种思想。
s=h[(f(a)+f(b))/2+f(a+h)+f(a+2h)+...+f(a+(n-1)h)]
图1
下面是积分在C++中实现的代码:
#include 'iostream.h'
#define N 1000
double f1(double x)
//f1(x)=1+x*x
{
return(1+x*x);
}
double f2(double x)
//f2(x)=1+x+x*x+x*x*x
{
return(1+x+x*x+x*x*x);
}
double f3(double x)
//f3(x)=x/(1+x*x)
{
return(x/(1+x*x));
}
double integral(double(*
fun)(double),double a,double b)
//求fun在a,b区间定积分
{
double s,h;
int i;
s=((* fun)(a)+(* fun)(b))/2.0;
h=(b-a)/N;
for(i=1;i<N;i++)
s+=(*fun)(a+i*h);
return(s*h);
}
main()
{
double y1,y2,y3;
y1=integral(f1,0.0,1.0);
y2=integral(f2,0.0,2.0);
y3=integral(f3,0.0,3.5);
cout<<'y1= '<<y1<<'; y2= '<<y2<<';
y3= '<<y3<<endl;
return 0;
}
我们知道计算机可以求积分,那么能求的积分不只以上三个函数,如果想求其他函数的积分,我们就定义函数即可求得,大同小异,我们重要在于学习求积分的思想,希望大家能够理解,不理解的可以进一步联系我,希望可以帮到大家,谢谢!