Реферат: Окружение и локализация корня нелинейной функции действительной переменной

dmax - maximal interval;

fun - pointer to the function.

Returns:

1 - if a root is bracketed;

0 - on failure

*/

int BracketRoot(double x0,double *a,double *b,double d0,

double di, double dmax,double (*fun)(double)) {

double fa,fb,f0;

/* get initial function guess, initial a,b,fa,fb */

f0=(*fun)(x0); *a=x0-d0; *b=x0+d0; fa=(*fun)(*a); fb=(*fun)(*b);

/* while the increased search interval is less than maximal,

process cycle */

while((d0*=di)<dmax) {

/* check up the bracketing success. Case f0>0. */

if(f0>=0.) {

if(fa<0.) {*b=x0;return(1);}

if(fb<0.) {*a=x0;return(1);}

/* else, compare fa and fb, choose the direction of search. The

right search case. */

if(fa>fb) {*a=x0; x0=(*b); *b+=d0; fa=f0; f0=fb; fb=(*fun)(*b);}

/* the left search case */

else if(fa<fb) {*b=x0; x0=(*a); *a-=d0; fb=f0; f0=fa; fa=(*fun)(*a);}

/* both sides search */

else {*a-=d0; *b+=d0; fa=(*fun(*a);fb=(*fun)(*b);}

}

/* Analogically, case when f0>0 */

else if(f0<0.) {

if(fa>=0.) {*b=x0;return(1);}

К-во Просмотров: 512
Бесплатно скачать Реферат: Окружение и локализация корня нелинейной функции действительной переменной