⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 complext.cpp

📁 复化梯形公式
💻 CPP
字号:
// ComplexT.cpp : Defines the entry point for the console application.
//
//此程序用复化梯形公式求函数f(x)在[a,b] 上的积分
//利用循环方式,每循环一次[a,b]的划分个数就多一个,用n控制划分小区间个数
//精度控制在1e-6.


#include "stdafx.h"
#include "iostream.h"
#include "math.h"

double f(double);
double a=0.0,b=1.0;

int main(int argc, char* argv[])
{
	double Tn1,Tn2,h;
	int n;  //n 为[a,b]划分成小区间的个数           
	
	Tn1=Tn2=0.0; 
	h=0.0;
	
	n=1;
	Tn1 = (b-a)/(2.0*n)*(f(a)+f(b));
	cout<<"\n\n区间划分个数N= "<<n<<"	此时T("
		<<n<<") ="<<Tn2<<endl;
	do
	{
		if(n>1){Tn1 = Tn2;Tn2 = 0.0;}
		n+=5;
		h=(b-a)/n;
		for(int i=1;i<n;i++)
			Tn2+=h*f(a+i*h);
		Tn2 += 0.5*h*(f(a)+f(b));

		//如果区间划分成很多以后仍不能达到要求,为节约时间终止程序
		if(n>1000) break;
		else cout<<"\n\n区间划分个数N= "<<n<<"	此时T("
			<<n<<") ="<<Tn2<<endl;
	   
	}while(fabs(Tn2 - Tn1) > 1E-6);

	return 0;
}

double f(double x)
{
	return 4.0/(1.0+x*x);
}
double f(double);
//编程发现:由于n增量不大(每次增1),两次T值相差不大;
//当n增量改为5时,速度加快
//精度为1e-6时(循环次数为)n=70 ,结果为f(x)=3.14156
//精度为1e-8时(循环次数为)n=323 ,结果为f(x)=3.14159
//当增大n 的增量时 n+=10,当n=701时,f(x)=3.14159
//当增大n 的增量时 n+=5,当n=126时,f(x)=3.14158
//速度明显加快!!!!

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -