طريقة جوردن طريقة جوردن
قيم الموضوع
(1 تصويت)


 
  • يساعد الخوارزم على الحصول على نظمة مثلثية مكافئة والى حل للنظمة.

 


مصطلحات

العربية: طريقة جوردن
الإنجليزية: Jordan Method
الفرنسية: Méthode de Jordan


المبدأ

  • تستعمل هذه الطريقة نفس مبدأ طريقة جوص ولكن في المرحلة K في الجدول (A(k) | b(k)), ، نقوم بتأليفة خطية لسطر lk ، ليس فقط مع السطور  li (بحيث i = i+1,... n)  ولكن مع السطور li  (بحيث i = 1,... i-1) بحيث تنعدم فيها العناصر غير القطرية  للعمود ke المنتمي إلى المصفوفة A(k)، وهذا ما يجعل المصفوفة  قطرية.

  • نحل بعد ذلك النظمة القطرية.


الخوارزم


المرحلة 1: التحويل القطري للمصفوفة A، أي تحويل النظمة إلى نظمة مكافئة لمصفوفة قطرية.

A(1) = A, b(1) = b.

المرحلة 2 : لنحل النظمة القطرية A(n+1) x = b(n+1) 


مثال

لنحل النظمة Ax=b بحيث:

   و 

حل يدوي (باستعمال الكسر)

 المرحلة 1: التحويل القطري للمصفوفة A 


                           ---------------------------------------

                           ---------------------------------------

                           ---------------------------------------

                           ---------------------------------------

 المرحلة 2: حل النظمة القطرية A(5)x = b(5)





البرمجة

  • #include <math.h>
    #include <conio.h>
    #define NMAX 5
    #define N2MAX 6
    
    int sl_jordan_aff(double a[NMAX][NMAX],double b[NMAX],int n);
    main() { double a[NMAX][NMAX],b[NMAX]; int i,j,n,err; clrscr(); n=4; printf("Méthode de Jordan\n"); a[1][1]=8;a[1][2]=-4;a[1][3]=3;a[1][4]=7;b[1]=12; a[2][1]=4;a[2][2]=2;a[2][3]=-6;a[2][4]=4;b[2]=1; a[3][1]=-16;a[3][2]=6;a[3][3]=-2;a[3][4]=-15;b[3]=-19; a[4][1]=6;a[4][2]=10;a[4][3]=-15;a[4][4]=10;b[4]=1; printf(" A(1) b(1)\n"); for(i=1;i<=n;i++) { for(j=1;j<=n;j++) printf("%12.6e ",a[i][j]); printf("I %12.6e \n",b[i]); } err=sl_jordan_aff(a,b,n); if(err==1) { printf("Solution:\n"); for(i=1;i<=n;i++) printf("x%d =%23.16e \n",i,b[i]); } else printf("Erreur, matrice singulière"); }

    النتائج

    يظهر البرنامج في كل مرحلة ما يلي :

    • المصفوفة A(k)

    • العنصر الثاني b(k)

    • ويظهر بعد ذلك حل النظمة

      A(1)                                 b(1)
     8.00000e+00  -4.00000e+00   3.00000e+00   7.00000e+00  I   1.20000e+01  
     4.00000e+00   2.00000e+00  -6.00000e+00   4.00000e+00  I   1.00000e+00  
    -1.60000e+01   6.00000e+00  -2.00000e+00  -1.50000e+01  I  -1.90000e+01  
     6.00000e+00   1.00000e+01  -1.50000e+01   1.00000e+01  I   1.00000e+00  
      A(2)                                 b(2)
     8.00000e+00  -4.00000e+00   3.00000e+00   7.00000e+00  I   1.20000e+01  
     0.00000e+00   4.00000e+00  -7.50000e+00   5.00000e-01  I  -5.00000e+00  
     0.00000e+00  -2.00000e+00   4.00000e+00  -1.00000e+00  I   5.00000e+00  
     0.00000e+00   1.30000e+01  -1.72500e+01   4.75000e+00  I  -8.00000e+00  
      A(3)                                 b(3)
     8.00000e+00   0.00000e+00  -4.50000e+00   7.50000e+00  I   7.00000e+00  
     0.00000e+00   4.00000e+00  -7.50000e+00   5.00000e-01  I  -5.00000e+00  
     0.00000e+00   0.00000e+00   2.50000e-01  -7.50000e-01  I   2.50000e+00  
     0.00000e+00   0.00000e+00   7.12500e+00   3.12500e+00  I   8.25000e+00  
      A(4)                                 b(4)
     8.00000e+00   0.00000e+00   0.00000e+00  -6.00000e+00  I   5.20000e+01  
     0.00000e+00   4.00000e+00   0.00000e+00  -2.20000e+01  I   7.00000e+01  
     0.00000e+00   0.00000e+00   2.50000e-01  -7.50000e-01  I   2.50000e+00  
     0.00000e+00   0.00000e+00   0.00000e+00   2.45000e+01  I  -6.30000e+01  
      A(5)                                 b(5)
     8.00000e+00   0.00000e+00   0.00000e+00  -1.38778e-16  I   3.65714e+01  
     0.00000e+00   4.00000e+00   0.00000e+00  -5.55112e-17  I   1.34286e+01  
     0.00000e+00   0.00000e+00   2.50000e-01  -1.73472e-17  I   5.71429e-01  
     0.00000e+00   0.00000e+00   0.00000e+00   2.45000e+01  I  -6.30000e+01  
    Solution:
    x1 =  4.571428571428571e+00  
    x2 =  3.357142857142857e+00  
    x3 =  2.285714285714286e+00  
    x4 = -2.571428571428572e+00  

 

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

  • معايير الدالة

a : المصفوفة
b : العنصر الثاني
n : درجة المصفوفة

القيمة الرجعية

ترجع القيمة 1 عندما تكون المصفوفة مقلوبة رقميا والقيمة 0 إذا كان عكس ذلك.

إذا كانت قيمة الرجوع هي 1 فسيكون الحل في الجدول b.

خلال كل كرة يتم إظهار المصفوفة Ak والعنصر الثاني bk.

تساوي الثابتة NMAX البعد القصوي للمصفوفة زائد 1، وتساوي الثابتة N2MAX القيمة NMAX+1

int sl_jordan_aff(double a[NMAX][NMAX],double b[NMAX],int n)
{
int i,j,k,err;
double pivot,coef;
double t[NMAX][N2MAX];
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
t[i][j]=a[i][j];
t[i][n+1]=b[i];
}
err=1;
k=1;
while (err==1 && k<=n)
{
pivot=fabs(t[k][k]);
j=k;
while(pivot==0 && j<n)
{
j++;
pivot=fabs(t[j][k]);
}
if(pivot!=0)
{
if(j!=k)
for(i=k;i<=n+1;i++)
{
pivot=t[k][i];
t[k][i]=t[j][i];
t[j][i]=pivot;
}
pivot=t[k][k];
for(i=1;i<=n;i++)
if(i!=k)
{
coef=t[i][k]/pivot;
for(j=1;j<=n+1;j++)
t[i][j] -= coef*t[k][j];
}
printf(" A(%d) b(%d)\n",k+1,k+1);
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
printf("%12.6e ",t[i][j]);
printf("I %12.6e \n",t[i][n+1]);
}
}
else err=0;
k++;
}
if(err==1)
for(i=1;i<=n;i++)
b[i]=t[i][n+1]/t[i][i];
return(err);
}
مقالات أخرى من نفس الفئة « طريقة التفكيك LU طريقة تشوليسكي »

أضف تعليقا


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

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