當前位置:編程學習大全網 - 編程語言 - 用C語言計算微積分?

用C語言計算微積分?

我給壹樓加的註釋以及修改:

#include<stdio.h>

#include<math.h>

#define ARRAYBOUND 10001

void main()

{

int i = 0; //輔助變量,最常見那種

int n = 0; //將所求定積分函數曲線在x軸方向,平均分成n等分;n越大,結果越精確;不過限於此算法限制n<ARRAYBOUND,否則溢出.

float x[ARRAYBOUND];//ARRAYBOUND維浮點數組,存放離散的x坐標值

float y[ARRAYBOUND];//ARRAYBOUND維浮點數組,存放每個x坐標對應的函數值;x[i],y[i]滿足y[i]=f(x[i]),f是妳要求定積分的函數

float x0 = 0.0; //定積分下限

float xn = 0.0; //定積分上限

float h = 0.0; //面積微元寬度

float J = 0.0; //輔助變量

/*f=x^3*/ //這裏說明要求定積分的是函數f(x)=x*x*x;(y等於x的立方,x^3是vb的寫法)

// printf("input x0,xn,n:");

printf("請分別輸入下限(x0),上限(xn),精度(n):");

scanf("%f",&x0);

scanf("%f",&xn);

scanf("%d",&n);

h=(xn-x0)/n;//將函數圖形在x方向平分成n份,h是每個面積微元的寬度

x[0]=x0; //將積分下限賦值給x[0]

for(i=0;i<=n && n<ARRAYBOUND;i++)

{

x[i]=x[0]+i*h; //計算n個離散的橫坐標值,存入x[]數組

y[i]=(float)pow(x[i],3);//計算n個橫坐標對應的函數值,存入y[]數組。在此可以改變要求積分的函數

}

// J=0.0;

for(i=0;i<n;i++)

{

//J=J+y[i]+y[i+1];

J+=y[i];//將所有縱坐標值代數相加,存入J

}

//J=J*h/2.0;

J=J*h;//所有微元面積壹次求解,因為∑h*y[i]=h*∑y[i];

printf("\nn=%d \n所求定積分值是: %f\n",n,J);

}

我將//J=J+y[i]+y[i+1]改為J+=y[i];將//J=J*h/2.0;改為J=J*h只是幫助lz理解

其實,這兩種表達在理論上是等價的,不過我發現修改後,在n同樣大小的情況下,結果的精度有壹點點下降,還真不知為什麽?

這樣的話lz應該能理解了吧,其實壹樓的算法還有不少值得改進的地方,希望lz能有所突破!!

  • 上一篇:京東產品經理的分享基於大數據的購物車營銷玩法
  • 下一篇:太空體驗,人工智能還是新能源?2023首爾車展趨勢解讀
  • copyright 2024編程學習大全網