小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

梯形求積公式的逐次分半法(C語言實現(xiàn))

 dwlinux_gs 2014-09-15
#if 0

在好幾個網(wǎng)友的要求下,先給出一個簡單的逐次分半法梯形求積公式的C語言直接實現(xiàn)
。不過還是提醒一下如果學(xué)習(xí)算法的話,最好還是自己實際進行編碼的好。

#endif

#ifdef CODE1//g++ -DCODE1 thisfile.cpp
#include <stdio.h>
#include <math.h>
// 梯形公式的逐次分半法求積函數(shù)
double integral(
double a,//積分區(qū)間起始值
double b,//積分區(qū)間終止值
double(*f)(double),//被積函數(shù)
double eps//積分允許誤差
)
{
double n = 1;
double h = (b-a)/2;
double Tn = h*(f(a)+f(b));
double T2n = 0;
while(true)
{
double sumf = 0;
for(int i=1;i<=n;++i)
{
sumf += f(a+(2*i-1)*h);
}
T2n = Tn/2+h*sumf;
if(fabs(T2n-Tn)<3*eps)break;
Tn = T2n;
n *= 2;
h /= 2;
}
return T2n;
}
// 自定義的被積函數(shù),只要滿足下面的形式的函數(shù)就可以了:)
double func(double x)
{
return sin(x)*cos(x);
}
int main()
{
const double PI = 3.1415926535;
printf("%s%.8f/n","sin(x)在[0,PI/2]的積分值為:",integral(0,PI/2,sin,1e-8));
printf("%s%.8f/n","func(x)在[0,PI/2]的積分值為:",integral(0,PI/2,func,1e-8));
return 0;
}
#endif// CODE1
////////////////////////////////////////////////////////////////////////////////
//該程序的運行結(jié)果如下:
/*******************************************************************************
sin(x)在[0,PI/2]的積分值為:1.00000000
func(x)在[0,PI/2]的積分值為:0.49999999
*******************************************************************************/
////////////////////////////////////////////////////////////////////////////////
#if 0

下面是能夠輸入?yún)?shù)的程序:

#endif
#ifdef CODE2//g++ -DCODE2 thisfile.cpp
#include <stdio.h>
#include <math.h>
// 梯形公式的逐次分半法求積函數(shù)
double integral(
double a,//積分區(qū)間起始值
double b,//積分區(qū)間終止值
double(*f)(double),//被積函數(shù)
double eps//積分允許誤差
)
{
double n = 1;
double h = (b-a)/2;
double Tn = h*(f(a)+f(b));
double T2n = 0;
while(true)
{
double sumf = 0;
for(int i=1;i<=n;++i)
{
sumf += f(a+(2*i-1)*h);
}
T2n = Tn/2+h*sumf;
if(fabs(T2n-Tn)<3*eps)break;
Tn = T2n;
n *= 2;
h /= 2;
}
return T2n;
}
// 自定義的被積函數(shù),只要滿足下面的形式的函數(shù)就可以了:)
double func(double x)
{
return sqrt(x);//在這里修改你的被積函數(shù)
}
int main()
{
const double PI = 3.1415926535;
double a,b,eps;//輸入的參數(shù)保存在此
scanf("%lf%lf%lf",&a,&b,&eps);//輸入?yún)?shù)
printf("積分下界=%f,積分上界=%f,誤差=%f/n",a,b,eps);//顯示輸入的數(shù)據(jù)
printf("%s%f%s%f%s%.8f/n","sqrt(x)在[",a,",",b,"]的積分值為:",integral(a,b,func,eps));
return 0;
}
#endif// CODE1
////////////////////////////////////////////////////////////////////////////////
//該程序的輸入:
/*******************************************************************************
E:/>a
0 0.5 1e-6
*******************************************************************************/
//相應(yīng)的輸出為:
/*******************************************************************************
積分下界=0.000000,積分上界=0.500000,誤差=0.000001
sqrt(x)在[0.000000,0.500000]的積分值為:0.23570147
*******************************************************************************/
////////////////////////////////////////////////////////////////////////////////

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多