24小时热门版块排行榜    

CyRhmU.jpeg
查看: 1965  |  回复: 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

金虫 (正式写手)

★ ★ ★
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的回帖
查看全部 16 个回答

simthhuang

木虫 (小有名气)

★ ★
muqiuyan(金币+1):谢谢参与
resonant(金币+1):感谢积极参与:-) 2010-05-21 17:38:39
哪里有两个被积函数啊?明明就一个嘛!
一贯知足二目远眺三餐有节四季不懒五谷皆食六欲不张七分忍让八方交往九薄烟断十分坦荡
2楼2010-05-21 17:04:29
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

muqiuyan

木虫 (小有名气)

引用回帖:
Originally posted by simthhuang at 2010-05-21 17:04:29:
哪里有两个被积函数啊?明明就一个嘛!

主程序里有两个被积函数,我只列了两个子程序,一个是计算积分的,一个是被积函数的子程序,想问问第二个被积函数怎么弄,积分子程序里的f(a) f(b) f(x) 之类的需要调要被积函数子程序的地方要不要调整。
3楼2010-05-21 21:46:17
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

simthhuang

木虫 (小有名气)


resonant(金币+1):感谢参与:-) 2010-05-22 21:01:25
第二个被积函数就是被积函数啊,就是积分号和dx之间那部分啊。f(a) f(b) f(x) 分别是用初值a,终值b和中间迭代的数x调用被积函数。MM,我的理解对吗?
一贯知足二目远眺三餐有节四季不懒五谷皆食六欲不张七分忍让八方交往九薄烟断十分坦荡
4楼2010-05-22 19:41:04
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
普通表情 高级回复(可上传附件)
信息提示
请填处理意见