作者a5170040 (Piggy)
看板C_and_CPP
标题[问题] 曲线下面积 用重积分(有附程式码)
时间Thu Mar 5 21:05:10 2009
想要要计算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
1F:推 kvykn:程式计算是离散的不是? 03/05 22:15
2F:→ a5170040:嗯...我是用梯形法去切割 03/05 22:25