会c语言的进来帮个忙~~~~
大家帮忙做两个题吧,同学急用,谢谢咯1. 使用trapezium rule 求一个函数的定积分。
2. 使用Simpson’s Rule求一个函数的定积分。
%&089 %&245
回复: 会c语言的进来帮个忙~~~~
你在Google里面搜索关键字“离散的点积分”,找的第一个网页是: http://www.zjol.com.cn/vbbible/software/program/vb/numerical/vbNumerical16.htm 。里面介绍了两种积分的方法,而且给出了VB的源代码。当初我写程序的时候用的是辛普生公式。并将对应的VB代码改写成VC代码。现将我改写后的代码再修改一下给你看看。void C***Doc::Simpson()
{
/*/////////////////////////////////////////////////////////////////////////
Simpson's one-third rule:
用于当有 N+1 个等间距取样的离散数据点,且 N 为偶数时,
利用以下的公式即可求出积分值。h 为取样间距。
f(x)dx=h/3*(F0+4*F1+2*F2+4*F3+2*F4+……+4*FN-1+FN)
Simpson's three-eighths rule :
用于当有 N+1 个等间距取样的离散数据点,且 N 为 3 的倍数时,
利用以下的公式即可求出积分值。h为取样间距。
f(x)dx=3*h/8*(F0+3F1+3F2+2F3+3F4+3F5+2F6+……+3FN-1+FN);
若 N 为偶数,直接使用 Simpson's one-third rule即可求出积分;
若 N 为奇数,则 1~(N+1-3) 个数据点可利用 Simpson's one-third rule,
(N+1-3 )~(N+1)个数据点可利用 Simpson's three-eighths rule,
最后再把两部分的积分值相加即可。
Dim i As Long, j As Long, u As Long, l As Long
Dim sum As Single, EvenPanel As Boolean
u = UBound(fx): l = LBound(fx)
If u - l < 2 Then MsgBox "埭汁nΤT蛹凭诼Iよi秈︽Simpson縩だ猭": Exit Function
EvenPanel = (u - l) Mod 2 = 0
sum = fx(l)
For i = 1 To (u - l - IIf(EvenPanel, 0, 3) - 1)
sum = sum + fx(i + l) * IIf(i Mod 2 = 0, 2, 4)
Next
sum = sum + fx(i + l)
For j = 1 To u - i - l + 1 - IIf(EvenPanel, 1, 0)
sum = sum + fx(j + i + l - 1) * IIf(j = 1 Or j = 4, 9, 27) / 8
Next
Simpson = sum * dx / 3
/////////////////////////////////////////////////////////////////////////*/
// double m_dDataValue; // 积分前的数据数组
// double m_dDataIntegral; // 积分后的数据数组
int i=0;
int j=0;
int k=0;
int switch0=0;
int switch1=0;
m_dDataIntegral=m_dDataValue;
m_dDataIntegral=m_dDataValue*2+m_dDataValue;
for(i=2;i<1024;i++)
{
m_dDataIntegral=m_dDataValue;
switch0=(i%2)*3;
for(j=0;j<i-switch0-1;j++)
{
switch1=(2-(j%2))*2;
m_dDataIntegral+=m_dDataValue*switch1;
}
m_dDataIntegral+=m_dDataValue;
switch0=1-(i%2);
for(k=1;k<i-j-switch0;k++)
{
if(k==1||k==4)
{
switch1=9;
}
else
{
switch1=27;
}
m_dDataIntegral+=m_dDataValue*switch1/8;
}
m_dDataIntegral/=3;
}
}
刚出差回来,如有小问题,欢迎指正!
回复: 会c语言的进来帮个忙~~~~
。。。。。。。。。。。这种程序很简单的
只要会一点基础的C或C++就能编了
P。S。算积分最好的还是用R250随机数+Monte Carlo方法
页:
[1]