| 查看: 2150 | 回復(fù): 15 | |||
[交流]
【求助】求積分程序中被積函數(shù)問題 已有5人參與
|
|
我用Simpson方法計算定積分。在程序中有兩個地方用到積分,而被積分函數(shù)作為子程序調(diào)用,在計算積分的程序中該怎么定義被積函數(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()表示吧,可不用它,計算積分時調(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ù)雜的式子,在哪里計算它們呢?下面的程序?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 的實現(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ā)表 | |
|---|---|---|---|---|
|
[考研] 08工學(xué)調(diào)劑 +6 | 用戶573181 2026-03-20 | 10/500 |
|
|---|---|---|---|---|
|
[考研] 306求調(diào)劑 +7 | chuanzhu川燭 2026-03-18 | 7/350 |
|
|
[考研]
|
2117205181 2026-03-21 | 8/400 |
|
|
[考研] 一志愿上海交大生物與醫(yī)藥專碩324分,求調(diào)劑 +3 | jiajunX 2026-03-22 | 3/150 |
|
|
[考研] 08工科 320總分 求調(diào)劑 +11 | 梨花珞晚風(fēng) 2026-03-17 | 11/550 |
|
|
[考研] 308求調(diào)劑 +3 | 墨墨漠 2026-03-21 | 3/150 |
|
|
[考研] 319求調(diào)劑 +4 | 小力氣珂珂 2026-03-20 | 4/200 |
|
|
[考研] 求調(diào)劑 +5 | Zhangbod 2026-03-21 | 7/350 |
|
|
[考研] 材料求調(diào)劑 +5 | @taotao 2026-03-21 | 5/250 |
|
|
[考研] 279分求調(diào)劑 一志愿211 +14 | chaojifeixia 2026-03-19 | 15/750 |
|
|
[考研] 307求調(diào)劑 +3 | wyyyqx 2026-03-17 | 3/150 |
|
|
[考研] 一志愿 西北大學(xué) ,070300化學(xué)學(xué)碩,總分287,雙非一本,求調(diào)劑。 +3 | 晨昏線與星海 2026-03-18 | 3/150 |
|
|
[考研] 一志愿重慶大學(xué)085700資源與環(huán)境專碩,總分308求調(diào)劑 +3 | 墨墨漠 2026-03-18 | 3/150 |
|
|
[考研] 304求調(diào)劑 +7 | 司空. 2026-03-18 | 7/350 |
|
|
[考研] 考研調(diào)劑求學(xué)校推薦 +3 | 伯樂29 2026-03-18 | 5/250 |
|
|
[考研] 材料學(xué)碩297已過四六級求調(diào)劑推薦 +11 | adaie 2026-03-19 | 11/550 |
|
|
[考研] 材料與化工專碩調(diào)劑 +7 | heming3743 2026-03-16 | 7/350 |
|
|
[考研] 085410人工智能專碩317求調(diào)劑(0854都可以) +4 | xbxudjdn 2026-03-18 | 4/200 |
|
|
[考研] 材料學(xué)碩318求調(diào)劑 +5 | February_Feb 2026-03-19 | 5/250 |
|
|
[考研] 一志愿蘇州大學(xué)材料工程(085601)專碩有科研經(jīng)歷三項國獎兩個實用型專利一項省級立項 +6 | 大火山小火山 2026-03-16 | 8/400 |
|