数学建模社区-数学中国
标题:
龙贝格求积法源代码,效率很好的
[打印本页]
作者:
maleesky
时间:
2005-4-1 16:34
标题:
龙贝格求积法源代码,效率很好的
<
>积分的源代码,效率很好的
8 p: t/ t0 q/ _2 x; {; A
2 W4 Q' ^; t* R& q( P
# d) j/ W, z6 X8 X6 E5 t- Y( P$ D7 F7 A
//////////////////////////////////////////////////////////////////////
! o8 l4 G1 n; ]. t: @
// 龙贝格求积法
5 \. q! x, ^6 P& j- @0 z4 P
//
9 Q+ K' H0 f3 S& h+ Q2 ` H' d) }$ Q
// 调用时,须覆盖计算函数f(x)值的虚函数double Func(double x)
- F$ M# I5 g* U" V; _/ g
//
! x9 I, j+ c9 X( f& D
// 参数:
# ~( {% N8 O5 q1 G( x" o |
// 1. a - Double型变量,积分下限
$ N, m1 W. h. j/ v$ T/ |; |
// 2. b - Double型变量,积分上限,要求b>a
5 h k2 }( K3 H$ t. M+ O* `8 J8 K
// 3. eps - Double型变量,积分精度要求
+ x v- H; \) b
//
9 }% _& e6 a. P$ r: F4 e+ t
// 返回值:double 型,积分值
+ y H& O0 u1 [9 L7 }2 e( ?% B
//////////////////////////////////////////////////////////////////////
! {1 h" Y: j: ~1 n: `) B# g
double Integral_Romberg(double a, double b, double eps /*= 0.000001*/)
n* r- k& q' ^8 Y& M5 `, ]
{
+ W- ~% b' j8 N; V) r
int m,n,i,k;
7 w1 L G9 o: T3 I0 Q1 g1 k8 r; P
double y[10],h,ep,p,x,s,q;</P>
7 m% P* [) r- W3 F: r; G- j
<
> // 迭代初值
( F) m8 |. E; x2 A, m/ B( \5 ]" G
h=b-a;
# g: A( p# u, a- h& r" A
y[0]=h*(Func(a)+Func(b))/2.0;
# _" N9 D. }* _* {; x. f* i5 k3 k
m=1;
+ Z* s! ~$ g6 M* i
n=1;
- G$ n+ P& L) K, \& e* w
ep=eps+1.0;
( D1 j: Z5 q3 s8 ]- N- D& s& F, ]
% t6 P$ ~) V" F1 N/ w1 {$ L
// 迭代计算
4 E4 Z5 y* K4 {
while ((ep>=eps)&&(m<=9))
- @* i! U% |9 v* F( @
{
& N2 w, s) K# \8 [# v
p=0.0;
1 A+ M/ k( u2 h% J* W
for (i=0;i<=n-1;i++)
0 {: r5 Z/ `( n' R. ^
{
2 N0 N" g7 J7 d& j; Q
x=a+(i+0.5)*h;
, F% l( G. _4 h8 F) Z. _! `9 q
p=p+Func(x);
- o5 M0 o* B# {2 O$ q' k: Y
}
l4 X6 C1 x! L: W9 p3 @
8 F% z6 B- ^$ h. P: \
p=(y[0]+h*p)/2.0;
% x" S% y+ n/ F
s=1.0;
& F& E: W" t* C- u: D" E/ }0 I
for (k=1;k<=m;k++)
4 S1 `, v2 a. k; Q5 i) @# y
{
, x5 J! g7 T& n# Q
s=4.0*s;
; I; L1 N& C0 c) Q; R$ }# g$ l
q=(s*p-y[k-1])/(s-1.0);
& X6 m. ]+ H: n4 S1 q
y[k-1]=p; p=q;
# \) p3 k3 g' U3 g7 A9 ~2 G
}</P>
/ ]1 s T/ ^) S
<
> ep=fabs(q-y[m-1]);
: O& a* C, K" X; s7 a
m=m+1;
u% L z5 v' c8 H
y[m-1]=q;
! _8 ] P* | q8 M7 g
n=n+n;
8 b$ p( e' \% [ m; s X5 ~
h=h/2.0;
0 H. z2 c, \1 s) D4 q$ `% J
}
. d- _0 Y ^: |" I* T
% Q5 q- X. s3 F9 e0 {
return(q);
! d/ M# w5 z: G7 a* e; \
}</P>
欢迎光临 数学建模社区-数学中国 (http://www.madio.net/)
Powered by Discuz! X2.5