數值積分(實驗三)

2021-10-13 12:44:13 字數 2628 閱讀 1603

函式介面

double simpsonintegral (func fun,

double a,

double b,

double eps,

int& n)

其中,b 與 a 為積分上下限,eps 為誤差精度,n 為區間等分數,l 為加速次數,fun 為被積分函式的名稱

實現**

#include

"stdafx.h"

#include

"simpson.h"

#include

#include

double

simpson

(func fun,

double a,

double b,

double eps,

int&n)

//復合simpson公式中每個區間拼接點的累計

for(

int k =

1; k < n; k++

)//復合simpson公式最後求和

sn =

(b - a)

/6.0

/ n *

(fun

(a)+

fun(b)

+ s1 + s2)

; n =

2* n;

//步長對分,區間數乘2

s1 =0;

s2 =0;

//復合simpson公式中每個區間中間點的累計

for(

int k =

0; k < n; k++

)//復合simpson公式中每個區間拼接點的累計

for(

int k =

1; k < n; k++

)//復合simpson公式最後求和

s2n =

(b - a)

/6.0

/ n *

(fun

(a)+

fun(b)

+ s1 + s2)

;//用s2n與sn估計誤差

delta=

1.0/15*

fabs

(s2n - sn);}

return s2n;

}

函式介面
double rombergintegral (func fun,

double a,

double b,

double eps,

int&l)

其中,b 與 a 為積分上下限,eps 為誤差精度,n 為區間等分數,l 為加速次數,fun 為被積分函式的名稱

實現**

double

romberg

(func fun,

double a,

double b,

double eps,

int&l)

}int n =1;

double h =

(b - a)

/ n;

t[0][

0]= h /

2.0*

(fun

(a)+

fun(b));

//第一次梯形積分

double delta =1;

l =0;

while

(delta > eps)

t[0]

[l]= t[0]

[l -1]

*0.5

+ h /

2.0* f;

//復合梯形公式的遞推

//兩層迴圈, 外推加速

for(

int m=

1;m<=l;m++)}

delta =

fabs

(t[l][0

]- t[l -1]

[0])

;}double res = t[l][0

];for( i =

0; i < nn; i++

)delete

t;return res;

}

//先定義函式指標介面格式,方便呼叫被積函式:

typedef

double

(*func)

(double x)

;//被積分函式宣告滿足double(*func) (double x)的風格。

//例如:

double

func0

(double x)

;//輸入是 double 型引數 x,返回值為 double 型的 y 值。

//在 double simpsonintegral (func fun, double a, double b, double eps, int& n)內部通過函式指標 fun 來呼叫介面處的函式,如在呼叫 simpsonintegral 函式時介面處給的為 func0,則其實現**中double y = fun(1.0); 等同於 double y =func0(1.0);

double y =

fun(

1.0)

;double y =

func0

(1.0

);

實驗三:數值積分測試用專案c++檔案

數值分析實驗二 數值積分

1 2 include include using namespace std double f double x return pow x,2 int main double a,b,e int n cin a b e cin n double h b a n double x 1000 x 0 ...

數值分析實驗 二 之數值積分與微分

1 用復化梯形公式的自動控制誤差演算法求積分。2 romberg積分演算法求積分。復化梯形公式 sy2 1.m檔案 myint 0,1,100 fun1.m檔案 function f fun1 x if x 0 x 1 f 1 else f sin x x endmyint,m檔案 function...

Matlab數值積分

function gc,ak,xk guasschebyshev fun,n 高斯 勒讓德數值積分 引數說明 fun 積分表示式,可以是函式控制代碼 inline函式 匿名函式 字串表示式,但是必須可以接受向量輸入 a,b 積分上下限只能 1 1 故忽略 n 積分階數,可以任意正整數,但是不建議設定...