[問題] 曲線下面積 用重積分(有附程式碼)

看板C_and_CPP作者 (Piggy)時間15年前 (2009/03/05 21:05), 編輯推噓1(101)
留言2則, 2人參與, 最新討論串1/2 (看更多)
想要要計算y=3π/4x的曲線下面積0<=x<=1 and 0<=y<=10 積分式如下 ------------------------ 10 | ﹨ 1 3π/4x | ﹨ 請想成一個曲線@@ ∫ ∫ x*y dy dx | \ 0 0 | \ ------------------------ | ╲___ 0 ------------------- 1 因為x在0那點會產生發散的情況所以我從x=3π/40開始積分最後在加上3π/4 ----------------------------------- 1 3π/4x 3π ∫ ∫ x*y dy dx + —— 3π/40 0 4 ----------------------------------- 可是我這樣用梯形積分法積出來的數值卻超過6(Total面積是10) 非常的不合理 可是如果今天我要積的函數是y=π/4x x從π/40→1 y從0→π/4x 最後在加上π/4,最後的答案是1.多,答案比較合理 我研究了很久不知道問題出在哪裡,可以麻煩數學或是程式能力好的朋友們 幫忙看看我的程式碼哪裡出了問題嗎???謝謝 還是說這種積分不能用梯形法呢? --------------------程式碼--------------------- #include <stdio.h> #include <math.h> #define pi 3.14159 #define f(x,y) (x*y) void gy(int); double x[50],y[50][50],gg[50],hy[50]; int main(void) { int i,j,k,n; double a,b,hx,sum=0.0,ts; n=10; a=3*pi/40; b=1; hx = (b-a)/n; for(i=0;i<=n;i++) { x[i] = a+i*hx;//OK hy[i]=((3*pi/(4*x[i]))-0)/n; for(j=0;j<=n;j++) { y[i][j]=j*hy[i]; // 我覺得有問題的地方 } } gy(n); for(i=1;i<=n-1;i++) sum=sum+gg[i]; ts=(hx/2.0)*(gg[0]+gg[n]+2*sum); ts=ts+(3*pi/4); printf("T%d=%1f\n",n,ts); system("pause"); return 0; } void gy(int n) { int i,j; double ss,sum1=0.0; for(i=0;i<=n;i++) { for(j=1;j<=n-1;j++) { sum1=sum1+f(x[i],y[i][j]); } gg[i]=(hy[i]/2.0)*(f(x[i],y[i][0])+f(x[i],y[i][n])+2*sum1); sum1=0.0; } return; } -- -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.113.191.166

03/05 22:15, , 1F
程式計算是離散的不是?
03/05 22:15, 1F

03/05 22:25, , 2F
嗯...我是用梯形法去切割
03/05 22:25, 2F
文章代碼(AID): #19hyu9jK (C_and_CPP)
文章代碼(AID): #19hyu9jK (C_and_CPP)