24小时热门版块排行榜    

查看: 2023  |  回复: 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的回帖

tjyl

金虫 (正式写手)

★ ★
muqiuyan(金币+1):谢谢参与
resonant(金币+1):感谢应助:-) 2010-06-02 19:03:48
muqiuyan(金币+1): 2010-06-03 10:15:13
最近比较忙,没有怎么回帖。

简单地说一下吧,建议你使用函数指针,不然程序照你这样写以后又要修改积分的函数那你还得改。
double fsimp(double (*f)(double ),double a, double b, double eps) /  /*a为积分下限,b为积分上限,eps是希望达到的精度,f为函数指针*/
在fsimp 的实现中,你就写f(a),f(b) 就是了。
前面申明double fsimpf(double)
然后在调用 fsimp时就直接
xx=fsimp(fsimpf, double a, double b, double eps) ;就是了
建议你看看the c programming language
10楼2010-06-02 18:44:44
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

tjyl

金虫 (正式写手)

★ ★ ★
resonant(金币+3):专家辛苦了;—) 2010-06-04 19:06:53
我也不知道是我没有弄明白你的意图还是你没有理解我建议用函数指针的用意。
直接写个很简单的范例,不知道对你有启发没有
#include
double plus(double (*f) (double), double a, double b);
double F1(double);
double F2(double);
int main()
{
    double x1, x2;
    double y1, y2;
    x1 = 0.5;
    x2 = 1.5;
    y1 = plus(F1, x1, x2);
    y2 = plus(F2, x1, x2);
    printf("plus of F1=%0.6f\n", y1);
    printf("plus of F2=%0.6f\n", y2);
    return 0;
}

double plus(double (*f) (double), double x1, double x2)
{
    return (f(x1) + f(x2));
}

double F1(double x)
{
    return x * x;
}

double F2(double x)
{
    return x;
}
只要你的2个积分函数的参数个数是一样的就行了
如果参数个数不一样的话建议用C++来写。C的可变参数估计你一时半会搞不清楚。
引用回帖:
Originally posted by muqiuyan at 2010-06-03 10:56:34:







万分感谢,因为要编程,才开始学,很多都不懂。
麻烦在帮忙看看这个,我的程序里有两个积分,每个的积分变量还不同,怎么在程序中体现区分呢。

double fsimp(double (*f)(double ),double a, d ...

[ Last edited by tjyl on 2010-6-3 at 12:39 ]
12楼2010-06-03 12:36:35
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

tjyl

金虫 (正式写手)

★ ★
resonant(金币+1):谢谢进一步应答。 2010-06-04 19:07:27
余泽成(金币+1):辛苦了,如果有时间的话可否给新手再详细讲解一下,辛苦了! 2010-06-08 23:19:33
看你上面说的我确信我明白你的意图的。不过你根本就没有明白我写的那个例子中函数指针使用的意义。
你要是把代码写的像前面的那样,会让人看了很崩溃的。
引用回帖:
Originally posted by muqiuyan at 2010-06-04 08:54:10:


能具体介绍下吗?谢谢了

16楼2010-06-04 16:18:21
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 muqiuyan 的主题更新
普通表情 高级回复 (可上传附件)
信息提示
请填处理意见