📄 complext.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 + -