قاعده ذوزنقه ای — به زبان ساده (+ دانلود فیلم آموزش گام به گام)
در آموزشهای قبلی مجله فرادرس، درباره انتگرال و روشهای محاسبه آن بحث کردیم. در این آموزشها، مباحثی مانند انتگرال توابع مثلثاتی، انتگرالگیری جزء به جزء، انتگرال دوگانه و انتگرال سهگانه را معرفی کردیم. همچنین با تغییر متغیر و کاربرد آن در انتگرالگیری آشنا شدیم. گاهی میخواهیم ناحیه بین یک منحنی و محور مختصات را محاسبه کنیم، اما نمیتوانیم حاصل انتگرال مربوط به محاسبه مساحت منحنی را به راحتی و با محاسبه تحلیلی به دست آوریم. یکی از راههایی که در این مواقع وجود دارد، استفاده از روشهای عددی برای محاسبه انتگرال منحنی است. قبلاً با یکی از این روشها، یعنی قاعده سیمپسون آشنا شدیم. در این آموزش، قاعده ذوزنقه ای برای محاسبه انتگرال را معرفی میکنیم.
قاعده ذوزنقه ای
اساس روش قاعده ذوزنقهای این است که منحنی را به ذوزنقههایی تقسیم کرده، مساحت همه آنها را به دست آورده و در نهایت برای تعیین مساحت تقریبی نهایی با هم جمع کنیم.
شکل زیر، این موضوع را نشان میدهد.
ذوزنقه شکل زیر را در نظر بگیرید.
مساحت هر ذوزنقه برابر است با:
$$ \large \displaystyle \text{A} = \frac { h } { { 2 } } { \left ( { p } + { q } \right ) } $$
در اینجا، با ذوزنقههای قائمالزاویه سروکار داریم که اضلاع دو سمت آن موازی هستند و زاویه آنها نسبت به مرجع، $$90$$ درجه است. قاعده آنها نیز برابر با $$ h= \Delta x $$ است.
بنابراین، مساحت زیر منحنی به صورت زیر محاسبه میشود:
$$ \large \displaystyle \text {A} \approx \frac { 1 } { { 2 } } { \left ( { y } _ { { 0 } } + { y } _ { { 1 } } \right ) } \Delta { x } + \displaystyle \frac { 1 } { { 2 } } { \left ( { y } _ { { 1 } } + { y } _ { { 2 } } \right ) } \Delta { x } +
\displaystyle \frac { 1 } { { 2 } } { \left ( { y } _ { { 2 } } + { y } _ { { 3 } } \right ) } \Delta { x } + \ldots $$
قانون ذوزنقهای برای $$n$$ ذوزنقه، برابر است با ($$A$$ مساحت بین منحنی و محور است):
$$ \large \displaystyle \text{A} \approx \displaystyle \Delta { x } { \left ( \frac { { { y } _ { { 0 } } } } { { 2 } } + { y } _ { { 1 } } + { y } _ { { 2 } } + { y } _ { { 3 } }+ \right . } \displaystyle { \left . \ldots + \frac { { { y } _ { { n } } } } { { 2 } } \right ) } $$
برای پیدا کردن $$ \Delta x$$ مربوط به مساحت زیر منحنی از $$x=a$$ تا $$x=b$$، از رابطه زیر استفاده میکنیم:
$$ \large \displaystyle \Delta { x } = \frac { { { b } - { a } } }{ { n } } $$
همچنین باید نقاط زیر را محاسبه کنیم:
$$ \large \begin {align*} \displaystyle { y } _ { { 0 } } & = f { { \left ( { a } \right ) } } \\
\displaystyle { y } _ { { 1 } } & = f { { \left ( { a } + \Delta { x } \right ) } } \\
\displaystyle { y } _ { { 2 } } & = f { { \left ( { a } +{ 2 } \Delta { x } \right ) } } \\ \displaystyle & \ldots \\
\displaystyle { y } _ { { n } } & = f { { \left ( { b } \right ) } } \end {align*} $$
اگر تعداد ذوزنقههای بیشتری را در نظر بگیریم، تقریب بهتری خواهیم داشت. هرچه تعداد ذوزنقهها بیشتر باشد، اندازه $$\Delta x$$ به صفر میل میکند؛ یعنی $$ \Delta x \to 0 $$.
همچنین، اگر منحنی بالای محور $$x$$ بین $$x= a $$ و $$x= b $$ باشد، میتوان نوشت:
$$ \large \displaystyle \text{A} = { \int _ { { a } } ^ { { b } } } f { { \left ( { x } \right ) } } { \left . { d } { x } \right . } \displaystyle \approx \displaystyle \Delta { x } { \left ( \frac { { { y } _ { { 0 } } } } { { 2 } } + { y } _ { { 1 } } + { \left . \ldots + \frac { { { y } _ { { n } } } } { { 2 } } \right ) } \right . } $$
خطا در قاعده ذوزنقهای
وقتی مقدار عددی انتگرال را تقریب میزنیم، همیشه مقداری خطا وجود دارد. این خطا برابر است با:
$$ \large \displaystyle { \large { { E } = { \int _ { { a } } ^ {{ b } } } { f { { \left ( { x } \right ) } } } { d } { x } - { A } { p } { p } } } $$
که در آن، $$ \displaystyle{\large{{A}{p}{p}}} $$ مقدار تقریبی و $$E$$ خطا است.
حال میخواهیم بدانیم محدوده خطای قاعده ذوزنقهای چقدر است. فرض کنید برای $$ \displaystyle { \large { { a } \le { x } \le { b } } } $$ داشته باشیم: $$ \displaystyle { { { \left | { f ^ {\prime \prime } } { \left ( { x } \right ) } \right | } \le { M } } } $$. بنابراین، کران خطا به صورت زیر خواهد بود:
$$ \large \displaystyle { \large { { \left | { E } \right | } \le \frac { { { M } { { \left ( { b } - { a } \right ) } } ^ { { 3 } } } } { { { 1 2 } { { n } } ^ { { 2 } } } } } } $$
مثالها
در ادامه، مثالهایی را از کاربرد قاعده ذوزنقهای بیان میکنیم.
مثال ۱
با استفاده از قاعده ذوزنقهای انتگرال زیر را برای $$ n = 5 $$ حساب کنید:
$$ \large \displaystyle { \int _ { { 0 } } ^ { { 1 } } } \sqrt { { { x } ^ { 2 } +{ 1 } } } \ { \left . { d } { x } \right . } $$
حل: ابتدا زیربازهها را مشخص و پس از آن، نقاط بالای خطوط عمودی مجاور را به هم وصل میکنیم.
از آنجایی که $$ a=0 $$ و $$b = 1 $$ است، عرض هر ذوزنقه به صورت زیر محاسبه میشود:
$$ \large \displaystyle \Delta { x } = { \frac { { { b } - { a }} } {{ { n } } } } = { \frac { { { 1 } - { 0 } } } { { { 5 } } } } = { 0.2 } $$
بنابراین، میتوان نقاط مربوط به اضلاع عمودی ذوزنقهها را محاسبه کرد:
$$ \large \begin{align*}
\displaystyle { y } _ { { 0 } } &= f { { \left ( { a } \right ) } }=
\displaystyle f { { \left ( { 0 } \right ) } } = \sqrt { { { 0 } ^ { 2 } + { 1 } } } = { 1 } \\
\displaystyle { y } _ { { 1 } } &= f { { \left ( { a } + \Delta { x } \right ) } } =
\displaystyle f { { \left ( { 0.2 } \right ) } } = \sqrt { { { 0.2 } ^ { 2 } + { 1 } } } = { 1.0198039 } \\
\displaystyle { y } _ { { 2 } } &= f { { \left ( { a } + { 2 } \Delta { x } \right ) } } =
\displaystyle f { { \left ( { 0.4 } \right ) } } = \sqrt { { { 0.4 } ^ { 2 } + { 1 } } } = { 1.0770330 }
\\
\displaystyle { y } _ { { 3 } } &= f { {\left ( { a } + { 3 } \Delta { x } \right ) } } = \displaystyle f { { \left ( { 0.6 } \right ) } } = \sqrt { { { 0.6 } ^ { 2 } + { 1 } } } = { 1.1661904 }
\\
\displaystyle { y } _ { { 4 } } &= f { { \left ( { a } + { 4 } \Delta { x } \right ) } } = \displaystyle f { { \left ( { 0.8 } \right ) } } = \sqrt { { { 0.8 } ^ { 2 } + { 1 } } } = { 1.2806248 }
\\ \displaystyle { y } _ { { 5 } } &= f { { \left ( { a } +{ 5 } \Delta { x } \right ) } } \displaystyle =f { { \left ( { 1.0 } \right ) } } = \sqrt { { { 1 } ^ { 2 } + { 1 } } } = { 1.4142136 }
\end{align*} $$
در نهایت، حاصل انتگرال برابر است با:
$$ \large \displaystyle \text{I} \approx
\displaystyle {0.2} { \left ( \frac { 1 } { { 2 } } \times { 1 } + { 1.0198039 } \right . }
\displaystyle + { 1.0770330 } + { 1.1661904 }\\ \large \displaystyle { \left . + { 1.2806248 } + \frac { 1 } { { 2 } } \times { 1.4142136 } \right ) }
\displaystyle = { 1.150 } $$
مثال ۲
با در نظر گرفتن $$n=4$$، مقدار تقریبی انتگرال $$ \int_{{\,0}}^{{\,2}}{{{{\bf{e}}^{{x^2}}}\,dx}}$$ را محاسبه کنید.
حل: ابتدا طول هر زیربازه را با توجه به $$n=4 $$ محاسبه میکنیم:
$$ \large \Delta x = \frac { { 2 - 0 } } { 4 } = \frac { 1 } { 2 } $$
زیربازهها به صورت زیر هستند:
$$ \large \left [ { 0 , \, \, 0.5 } \right ] , \, \, \left [ { 0.5 , \, \, 1 } \right ] , \, \, \left [ { 1 , \, \, 1.5 } \right ] , \, \, \left [ { 1.5 , \, \, 2 } \right] $$
با استفاده از فرمول قاعده ذوزنقهای، مقدار انتگرال به صورت زیر محاسبه میشود:
$$ \large \int _ { { \, 0 } } ^ { { \, 2 } } { { { { \bf { e } } ^ { { x ^ 2 } } } \, d x } } \approx \frac { { { 1 } / { 2 } \; } } { 2 } \left ( { { { \bf { e } } ^ { { { \left ( 0 \right ) } ^ 2 } } } + 2 { { \bf { e } } ^ { { { \left ( { 0 . 5 } \right ) } ^ 2 } } } + 2 { { \bf { e } } ^ { { { \left ( 1 \right ) } ^ 2 } } } + 2 { { \bf { e } } ^ { { { \left ( { 1 . 5 } \right ) } ^ 2 } } } + { { \bf { e } } ^ { { { \left ( 2 \right ) } ^ 2 } } } } \right ) = 20.64455905 $$
مقدار واقعی انتگرال برابر است با:
$$ \large \int _ { { \, 0 } } ^ { { \, 2 } }{ { { { \bf { e } }^ { { x ^ 2 } } } \, d x } } = 16.45262776 $$
بنابراین، مقدار خطای قاعده ذوزنقهای $$4.19193129 $$ است.
مثال ۳
با استفاده از قاعده ذوزنقهای، مقدار $$ \displaystyle { \large { { \int _ { { 1 } } ^ { { 2 } }} \frac { { 1 } } { { { x } } ^ { { 2 } } } { d } { x } } } $$ را برای $$n=5$$ محاسبه کنید.
حل: در این مثال، $$ a=1 $$ و $$b=2 $$ است. همچنین، از آنجایی که $$n=5 $$ است، عرض هر بازه برابر است با:
$$ \large \displaystyle { \large { \Delta { x } = \frac { { { b } - { a } } } { { n } } = \frac { { { 2 } - { 1 } } } { { 5 } } = { 0.2 } } } $$
بنابراین، برای محاسبه انتگرال، داریم:
$$ \large \begin {align*} { { \int _ { { 1 } } ^ { {2 } } } \frac { { 1 } } { { { x } } ^ { { 2 } } } { \left ( { d } { x } \right ) } \approx { T } _ { { n } } = \frac { { 0.2 } } { { 2 } } { \left ( { f { { \left ( { 1 } \right ) } } } + { 2 } { f { { \left ( { 1.2 } \right ) } } } + { 2 } { f { { \left ( { 1.4 } \right ) } }} + { 2 } { f { { \left ( { 1.6 } \right ) } } } + { 2 } { f { { \left ( { 1.8 } \right ) } } } + { f { { \left ( { 2 } \right ) } } } \right ) } } \\
= { 0.1 } { \left ( \frac { { 1 } } { { { 1 } } ^ { {2 } }} + \frac { { 2 } } { { { \left ( { 1.2 } \right ) } } ^ { { 2 } } } + \frac { { 2 } } { { { \left ( { 1.4 } \right ) } } ^ { { 2 } } } + \frac { { 2 } } { { { \left ( { 1.6 } \right ) } } ^ { { 2 }} } + \frac { { 2 } } { { { \left ( { 1.8 } \right ) } } ^ { { 2 } } } + \frac { { 1 } } { { { 2 } } ^ { { 2 } } } \right ) } \approx {0.505783}
\end{align*} $$
مثال ۴
مقدار $$n$$ را طوری بیابید که دقت تقریب ذوزنقهای برای انتگرال $$ \displaystyle { \large { { \int _ { { 1 } } ^ { { 2 } } } \frac { { 1 } } { { { x } } ^ { { 2 } } } { d } { x } } } $$ برابر با $$ 0.0002 $$ باشد.
حل: در این مثال، مقادیر زیر را داریم:
$$ \large \displaystyle { \large { { a } = { 1 } } } , \, \, \, \displaystyle { \large { { b } = { 2 } } } , \, \, \, \displaystyle { \large { { f { { \left ( { x } \right ) } } } = \frac { { 1 } } { { { x } } ^ { { 2 } } } } } $$
مشتق اول و دوم تابع را برای قرار دادن در فرمول خطا به دست میآوریم:
$$ \large \displaystyle { \large { { f { ^ \prime } } { \left ( { x } \right ) } = - \frac { { 2 } } { { { x } } ^ { { 3 } } } } }, \, \, \, \, \displaystyle { \large { { f^ { \prime \prime } } { \left ( { x } \right ) } = \frac { { 6 } } { { { x } } ^ { { 4 } } } } } $$
بنابراین، برای $$ \displaystyle { \large { { 1 } \le { x } \le { 2 } } } $$، داریم:
$$ \large \displaystyle { \large { { \left | { f ^{ \prime \prime } } { \left ( { x } \right ) } \right | } \le { 6 } } } $$
در نتیجه، میتوان نوشت:
$$ \large \displaystyle { \large { \frac { { { 6 } { { \left ( { 2 } - { 1 } \right ) } } ^ { { 3 } } } } { { { 1 2 } { { n } } ^ { { 2 } } } } > { 0.0 0 0 2 } } } $$
یا
$$ \large \displaystyle { \large { { { n } } ^ { { 2 } } > \frac { { 1 } } { { { 0.0004 } } } } } $$
در نهایت، مقدار $$n$$ باید در نامساوی زیر صدق کند:
$$ \large \displaystyle { \large { { n } > \frac { { 1 } } { \sqrt { { { 0.0004 } } } } = { 5 0 } } } $$
بنابراین، مقدار $$ n= 51 $$ را انتخاب میکنیم.
پیادهسازی نرمافزاری قاعده ذوزنقهای
در این بخش، شیوه پیادهسازی قاعده ذوزنقهای را در پایتون و متلب بیان میکنیم.
پیادهسازی در پایتون
ابتدا کتابخانههای لازم را فراخوانی میکنیم:
1import numpy as np
2import matplotlib.pyplot as plt
3%matplotlib inline
برای نوشتن برنامه قاعده ذوزنقهای در پایتون، ابتدا تابع trapz را تعریف میکنیم که پارامترهای ورودی آن $$f$$، $$a$$، $$b$$ و $$N$$ هستند و تقریب $$T_N(f) $$ را به عنوان خروجی به دست میدهد. مقدار $$N=50$$ را در نظر میگیریم. برنامه به صورت زیر است:
1def trapz(f,a,b,N=50):
2 '''Approximate the integral of f(x) from a to b by the trapezoid rule.
3
4 The trapezoid rule approximates the integral \int_a^b f(x) dx by the sum:
5 (dx/2) \sum_{k=1}^N (f(x_k) + f(x_{k-1}))
6 where x_k = a + k*dx and dx = (b - a)/N.
7
8 Parameters
9 ----------
10 f : function
11 Vectorized function of a single variable
12 a , b : numbers
13 Interval of integration [a,b]
14 N : integer
15 Number of subintervals of [a,b]
16
17 Returns
18 -------
19 float
20 Approximation of the integral of f(x) from a to b using the
21 trapezoid rule with N subintervals of equal length.
22
23 Examples
24 --------
25 >>> trapz(np.sin,a=0,b=np.pi/2,N=1000)
26 0.99999979438323316
27 '''
28 x = np.linspace(a,b,N+1)
29 y = f(x)
30 y_right = y[1:] # Right endpoints
31 y_left = y[:-1] # Left endpoints
32 dx = (b - a)/N
33 T = (dx/2) * np.sum(y_right + y_left)
34 return T
اکنون برنامه بالا را برای انتگرالی که مقدار آن را میدانیم، آزمایش میکنیم. برای مثال، انتگرال زیر را در نظر بگیرید:
$$ \large \int _ 0 ^ { \pi / 2 } \sin x \ d x = 1 $$
برنامه و نتیجه اجرای آن برای این انتگرال به صورت زیر است:
1trapz(np.sin,0,np.pi/2,1000)
10.99999979438323316
برای انتگرال زیر نیز برنامه را اجرا میکنیم:
$$ \large \int _ 0 ^ 1 3 x ^ 2 \ d x = 1 $$
در نتیجه، داریم:
1trapz(lambda x : 3*x**2,0,1,10000)
11.0000000050000002
پیادهسازی در متلب
برنامه متلب قاعده ذوزنقهای نیز به صورت زیر است:
1function I = trapezoidal_f1 ( f )
2% for calculating integrals using trapezoidal rule when function is known
3
4%asking for the range and desired accuracy
5 R= input( ' Enter the limits of integrations [ x_min, x_max] :\n');
6 tol = input(' Error allowed in the final answer should be of an order : \n');
7 a= R(1,1); b = R(1,2);
8
9 %initial h and n
10 n = 100;
11 h = (b -a )/100;
12
13 %for calculating maximum of h^2 *f''(x) in the given region
14 for k = 0:100
15 x( 1, k+1 ) = a + k*h ;
16 y2 ( 1, k+1) = feval ( f, x(1,k+1) + 2*h ) - 2*feval( f, x(1,k+1) + h ) + feval( f, x(k+1) );
17 end
18 [ y i ] = max( y2);
19 x_opt = x(1,i);
20
21 % for calculating the desired value of h
22 m=0;
23 while abs((feval ( f, x_opt + 2*h ) - 2*feval(f, x_opt+ h) + feval(f, x_opt)) * ( b-a)/12) > tol % Global error for trapezoidal rule
24 m = m +1;
25 h = h * 10^-m;
26 end
27
28 %calculating n
29 n = ceil( (b-a)/h );
30 h = ( b-a )/ n;
31
32 % forming matrix X
33 for k = 1:(n+1)
34 X(k,1) = a + (k-1)*h;
35 X(k,2) = feval( f, X(k,1));
36 end
37
38% trapezoidal formula
39I = h/2 * (2*sum( X(:,2))- X(1,2)- X( n,2));
40 % displaying final result
41 h
42 n
43 disp(sprintf(' The area under this curve in the interval ( %10f , %10f ) is %10.6f .',a,b,I))
اگر این مطلب برایتان مفید بوده است، آموزشهای زیر نیز به شما پیشنهاد میشوند:
- روش نیوتن — به زبان ساده
- معادله خط — به زبان ساده
- دستگاه معادلات خطی — به زبان ساده
- جذر یا محاسبه ریشه دوم عدد — به زبان ساده
^^
در شکل دوم، پارامتر h، به صورت سهوی اشتباه داده شده است. h اندازه ارتفاع ذوزنقه است ولی به صورت اندازه ضلع مایل نشان داده شده است. لطفا اصلاح بفرمایید.
سلام؛
تصویر اصلاح شد. خیلی ممنون از دقت شما.
از همراهیتان با مجله فرادرس سپاسگزاریم.
بسیار مفید بود سپاسگزارم و به بقیه دوستان توصیه میکنم. کاربردش برای من د درس آنالیز عددی پیشرفته مقطع ارشد بود. باز هم ممنونم