閱讀601 返回首頁    go 阿裏雲 go 技術社區[雲棲]


求定積分的程序,跟大家分享一下,有錯的話請指出,謝謝!

/*題    目:編寫利用矩形法計算定積分的通用函數。然後利用它分
            別計算以下3個數學函數的定積分:
            (1)f(x)=x*x-5*x+1
      (2)f(x)=x*x*x+2*x*x-2*x+3
      (3)f(x)=x/(2+x*x)
 */     
//**********************************************************

#include < stdio.h >

//******求第一個公式的積分值******

double funtion1( double x )
{
    double  fx ;
 fx = x * x - 5 * x + 1;
 return fx ;
 
}

//******求第二個公式的積分值******

double funtion2( double x )
{
   double fx ;
  
   fx = x * x * x + 2 * x * x - 2 * x + 3 ;
   return fx ;
}


//******求第三個公式的積分值******

double funtion3( double x )
{
    double  fx ;

    fx = x / ( 2 + x * x ) ;
 return fx ;
}

//    調用函數求通用積分公式
    
void def_integral( double x1,double x2,int n , double (*p)( double x ))
{
     double  y1,y2  ;   //積分區間X1、X2對應的函數值
  double  per_len ,height ;
  double area , fx = 0.0 ;
     int i ;

  per_len = ( x2 - x1 ) / n ;   //等分成n分

  y1 = (*p)( x1 ) ;
    
  for( i = 1 ; i <= n ; i++ )
  {
   x2 = x1 + per_len ;        //單位區間長度
   y2 = (*p)(x2) ;           
         height = (y1 + y2 ) / 2.0 ;   //高
   area = per_len * height ;   //每一等份長度對應的麵積
   x1 = x2 ;               //下限右移
   y1 = y2 ;               //右移
   fx = fx + area ;       //麵積之和為積分的值
  }

  printf("所求積分的值為:/n");
  printf("%.3f/n" , fx ) ;

}

//*****主函數**************

void main()
{
  double a,b;  //a、b分別為積分區間的上下限
  int n ;            //n為要輸入的等份 即 區間分成的份數
 
  int selection ;

  printf("請輸入區間的等分數:/n");
  scanf("%d" , &n );
 
  printf("請輸入積分區間的上下限(中間用空格隔開):/n");
  scanf("%lf%lf", &a, &b );

  printf("請輸入你的選擇(1、2、3):/n");
  scanf("%d" , &selection );
 
  if ( selection == 1 )
          def_integral( a,b, n , funtion1 );
  else if( selection == 2 )
       def_integral( a,b, n , funtion2 );
  else
       def_integral( a,b, n , funtion3 );

}

最後更新:2017-04-02 06:51:38

  上一篇:go LCS (Longest Common Subsequence) 字符串最長公共子串算法
  下一篇:go javascript獲取URL查詢字符串