24小时热门版块排行榜    

查看: 2024  |  回复: 15
当前只显示满足指定条件的回帖,点击这里查看本话题的所有回帖

muqiuyan

木虫 (小有名气)

[交流] 【求助】求积分程序中被积函数问题 已有5人参与

我用Simpson方法计算定积分。在程序中有两个地方用到积分,而被积分函数作为子程序调用,在计算积分的程序中该怎么定义被积函数呢?

这是 辛普森算法 的程序:
double fsimp(a,b,eps) /*辛普森算法*/  
double a,b,eps; /*a为积分下限,b为积分上限,eps是希望达到的精度*/  
{  
    int n,k;  
    double h,t1,t2,s1,s2,ep,p,x;  
    n=1; h=b-a;  
    t1=h*(fsimpf(a)+fsimpf(b))/2.0;  /*用梯形公式求出一个大概的估值*/  
    s1=t1;  
    printf("s1=%e\n",s1);
        ep=eps+1.0;  
    while (ep>=eps)  
{  
p=0.0;  
for (k=0;k<=n-1;k++)  
{  
x=a+(k+0.5)*h;  
p=p+fsimpf(x);  
}  
t2=(t1+h*p)/2.0;  
s2=(4.0*t2-t1)/3.0;  
printf("s2=%e\n",s2);
ep=fabs(s2-s1);  
t1=t2; s1=s2; n=n+n; h=h/2.0;  
}  
    return(s2);  
}



这是被积函数的程序:

double fsimpf(r)
double r; /* 被积分的函数*/

{  double y;
    y=被积函数f(x)的表达式;
  return(y);
}


两个被积函数不能都用fsimpf()表示吧,可不用它,计算积分时调用被积函数又是用fsimpf()表示的:


怎么区分啊
回复此楼
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

archun

铜虫 (初入文坛)

★ ★
muqiuyan(金币+1):谢谢参与
jjdg(金币+1):感谢热心应助 2010-05-26 04:51:38
muqiuyan(金币+2): 2010-05-26 09:21:19
我觉得你是这个意思吧。
你有两个函数要算积分,比如为 fsimpf1(x) 和 fsimpf2(x)
但是算积分的函数只有一个,就是 fsimp()
在 fsimp() 中有一句语句是 p=p+fsimpf(x),但是在 fsimpf(x) 的定义中只定义了一个函数,比如是 fsimpf1(x)。这样的话,你算第二个积分时,仍然要调用 fsimp() 函数算。但是 fsimp() 是调用的 fsimpf1(x) 不是 fsimpf2(x)。你就不知道 fsimpf2(x) 该怎么算了。

你可以增加一个参数解决问题。
比如:
double fsimp(double a, double b, double eps, int func_index)
{
    .....
    .....
    p=p+fsimpf(x,func_index)
    .....
    .....
}

double fsimpf(double x, int func_index)
{
    swtich (func_index)
    {
    case 1:
        return (3*x+5); //第一个函数
        break;
    case 2:
        return (x*x+5); //第二个函数
        break;
    ........
    ........
    }
}

你积分时就写为
fsimp(a,b,eps,1) 积分第一个函数
fsimp(a,b,eps,2) 积分第二个函数
6楼2010-05-25 22:04:35
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

archun

铜虫 (初入文坛)


余泽成(金币+1):参与应助,欢迎常来程序语言版! 2010-05-28 08:57:25
muqiuyan(金币+1): 2010-06-01 16:30:55
对的。
其实那个break语句可以不用写。只不过写也不错。
8楼2010-05-28 06:04:01
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 muqiuyan 的主题更新
普通表情 高级回复 (可上传附件)
信息提示
请填处理意见