积分计算

gblxch2006 2010-05-15 12:07:29
用程序怎样实现
v=0.000000327973856
p=4.291371507
求:cos(p+(x/10^45+v*x^2) a=0到b=300区间的积分(正解是-119.9119988)
我按高斯5点积分,不知哪里有问题,结果不正确
...全文
46 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
阿双2009 2010-05-15
  • 打赏
  • 举报
回复
我以f(x) = x^2为例,求其在(a,b)区间的定积分,仅供楼主参考(C#实现)

/// <summary>
/// 定积分核心算法
/// </summary>
/// <param name="a">区间起始坐标</param>
/// <param name="b">区间终点坐标</param>
/// <param name="step">把区间切分成step块</param>
/// <returns>积分值(面积)</returns>
private double Jifen(double a, double b, int step)
{
double Area = 0.0;
double valueOfY; //记录每一块小矩形的高,即函数值
double dx = (b - a) / (double)step; //把区间切成step块后就可得每块小矩形的宽

for (int i = 0; i < step; i++)
{
valueOfY = Math.Pow(a + (i + 1) * dx, 2); //获取每块小矩形的高
Area += dx * valueOfY; //迭加每块小矩形的面积
}
return Area; //返回最终结果,此时就是定积分近似值(也只能是近似值)
}
gblxch2006 2010-05-15
  • 打赏
  • 举报
回复
用高斯5个点的复合辛普生公式,精度更高
如果用梯形公式,那结果会差得很多,特别是v(见楼上)值更小的时候
gblxch2006 2010-05-15
  • 打赏
  • 举报
回复
唉,是我不小心换算错了
v=0.000000327973856
p=4.291371507
c = (f(-1) + 4 * f(-0.5) + 2 * f(0) + 4 * f(0.5) + f(1))
c = b * c / 12
把cos(p+(x/10^45+v*x^2) a=0到b=300区间的积分换算成
f = Math.Cos(p + ((x * b / 2 + b / 2) / r + v * (x * b / 2 + b / 2) ^ 2))
a=-1到b=1的积分
其结果正确

16,556

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧