4.龙贝格求积公式,求解定积分
-
#include
<
stdio.h
>
#include
<
math.h
>
-
#define f(x) (sin(x) / x)
#define N 20
#define MAX 20
#define a 2
#define b 4
#define e 0.00001
float LBG( float p, float q, int n)
{ int i;
float sum = 0 ,h = (q - p) / n;
for (i = 1 ;i < n;i ++ )
sum += f(p + i * h);
sum += (f(p) + f(q)) / 2 ;
return (h * sum);
}
void main()
{ int i;
int n = N,m = 0 ;
float T[MAX + 1 ][ 2 ];
T[ 0 ][ 1 ] = LBG(a,b,n);
n *= 2 ;
for (m = 1 ;m < MAX;m ++ )
{ for (i = 0 ;i < m;i ++ )
T[i][ 0 ] = T[i][ 1 ];
T[ 0 ][ 1 ] = LBG(a,b,n);
n *= 2 ;
for (i = 1 ;i <= m;i ++ )
T[i][ 1 ] = T[i - 1 ][ 1 ] + (T[i - 1 ][ 1 ] - T[i - 1 ][ 0 ]) / (pow( 2 , 2 * m) - 1 );
if ((T[m - 1 ][ 1 ] < T[m][ 1 ] + e) && (T[m - 1 ][ 1 ] > T[m][ 1 ] - e))
{ printf( " Answer=%f/n " ,T[m][ 1 ]); getch();
return ;
}
}
}
5.牛顿迭代公式,求方程的近似解
-
#include<stdio.h> #include<math.h>
#include<conio.h>
#define N 100
#define PS 1e-5
#define TA 1e-5
float Newton(float (*f)(float),float(*f1)(float),float x0 )
{ float x1,d=0;
int k=0;
do
{ x1= x0-f(x0)/f1(x0);
if((k++>N)||(fabs(f1(x1))<PS))
{ printf("/nFailed!");
getch();
exit();
}
d=(fabs(x1)<1?x1-x0:(x1-x0)/x1);
x0=x1;
printf("x(%d)=%f/n",k,x0);
}
while((fabs(d))>PS&&fabs(f(x1))>TA) ;
return x1;
}
float f(float x)
{ return x*x*x+x*x-3*x-3; }
float f1(float x)
{ return 3.0*x*x+2*x-3; }
void main()
{ float f(float);
float f1(float);
float x0,y0;
printf("Input x0: ");
scanf("%f",&x0);
printf("x(0)=%f/n",x0);
y0=Newton(f,f1,x0);
printf("/nThe root is x=%f/n",y0);
getch();
}