矩形法求定积分的原理和实现
矩形法求解定積分
做個小筆記,如表述有不對的地方,歡迎指正。
原理
積分在圖形上表示就是面積,把被積分區域劃分成一個個小矩形,求解這些矩形的面積和即可。
被積函數:f(x)f(x)f(x);
積分區間:[a,b][a,b][a,b];
積分區間劃分數:NNN;
每個小矩形的面積:
 Si=(b?a)/N?∣f(a+(b?a)/N?i)∣Si = (b - a )/ N * |f(a + (b - a )/ N * i)|Si=(b?a)/N?∣f(a+(b?a)/N?i)∣
說明:
 你可以想象一下,在積分函數圖形上,我們把被積分區域劃分成NNN等份,
此時每個小矩形的底為:(b?a)/N(b - a )/ N(b?a)/N.
如果N足夠大,可以把被積分區域劃分成一根根針一樣大小的矩形區域。
此時小矩形的底可以看成一個點。在被積分區域內,每個小矩形對應的位置
為:x=a+(b?a)/N?ix = a + (b - a )/ N * ix=a+(b?a)/N?i,將其代入f(x)f(x)f(x)即可得到對應小矩形的高。
假設iii為第iii個小矩形 , 則∣f(a+(b?a)/N?i)∣|f(a + (b - a )/ N * i)|∣f(a+(b?a)/N?i)∣即為第iii塊小矩形的高。
所以計算每個小矩形的面積用如上所述的公式。
f(x)f(x)f(x)如果為cos,sin,expcos,sin,expcos,sin,exp等內置函數可以使用C/C++里面的math庫,注意這些函數的傳參【如果是角度要轉換為弧度傳入:角度 / 180 * PI 】
例子
求解定積分:∫01sinxdx\int^{1}_{0}sinxdx∫01?sinxdx
根據上述公式寫出矩形法求解此定積分的代碼:
#include <iostream> #include <cmath> using namespace std;double get_integral_sinx(double a,double b,int N) {/*積分區間:[a,b] ,值均是弧度積分區間劃分數目:N ,越大求得的結果越精細被積分函數:sinx*/double x = (b - a) / N;double ans = 0;for(int i = 1; i <= N; ++i){ans += x * fabs(sin(a + x*i));}return ans; } int main() {double ans = get_integral_sinx(0,1,1000);cout<<ans<<endl;return 0; }如果你第一次接觸,你難免會對上述做法有點疑慮,怕不可靠。
 為了打消你的疑慮,我們結合我們手動求解定積分的方式來一個結果對比驗證:
∫01sinxdx=[?cosx]01=1?cos(1)\int^{1}_{0}sinxdx = [-cosx]^{1}_{0} = 1 - cos(1)∫01?sinxdx=[?cosx]01?=1?cos(1)
#include <iostream> #include <cmath> using namespace std; int main() {cout<<(1-cos(1))<<endl;return 0; }運行上述兩段代碼,(運行結果我就不貼了,請自行驗證)就可以對比出矩形法求解定積分的可靠性。
其他
我們常常可以使用C/C++里的math庫中的一些內置函數來表示我們常用的一些常數。
 比如圓周率PIPIPI:
 因為cos(PI)=?1.0cos(PI) = -1.0cos(PI)=?1.0,所以有:
再如:常數eee,我記得大概是2.7…
 exp(x)exp(x)exp(x)函數是用于計算exe^xex,所以有:
總結
以上是生活随笔為你收集整理的矩形法求定积分的原理和实现的全部內容,希望文章能夠幫你解決所遇到的問題。
                            
                        - 上一篇: 用不同的姿势求逆序对(复习篇)
 - 下一篇: RIP协议相关知识总结