RUC_JudgeOnline 1005 定积分计算

定积分计算

Description

已知f(x)=exp(x*x),求定积分I(I为f(x)在[1,t]上的定积分)。算法采用梯形法,简介如下:
对P(P为g(x)在[a,b]上的定积分),将积分区间b-a等分为m份,每份h=(b-a)/m。使用梯形面积来近似计算定积分,近似公式为

注意:请将m取为2000。

Input

输入共一行,为积分上限t(10≥t≥1)。

Output

输出共一行,为在[1,t]上的定积分。

Sample Input

 

1.5

 

Sample Output

 

2.60046

 

Hint

注意:
1.
2.请将m取为2000
3.请用cout输出结果(使用cout需要头文件iostream.h)

Source

习题6-4

问题分析:

这个题目主要是对公式的理解。在对公式进行分析之后我们得出,求解这个题目就是一个对各项的拆分计算。比如对f(x0)的计算,对累加的计算。

解决方案:

用了两个函数分别表示f(x)的求解和公式的求解。在对f(x)的求解过程中,直接调用数学库函数。S的计算是完全按照题目中给的公式来的。这种计算不是最佳方案,使用了函数和库函数,不过比较易读。

参考程序:

 

#include<stdio.h>
#include<math.h>

const int m = 2000;
double f(double x);  //计算f(x)的值
double S(double a,double b,int m);  //直接计算公式从a到b的积分输出

int main()
{
	double t;
	scanf("%lf",&t);
	double a=1.0;
	double b=t;
	printf("%lf\n",S(a,b,m));
	return 0;
}

double f(double x)
{
	return exp(x*x);
}

double S(double a,double b,int m)
{
	double c=0;
	double h=(b-a)/m;
	int k;
	for(k=1;k<m;k++) //计算累加和∑
	{
		c+=f(a+k*h);
	}
	return ((f(a)+f(b))/2+c)*h;
}

 

你可能感兴趣的:(C++,c,算法,F#,C#)