10个重要的算法C语言实现源代码(其4和5---龙贝格和牛顿迭代)

来源:互联网 发布:java游戏编程 pdf 编辑:程序博客网 时间:2024/05/21 16:56
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();
}