| 查看: 1921 | 回复: 15 | |||
[交流]
【求助】求积分程序中被积函数问题已有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()表示的: 怎么区分啊 |
» 猜你喜欢
康复大学泰山学者周祺惠团队招收博士研究生
已经有6人回复
AI论文写作工具:是科研加速器还是学术作弊器?
已经有3人回复
孩子确诊有中度注意力缺陷
已经有6人回复
2026博士申请-功能高分子,水凝胶方向
已经有6人回复
论文投稿,期刊推荐
已经有4人回复
硕士和导师闹得不愉快
已经有13人回复
请问2026国家基金面上项目会启动申2停1吗
已经有5人回复
同一篇文章,用不同账号投稿对编辑决定是否送审有没有影响?
已经有3人回复
ACS Applied Polymer Materials投稿
已经有10人回复
RSC ADV状态问题
已经有4人回复
» 本主题相关价值贴推荐,对您同样有帮助:
求助 Origin 自定义函数输入问题
已经有4人回复
求教:反常积分的被积函数的有界性问题
已经有10人回复
【求助】请教:隐式目标函数和约束条件非线性规划问题
已经有5人回复
【求助】只知道有限个函数值求积分
已经有10人回复
【求助】复变函数中的分部积分公式是否成立
已经有8人回复
【求助】请教一个隐函数的求导问题
已经有10人回复
simthhuang
木虫 (小有名气)
- 程序强帖: 1
- 应助: 0 (幼儿园)
- 金币: 2231.2
- 散金: 24
- 红花: 3
- 帖子: 252
- 在线: 69.3小时
- 虫号: 843987
- 注册: 2009-09-09
- 性别: GG
- 专业: 认知科学及智能信息处理

2楼2010-05-21 17:04:29
3楼2010-05-21 21:46:17
simthhuang
木虫 (小有名气)
- 程序强帖: 1
- 应助: 0 (幼儿园)
- 金币: 2231.2
- 散金: 24
- 红花: 3
- 帖子: 252
- 在线: 69.3小时
- 虫号: 843987
- 注册: 2009-09-09
- 性别: GG
- 专业: 认知科学及智能信息处理

4楼2010-05-22 19:41:04
5楼2010-05-23 10:37:52
★ ★
muqiuyan(金币+1):谢谢参与
jjdg(金币+1):感谢热心应助 2010-05-26 04:51:38
muqiuyan(金币+2): 2010-05-26 09:21:19
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
|
太感谢了, 那积分程序中的原来的fsimpf(a)就写成fsimpf(a,func_index),fsimpf(b)写成fsimpf(b,func_index),是吗? 另外我的两个被积函数是很复杂的式子,在哪里计算它们呢?下面的程序对吗 double fsimpf(double x, int func_index) { swtich (func_index) { case 1: double y1; y1=被积函数 fsimpf1(x) 的表达式; return (y1); //第一个函数 break; case 2: double y2; y2=被积函数 fsimpf1(x) 的表达式; return (y2); //第二个函数 break; ........ ........ } } |
7楼2010-05-26 09:21:01
8楼2010-05-28 06:04:01
9楼2010-06-01 16:32:17
tjyl
金虫 (正式写手)
- 程序强帖: 2
- 应助: 0 (幼儿园)
- 金币: 3218.1
- 红花: 2
- 帖子: 576
- 在线: 156.6小时
- 虫号: 765184
- 注册: 2009-05-07
- 专业: 生物无机化学
- 管辖: 程序语言
★ ★
muqiuyan(金币+1):谢谢参与
resonant(金币+1):感谢应助:-) 2010-06-02 19:03:48
muqiuyan(金币+1): 2010-06-03 10:15:13
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













回复此楼