116 lines
4.5 KiB
Markdown
116 lines
4.5 KiB
Markdown
---
|
||
title: Simpson's Rule
|
||
localeTitle: حكم سيمبسون
|
||
---
|
||
# حكم سيمبسون
|
||
|
||
في التحليل العددي ، تعتبر قاعدة سيمبسون طريقة للتكامل _العددي (التقريب_ الرقمي للاندماجات _المحددة)_ .
|
||
|
||
تقارب قاعدة سيمبسون تكامل النموذج ،
|
||
|
||
![](https://raw.githubusercontent.com/pranabendra/articles/master/Simpson-Method/sim1.png)
|
||
|
||
أين،
|
||
|
||
* `f(x)` يسمى _integrand_
|
||
* `a` = الحد الأدنى للتكامل
|
||
* `b` = الحد الأعلى للتكامل
|
||
|
||
## حكم سيمبسون 1/3
|
||
|
||
![Simpson's Rule](https://raw.githubusercontent.com/pranabendra/articles/master/Simpson-Method/sim01.jpg)
|
||
|
||
كما هو موضح في الرسم البياني أعلاه ، يقترب الرقم integre `f(x)` من متعدد الحدود من الدرجة الثانية ؛ يكون interpolant التربيعي `P(x)` .
|
||
|
||
يتبع التقريب ،
|
||
|
||
![](https://raw.githubusercontent.com/pranabendra/articles/master/Simpson-Method/sim3.png)
|
||
|
||
استبدال `(ba)/2` as `h` ، we get،
|
||
|
||
![](https://raw.githubusercontent.com/pranabendra/articles/master/Simpson-Method/sim4.png)
|
||
|
||
كما ترى ، هناك عامل `1/3` في التعبير أعلاه. لهذا السبب ، يطلق عليه اسم **قاعدة سيمبسون 1/3** .
|
||
|
||
إذا كانت الوظيفة متذبذبة للغاية أو تفتقر إلى المشتقات في نقاط معينة ، فقد تفشل القاعدة المذكورة أعلاه في الحصول على نتائج دقيقة. تتمثل إحدى الطرق الشائعة لمعالجة هذه المشكلة في تقسيم الفاصل الزمني `[a,b]` إلى عدد من subintervals الصغيرة. ثم يتم تطبيق قاعدة سيمبسون على كل فئة فرعية ، مع جمع النتائج لإنتاج تقريب للتكامل خلال الفترة الزمنية بأكملها. يطلق على هذا النوع من النهج _قاعدة سيمبسون المركبة_ .
|
||
|
||
لنفترض أن الفاصل `[a,b]` مقسم إلى `n` subintervals ، مع `n` رقم زوجي. ثم ، يتم إعطاء القاعدة المركبة سيمبسون من قبل ،
|
||
|
||
![](https://raw.githubusercontent.com/pranabendra/articles/master/Simpson-Method/sim7.png)
|
||
|
||
حيث **x j = a + jh** لـ **j = 0،1،…، n-1، n** with **h = (ba) / n** ؛ على وجه الخصوص ، **x 0 = a** و **x n = b** .
|
||
|
||
#### مثال:
|
||
|
||
**تقريبًا قيمة التكامل المضمن أدناه ، مع أخذ n = 8.**
|
||
|
||
![](https://raw.githubusercontent.com/pranabendra/articles/master/Simpson-Method/sim9.png)
|
||
|
||
تنفيذ قاعدة 1/3 من Simpson في C ++ كما يلي:
|
||
|
||
`#include<iostream>
|
||
#include<cmath>
|
||
using namespace std;
|
||
|
||
float f(float x)
|
||
{
|
||
return x*sin(x); //Define the function f(x)
|
||
}
|
||
|
||
float simpson(float a, float b, int n)
|
||
{
|
||
float h, x[n+1], sum = 0;
|
||
int j;
|
||
h = (ba)/n;
|
||
|
||
x[0] = a;
|
||
|
||
for(j=1; j<=n; j++)
|
||
{
|
||
x[j] = a + h*j;
|
||
}
|
||
|
||
for(j=1; j<=n/2; j++)
|
||
{
|
||
sum += f(x[2*j - 2]) + 4*f(x[2*j - 1]) + f(x[2*j]);
|
||
}
|
||
|
||
return sum*h/3;
|
||
}
|
||
|
||
int main()
|
||
{
|
||
float a,b,n;
|
||
a = 1; //Enter lower limit a
|
||
b = 4; //Enter upper limit b
|
||
n = 8; //Enter step-length n
|
||
if (n%2 == 0)
|
||
cout<<simpson(a,b,n)<<endl;
|
||
else
|
||
cout<<"n should be an even number";
|
||
return 0;
|
||
}
|
||
`
|
||
|
||
## سيمبسون 3/8 القاعدة
|
||
|
||
تشبه قاعدة 3/8 لـ Simpson قاعدة 1/3 الخاصة بـ Simpson. والفرق الوحيد هو ، هنا ، أن interpolant هو متعدد الحدود التكعيبية. قاعدة 3/8 تقارب ضعف دقة القاعدة 1/3 ، ولكنها تستخدم قيمة دالة واحدة أكثر.
|
||
|
||
تنص قواعد 3/8 لـ Simpson على ما يلي:
|
||
|
||
![](https://raw.githubusercontent.com/pranabendra/articles/master/Simpson-Method/sim6.png)
|
||
|
||
استبدال `(ba)/3` as `h` ، we get،
|
||
|
||
![](https://raw.githubusercontent.com/pranabendra/articles/master/Simpson-Method/sim5.png)
|
||
|
||
قاعدة 3/8 لـ Simpson للفترات n (يجب أن تكون n مضاعفات 3):
|
||
|
||
![](https://raw.githubusercontent.com/pranabendra/articles/master/Simpson-Method/sim8.png)
|
||
|
||
حيث **x j = a + jh** لـ **j = 0،1،…، n-1، n** with **h = (ba) / n** ؛ على وجه الخصوص ، **x 0 = a** و **x n = b** .
|
||
|
||
### معلومات اكثر:
|
||
|
||
1. [حكم سيمبسون](https://en.wikipedia.org/wiki/Simpson%27s_rule)
|
||
2. [حكم سيمبسون 1/3](w3.gazi.edu.tr/~balbasi/mws_gen_int_txt_simpson13.pdf) |