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