-
辛普森公式
鎖定
辛普森(Simpson)公式是牛頓-科特斯公式當n=2時的情形,也稱為三點公式。利用區間二等分的三個點來進行積分插值。其科特斯係數分別為1/6,4/6,1/6。
- 中文名
- 辛普森公式
- 別 名
- 三點公式
- 應用學科
- 立體幾何
- 科特斯係數
- 1/6,4/6,1/6
辛普森公式應用
辛普森公式公式內容
V = H (S_1 + 4S_0 + S_2) /6.
式中,S_1和S_2是兩底面的面積,S_0是中截面的面積(即平面γ與平面α之間距離h=H/2時得到的截面的面積)。
辛普森公式計算實例
解:此題中S_1 = S_0 = S_2 = S,H = h,所以V = H (S_1 + 4S_0 + S_2) /6 = h (S + 4S + S) /6 = S h。
例2:計算底面積為S、高為h的錐體的體積。
解:此題中S_1 = S,S_0 = S /4,S_2 = 0,H = h,所以V = H (S_1 + 4S_0 + S_2) /6 = h (S + 4S /4 + 0) /6 = S h /3。
例3:計算半徑為r的球的體積。
解:此題中S_1 = S_2 = 0,S_0 = πr^2,H = 2r,所以V = H (S_1 + 4S_0 + S_2) /6 = 2r (0 + 4πr^2 + 0) /6 = 4πr^3 /3。
辛普森公式公式證明
只需要證明根據公式算出來的體積和用積分算出來的體積相等即可。
設截面面積是截面高h的不超過3次的函數:f(h)= ah^3 + bh^2 + ch + d。
那麼,
利用積分計算體積,可以得到(積分限為0~h):
V = ∫ f(x) dx
= ah^4 /4 + bh^3 /3 + ch^2 /2 +dh;
利用公式計算體積,可以得到:
V = H (S_1 + 4S_0 + S_2) /6
= h ( f(0) + 4f(h/2) + f(h) ) /6
= h [ d + 4 (ah^3 /8 + bh^2 /4 + ch /2 + d) + (ah^3 + bh^2 + ch + d) ]/6
= ah^4 /4 + bh^3 /3 + ch^2 /2 +dh。
因此兩式相等,公式得證。
Remark:當函數f(h)次數高於或等於4次時,公式一般不成立。這隻需驗證f(h)=h^4時公式不成立即可。
辛普森公式C++代碼實現
//此代碼以 f(x) = sin(x) 為例子,簡單給出Simpson積分公式的應用 #include <iostream> #include <cstdio> #include <cmath> #include <cstdlib> using namespace std; double fun(double x) { return sin(x);//這裏可以添加其他函數 } double Simpson(double (*f)(double),double a,double b,int n)//Simpson 求積分法 { const double h = (b-a)/n; double s = f(a) + f(b); for (int i = 1; i < n; i+=2)s += 4 * f(a + i * h); for (int i = 2; i < n - 1; i+=2)s += 2 * f(a + i * h); return S*h/3.0; } int main() { double a,b; int n;//要劃分的份數 cout << "請輸入積分上/下限 a,b:"; cin >> a >> b;//積分上下限 cout << endl << "請輸入劃分分數 :"; cin >> n;//以二次曲線逼近的方式取代矩形或梯形的積分公式,所以劃分越多越趨於精確值。 cout << "sin(x)在[a,b]內的近似數值積分為: " << Simpson(fun,a,b,n) << endl; return 0; } /* 運行結果如下: 請輸入積分上/下限 a,b: 0 3.1415 請輸入劃分分數 :1000 sin(x) 在[a,b]內的近似數值積分為: 2 //該方法主要用來求定積分的近似解,劃分越多代碼運行效率就會越小,求出來的值越趨於精確值。 */