| 查看: 2175 | 回复: 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()表示的: 怎么区分啊 |
» 猜你喜欢
复试调剂,一志愿郑州大学材料与化工289分
已经有23人回复
化学工程与技术专业一志愿哈工程 291分B区 国家级大创负责人 有一作论文
已经有6人回复
材料调剂
已经有10人回复
314求调剂
已经有12人回复
调剂 化学 307
已经有8人回复
一志愿211 0703化学 346分求调剂
已经有11人回复
086003调剂求助
已经有14人回复
085400 328分 求调剂
已经有5人回复
083200 初试305分 求调剂
已经有9人回复
284求调剂
已经有3人回复
» 本主题相关价值贴推荐,对您同样有帮助:
求助 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













回复此楼
5