أنت هنا:برمجها»التحليل الرقمي»التربيع الرقمي»طريقة شبه المنحرف
طريقة شبه المنحرف طريقة شبه المنحرف
قيم الموضوع
(1 تصويت)

 

 
 

مصطلحات
العربية: طريقة شبه المنحرف
الإنجليزية: Trapezoidal Method
الفرنسية: Méthode de trapèzes

المبدأ

الحساب العددي لـ I = 

نجزئ المجال الاندماج [a, b] إلى n مجال ذي طول يساوي h = ،محدودة بنقط التجزيء

xi = a + nh , i = 0,... N (هو خطوة التكامل).

في كل مجال [xi, xi+1], i = 0,... n-1 ، نستبدل f بحدود يتها الإستكمالية من الدرجة 1 المار من النقط

(xi,  f(xi))  و(xi+1,  f(xi+1))،

و نستنتج القيمة المقربة لI.


الصيغة القاعدة (n=1)


الصيغة التركيب

الارتياب:             


الصيغة التكييفية

نأخذ لـ n قوى 2: 

تهيئ: نحصل T(h0)على  باستعمال صيغة القاعدة

تكرار


مثال

نعتبر التكامل المعرف:

   

القيمة المضبوط لهذا التكامل هو Log(2) 

حساب الرقمي لقيمة I .

نستعمل هنا الصيغة التكييفية .

الكرتان الأوليتان

f(a) = f(0) = 1/(0+1) = 1
f(b) = f(1) = 1/(1+1) = 1/2

تهيئ (صيغة القاعدة):

T(1) = (1/2)(f(0)+f(1)) = (1/2)(1+1/2) = 3/4

f(1/2) = 1/(1/2+1) = 2/3
T (1/2) = T(1)/2 + (1/2)f(1/2) = (3/4)/2 + (1/2)(2/3) = 17/24

f(1/4) = 1/(1/4+1) = 4/5
f(3/4) = 1/(3/4+1) = 4/7
T (1/4) = T(1/2)/2 + (1/4)(f(1/4)+f(3/4)) = (17/24)/2 + (1/4)((4/5)+(4/7)) = 1171/1680


البرمجة

#include <math.h>
#include <conio.h>
#define ITERMAX 23
double qu_f(double x) { return(1/(x+1)); }
void qu_trapezes_adapt(double a,double b,double eps,double t[ITERMAX]);
main() { int i; long n; double a,b,eps,vr_val,er; double t[ITERMAX]; clrscr(); a=0;b=1; printf("Méthode des trapèzes (formule adaptative)\n"); vr_val=log(2); printf("Vraie valeur = %.17e\n",vr_val); eps=1e-15; qu_trapezes_adapt(a,b,eps,t); printf(" n Valeur calculée Erreur Taux\n"); n=1; for(i=0;i<ITERMAX;i++) { er=fabs(t[i]-vr_val); printf("%7ld %.17e %.3e %.3e\n",n,t[i],er,er*n*n); n*=2; } }

نتيجة البرنامج

في كل كرة، البرنامج يظهر قيمة n وقيمة ترابيز والارتياب ونسبة التقارب (نسبة الخطأ وتربيع القيمة h).

القيمة الحقيقية= 6.9314718055994529e-01

النسبة     ا
لارتياب       n     القيمة المحسوبة     

      1    7.5000000000000000e-01      5.69e-02      5.69e-02
      2    7.0833333333333326e-01      1.52e-02      6.07e-02
      4    6.9702380952380949e-01      3.88e-03      6.20e-02
      8    6.9412185037185026e-01      9.75e-04      6.24e-02
     16    6.9339120220752681e-01      2.44e-04      6.25e-02
     32    6.9320820826924900e-01      6.10e-05      6.25e-02
     64    6.9316243888340345e-01      1.53e-05      6.25e-02
    128    6.9315099522810786e-01      3.81e-06      6.25e-02
    256    6.9314813423244259e-01      9.54e-07      6.25e-02
    512    6.9314741897841081e-01      2.38e-07      6.25e-02
   1024    6.9314724016458296e-01      5.96e-08      6.25e-02
   2048    6.9314719546110626e-01      1.49e-08      6.25e-02
   4096    6.9314718428523525e-01      3.73e-09      6.25e-02
   8192    6.9314718149126775e-01      9.31e-10      6.25e-02
  16384    6.9314718079277526e-01      2.33e-10      6.25e-02
  32768    6.9314718061815306e-01      5.82e-11      6.25e-02
  65536    6.9314718057449465e-01      1.45e-11      6.25e-02
 131072    6.9314718056358260e-01      3.64e-12      6.25e-02
 262144    6.9314718056084745e-01      9.02e-13      6.20e-02
 524288    6.9314718056016078e-01      2.15e-13      5.92e-02
1048576    6.9314718056000668e-01      6.14e-14      6.75e-02
2097152    6.9314718055997371e-01      2.84e-14      1.25e-01
4194304    6.9314718055995383e-01      8.55e-15      1.50e-01

الدالة الرئيسية qu_trapezes_adapt

معايير هذه الدالة هي كالتالي:

a و b: حدي المجال [ab]
eps : الدقة المطلوبة
t : جدول ذي الدرجة ITERMAX.

تستدعي الدالة الرئيسة دالة أخرى هي كالتالي:

 double qu_f(double x)

 التي يجب أن تعرف في البرنامج الأساسي وهي تمثل الدالة الرياضية f.

ترجع الدالة في الجدول t التكرارات المتتالية لطريقة شبه المنحرف.

الثابتة الصحيحة ITERMAX تساوي العدد القصوي للتكرارات المطلوبة (+1).

void qu_trapezes_adapt(double a,double b,double eps,double t[ITERMAX])
{
int j;
long i,n;
double h,s,err,x;
n=1;
h=b-a;
j=0;
err=2*eps;
t[0]=h*(qu_f(a)+qu_f(b))/2;

while((fabs(err)>eps) && (j < ITERMAX-1))
{
j++;
n *= 2;
h /= 2;
x=a-h;
s=0;

for(i=1;i<=n/2;i++)
{
x += 2*h;
s += qu_f(x);
}

t[j]=t[j-1]/2+h*s;
err=t[j]-t[j-1];
}
}
مقالات أخرى من نفس الفئة « التربيع الرقمي طريقة سيبسون »

أضف تعليقا


إصنعها يريد أن يتأكد أنك لست روبوتا، لذلك أحسب ما يلي:

كود امني
تحديث