| 查看: 2152 | 回復(fù): 15 | |||
[交流]
【求助】求積分程序中被積函數(shù)問題 已有5人參與
|
|
我用Simpson方法計(jì)算定積分。在程序中有兩個地方用到積分,而被積分函數(shù)作為子程序調(diào)用,在計(jì)算積分的程序中該怎么定義被積函數(shù)呢? 這是 辛普森算法 的程序: double fsimp(a,b,eps) /*辛普森算法*/ double a,b,eps; /*a為積分下限,b為積分上限,eps是希望達(dá)到的精度*/ { 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); } 這是被積函數(shù)的程序: double fsimpf(r) double r; /* 被積分的函數(shù)*/ { double y; y=被積函數(shù)f(x)的表達(dá)式; return(y); } 兩個被積函數(shù)不能都用fsimpf()表示吧,可不用它,計(jì)算積分時調(diào)用被積函數(shù)又是用fsimpf()表示的: 怎么區(qū)分啊 |
木蟲 (小有名氣)

木蟲 (小有名氣)

|
我覺得你是這個意思吧。 你有兩個函數(shù)要算積分,比如為 fsimpf1(x) 和 fsimpf2(x) 但是算積分的函數(shù)只有一個,就是 fsimp() 在 fsimp() 中有一句語句是 p=p+fsimpf(x),但是在 fsimpf(x) 的定義中只定義了一個函數(shù),比如是 fsimpf1(x)。這樣的話,你算第二個積分時,仍然要調(diào)用 fsimp() 函數(shù)算。但是 fsimp() 是調(diào)用的 fsimpf1(x) 不是 fsimpf2(x)。你就不知道 fsimpf2(x) 該怎么算了。 你可以增加一個參數(shù)解決問題。 比如: 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); //第一個函數(shù) break; case 2: return (x*x+5); //第二個函數(shù) break; ........ ........ } } 你積分時就寫為 fsimp(a,b,eps,1) 積分第一個函數(shù) fsimp(a,b,eps,2) 積分第二個函數(shù) |
|
太感謝了, 那積分程序中的原來的fsimpf(a)就寫成fsimpf(a,func_index),fsimpf(b)寫成fsimpf(b,func_index),是嗎? 另外我的兩個被積函數(shù)是很復(fù)雜的式子,在哪里計(jì)算它們呢?下面的程序?qū)?br /> double fsimpf(double x, int func_index) { swtich (func_index) { case 1: double y1; y1=被積函數(shù) fsimpf1(x) 的表達(dá)式; return (y1); //第一個函數(shù) break; case 2: double y2; y2=被積函數(shù) fsimpf1(x) 的表達(dá)式; return (y2); //第二個函數(shù) break; ........ ........ } } |
金蟲 (正式寫手)
|
最近比較忙,沒有怎么回帖。 簡單地說一下吧,建議你使用函數(shù)指針,不然程序照你這樣寫以后又要修改積分的函數(shù)那你還得改。 double fsimp(double (*f)(double ),double a, double b, double eps) / /*a為積分下限,b為積分上限,eps是希望達(dá)到的精度,f為函數(shù)指針*/ 在fsimp 的實(shí)現(xiàn)中,你就寫f(a),f(b) 就是了。 前面申明double fsimpf(double) 然后在調(diào)用 fsimp時就直接 xx=fsimp(fsimpf, double a, double b, double eps) ;就是了 建議你看看the c programming language |
| 最具人氣熱帖推薦 [查看全部] | 作者 | 回/看 | 最后發(fā)表 | |
|---|---|---|---|---|
|
[考研] 一志愿上海交大生物與醫(yī)藥專碩324分,求調(diào)劑 +4 | jiajunX 2026-03-22 | 4/200 |
|
|---|---|---|---|---|
|
[考研]
求調(diào)劑材料學(xué)碩080500,總分289分
5+3
|
@taotao 2026-03-19 | 21/1050 |
|
|
[考研] 291 求調(diào)劑 +4 | 化工2026屆畢業(yè)?/a> 2026-03-21 | 4/200 |
|
|
[考研] 324求調(diào)劑 +6 | lucky呀呀呀鴨 2026-03-20 | 6/300 |
|
|
[考研] 289求調(diào)劑 +7 | 懷瑾握瑜l 2026-03-20 | 7/350 |
|
|
[考研] 資源與環(huán)境 調(diào)劑申請(333分) +5 | holy J 2026-03-21 | 5/250 |
|
|
[考研] 279求調(diào)劑 +5 | 紅衣隱官 2026-03-21 | 5/250 |
|
|
[考研] 265求調(diào)劑 +12 | 梁梁校校 2026-03-19 | 14/700 |
|
|
[考研] 085601調(diào)劑 358分 +3 | zzzzggh 2026-03-20 | 4/200 |
|
|
[考研] 083200學(xué)碩321分一志愿暨南大學(xué)求調(diào)劑 +3 | innocenceF 2026-03-17 | 3/150 |
|
|
[考研] 332求調(diào)劑 +4 | ydfyh 2026-03-17 | 4/200 |
|
|
[考研] 295求調(diào)劑 +4 | 一志愿京區(qū)211 2026-03-18 | 6/300 |
|
|
[考研] 一志愿南昌大學(xué),327分,材料與化工085600 +9 | Ncdx123456 2026-03-19 | 9/450 |
|
|
[考研] 304求調(diào)劑 +7 | 司空. 2026-03-18 | 7/350 |
|
|
[考研] 288求調(diào)劑 +16 | 于海海海海 2026-03-19 | 16/800 |
|
|
[考研] 317求調(diào)劑 +5 | 申子申申 2026-03-19 | 9/450 |
|
|
[考研] 一志愿 西北大學(xué) ,070300化學(xué)學(xué)碩,總分287,雙非一本,求調(diào)劑。 +4 | 晨昏線與星海 2026-03-19 | 4/200 |
|
|
[考研] 材料學(xué)求調(diào)劑 +4 | Stella_Yao 2026-03-20 | 4/200 |
|
|
[考研] 一志愿吉林大學(xué)材料學(xué)碩321求調(diào)劑 +11 | Ymlll 2026-03-18 | 15/750 |
|
|
[考研] [導(dǎo)師推薦]西南科技大學(xué)國防/材料導(dǎo)師推薦 +3 | 尖角小荷 2026-03-16 | 6/300 |
|